Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
21711da0b6 | ||
|
|
76543d068b | ||
|
|
b871d1e49f | ||
|
|
6f497e495e |
19
contracts/AdminUpgradeableProxy.sol
Normal file
19
contracts/AdminUpgradeableProxy.sol
Normal file
@@ -0,0 +1,19 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
pragma solidity ^0.6.0;
|
||||
|
||||
import "@openzeppelin/contracts/proxy/TransparentUpgradeableProxy.sol";
|
||||
|
||||
/**
|
||||
* @dev TransparentUpgradeableProxy where admin is allowed to call implementation methods.
|
||||
*/
|
||||
contract AdminUpgradeableProxy is TransparentUpgradeableProxy {
|
||||
/**
|
||||
* @dev Initializes an upgradeable proxy backed by the implementation at `_logic`.
|
||||
*/
|
||||
constructor(address _logic, bytes memory _data) public payable TransparentUpgradeableProxy(_logic, msg.sender, _data) {}
|
||||
|
||||
/**
|
||||
* @dev Override to allow admin access the fallback function.
|
||||
*/
|
||||
function _beforeFallback() internal override {}
|
||||
}
|
||||
@@ -5,8 +5,9 @@ pragma experimental ABIEncoderV2;
|
||||
|
||||
import "./interfaces/ITornadoTreesV1.sol";
|
||||
import "./interfaces/IBatchTreeUpdateVerifier.sol";
|
||||
import "@openzeppelin/upgrades-core/contracts/Initializable.sol";
|
||||
|
||||
contract TornadoTrees {
|
||||
contract TornadoTrees is Initializable {
|
||||
address public immutable governance;
|
||||
bytes32 public depositRoot;
|
||||
bytes32 public previousDepositRoot;
|
||||
@@ -61,32 +62,20 @@ contract TornadoTrees {
|
||||
|
||||
constructor(
|
||||
address _governance,
|
||||
address _tornadoProxy,
|
||||
ITornadoTreesV1 _tornadoTreesV1,
|
||||
IBatchTreeUpdateVerifier _treeUpdateVerifier,
|
||||
SearchParams memory _searchParams
|
||||
) public {
|
||||
governance = _governance;
|
||||
tornadoProxy = _tornadoProxy;
|
||||
treeUpdateVerifier = _treeUpdateVerifier;
|
||||
tornadoTreesV1 = _tornadoTreesV1;
|
||||
|
||||
depositRoot = _tornadoTreesV1.depositRoot();
|
||||
uint256 lastDepositLeaf = _tornadoTreesV1.lastProcessedDepositLeaf();
|
||||
require(lastDepositLeaf % CHUNK_SIZE == 0, "Incorrect TornadoTrees state");
|
||||
lastProcessedDepositLeaf = lastDepositLeaf;
|
||||
depositsLength = depositsV1Length = findArrayLength(
|
||||
depositsV1Length = findArrayLength(
|
||||
_tornadoTreesV1,
|
||||
"deposits(uint256)",
|
||||
_searchParams.depositsFrom,
|
||||
_searchParams.depositsStep
|
||||
);
|
||||
|
||||
withdrawalRoot = _tornadoTreesV1.withdrawalRoot();
|
||||
uint256 lastWithdrawalLeaf = _tornadoTreesV1.lastProcessedWithdrawalLeaf();
|
||||
require(lastWithdrawalLeaf % CHUNK_SIZE == 0, "Incorrect TornadoTrees state");
|
||||
lastProcessedWithdrawalLeaf = lastWithdrawalLeaf;
|
||||
withdrawalsLength = withdrawalsV1Length = findArrayLength(
|
||||
withdrawalsV1Length = findArrayLength(
|
||||
_tornadoTreesV1,
|
||||
"withdrawals(uint256)",
|
||||
_searchParams.withdrawalsFrom,
|
||||
@@ -94,6 +83,23 @@ contract TornadoTrees {
|
||||
);
|
||||
}
|
||||
|
||||
function initialize(address _tornadoProxy, IBatchTreeUpdateVerifier _treeUpdateVerifier) public initializer onlyGovernance {
|
||||
tornadoProxy = _tornadoProxy;
|
||||
treeUpdateVerifier = _treeUpdateVerifier;
|
||||
|
||||
depositRoot = tornadoTreesV1.depositRoot();
|
||||
uint256 lastDepositLeaf = tornadoTreesV1.lastProcessedDepositLeaf();
|
||||
require(lastDepositLeaf % CHUNK_SIZE == 0, "Incorrect TornadoTrees state");
|
||||
lastProcessedDepositLeaf = lastDepositLeaf;
|
||||
depositsLength = depositsV1Length;
|
||||
|
||||
withdrawalRoot = tornadoTreesV1.withdrawalRoot();
|
||||
uint256 lastWithdrawalLeaf = tornadoTreesV1.lastProcessedWithdrawalLeaf();
|
||||
require(lastWithdrawalLeaf % CHUNK_SIZE == 0, "Incorrect TornadoTrees state");
|
||||
lastProcessedWithdrawalLeaf = lastWithdrawalLeaf;
|
||||
withdrawalsLength = withdrawalsV1Length;
|
||||
}
|
||||
|
||||
// todo make things internal
|
||||
/// @dev There is no array length getter for deposit and withdrawal arrays
|
||||
/// in previous contract, so we have to find them length manually
|
||||
@@ -161,7 +167,7 @@ contract TornadoTrees {
|
||||
uint256 offset = lastProcessedDepositLeaf;
|
||||
require(_newRoot != previousDepositRoot, "Outdated deposit root");
|
||||
require(_currentRoot == depositRoot, "Proposed deposit root is invalid");
|
||||
require(_pathIndices == offset >> CHUNK_TREE_HEIGHT, "Incorrect insert index");
|
||||
require(_pathIndices == offset >> CHUNK_TREE_HEIGHT, "Incorrect deposit insert index");
|
||||
|
||||
bytes memory data = new bytes(BYTES_SIZE);
|
||||
assembly {
|
||||
@@ -200,14 +206,13 @@ contract TornadoTrees {
|
||||
bytes32 _argsHash,
|
||||
bytes32 _currentRoot,
|
||||
bytes32 _newRoot,
|
||||
uint256 _pathIndices,
|
||||
uint32 _pathIndices,
|
||||
TreeLeaf[CHUNK_SIZE] calldata _events
|
||||
) public {
|
||||
uint256 offset = lastProcessedWithdrawalLeaf;
|
||||
require(_newRoot != previousWithdrawalRoot, "Outdated withdrawal root");
|
||||
require(_currentRoot == withdrawalRoot, "Proposed withdrawal root is invalid");
|
||||
require(_pathIndices == offset >> CHUNK_TREE_HEIGHT, "Incorrect insert index");
|
||||
require(uint256(_newRoot) < SNARK_FIELD, "Proposed root is out of range");
|
||||
require(_pathIndices == offset >> CHUNK_TREE_HEIGHT, "Incorrect withdrawal insert index");
|
||||
|
||||
bytes memory data = new bytes(BYTES_SIZE);
|
||||
assembly {
|
||||
@@ -220,7 +225,6 @@ contract TornadoTrees {
|
||||
bytes32 leafHash = keccak256(abi.encode(instance, hash, blockNumber));
|
||||
bytes32 withdrawal = offset + i >= withdrawalsV1Length ? withdrawals[offset + i] : tornadoTreesV1.withdrawals(offset + i);
|
||||
require(leafHash == withdrawal, "Incorrect withdrawal");
|
||||
require(uint256(hash) < SNARK_FIELD, "Hash out of range");
|
||||
assembly {
|
||||
mstore(add(add(data, mul(ITEM_SIZE, i)), 0x7c), blockNumber)
|
||||
mstore(add(add(data, mul(ITEM_SIZE, i)), 0x78), instance)
|
||||
|
||||
@@ -24,11 +24,11 @@ contract Pack {
|
||||
uint256 gasBefore = gasleft();
|
||||
bytes memory data = new bytes(BYTES_SIZE);
|
||||
for (uint256 i = 0; i < CHUNK_SIZE; i++) {
|
||||
(bytes32 hash, address instance, uint32 block) = (hashes[i], instances[i], blocks[i]);
|
||||
(bytes32 _hash, address _instance, uint32 _block) = (hashes[i], instances[i], blocks[i]);
|
||||
assembly {
|
||||
mstore(add(add(data, mul(ITEM_SIZE, i)), 0x38), block)
|
||||
mstore(add(add(data, mul(ITEM_SIZE, i)), 0x34), instance)
|
||||
mstore(add(add(data, mul(ITEM_SIZE, i)), 0x20), hash)
|
||||
mstore(add(add(data, mul(ITEM_SIZE, i)), 0x38), _block)
|
||||
mstore(add(add(data, mul(ITEM_SIZE, i)), 0x34), _instance)
|
||||
mstore(add(add(data, mul(ITEM_SIZE, i)), 0x20), _hash)
|
||||
}
|
||||
}
|
||||
uint256 gasHash = gasleft();
|
||||
@@ -52,23 +52,23 @@ contract Pack {
|
||||
public
|
||||
view
|
||||
returns (
|
||||
uint256 gas1,
|
||||
uint256 gas2,
|
||||
bytes32 hash
|
||||
uint256,
|
||||
uint256,
|
||||
bytes32
|
||||
)
|
||||
{
|
||||
uint256 gasBefore = gasleft();
|
||||
bytes memory data = new bytes(BYTES_SIZE);
|
||||
for (uint256 i = 0; i < CHUNK_SIZE; i++) {
|
||||
(bytes32 hash, address instance, uint32 block) = (hashes[i], instances[i], blocks[i]);
|
||||
(bytes32 _hash, address _instance, uint32 _block) = (hashes[i], instances[i], blocks[i]);
|
||||
assembly {
|
||||
mstore(add(add(data, mul(ITEM_SIZE, i)), 0x38), block)
|
||||
mstore(add(add(data, mul(ITEM_SIZE, i)), 0x34), instance)
|
||||
mstore(add(add(data, mul(ITEM_SIZE, i)), 0x20), hash)
|
||||
mstore(add(add(data, mul(ITEM_SIZE, i)), 0x38), _block)
|
||||
mstore(add(add(data, mul(ITEM_SIZE, i)), 0x34), _instance)
|
||||
mstore(add(add(data, mul(ITEM_SIZE, i)), 0x20), _hash)
|
||||
}
|
||||
}
|
||||
uint256 gasHash = gasleft();
|
||||
bytes32 hash = sha256(data);
|
||||
return (gasleft() - gasHash, gasHash - gasBefore, hash);
|
||||
bytes32 hash1 = sha256(data);
|
||||
return (gasleft() - gasHash, gasHash - gasBefore, hash1);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,11 +12,9 @@ contract TornadoTreesMock is TornadoTrees {
|
||||
|
||||
constructor(
|
||||
address _governance,
|
||||
address _tornadoProxy,
|
||||
ITornadoTreesV1 _tornadoTreesV1,
|
||||
IBatchTreeUpdateVerifier _treeUpdateVerifier,
|
||||
SearchParams memory _searchParams
|
||||
) public TornadoTrees(_governance, _tornadoProxy, _tornadoTreesV1, _treeUpdateVerifier, _searchParams) {}
|
||||
) public TornadoTrees(_governance, _tornadoTreesV1, _searchParams) {}
|
||||
|
||||
function setBlockNumber(uint256 _blockNumber) public {
|
||||
currentBlock = _blockNumber;
|
||||
|
||||
@@ -1,13 +1,14 @@
|
||||
{
|
||||
"name": "tornado-trees",
|
||||
"version": "0.0.6",
|
||||
"version": "0.0.9",
|
||||
"main": "src/index.js",
|
||||
"repository": "https://github.com/tornadocash/tornado-trees.git",
|
||||
"author": "Tornadocash team <hello@tornado.cash>",
|
||||
"license": "MIT",
|
||||
"files": [
|
||||
"src/*",
|
||||
"contracts/*"
|
||||
"contracts/*",
|
||||
"scripts/*"
|
||||
],
|
||||
"scripts": {
|
||||
"compile": "npx hardhat compile",
|
||||
@@ -39,11 +40,14 @@
|
||||
"torn-token": "^1.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@openzeppelin/contracts": "^3.4.0",
|
||||
"@openzeppelin/upgrades-core": "^1.5.1",
|
||||
"circom": "^0.5.38",
|
||||
"circom_runtime": "^0.1.12",
|
||||
"circomlib": "git+https://github.com/tornadocash/circomlib.git#d20d53411d1bef61f38c99a8b36d5d0cc4836aa1",
|
||||
"dotenv": "^8.2.0",
|
||||
"ffiasm": "^0.1.1",
|
||||
"ffjavascript": "^0.2.35",
|
||||
"fixed-merkle-tree": "^0.5.0",
|
||||
"jssha": "^3.2.0",
|
||||
"snarkjs": "^0.3.57",
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
const ethers = require('ethers')
|
||||
const BigNumber = ethers.BigNumber
|
||||
const { wtns } = require('snarkjs')
|
||||
const { utils } = require('ffjavascript')
|
||||
|
||||
const { bitsToNumber, toBuffer, toFixedHex, poseidonHash } = require('./utils')
|
||||
|
||||
@@ -32,16 +34,17 @@ function hashInputs(input) {
|
||||
function prove(input, keyBasePath) {
|
||||
return tmp.dir().then(async (dir) => {
|
||||
dir = dir.path
|
||||
fs.writeFileSync(`${dir}/input.json`, JSON.stringify(input, null, 2))
|
||||
let out
|
||||
|
||||
try {
|
||||
if (fs.existsSync(`${keyBasePath}`)) {
|
||||
// native witness calc
|
||||
fs.writeFileSync(`${dir}/input.json`, JSON.stringify(input, null, 2))
|
||||
out = await exec(`${keyBasePath} ${dir}/input.json ${dir}/witness.json`)
|
||||
} else {
|
||||
out = await exec(`npx snarkjs wd ${keyBasePath}.wasm ${dir}/input.json ${dir}/witness.wtns`)
|
||||
out = await exec(`npx snarkjs wej ${dir}/witness.wtns ${dir}/witness.json`)
|
||||
await wtns.calculate(utils.unstringifyBigInts(input), `${keyBasePath}.wasm`, `${dir}/witness.wtns`)
|
||||
const witness = utils.stringifyBigInts(await wtns.exportJson(`${dir}/witness.wtns`))
|
||||
fs.writeFileSync(`${dir}/witness.json`, JSON.stringify(witness, null, 2))
|
||||
}
|
||||
out = await exec(
|
||||
`zkutil prove -c ${keyBasePath}.r1cs -p ${keyBasePath}.params -w ${dir}/witness.json -r ${dir}/proof.json -o ${dir}/public.json`,
|
||||
|
||||
@@ -18,18 +18,13 @@ describe('findArrayLength', () => {
|
||||
await publicArray.setWithdrawals(depositsEven)
|
||||
|
||||
const TornadoTrees = await ethers.getContractFactory('TornadoTreesMock')
|
||||
tornadoTrees = await TornadoTrees.deploy(
|
||||
operator.address,
|
||||
tornadoProxy.address,
|
||||
publicArray.address,
|
||||
publicArray.address,
|
||||
{
|
||||
depositsFrom: 3,
|
||||
depositsStep: 3,
|
||||
withdrawalsFrom: 2,
|
||||
withdrawalsStep: 2,
|
||||
},
|
||||
)
|
||||
tornadoTrees = await TornadoTrees.deploy(operator.address, publicArray.address, {
|
||||
depositsFrom: 3,
|
||||
depositsStep: 3,
|
||||
withdrawalsFrom: 2,
|
||||
withdrawalsStep: 2,
|
||||
})
|
||||
await tornadoTrees.initialize(tornadoProxy.address, publicArray.address)
|
||||
})
|
||||
|
||||
it('should work for even array', async () => {
|
||||
|
||||
@@ -71,18 +71,13 @@ describe('TornadoTrees', function () {
|
||||
}
|
||||
}
|
||||
const TornadoTrees = await ethers.getContractFactory('TornadoTreesMock')
|
||||
tornadoTrees = await TornadoTrees.deploy(
|
||||
operator.address,
|
||||
tornadoProxy.address,
|
||||
tornadoTreesV1.address,
|
||||
verifier.address,
|
||||
{
|
||||
depositsFrom: 1,
|
||||
depositsStep: 1,
|
||||
withdrawalsFrom: 2,
|
||||
withdrawalsStep: 2,
|
||||
},
|
||||
)
|
||||
tornadoTrees = await TornadoTrees.deploy(operator.address, tornadoTreesV1.address, {
|
||||
depositsFrom: 1,
|
||||
depositsStep: 1,
|
||||
withdrawalsFrom: 2,
|
||||
withdrawalsStep: 2,
|
||||
})
|
||||
await tornadoTrees.initialize(tornadoProxy.address, verifier.address)
|
||||
depositDataEventFilter = tornadoTrees.filters.DepositData()
|
||||
})
|
||||
|
||||
@@ -160,18 +155,13 @@ describe('TornadoTrees', function () {
|
||||
}
|
||||
|
||||
const TornadoTrees = await ethers.getContractFactory('TornadoTreesMock')
|
||||
const newTornadoTrees = await TornadoTrees.deploy(
|
||||
operator.address,
|
||||
tornadoProxy.address,
|
||||
tornadoTreesV1.address,
|
||||
verifier.address,
|
||||
{
|
||||
depositsFrom: 1,
|
||||
depositsStep: 1,
|
||||
withdrawalsFrom: 2,
|
||||
withdrawalsStep: 2,
|
||||
},
|
||||
)
|
||||
const newTornadoTrees = await TornadoTrees.deploy(operator.address, tornadoTreesV1.address, {
|
||||
depositsFrom: 1,
|
||||
depositsStep: 1,
|
||||
withdrawalsFrom: 2,
|
||||
withdrawalsStep: 2,
|
||||
})
|
||||
await newTornadoTrees.initialize(tornadoProxy.address, verifier.address)
|
||||
|
||||
// load first batchSize deposits
|
||||
let { input, args } = controller.batchTreeUpdate(tree, depositEvents)
|
||||
|
||||
88
yarn.lock
88
yarn.lock
@@ -593,6 +593,27 @@
|
||||
resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-3.3.0.tgz#ffdb693c5c349fc33bba420248dd3ac0a2d7c408"
|
||||
integrity sha512-AemZEsQYtUp1WRkcmZm1div5ORfTpLquLaziCIrSagjxyKdmObxuaY1yjQ5SHFMctR8rLwp706NXTbiIRJg7pw==
|
||||
|
||||
"@openzeppelin/contracts@^3.4.0":
|
||||
version "3.4.0"
|
||||
resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-3.4.0.tgz#9a1669ad5f9fdfb6e273bb5a4fed10cb4cc35eb0"
|
||||
integrity sha512-qh+EiHWzfY/9CORr+eRUkeEUP1WiFUcq3974bLHwyYzLBUtK6HPaMkIUHi74S1rDTZ0sNz42DwPc5A4IJvN3rg==
|
||||
|
||||
"@openzeppelin/upgrades-core@^1.5.1":
|
||||
version "1.5.1"
|
||||
resolved "https://registry.yarnpkg.com/@openzeppelin/upgrades-core/-/upgrades-core-1.5.1.tgz#2165f0c2961cc748e7d1c2bce1ba96589d31390b"
|
||||
integrity sha512-rL0h/+Yfcky98XaxLRcxKunmC2uVP+dr9tVxzZfbjDpIco7VkmyODsI1YBPZTn3e5kCj7A6cmgNrFmao/UkQyA==
|
||||
dependencies:
|
||||
bn.js "^5.1.2"
|
||||
cbor "^7.0.0"
|
||||
chalk "^4.1.0"
|
||||
compare-versions "^3.6.0"
|
||||
debug "^4.1.1"
|
||||
ethereumjs-util "^7.0.3"
|
||||
fp-ts "^2.7.1"
|
||||
io-ts "^2.2.9"
|
||||
proper-lockfile "^4.1.1"
|
||||
solidity-ast "^0.4.15"
|
||||
|
||||
"@resolver-engine/core@^0.3.3":
|
||||
version "0.3.3"
|
||||
resolved "https://registry.yarnpkg.com/@resolver-engine/core/-/core-0.3.3.tgz#590f77d85d45bc7ecc4e06c654f41345db6ca967"
|
||||
@@ -2066,6 +2087,13 @@ caseless@~0.12.0:
|
||||
resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
|
||||
integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
|
||||
|
||||
cbor@^7.0.0:
|
||||
version "7.0.2"
|
||||
resolved "https://registry.yarnpkg.com/cbor/-/cbor-7.0.2.tgz#9f0b74f3dfc5896775e0802e7d68f9b6af530ce3"
|
||||
integrity sha512-YR6TF7LBhTqdz0vjtoY5lDnOhHXg8/mdHd2qZYQz5q8Pl7i56/ndiIGLkms1RpkFAqrT9IHGO3cjo58SfFsF2A==
|
||||
dependencies:
|
||||
nofilter "^2.0.0"
|
||||
|
||||
chai@^4.2.0:
|
||||
version "4.2.0"
|
||||
resolved "https://registry.yarnpkg.com/chai/-/chai-4.2.0.tgz#760aa72cf20e3795e84b12877ce0e83737aa29e5"
|
||||
@@ -2098,7 +2126,7 @@ chalk@^2.0.0, chalk@^2.1.0, chalk@^2.4.2:
|
||||
escape-string-regexp "^1.0.5"
|
||||
supports-color "^5.3.0"
|
||||
|
||||
chalk@^4.0.0:
|
||||
chalk@^4.0.0, chalk@^4.1.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a"
|
||||
integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==
|
||||
@@ -2401,6 +2429,11 @@ commander@3.0.2:
|
||||
resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e"
|
||||
integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==
|
||||
|
||||
compare-versions@^3.6.0:
|
||||
version "3.6.0"
|
||||
resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.6.0.tgz#1a5689913685e5a87637b8d3ffca75514ec41d62"
|
||||
integrity sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==
|
||||
|
||||
component-emitter@^1.2.1:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0"
|
||||
@@ -3857,6 +3890,15 @@ ffjavascript@0.2.34, ffjavascript@^0.2.30:
|
||||
wasmcurves "0.0.14"
|
||||
worker-threads "^1.0.0"
|
||||
|
||||
ffjavascript@^0.2.35:
|
||||
version "0.2.35"
|
||||
resolved "https://registry.yarnpkg.com/ffjavascript/-/ffjavascript-0.2.35.tgz#9166d95173b1c0a743b455bb03a72b581922a42e"
|
||||
integrity sha512-xnC51tWbi0ah4SH+02jEfJyO+P+NiZWnxQrLDLtBYY1Dv3QM5ydxzd+gxnLEfWdT8i1bMM5pIh5P25l6fNCaVQ==
|
||||
dependencies:
|
||||
big-integer "^1.6.48"
|
||||
wasmcurves "0.0.14"
|
||||
web-worker "^1.0.0"
|
||||
|
||||
ffwasm@0.0.7:
|
||||
version "0.0.7"
|
||||
resolved "https://registry.yarnpkg.com/ffwasm/-/ffwasm-0.0.7.tgz#23bb9a3537ecc87c0f24fcfb3a9ddd0e86855fff"
|
||||
@@ -4091,6 +4133,11 @@ fp-ts@^1.0.0:
|
||||
resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.5.tgz#3da865e585dfa1fdfd51785417357ac50afc520a"
|
||||
integrity sha512-wDNqTimnzs8QqpldiId9OavWK2NptormjXnRJTQecNjzwfyp6P/8s/zG8e4h3ja3oqkKaY72UlTjQYt/1yXf9A==
|
||||
|
||||
fp-ts@^2.7.1:
|
||||
version "2.9.5"
|
||||
resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-2.9.5.tgz#6690cd8b76b84214a38fc77cbbbd04a38f86ea90"
|
||||
integrity sha512-MiHrA5teO6t8zKArE3DdMPT/Db6v2GUt5yfWnhBTrrsVfeCJUUnV6sgFvjGNBKDmEMqVwRFkEePL7wPwqrLKKA==
|
||||
|
||||
fragment-cache@^0.2.1:
|
||||
version "0.2.1"
|
||||
resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
|
||||
@@ -4354,6 +4401,11 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9:
|
||||
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb"
|
||||
integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==
|
||||
|
||||
graceful-fs@^4.2.4:
|
||||
version "4.2.6"
|
||||
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee"
|
||||
integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==
|
||||
|
||||
growl@1.10.5:
|
||||
version "1.10.5"
|
||||
resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e"
|
||||
@@ -4720,6 +4772,11 @@ io-ts@1.10.4:
|
||||
dependencies:
|
||||
fp-ts "^1.0.0"
|
||||
|
||||
io-ts@^2.2.9:
|
||||
version "2.2.15"
|
||||
resolved "https://registry.yarnpkg.com/io-ts/-/io-ts-2.2.15.tgz#0b0b19a6f8a64f4a524ad5810d56432789428128"
|
||||
integrity sha512-ww2ZPrErx5pjCCI/tWRwjlEIDEndnN9kBIxAylXj+WNIH4ZVgaUqFuabGouehkRuvrmvzO5OnZmLf+o50h4izQ==
|
||||
|
||||
ipaddr.js@1.9.1:
|
||||
version "1.9.1"
|
||||
resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3"
|
||||
@@ -6033,6 +6090,11 @@ node-gyp-build@^4.2.0:
|
||||
resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.2.3.tgz#ce6277f853835f718829efb47db20f3e4d9c4739"
|
||||
integrity sha512-MN6ZpzmfNCRM+3t57PTJHgHyw/h4OWnZ6mR8P5j/uZtqQr46RRuDE/P+g3n0YR/AiYXeWixZZzaip77gdICfRg==
|
||||
|
||||
nofilter@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-2.0.0.tgz#57a2d7c6fcd34dd396f490d6942c4f58640b5823"
|
||||
integrity sha512-i3ck2PUWBa+trsGGBvwS3msnTowbFei5G++BgpOpT7y7VTrprXphMQP5svTdsMLdttKDZFo+5RqVWRqhmf+BwQ==
|
||||
|
||||
normalize-package-data@^2.3.2:
|
||||
version "2.5.0"
|
||||
resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
|
||||
@@ -6590,6 +6652,15 @@ promise-to-callback@^1.0.0:
|
||||
is-fn "^1.0.0"
|
||||
set-immediate-shim "^1.0.1"
|
||||
|
||||
proper-lockfile@^4.1.1:
|
||||
version "4.1.2"
|
||||
resolved "https://registry.yarnpkg.com/proper-lockfile/-/proper-lockfile-4.1.2.tgz#c8b9de2af6b2f1601067f98e01ac66baa223141f"
|
||||
integrity sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==
|
||||
dependencies:
|
||||
graceful-fs "^4.2.4"
|
||||
retry "^0.12.0"
|
||||
signal-exit "^3.0.2"
|
||||
|
||||
proxy-addr@~2.0.5:
|
||||
version "2.0.6"
|
||||
resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf"
|
||||
@@ -7043,6 +7114,11 @@ ret@~0.1.10:
|
||||
resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
|
||||
integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
|
||||
|
||||
retry@^0.12.0:
|
||||
version "0.12.0"
|
||||
resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b"
|
||||
integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=
|
||||
|
||||
rimraf@2.6.3:
|
||||
version "2.6.3"
|
||||
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
|
||||
@@ -7440,6 +7516,11 @@ solhint-plugin-prettier@^0.0.5:
|
||||
dependencies:
|
||||
prettier-linter-helpers "^1.0.0"
|
||||
|
||||
solidity-ast@^0.4.15:
|
||||
version "0.4.17"
|
||||
resolved "https://registry.yarnpkg.com/solidity-ast/-/solidity-ast-0.4.17.tgz#e857b4f64466f3eb94da78fe961c0d256c84b228"
|
||||
integrity sha512-5jkkabmjPdy9W9c2DMQBlKobVBz7KDnipxn+0zW191uD6BML3w7dQ+ihUvwA9XOm9ILDECrb5Y8z2vu47STqCg==
|
||||
|
||||
solidity-comments-extractor@^0.0.4:
|
||||
version "0.0.4"
|
||||
resolved "https://registry.yarnpkg.com/solidity-comments-extractor/-/solidity-comments-extractor-0.0.4.tgz#ce420aef23641ffd0131c7d80ba85b6e1e42147e"
|
||||
@@ -8280,6 +8361,11 @@ wasmcurves@0.0.5:
|
||||
big-integer "^1.6.42"
|
||||
blakejs "^1.1.0"
|
||||
|
||||
web-worker@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/web-worker/-/web-worker-1.0.0.tgz#c7ced4e1eb6227636ada35056a9e5a477414e4d0"
|
||||
integrity sha512-BzuMqeKVkKKwHV6tJuwePFcxYMxvC97D448mXTgh/CxXAB4sRtoV26gRPN+JDxsXRR7QZyioMV9O6NzQaASf7Q==
|
||||
|
||||
web3-bzz@1.2.11:
|
||||
version "1.2.11"
|
||||
resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.2.11.tgz#41bc19a77444bd5365744596d778b811880f707f"
|
||||
|
||||
Reference in New Issue
Block a user