├── README.md ├── contracts ├── .eslintrc.js ├── .gitignore ├── contracts │ ├── OracleBridge.sol │ └── lib │ │ ├── ERC20Wrapper.sol │ │ ├── RLP.sol │ │ └── TrieProofs.sol ├── hardhat.config.js ├── package.json ├── scripts │ ├── fund-accounts.js │ └── sample-deploy.js ├── test │ └── oracle-bridge.js └── yarn.lock ├── diagram.png ├── ui ├── .eslintrc.js ├── .gitignore ├── .vscode │ └── settings.json ├── README.md ├── components │ ├── Actions.js │ ├── Address.js │ ├── Block.js │ ├── Blockie.js │ ├── Bridge.js │ ├── Chain.js │ ├── ChainStatus.js │ ├── FormatBalance.js │ ├── Json.js │ ├── Layout.js │ └── Proofs.js ├── hooks │ ├── useBridge.js │ └── useEthers.js ├── package-lock.json ├── package.json ├── pages │ ├── _app.js │ ├── api │ │ └── hello.js │ └── index.js ├── public │ └── favicon.ico ├── styles │ └── globals.css ├── users.js └── yarn.lock └── web3-proof ├── .gitignore ├── index.js ├── package.json └── yarn.lock /README.md: -------------------------------------------------------------------------------- 1 | # Oracle Bridge 2 | 3 | A proof of concept EVM to EVM cross-chain communication protocol using EVM Storage Proofs and Oracles, for a custody-free token bridge. 4 | 5 | Watch the video demo: https://youtu.be/H9n8z5Ge9cs 6 | 7 | ![Oracle Brdige Diagram](https://github.com/web3masons/oracle-bridge/blob/master/diagram.png) 8 | 9 | ## Overview 10 | 11 | [EVM Storage Proofs](https://github.com/aragon/evm-storage-proofs) enable a contract to prove the presence of a specific peice of data within another EVM environment. Attempts have been made to use this to enable chain-to-chain communication, but one limitation is that Ethereum's Proof of Work cannot be verified within a contract due to the gas limit. 12 | 13 | Most other approaches use a fedaration of validators or custodians that micro-manage the minting and burning of wrapped contracts, whilst holding assets and ultimately having the ability collude and 'alleviate' the funds if they wish. They need to be online all the time and you trust them to not disappear one day. 14 | 15 | Instead of verifying proof of work trustlessly within a contract, or relying on a specific validator set, the Oracle Bridge approach uses a generalised oracle (or collection of oracles, such as ChainLink) to simply periodically report the block number and block hash of remote chains. 16 | 17 | As these oracles are generalised data oracles and have strong disincentive to collude with each other (they have their own rhobust systems in place to ensure data integrity and are potentially reporting the same data for many different dapps), the Oracle Bridge appraoch presents a novel and improved security model for token bridges and chain-to-chain communication in general. 18 | 19 | In combination with a storage proof, the block hash can be used to validate the state of a remote chain and contracts can implement cross chain systems such as the example in this repository. 20 | 21 | The following token bridge example issues "wrapped" tokens that can be redeemed back to the original asset with strong guaruntees. 22 | 23 | Let's imagine we want to 'send' ETC to ETH mainnet - really we are just locking it up on ETC and issuing an IOU 'wrapped token' on ETH that can be redeemed for ETC. A basic implementaiton of the system is as follows (the numbers provided are flexible and are for illustrative purposes only): 24 | 25 | 1. User deposits 1 ETC into the `ETC-OracleBridge` contract (on the Ethereum Classic chain) 26 | 1. The user creates a Storage Proof proving the ETC has been deposited on this block 27 | 1. Every 100 blocks, an oracle (or group of oracles) reports the block hash of ETC to `ETH-OracleBridge` on Ethereum Mainnet 28 | 1. After 1000 confirmation blocks have pased on ETC, the user passes the Storage Proof created earlier to the the `ETH-OracleBridge` contract (on the Etheruem Mainnet chain) 29 | 1. The contract verifies that the Storage Proof is part of a black that matches the block header reported by the oracle and issues the amount of Wrapped ETC on ETH Mainnet 30 | 1. The Wrapped ETC can be traded freely as a regular ERC20 token; it remains locked on the ETC chain 31 | 1. When the time comes to redeem the Wrapped ETC to ETC, the process happens in reverse; 32 | 1. The 'deposits' (burns) the Wrapped ETC to the `ETH-OracleBridge` contract 33 | 1. The user creates a Storage Proof of the deposit at this particular block 34 | 1. Every 100 blocks, an oracle reports the block hash of ETH to `ETC-OracleBridge` (on Etheruem Classic) 35 | 1. After 1000 confimations, the user can relay the Storage Proof to the `ETC-OracleBridge` contract, which is verified by the contract and ETC can be redeemed by the user 36 | 37 | A basic contract set, test suite and Web UI is included in this repository to demonstrate the above system. 38 | 39 | Again, this is the most basic example and there is room for many improvements and optimisations, such as: 40 | 41 | - Work out the best scheme for Oracle selection 42 | - Support ERC20 deposits 43 | - One contract for multiple assets and chains 44 | - Implementaiton of metatransactions to eliminate the need of users to spend gas 45 | - A swap market to remove the need for users to wait for the confirmation blocks 46 | - Archive node services to allow users to access old proofs 47 | - Dynamic confirmation times based on various metrics (including amount) 48 | - Etc. 49 | 50 | ## Testing 51 | 52 | Check out `./test/oracle-bridge.js` for an example test run through. Run it with `npm run test`. 53 | 54 | Because we use `eth_getProof`, we need to run a real node (not a virtual hardhat node) when testing. You can set this environment up by running Geth in dev mode and creating a second account: 55 | 56 | ```bash 57 | # run geth 58 | geth --datadir ~/geth-dev --rpc --dev --allow-insecure-unlock 59 | # attach 60 | geth attach ~/geth-dev/geth.ipc 61 | # create account 62 | personal.newAccount() 63 | # fund it 64 | eth.sendTransaction({from:eth.coinbase, to:eth.accounts[1],value:1e18}) 65 | # unlock it 66 | personal.unlockAccount(eth.accounts[1],'',0) 67 | ``` 68 | 69 | ## UI Tesitng 70 | 71 | In this case we are using two seperate networks to simulate cross chian stuff, with private keys in the browser. 72 | 73 | ```bash 74 | # start asok 75 | geth --datadir ~/no-backup/geth-dev-asok --rpc --dev --allow-insecure-unlock --rpccorsdomain "http://localhost:3000" --http --http.port 3333 76 | # start nana 77 | geth --datadir ~/no-backup/geth-dev-nana --rpc --dev --allow-insecure-unlock --rpccorsdomain "http://localhost:3000" --http --http.port 4444 78 | # deploy and fund asok accounts; take note of contract addresss and update UI 79 | npm run deploy-asok && npm run fund-asok 80 | # deploy and fund asok accounts; take note of contract addresss and update UI 81 | npm run deploy-nana && npm run fund-nana 82 | ``` 83 | -------------------------------------------------------------------------------- /contracts/.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | env: { 3 | browser: true, 4 | es2021: true, 5 | node: true, 6 | mocha: true, 7 | }, 8 | extends: ['airbnb-base', 'prettier'], 9 | parserOptions: { 10 | ecmaVersion: 12, 11 | sourceType: 'module', 12 | }, 13 | rules: {}, 14 | globals: { 15 | ethers: 'readonly', 16 | }, 17 | } 18 | -------------------------------------------------------------------------------- /contracts/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | #Hardhat files 4 | cache 5 | artifacts 6 | -------------------------------------------------------------------------------- /contracts/contracts/OracleBridge.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma experimental ABIEncoderV2; 3 | 4 | import "./lib/TrieProofs.sol"; 5 | import "./lib/ERC20Wrapper.sol"; 6 | 7 | contract OracleBridge { 8 | using TrieProofs for bytes; 9 | using RLP for RLP.RLPItem; 10 | using RLP for bytes; 11 | 12 | mapping(bytes32 => bool) public actions; // keep this at the top to be slot 0 13 | mapping(bytes32 => bool) public consumedActions; 14 | mapping(uint256 => bytes32) public checkpoints; // remote chain headers 15 | 16 | uint256 private constant STORAGE_SLOT_OFFSET = 0; // modify this if the actions slot changes 17 | uint8 private constant ACCOUNT_STORAGE_ROOT_INDEX = 2; 18 | 19 | address public wrapper; 20 | address public peer; 21 | uint256 public actionCounter; 22 | uint256 public latestCheckpoint; 23 | 24 | event ActionCreated( 25 | bytes32 indexed id, 26 | uint256 indexed nonce, 27 | uint256 actionType, 28 | address receiver, 29 | uint256 amount 30 | ); 31 | 32 | event ActionConsumed( 33 | bytes32 indexed id, 34 | uint256 indexed nonce, 35 | uint256 actionType, 36 | address receiver, 37 | uint256 amount 38 | ); 39 | 40 | // set the peer address (this contract deployed on some other chain) 41 | // set the address of the erc20 token wrapper (could be done elsewhere) 42 | // the peer address will define the location of the storage to check 43 | function init(address _peer, address _wrapper) 44 | public 45 | returns (bool success) 46 | { 47 | if (peer != address(0) || wrapper != address(0)) { 48 | revert(); 49 | } 50 | peer = _peer; 51 | wrapper = _wrapper; 52 | return true; 53 | } 54 | 55 | // creates a 'checkpoint' -- reporting the peer chain's hash at a given block height 56 | // in production, there will be logic to ensure this checkpoint is mature, 57 | // and of course, that trusted oracles are providing data rather than anyone 58 | function createCheckpoint(uint256 _height, bytes32 _hash) 59 | public 60 | returns (bool success) 61 | { 62 | checkpoints[_height] = _hash; 63 | latestCheckpoint = _height; 64 | return true; 65 | } 66 | 67 | // generates a unique id for each action that is used to validate the action 68 | function getActionId( 69 | uint256 _nonce, 70 | uint256 _type, 71 | address _recipient, 72 | uint256 _amount 73 | ) public pure returns (bytes32 actionId) { 74 | return keccak256(abi.encodePacked(_nonce, _type, _recipient, _amount)); 75 | } 76 | 77 | // Methods that create actions on this chain 78 | // actionType = 1 79 | function deposit(address _recipient) 80 | public 81 | payable 82 | returns (bytes32 actionId) 83 | { 84 | actionCounter++; 85 | bytes32 id = getActionId(actionCounter, 1, _recipient, msg.value); 86 | actions[id] = true; 87 | emit ActionCreated(id, actionCounter, 1, _recipient, msg.value); 88 | return id; 89 | } 90 | 91 | // actionType = 2 92 | function burn(address _recipient, uint256 _amount) 93 | public 94 | returns (bytes32 actionId) 95 | { 96 | actionCounter++; 97 | bytes32 id = getActionId(actionCounter, 2, _recipient, _amount); 98 | ERC20Wrapper(wrapper).burn(msg.sender, _amount); 99 | actions[id] = true; 100 | emit ActionCreated(id, actionCounter, 2, _recipient, _amount); 101 | return id; 102 | } 103 | 104 | // the magic function that validates those evm proofs 105 | function validateProof( 106 | address _recipient, 107 | uint256[] memory _uints, // blockNumber, amount, nonce, type 108 | bytes[] memory _proofs, // header, accountProof, storageProof 109 | uint256 _expectedType 110 | ) private returns (bytes32) { 111 | require(_expectedType == _uints[3], "Incorrect Action Type"); 112 | // pluck this for use in assembly 113 | bytes memory blockHeader = _proofs[0]; 114 | // prevent from reading invalid memory 115 | require(blockHeader.length > 123, "Invalid Header"); 116 | // make sure this action has not already been used 117 | bytes32 actionId = getActionId( 118 | _uints[2], 119 | _uints[3], 120 | _recipient, 121 | _uints[1] 122 | ); 123 | // check this early to save gas 124 | require(!consumedActions[actionId], "Action already relayed"); 125 | // blockHash is a hash of the block header 126 | bytes32 blockHash = keccak256(blockHeader); 127 | // ensure the block header matches the checkpoint 128 | require(blockHash == checkpoints[_uints[0]], "Bad Checkpoint"); 129 | // compose the state root 130 | bytes32 stateRoot; 131 | assembly { 132 | stateRoot := mload(add(blockHeader, 0x7b)) 133 | } 134 | // Get the account state from a merkle proof in the state trie. 135 | // reverts if proof is invalid 136 | bytes memory accountRLP = _proofs[1].verify( 137 | stateRoot, 138 | // get the account path (hash of the peer contract address) 139 | keccak256(abi.encodePacked(peer)) 140 | ); 141 | // get the storage slot; computed from the action ID 142 | uint256 slot = uint256( 143 | keccak256(abi.encodePacked(actionId, STORAGE_SLOT_OFFSET)) 144 | ); 145 | // Get the storage state (0 or 1), cast to boolean 146 | // reverts if proof is invalid 147 | bool valid = _proofs[2] 148 | .verify( 149 | // Extract the storage root from the account node and convert to bytes32 150 | bytes32( 151 | accountRLP.toRLPItem().toList()[ACCOUNT_STORAGE_ROOT_INDEX] 152 | .toUint() 153 | ), 154 | // The path for a storage value is the hash of its slot 155 | keccak256(abi.encodePacked(slot)) 156 | ) 157 | .toRLPItem() 158 | .toBoolean(); 159 | // if value is true, the other chain has this action ID 160 | require(valid, "Not a valid proof; state is not set"); 161 | // now it's valid, record it's usage to ensure it's not replayed 162 | consumedActions[actionId] = true; 163 | // emit an event 164 | emit ActionConsumed(actionId, _uints[2], _uints[3], _recipient, _uints[1]); 165 | // NOW WE CAN DO AS WE PLEASE..... 166 | return actionId; 167 | } 168 | 169 | // Methods that consume actions from the peer chain (require proofs) 170 | 171 | function mint( 172 | address _recipient, 173 | uint256[] memory _uints, // blockNumber, amount, nonce, type 174 | bytes[] memory _proofs // header, accountProof, storageProof 175 | ) 176 | public 177 | returns (bool success) 178 | { 179 | validateProof(_recipient, _uints, _proofs, 1); 180 | ERC20Wrapper(wrapper).mint(_recipient, _uints[1]); 181 | return true; 182 | } 183 | 184 | function redeem( 185 | address payable _recipient, 186 | uint256[] memory _uints, // blockNumber, amount, nonce, type 187 | bytes[] memory _proofs // header, accountProof, storageProof 188 | ) 189 | public 190 | returns (bool success) 191 | { 192 | validateProof(_recipient, _uints, _proofs, 2); 193 | _recipient.transfer(_uints[1]); 194 | return true; 195 | } 196 | } 197 | -------------------------------------------------------------------------------- /contracts/contracts/lib/ERC20Wrapper.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | 3 | pragma solidity >=0.6.0 <0.8.0; 4 | 5 | import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; 6 | 7 | // mock class using ERC20 8 | contract ERC20Wrapper is ERC20 { 9 | 10 | constructor () ERC20("test", "TEST") { } 11 | 12 | function mint(address account, uint256 amount) public { 13 | _mint(account, amount); 14 | } 15 | 16 | function burn(address account, uint256 amount) public { 17 | _burn(account, amount); 18 | } 19 | 20 | function transferInternal(address from, address to, uint256 value) public { 21 | _transfer(from, to, value); 22 | } 23 | 24 | function approveInternal(address owner, address spender, uint256 value) public { 25 | _approve(owner, spender, value); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /contracts/contracts/lib/RLP.sol: -------------------------------------------------------------------------------- 1 | /* 2 | * @author Hamdi Allam hamdi.allam97@gmail.com 3 | * Please reach out with any questions or concerns 4 | */ 5 | pragma solidity ^0.7.0; 6 | 7 | library RLP { 8 | uint8 constant STRING_SHORT_START = 0x80; 9 | uint8 constant STRING_LONG_START = 0xb8; 10 | uint8 constant LIST_SHORT_START = 0xc0; 11 | uint8 constant LIST_LONG_START = 0xf8; 12 | 13 | uint8 constant WORD_SIZE = 32; 14 | 15 | struct RLPItem { 16 | uint len; 17 | uint memPtr; 18 | } 19 | 20 | /* 21 | * @param item RLP encoded bytes 22 | */ 23 | function toRLPItem(bytes memory item) internal pure returns (RLPItem memory) { 24 | if (item.length == 0) 25 | return RLPItem(0, 0); 26 | 27 | uint memPtr; 28 | assembly { 29 | memPtr := add(item, 0x20) 30 | } 31 | 32 | return RLPItem(item.length, memPtr); 33 | } 34 | 35 | /* 36 | * @param item RLP encoded list in bytes 37 | */ 38 | function toList(RLPItem memory item) internal pure returns (RLPItem[] memory result) { 39 | require(isList(item), "Cannot convert to list a non-list RLPItem."); 40 | 41 | uint items = numItems(item); 42 | result = new RLPItem[](items); 43 | 44 | uint memPtr = item.memPtr + _payloadOffset(item.memPtr); 45 | uint dataLen; 46 | for (uint i = 0; i < items; i++) { 47 | dataLen = _itemLength(memPtr); 48 | result[i] = RLPItem(dataLen, memPtr); 49 | memPtr = memPtr + dataLen; 50 | } 51 | } 52 | 53 | /* 54 | * Helpers 55 | */ 56 | 57 | // @return indicator whether encoded payload is a list. negate this function call for isData. 58 | function isList(RLPItem memory item) internal pure returns (bool) { 59 | uint8 byte0; 60 | uint memPtr = item.memPtr; 61 | assembly { 62 | byte0 := byte(0, mload(memPtr)) 63 | } 64 | 65 | if (byte0 < LIST_SHORT_START) 66 | return false; 67 | return true; 68 | } 69 | 70 | // @return number of payload items inside an encoded list. 71 | function numItems(RLPItem memory item) internal pure returns (uint) { 72 | uint count = 0; 73 | uint currPtr = item.memPtr + _payloadOffset(item.memPtr); 74 | uint endPtr = item.memPtr + item.len; 75 | while (currPtr < endPtr) { 76 | currPtr = currPtr + _itemLength(currPtr); // skip over an item 77 | count++; 78 | } 79 | 80 | return count; 81 | } 82 | 83 | // @return entire rlp item byte length 84 | function _itemLength(uint memPtr) internal pure returns (uint len) { 85 | uint byte0; 86 | assembly { 87 | byte0 := byte(0, mload(memPtr)) 88 | } 89 | 90 | if (byte0 < STRING_SHORT_START) 91 | return 1; 92 | 93 | else if (byte0 < STRING_LONG_START) 94 | return byte0 - STRING_SHORT_START + 1; 95 | 96 | else if (byte0 < LIST_SHORT_START) { 97 | assembly { 98 | let byteLen := sub(byte0, 0xb7) // # of bytes the actual length is 99 | memPtr := add(memPtr, 1) // skip over the first byte 100 | 101 | /* 32 byte word size */ 102 | let dataLen := div(mload(memPtr), exp(256, sub(32, byteLen))) // right shifting to get the len 103 | len := add(dataLen, add(byteLen, 1)) 104 | } 105 | } 106 | 107 | else if (byte0 < LIST_LONG_START) { 108 | return byte0 - LIST_SHORT_START + 1; 109 | } 110 | 111 | else { 112 | assembly { 113 | let byteLen := sub(byte0, 0xf7) 114 | memPtr := add(memPtr, 1) 115 | 116 | let dataLen := div(mload(memPtr), exp(256, sub(32, byteLen))) // right shifting to the correct length 117 | len := add(dataLen, add(byteLen, 1)) 118 | } 119 | } 120 | } 121 | 122 | // @return number of bytes until the data 123 | function _payloadOffset(uint memPtr) internal pure returns (uint) { 124 | uint byte0; 125 | assembly { 126 | byte0 := byte(0, mload(memPtr)) 127 | } 128 | 129 | if (byte0 < STRING_SHORT_START) 130 | return 0; 131 | else if (byte0 < STRING_LONG_START || (byte0 >= LIST_SHORT_START && byte0 < LIST_LONG_START)) 132 | return 1; 133 | else if (byte0 < LIST_SHORT_START) // being explicit 134 | return byte0 - (STRING_LONG_START - 1) + 1; 135 | else 136 | return byte0 - (LIST_LONG_START - 1) + 1; 137 | } 138 | 139 | /** RLPItem conversions into data types **/ 140 | 141 | // @returns raw rlp encoding in bytes 142 | function toRLPBytes(RLPItem memory item) internal pure returns (bytes memory) { 143 | bytes memory result = new bytes(item.len); 144 | 145 | uint ptr; 146 | assembly { 147 | ptr := add(0x20, result) 148 | } 149 | 150 | copy(item.memPtr, ptr, item.len); 151 | return result; 152 | } 153 | 154 | function toBoolean(RLPItem memory item) internal pure returns (bool) { 155 | require(item.len == 1, "Invalid RLPItem. Booleans are encoded in 1 byte"); 156 | uint result; 157 | uint memPtr = item.memPtr; 158 | assembly { 159 | result := byte(0, mload(memPtr)) 160 | } 161 | 162 | return result == 0 ? false : true; 163 | } 164 | 165 | function toAddress(RLPItem memory item) internal pure returns (address) { 166 | // 1 byte for the length prefix according to RLP spec 167 | require(item.len <= 21, "Invalid RLPItem. Addresses are encoded in 20 bytes or less"); 168 | 169 | return address(toUint(item)); 170 | } 171 | 172 | function toUint(RLPItem memory item) internal pure returns (uint) { 173 | uint offset = _payloadOffset(item.memPtr); 174 | uint len = item.len - offset; 175 | uint memPtr = item.memPtr + offset; 176 | 177 | uint result; 178 | assembly { 179 | result := div(mload(memPtr), exp(256, sub(32, len))) // shift to the correct location 180 | } 181 | 182 | return result; 183 | } 184 | 185 | function toBytes(RLPItem memory item) internal pure returns (bytes memory) { 186 | uint offset = _payloadOffset(item.memPtr); 187 | uint len = item.len - offset; // data length 188 | bytes memory result = new bytes(len); 189 | 190 | uint destPtr; 191 | assembly { 192 | destPtr := add(0x20, result) 193 | } 194 | 195 | copy(item.memPtr + offset, destPtr, len); 196 | return result; 197 | } 198 | 199 | 200 | /* 201 | * @param src Pointer to source 202 | * @param dest Pointer to destination 203 | * @param len Amount of memory to copy from the source 204 | */ 205 | function copy(uint src, uint dest, uint len) internal pure { 206 | // copy as many word sizes as possible 207 | for (; len >= WORD_SIZE; len -= WORD_SIZE) { 208 | assembly { 209 | mstore(dest, mload(src)) 210 | } 211 | 212 | src += WORD_SIZE; 213 | dest += WORD_SIZE; 214 | } 215 | 216 | // left over bytes. Mask is used to remove unwanted bytes from the word 217 | uint mask = 256 ** (WORD_SIZE - len) - 1; 218 | assembly { 219 | let srcpart := and(mload(src), not(mask)) // zero out src 220 | let destpart := and(mload(dest), mask) // retrieve the bytes 221 | mstore(dest, or(destpart, srcpart)) 222 | } 223 | } 224 | } 225 | -------------------------------------------------------------------------------- /contracts/contracts/lib/TrieProofs.sol: -------------------------------------------------------------------------------- 1 | pragma solidity ^0.7.0; 2 | 3 | import "./RLP.sol"; 4 | 5 | /* 6 | Forked from: https://github.com/lorenzb/proveth/blob/master/onchain/ProvethVerifier.sol 7 | */ 8 | 9 | 10 | library TrieProofs { 11 | using RLP for RLP.RLPItem; 12 | using RLP for bytes; 13 | 14 | bytes32 internal constant EMPTY_TRIE_ROOT_HASH = 0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421; 15 | 16 | function verify( 17 | bytes memory proofRLP, 18 | bytes32 rootHash, 19 | bytes32 path32 20 | ) internal pure returns (bytes memory value) 21 | { 22 | // TODO: Optimize by using word-size paths instead of byte arrays 23 | bytes memory path = new bytes(32); 24 | assembly { mstore(add(path, 0x20), path32) } // careful as path may need to be 64 25 | path = decodeNibbles(path, 0); // lol, so efficient 26 | 27 | RLP.RLPItem[] memory proof = proofRLP.toRLPItem().toList(); 28 | 29 | uint8 nodeChildren; 30 | RLP.RLPItem memory children; 31 | 32 | uint256 pathOffset = 0; // Offset of the proof 33 | bytes32 nextHash; // Required hash for the next node 34 | 35 | if (proof.length == 0) { 36 | // Root hash of empty tx trie 37 | require(rootHash == EMPTY_TRIE_ROOT_HASH, "Bad empty proof"); 38 | return new bytes(0); 39 | } 40 | 41 | for (uint256 i = 0; i < proof.length; i++) { 42 | // We use the fact that an rlp encoded list consists of some 43 | // encoding of its length plus the concatenation of its 44 | // *rlp-encoded* items. 45 | bytes memory rlpNode = proof[i].toRLPBytes(); // TODO: optimize by not encoding and decoding? 46 | 47 | if (i == 0) { 48 | require(rootHash == keccak256(rlpNode), "Bad first proof part"); 49 | } else { 50 | require(nextHash == keccak256(rlpNode), "Bad hash"); 51 | } 52 | 53 | RLP.RLPItem[] memory node = proof[i].toList(); 54 | 55 | // Extension or Leaf node 56 | if (node.length == 2) { 57 | /* 58 | // TODO: wtf is a divergent node 59 | // proof claims divergent extension or leaf 60 | if (proofIndexes[i] == 0xff) { 61 | require(i >= proof.length - 1); // divergent node must come last in proof 62 | require(prefixLength != nodePath.length); // node isn't divergent 63 | require(pathOffset == path.length); // didn't consume entire path 64 | return new bytes(0); 65 | } 66 | require(proofIndexes[i] == 1); // an extension/leaf node only has two fields. 67 | require(prefixLength == nodePath.length); // node is divergent 68 | */ 69 | 70 | bytes memory nodePath = merklePatriciaCompactDecode(node[0].toBytes()); 71 | pathOffset += sharedPrefixLength(pathOffset, path, nodePath); 72 | 73 | // last proof item 74 | if (i == proof.length - 1) { 75 | require(pathOffset == path.length, "Unexpected end of proof (leaf)"); 76 | return node[1].toBytes(); // Data is the second item in a leaf node 77 | } else { 78 | // not last proof item 79 | children = node[1]; 80 | if (!children.isList()) { 81 | nextHash = getNextHash(children); 82 | } else { 83 | nextHash = keccak256(children.toRLPBytes()); 84 | } 85 | } 86 | } else { 87 | // Must be a branch node at this point 88 | require(node.length == 17, "Invalid node length"); 89 | 90 | if (i == proof.length - 1) { 91 | // Proof ends in a branch node, exclusion proof in most cases 92 | if (pathOffset + 1 == path.length) { 93 | return node[16].toBytes(); 94 | } else { 95 | nodeChildren = extractNibble(path32, pathOffset); 96 | children = node[nodeChildren]; 97 | 98 | // Ensure that the next path item is empty, end of exclusion proof 99 | require(children.toBytes().length == 0, "Invalid exclusion proof"); 100 | return new bytes(0); 101 | } 102 | } else { 103 | require(pathOffset < path.length, "Continuing branch has depleted path"); 104 | 105 | nodeChildren = extractNibble(path32, pathOffset); 106 | children = node[nodeChildren]; 107 | 108 | pathOffset += 1; // advance by one 109 | 110 | // not last level 111 | if (!children.isList()) { 112 | nextHash = getNextHash(children); 113 | } else { 114 | nextHash = keccak256(children.toRLPBytes()); 115 | } 116 | } 117 | } 118 | } 119 | 120 | // no invalid proof should ever reach this point 121 | assert(false); 122 | } 123 | 124 | function getNextHash(RLP.RLPItem memory node) internal pure returns (bytes32 nextHash) { 125 | bytes memory nextHashBytes = node.toBytes(); 126 | require(nextHashBytes.length == 32, "Invalid node"); 127 | 128 | assembly { nextHash := mload(add(nextHashBytes, 0x20)) } 129 | } 130 | 131 | /* 132 | * Nibble is extracted as the least significant nibble in the returned byte 133 | */ 134 | function extractNibble(bytes32 path, uint256 position) internal pure returns (uint8 nibble) { 135 | require(position < 64, "Invalid nibble position"); 136 | byte shifted = position == 0 ? byte(path >> 4) : byte(path << ((position - 1) * 4)); 137 | return uint8(byte(uint8(shifted) & 0xF)); 138 | } 139 | 140 | function decodeNibbles(bytes memory compact, uint skipNibbles) internal pure returns (bytes memory nibbles) { 141 | require(compact.length > 0, "Empty bytes array"); 142 | 143 | uint length = compact.length * 2; 144 | require(skipNibbles <= length, "Skip nibbles amount too large"); 145 | length -= skipNibbles; 146 | 147 | nibbles = new bytes(length); 148 | uint nibblesLength = 0; 149 | 150 | for (uint i = skipNibbles; i < skipNibbles + length; i += 1) { 151 | if (i % 2 == 0) { 152 | nibbles[nibblesLength] = bytes1((uint8(compact[i/2]) >> 4) & 0xF); 153 | } else { 154 | nibbles[nibblesLength] = bytes1((uint8(compact[i/2]) >> 0) & 0xF); 155 | } 156 | nibblesLength += 1; 157 | } 158 | 159 | assert(nibblesLength == nibbles.length); 160 | } 161 | 162 | function merklePatriciaCompactDecode(bytes memory compact) internal pure returns (bytes memory nibbles) { 163 | require(compact.length > 0, "Empty bytes array"); 164 | uint first_nibble = uint8(compact[0]) >> 4 & 0xF; 165 | uint skipNibbles; 166 | if (first_nibble == 0) { 167 | skipNibbles = 2; 168 | } else if (first_nibble == 1) { 169 | skipNibbles = 1; 170 | } else if (first_nibble == 2) { 171 | skipNibbles = 2; 172 | } else if (first_nibble == 3) { 173 | skipNibbles = 1; 174 | } else { 175 | // Not supposed to happen! 176 | revert(); 177 | } 178 | return decodeNibbles(compact, skipNibbles); 179 | } 180 | 181 | function sharedPrefixLength(uint xsOffset, bytes memory xs, bytes memory ys) internal pure returns (uint) { 182 | uint256 i = 0; 183 | for (i = 0; i + xsOffset < xs.length && i < ys.length; i++) { 184 | if (xs[i + xsOffset] != ys[i]) { 185 | return i; 186 | } 187 | } 188 | return i; 189 | } 190 | } 191 | -------------------------------------------------------------------------------- /contracts/hardhat.config.js: -------------------------------------------------------------------------------- 1 | require('@nomiclabs/hardhat-waffle') 2 | 3 | module.exports = { 4 | solidity: '0.7.5', 5 | defaultNetwork: 'gethDevMode', 6 | networks: { 7 | gethDevMode: { 8 | url: 'http://localhost:8545', 9 | }, 10 | asok: { 11 | url: 'http://localhost:3333', 12 | }, 13 | nana: { 14 | url: 'http://localhost:4444', 15 | }, 16 | }, 17 | } 18 | -------------------------------------------------------------------------------- /contracts/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "oracle-bridge", 3 | "version": "1.0.0", 4 | "description": "EVM to EVM communication using Storage Proofs and Oracles", 5 | "main": "index.js", 6 | "repository": "git@github.com:web3masons/oracle-bridge.git", 7 | "author": "Chris Hitchcott ", 8 | "license": "MIT", 9 | "private": false, 10 | "scripts": { 11 | "test": "hardhat test", 12 | "deploy": "hardhat run scripts/sample-deploy.js", 13 | "deploy-asok": "NO_INIT=1 hardhat run --network asok scripts/sample-deploy.js", 14 | "deploy-nana": "NO_INIT=1 hardhat run --network nana scripts/sample-deploy.js", 15 | "fund-asok": "hardhat run --network asok scripts/fund-accounts.js", 16 | "fund-nana": "hardhat run --network nana scripts/fund-accounts.js" 17 | }, 18 | "devDependencies": { 19 | "@nomiclabs/hardhat-ethers": "^2.0.0", 20 | "@nomiclabs/hardhat-waffle": "^2.0.0", 21 | "@openzeppelin/contracts": "^3.3.0", 22 | "chai": "^4.2.0", 23 | "eslint": "^7.14.0", 24 | "eslint-config-airbnb-base": "^14.2.1", 25 | "eslint-config-prettier": "^6.15.0", 26 | "eslint-plugin-import": "^2.22.1", 27 | "ethereum-waffle": "^3.0.0", 28 | "ethereumjs-block": "^2.2.2", 29 | "ethers": "^5.0.24", 30 | "hardhat": "^2.0.4" 31 | }, 32 | "dependencies": { 33 | "web3-proof": "../web3-proof" 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /contracts/scripts/fund-accounts.js: -------------------------------------------------------------------------------- 1 | const privateKeys = [ 2 | '0x0000000000000000000000000000000000000000000000000000000000000001', // alice 3 | '0x0000000000000000000000000000000000000000000000000000000000000002', // bob 4 | '0x0000000000000000000000000000000000000000000000000000000000000003', // charlie 5 | '0x0000000000000000000000000000000000000000000000000000000000000004', // dave 6 | '0x0000000000000000000000000000000000000000000000000000000000000005', // emma 7 | '0x0000000000000000000000000000000000000000000000000000000000000006', // fred 8 | '0x0000000000000000000000000000000000000000000000000000000000000007' // oracle 9 | ] 10 | 11 | async function main() { 12 | const [signer] = await ethers.getSigners() 13 | 14 | await Promise.all(privateKeys.map(async (k) => { 15 | const address = ethers.utils.computeAddress(k); 16 | await signer.sendTransaction({ to: address, value: ethers.utils.parseEther("1.0") }); 17 | console.log(address, (await ethers.provider.getBalance(address)).toString()) 18 | })) 19 | 20 | console.log('funded!'); 21 | } 22 | 23 | main() 24 | .then(() => process.exit(0)) 25 | .catch(error => { 26 | console.error(error); 27 | process.exit(1); 28 | }); 29 | -------------------------------------------------------------------------------- /contracts/scripts/sample-deploy.js: -------------------------------------------------------------------------------- 1 | async function main() { 2 | const ERC20Wrapper = await ethers.getContractFactory('ERC20Wrapper') 3 | const wrapper = await ERC20Wrapper.deploy() 4 | await wrapper.deployed() 5 | 6 | const OracleBridge = await ethers.getContractFactory('OracleBridge') 7 | const oracleBridge = await OracleBridge.deploy() 8 | await oracleBridge.deployed() 9 | 10 | if (!process.env.NO_INIT) { 11 | await oracleBridge.init(oracleBridge.address, wrapper.address) 12 | } else { 13 | console.log("Contract NOT initialized, you must do this manually!") 14 | } 15 | 16 | console.log("OracleBridge:", oracleBridge.address); 17 | console.log("Wrapper:", wrapper.address); 18 | } 19 | 20 | main() 21 | .then(() => process.exit(0)) 22 | .catch(error => { 23 | console.error(error); 24 | process.exit(1); 25 | }); 26 | -------------------------------------------------------------------------------- /contracts/test/oracle-bridge.js: -------------------------------------------------------------------------------- 1 | const { expect } = require('chai') 2 | 3 | const getProof = require('web3-proof') 4 | 5 | describe('OracleBridge', () => { 6 | it('works', async () => { 7 | const [sSigner, rSigner] = await ethers.getSigners() 8 | 9 | const { address: sender } = sSigner 10 | const { address: receiver } = rSigner 11 | const nullAddress = ethers.constants.AddressZero 12 | 13 | const AMOUNT = 1337 14 | const DEPOSIT_TYPE = 1 15 | const BURN_TYPE = 2 16 | 17 | const ERC20Wrapper = await ethers.getContractFactory('ERC20Wrapper') 18 | const wrapper = await ERC20Wrapper.deploy() 19 | await wrapper.deployed() 20 | 21 | const OracleBridge = await ethers.getContractFactory('OracleBridge') 22 | const oracleBridge = await OracleBridge.deploy() 23 | await oracleBridge.deployed() 24 | // instance with receiver as the signer 25 | const rOracleBridge = oracleBridge.connect(rSigner) 26 | 27 | // TODO use a different peer contract in prod(!) 28 | const peer = oracleBridge.address 29 | 30 | // let's a-go (initialize) 31 | await oracleBridge.init(peer, wrapper.address) 32 | expect(await oracleBridge.wrapper()).to.equal(wrapper.address) 33 | expect(await oracleBridge.peer()).to.equal(peer) 34 | 35 | // deposit value into it 36 | const depositTx = await ( 37 | await oracleBridge.deposit(receiver, { 38 | from: sender, 39 | value: AMOUNT, 40 | }) 41 | ).wait() 42 | 43 | const { id: depositId, nonce: depositNonce } = depositTx.events[0].args 44 | 45 | // generate proof locally 46 | const depositProof = await getProof( 47 | oracleBridge.address, 48 | depositId, 49 | depositTx.blockNumber, 50 | ethers.provider 51 | ) 52 | 53 | // create a checkpoint 54 | // in reality this would be done by chainlink or something 55 | await ( 56 | await oracleBridge.createCheckpoint( 57 | depositTx.blockNumber, 58 | depositTx.blockHash, 59 | ) 60 | ).wait() 61 | 62 | // confirm checkpoint 63 | expect(await oracleBridge.checkpoints(depositTx.blockNumber)).to.equal( 64 | depositTx.blockHash, 65 | ) 66 | 67 | // mint some tokens by relaying proof 68 | await ( 69 | await oracleBridge.mint( 70 | receiver, 71 | [depositTx.blockNumber, AMOUNT, depositNonce, DEPOSIT_TYPE], 72 | [ 73 | depositProof.blockHeaderRLP, 74 | depositProof.accountProofRLP, 75 | depositProof.storageProofsRLP[0], 76 | ], 77 | ) 78 | ).wait() 79 | 80 | // cool, we got da shit. 81 | expect(await wrapper.balanceOf(receiver)).to.equal(AMOUNT) 82 | 83 | // burn it 84 | const burnTx = await (await rOracleBridge.burn(nullAddress, AMOUNT)).wait() 85 | 86 | // no more tokens 87 | expect(await wrapper.balanceOf(receiver)).to.equal(0) 88 | 89 | const { id: burnId, nonce: burnNonce } = burnTx.events[1].args 90 | 91 | // generate proof locally 92 | const burnProof = await getProof( 93 | oracleBridge.address, 94 | burnId, 95 | burnTx.blockNumber, 96 | ethers.provider 97 | ) 98 | 99 | // create a checkpoint 100 | // in reality this would be done by chainlink or something 101 | await ( 102 | await oracleBridge.createCheckpoint(burnTx.blockNumber, burnTx.blockHash) 103 | ).wait() 104 | 105 | // confirm checkpoint 106 | expect(await oracleBridge.checkpoints(burnTx.blockNumber)).to.equal( 107 | burnTx.blockHash, 108 | ) 109 | 110 | const beforeBal = await ethers.provider.getBalance(nullAddress) 111 | // // now we can redeem 112 | await ( 113 | await rOracleBridge.redeem( 114 | nullAddress, 115 | [burnTx.blockNumber, AMOUNT, burnNonce, BURN_TYPE], 116 | [ 117 | burnProof.blockHeaderRLP, 118 | burnProof.accountProofRLP, 119 | burnProof.storageProofsRLP[0], 120 | ], 121 | ) 122 | ).wait() 123 | 124 | // 😎 125 | expect(await ethers.provider.getBalance(nullAddress)).to.equal( 126 | beforeBal.add(AMOUNT), 127 | ) 128 | }) 129 | }) 130 | -------------------------------------------------------------------------------- /diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/web3masons/oracle-bridge/a6bfbb6c9c6116cdaf1fc50c57a5328b793fa7f4/diagram.png -------------------------------------------------------------------------------- /ui/.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | env: { 3 | browser: true 4 | }, 5 | extends: ['plugin:react/recommended', 'airbnb', 'nextjs'], 6 | parserOptions: { 7 | ecmaFeatures: { 8 | jsx: true 9 | }, 10 | ecmaVersion: 12, 11 | sourceType: 'module' 12 | }, 13 | plugins: ['react'], 14 | rules: { 15 | 'no-use-before-define': [0], 16 | 'new-cap': [0], 17 | 'no-await-in-loop': [0], 18 | 'no-alert': [0] 19 | } 20 | }; 21 | -------------------------------------------------------------------------------- /ui/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # next.js 12 | /.next/ 13 | /out/ 14 | 15 | # production 16 | /build 17 | 18 | # misc 19 | .DS_Store 20 | *.pem 21 | 22 | # debug 23 | npm-debug.log* 24 | yarn-debug.log* 25 | yarn-error.log* 26 | 27 | # local env files 28 | .env.local 29 | .env.development.local 30 | .env.test.local 31 | .env.production.local 32 | 33 | # vercel 34 | .vercel 35 | -------------------------------------------------------------------------------- /ui/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.codeActionsOnSave": { 3 | "source.fixAll.eslint": true 4 | }, 5 | // Disable Prettier for JavaScript and React (but not for HTML, CSS or others in future) 6 | "prettier.disableLanguages": ["javascript", "javascriptreact"] 7 | } 8 | -------------------------------------------------------------------------------- /ui/README.md: -------------------------------------------------------------------------------- 1 | This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app). 2 | 3 | ## Getting Started 4 | 5 | First, run the development server: 6 | 7 | ```bash 8 | npm run dev 9 | # or 10 | yarn dev 11 | ``` 12 | 13 | Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. 14 | 15 | You can start editing the page by modifying `pages/index.js`. The page auto-updates as you edit the file. 16 | 17 | ## Learn More 18 | 19 | To learn more about Next.js, take a look at the following resources: 20 | 21 | - [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. 22 | - [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. 23 | 24 | You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! 25 | 26 | ## Deploy on Vercel 27 | 28 | The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/import?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. 29 | 30 | Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. 31 | -------------------------------------------------------------------------------- /ui/components/Actions.js: -------------------------------------------------------------------------------- 1 | import { ethers } from 'ethers'; 2 | 3 | const Block = ({ bridge }) => { 4 | return ( 5 |
6 | {!bridge.initialized && ( 7 | <> 8 | 18 |
19 | 20 | )} 21 | 30 | 40 |
41 | 57 | 73 |
74 |
75 | ); 76 | }; 77 | 78 | export default Block; 79 | -------------------------------------------------------------------------------- /ui/components/Address.js: -------------------------------------------------------------------------------- 1 | import Blockie from './Blockie'; 2 | 3 | const Address = ({ children, short }) => { 4 | if (!children) { 5 | return '-'; 6 | } 7 | if (short) { 8 | return ( 9 | <> 10 | {children.slice(2).slice(0, 3)} 11 | {'..'} 12 | {children.slice(-3)} 13 | 14 | ); 15 | } 16 | const long = children.length > 50; 17 | return ( 18 | 19 | {!long && ( 20 | 24 | )}{' '} 25 | 33 | {children.slice(2)} 34 | 35 | 36 | ); 37 | }; 38 | 39 | export default Address; 40 | -------------------------------------------------------------------------------- /ui/components/Block.js: -------------------------------------------------------------------------------- 1 | const Block = ({ children }) => { 2 | return ( 3 |
{children}
4 | ); 5 | }; 6 | 7 | export default Block; 8 | -------------------------------------------------------------------------------- /ui/components/Blockie.js: -------------------------------------------------------------------------------- 1 | import makeBlockie from 'ethereum-blockies-base64'; 2 | 3 | const Blockie = ({ address, ...props }) => { 4 | return {address}; 5 | }; 6 | 7 | export default Blockie; 8 | -------------------------------------------------------------------------------- /ui/components/Bridge.js: -------------------------------------------------------------------------------- 1 | import { useState } from 'react'; 2 | import Chain from './Chain'; 3 | 4 | import users from '../users'; 5 | 6 | const Bridge = () => { 7 | const [state, setState] = useState({}); 8 | 9 | function onProofUpdate(proof) { 10 | setState(p => ({ 11 | ...p, 12 | [proof.id]: { 13 | ...p[proof.id], 14 | ...proof 15 | } 16 | })); 17 | } 18 | 19 | return ( 20 | <> 21 |
22 | 32 | 42 |
43 | 44 | ); 45 | }; 46 | 47 | export default Bridge; 48 | -------------------------------------------------------------------------------- /ui/components/Chain.js: -------------------------------------------------------------------------------- 1 | import useBridge from '../hooks/useBridge'; 2 | 3 | import ChainStatus from './ChainStatus'; 4 | import Proofs from './Proofs'; 5 | import Actions from './Actions'; 6 | 7 | const defaults = { 8 | chainName: 'ETC', 9 | color: '255,0,0', 10 | contractAddress: '0x78E7a0cE5DAf29fD710444a1Cb738a0f6E00ed64', 11 | endpoint: 'http://localhost:8545' 12 | }; 13 | 14 | const Chain = props => { 15 | if (!props.contractAddress.startsWith('0x')) { 16 | return ( 17 |
18 | No Chain Address Specified 19 |
20 | ); 21 | } 22 | const bridge = useBridge({ ...defaults, ...props }); 23 | return ( 24 |
31 | 32 | 33 | 34 |
35 | ); 36 | }; 37 | 38 | export default Chain; 39 | 40 | /* 41 | Mint:{' '} 42 | { 45 | try { 46 | const file = doc.target.files[0]; 47 | const reader = new FileReader(file); 48 | reader.readAsText(file); 49 | reader.onload = async e => { 50 | const parsed = await JSON.parse(e.target.result); 51 | if (!parsed.actionType) { 52 | alert('Proof format incorrect'); 53 | } 54 | bridge.mint(parsed); 55 | }; 56 | } catch (e) { 57 | console.log(e); 58 | } 59 | }} 60 | /> 61 | 62 | */ 63 | -------------------------------------------------------------------------------- /ui/components/ChainStatus.js: -------------------------------------------------------------------------------- 1 | import { ethers } from 'ethers'; 2 | import Address from './Address'; 3 | import FormatBalance from './FormatBalance'; 4 | 5 | const ChainStatus = ({ bridge }) => { 6 | const checks = Object.keys(bridge.checkpoints || {}).filter(c => c !== '0'); 7 | return ( 8 | <> 9 | 10 | 11 | 12 | 13 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 26 | 27 | 28 | 29 | 32 | 33 | 34 | 35 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 48 | 49 | 50 |
Chain 14 | {bridge.chainName} 15 |
Endpoint{bridge.endpoint}
Contract 24 |
{bridge.contractAddress}
25 |
Wrapper 30 |
{bridge.wrapperAddress}
31 |
Peer 36 |
{bridge.peer}
37 |
Block{bridge.blockNumber}
Block # 46 |
{bridge.blockHash}
47 |
51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | {bridge.users.map(user => ( 62 | 63 | 66 | 67 | 75 | 83 | 84 | ))} 85 | 86 |
AddressName{bridge.chainName} EtherWrapped Peer Ether
64 |
{user.addr}
65 |
{user.name} 68 | 69 | {ethers.utils.formatUnits( 70 | (bridge.balances || {})[user.addr] || 0, 71 | 'ether' 72 | )} 73 | 74 | 76 | 77 | {ethers.utils.formatUnits( 78 | (bridge.wrapperBalances || {})[user.addr] || 0, 79 | 'ether' 80 | )} 81 | 82 |
87 | {checks.length > 0 && ( 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | {checks.map(c => ( 96 | 97 | 98 | 101 | 102 | ))} 103 | 104 |
Checkpoints
{c} 99 |
{bridge.checkpoints[c]}
100 |
105 | )} 106 | 107 | ); 108 | }; 109 | 110 | export default ChainStatus; 111 | -------------------------------------------------------------------------------- /ui/components/FormatBalance.js: -------------------------------------------------------------------------------- 1 | const FormatBalance = ({ children }) => { 2 | if (children.length < 10) { 3 | return children; 4 | } 5 | return ( 6 | <> 7 | {children.slice(0, 5)} 8 | {'..'} 9 | {children.slice(-3)} 10 | 11 | ); 12 | }; 13 | 14 | export default FormatBalance; 15 | -------------------------------------------------------------------------------- /ui/components/Json.js: -------------------------------------------------------------------------------- 1 | import Block from './Block'; 2 | 3 | function saveJSON(_json, name) { 4 | const json = JSON.stringify(_json, null, 2); 5 | const a = document.createElement('a'); 6 | a.href = URL.createObjectURL(new Blob([json], { type: `application/json` })); 7 | a.download = name; 8 | a.click(); 9 | } 10 | 11 | const Json = ({ children, download, fileName }) => { 12 | return ( 13 | <> 14 | {JSON.stringify(children, null, 2)} 15 | {download && ( 16 | 24 | )} 25 | 26 | ); 27 | }; 28 | 29 | export default Json; 30 | -------------------------------------------------------------------------------- /ui/components/Layout.js: -------------------------------------------------------------------------------- 1 | const Layout = ({ children }) => { 2 | return ( 3 |
4 |

Oracle Bridge Demo

5 | {children} 6 |
7 | Web3 Masons Logo 12 |
13 |
14 | ); 15 | }; 16 | 17 | export default Layout; 18 | -------------------------------------------------------------------------------- /ui/components/Proofs.js: -------------------------------------------------------------------------------- 1 | import { ethers } from 'ethers'; 2 | import Address from './Address'; 3 | import FormatBalance from './FormatBalance'; 4 | 5 | const Proofs = ({ proofs, bridge }) => { 6 | const relaventProofs = Object.values(proofs).filter( 7 | ({ chainName, proof, consumed }) => { 8 | if (consumed) { 9 | return false; 10 | } 11 | const createdHere = bridge.chainName === chainName; 12 | if (proof) { 13 | return !createdHere; 14 | } 15 | return createdHere; 16 | } 17 | ); 18 | if (relaventProofs.length === 0) { 19 | return null; 20 | } 21 | return ( 22 | <> 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | {Object.values(relaventProofs).map(proof => { 36 | const { id, amount, actionType, receiver, block } = proof; 37 | const deposit = actionType.toNumber() === 1; 38 | return ( 39 | 40 | 43 | 44 | 47 | 52 | 56 | 72 | 73 | ); 74 | })} 75 | 76 |
ActionTypeRecipientValueBlockAction
41 |
{id}
42 |
{deposit ? 'Deposit' : 'Burn'} 45 |
{receiver}
46 |
48 | 49 | {ethers.utils.formatUnits(amount || 0, 'ether')} 50 | 51 | 53 | {(!block && '-') || 54 | `${block.number}:${block.hash.slice(2).slice(0, 4)}`} 55 | 57 | 71 |
77 | {/* {proofs} */} 78 | 79 | ); 80 | }; 81 | 82 | export default Proofs; 83 | -------------------------------------------------------------------------------- /ui/hooks/useBridge.js: -------------------------------------------------------------------------------- 1 | import { ethers } from 'ethers'; 2 | import { useEffect, useRef, useState } from 'react'; 3 | import getProof from 'web3-proof'; 4 | import useEthers from './useEthers'; 5 | 6 | import { abi as bridgeAbi } from '../../contracts/artifacts/contracts/OracleBridge.sol/OracleBridge.json'; 7 | import { abi as wrapperAbi } from '../../contracts/artifacts/contracts/lib/ERC20Wrapper.sol/ERC20Wrapper.json'; 8 | 9 | const useBridge = props => { 10 | const [state = {}, setState] = useState(); 11 | 12 | const eth = useEthers(props); 13 | 14 | const bridge = new useRef(); 15 | const wrapper = new useRef(); 16 | 17 | useEffect(() => { 18 | if (eth.ready) { 19 | bridge.current = new ethers.Contract( 20 | props.contractAddress, 21 | bridgeAbi, 22 | eth.provider.current 23 | ); 24 | (async () => { 25 | const [peer, wrapperAddress] = await Promise.all([ 26 | bridge.current.peer(), 27 | bridge.current.wrapper() 28 | ]); 29 | const initialized = 30 | peer !== ethers.constants.AddressZero && 31 | wrapperAddress !== ethers.constants.AddressZero; 32 | 33 | if (initialized) { 34 | await _initialize(peer, wrapperAddress); 35 | } else { 36 | setState(p => ({ ...p, initialized: false })); 37 | } 38 | getLatestCheckpoint(); 39 | update(); 40 | })(); 41 | } 42 | }, [eth.ready]); 43 | 44 | async function _initialize(peer, wrapperAddress) { 45 | wrapper.current = new ethers.Contract( 46 | wrapperAddress, 47 | wrapperAbi, 48 | eth.provider.current 49 | ); 50 | setState(p => ({ ...p, peer, wrapperAddress, initialized: true })); 51 | await update(); 52 | } 53 | 54 | async function initialize(_peer, _wrapperAddress) { 55 | if (!state.initialized) { 56 | await ( 57 | await bridge.current 58 | .connect(eth.wallets.current[0]) 59 | .init(_peer, _wrapperAddress) 60 | ).wait(); 61 | const [peer, wrapperAddress] = await Promise.all([ 62 | bridge.current.peer(), 63 | bridge.current.wrapper() 64 | ]); 65 | _initialize(peer, wrapperAddress); 66 | } 67 | } 68 | 69 | async function getCheckpoint(_height) { 70 | const height = _height || state.latestCheckpoint; 71 | const hash = await bridge.current.checkpoints(height); 72 | setState(p => ({ 73 | ...p, 74 | checkpoints: { 75 | ...p.checkpoints, 76 | [height]: hash 77 | } 78 | })); 79 | } 80 | 81 | async function getLatestCheckpoint() { 82 | const latestCheckpoint = await bridge.current.latestCheckpoint(); 83 | setState(p => ({ ...p, latestCheckpoint })); 84 | getCheckpoint(latestCheckpoint); 85 | } 86 | 87 | async function getTokenBalance(account) { 88 | if (!wrapper.current) { 89 | return; 90 | } 91 | const balance = (await wrapper.current.balanceOf(account)).toString(); 92 | setState(p => ({ 93 | ...p, 94 | wrapperBalances: { 95 | ...p.wrapperBalances, 96 | [account]: balance 97 | } 98 | })); 99 | } 100 | 101 | async function createCheckpoint(height, _hash) { 102 | if (!height || !_hash) { 103 | alert('Bad inputs!!'); 104 | return; 105 | } 106 | const hash = _hash.startsWith('0x') ? _hash : `0x${_hash}`; 107 | await ( 108 | await bridge.current 109 | .connect(eth.wallets.current[0]) 110 | .createCheckpoint(height, hash, { gasLimit: 300000 }) 111 | ).wait(); 112 | getLatestCheckpoint(); 113 | update(); 114 | } 115 | 116 | async function deposit(value, to) { 117 | if (!parseInt(value, 10) || !to) { 118 | alert('Bad value'); 119 | return; 120 | } 121 | const depositTx = await ( 122 | await bridge.current 123 | .connect(eth.wallets.current[1]) 124 | .deposit(to, { value }) 125 | ).wait(); 126 | // now get the proof of the deposit... 127 | const { 128 | actionType, 129 | amount, 130 | id, 131 | nonce, 132 | receiver 133 | } = depositTx.events[0].args; 134 | 135 | props.onProofUpdate({ 136 | actionType, 137 | amount, 138 | id, 139 | nonce, 140 | receiver, 141 | chainName: props.chainName 142 | }); 143 | update(); 144 | } 145 | 146 | async function burn(value, to) { 147 | if (!parseInt(value, 10) || !to) { 148 | alert('Bad value'); 149 | return; 150 | } 151 | const burnTx = await ( 152 | await bridge.current.connect(eth.wallets.current[2]).burn(to, value) 153 | ).wait(); 154 | // now get the proof of the burn... 155 | const { actionType, amount, id, nonce, receiver } = burnTx.events[1].args; 156 | // save the action... 157 | props.onProofUpdate({ 158 | actionType, 159 | amount, 160 | id, 161 | nonce, 162 | receiver, 163 | chainName: props.chainName 164 | }); 165 | update(); 166 | } 167 | 168 | async function generateProof(id, proofBlockNumber) { 169 | // generate and verify the proof 170 | const depositProof = await getProof( 171 | bridge.current.address, 172 | id, 173 | proofBlockNumber, 174 | eth.provider.current 175 | ); 176 | props.onProofUpdate({ id, ...depositProof }); 177 | } 178 | 179 | async function mint(proof) { 180 | await ( 181 | await bridge.current 182 | .connect(eth.wallets.current[2]) 183 | .mint( 184 | proof.receiver, 185 | [proof.block.number, proof.amount, proof.nonce, proof.actionType], 186 | [ 187 | proof.blockHeaderRLP, 188 | proof.accountProofRLP, 189 | proof.storageProofsRLP[0] 190 | ], 191 | { gasLimit: 3000000 } 192 | ) 193 | ).wait(); 194 | props.onProofUpdate({ id: proof.id, consumed: true }); 195 | update(); 196 | } 197 | 198 | async function redeem(proof) { 199 | await ( 200 | await bridge.current 201 | .connect(eth.wallets.current[3]) 202 | .redeem( 203 | proof.receiver, 204 | [proof.block.number, proof.amount, proof.nonce, proof.actionType], 205 | [ 206 | proof.blockHeaderRLP, 207 | proof.accountProofRLP, 208 | proof.storageProofsRLP[0] 209 | ], 210 | { gasLimit: 3000000 } 211 | ) 212 | ).wait(); 213 | props.onProofUpdate({ id: proof.id, consumed: true }); 214 | // TODO 215 | update(); 216 | } 217 | 218 | function update() { 219 | eth.getBlockNumber(); 220 | Object.values(eth.users).forEach(({ addr }) => { 221 | eth.getBalance(addr); 222 | getTokenBalance(addr); 223 | }); 224 | } 225 | 226 | return { 227 | ...props, 228 | ...eth, 229 | ...state, 230 | initialize, 231 | getLatestCheckpoint, 232 | createCheckpoint, 233 | deposit, 234 | generateProof, 235 | mint, 236 | burn, 237 | redeem 238 | }; 239 | }; 240 | 241 | export default useBridge; 242 | -------------------------------------------------------------------------------- /ui/hooks/useEthers.js: -------------------------------------------------------------------------------- 1 | import { ethers } from 'ethers'; 2 | import { useEffect, useRef, useState } from 'react'; 3 | 4 | const useEthers = ({ endpoint, users }) => { 5 | const [state, setState] = useState(); 6 | 7 | const provider = new useRef(); 8 | const wallets = new useRef(); 9 | 10 | useEffect(() => { 11 | provider.current = new ethers.providers.JsonRpcProvider(endpoint); 12 | wallets.current = users.map( 13 | ({ pk }) => new ethers.Wallet(pk, provider.current) 14 | ); 15 | setState(p => ({ ...p, ready: true, users })); 16 | getBlockNumber(); 17 | }, []); 18 | 19 | async function getBalance(account) { 20 | const balance = (await provider.current.getBalance(account)).toString(); 21 | setState(p => ({ 22 | ...p, 23 | balances: { 24 | ...p.balances, 25 | [account]: balance 26 | } 27 | })); 28 | } 29 | 30 | async function getBlockNumber() { 31 | const blockNumber = await provider.current.getBlockNumber(); 32 | const { hash: blockHash } = await provider.current.getBlock(); 33 | setState(p => ({ ...p, blockNumber, blockHash })); 34 | } 35 | 36 | async function mine(blocks = 1) { 37 | for (let i = 0; i < blocks; i += 1) { 38 | await wallets.current[0].sendTransaction({ 39 | to: ethers.constants.AddressZero, 40 | value: 1 41 | }); 42 | await getBlockNumber(); 43 | } 44 | getBalance(users[0].addr); 45 | } 46 | 47 | return { ...state, wallets, provider, getBlockNumber, mine, getBalance }; 48 | }; 49 | 50 | export default useEthers; 51 | -------------------------------------------------------------------------------- /ui/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ui", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "dev": "next dev", 7 | "build": "next build", 8 | "start": "next start" 9 | }, 10 | "dependencies": { 11 | "ethereum-blockies-base64": "^1.0.2", 12 | "ethers": "^5.0.23", 13 | "next": "10.0.3", 14 | "react": "17.0.1", 15 | "react-dom": "17.0.1", 16 | "web3-proof": "../web3-proof" 17 | }, 18 | "devDependencies": { 19 | "babel-eslint": "^9.0.0", 20 | "eslint": "^6.1.0", 21 | "eslint-config-airbnb": "^18.0.0", 22 | "eslint-config-nextjs": "1.0.6", 23 | "eslint-config-prettier": "^4.1.0", 24 | "eslint-plugin-html": "^5.0.3", 25 | "eslint-plugin-import": "^2.18.0", 26 | "eslint-plugin-jsx-a11y": "^6.2.3", 27 | "eslint-plugin-prettier": "^3.0.1", 28 | "eslint-plugin-react": "^7.14.2", 29 | "eslint-plugin-react-hooks": "^1.4.0", 30 | "prettier": "^1.16.4" 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /ui/pages/_app.js: -------------------------------------------------------------------------------- 1 | import '../styles/globals.css'; 2 | 3 | function MyApp({ Component, pageProps }) { 4 | return ; 5 | } 6 | 7 | export default MyApp; 8 | -------------------------------------------------------------------------------- /ui/pages/api/hello.js: -------------------------------------------------------------------------------- 1 | // Next.js API route support: https://nextjs.org/docs/api-routes/introduction 2 | 3 | export default (req, res) => { 4 | res.statusCode = 200; 5 | res.json({ name: 'John Doe' }); 6 | }; 7 | -------------------------------------------------------------------------------- /ui/pages/index.js: -------------------------------------------------------------------------------- 1 | import Head from 'next/head'; 2 | import Bridge from '../components/Bridge'; 3 | import Layout from '../components/Layout'; 4 | 5 | export default function Home() { 6 | return ( 7 | <> 8 | 9 | Oracle Bridge Demo 10 | 11 | 12 | 13 | 14 | 15 | 16 | ); 17 | } 18 | -------------------------------------------------------------------------------- /ui/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/web3masons/oracle-bridge/a6bfbb6c9c6116cdaf1fc50c57a5328b793fa7f4/ui/public/favicon.ico -------------------------------------------------------------------------------- /ui/styles/globals.css: -------------------------------------------------------------------------------- 1 | html, 2 | body { 3 | padding: 0; 4 | margin: 0; 5 | } 6 | body { 7 | background: #dedede; 8 | } 9 | 10 | button, html, body { 11 | font-family: 'Roboto Mono', monospace; 12 | } 13 | 14 | a { 15 | color: inherit; 16 | text-decoration: none; 17 | } 18 | 19 | * { 20 | box-sizing: border-box; 21 | } 22 | 23 | .bridge { 24 | margin: 15px; 25 | display: grid; 26 | grid-template-columns: 1fr 1fr; 27 | column-gap: 15px; 28 | } 29 | 30 | h1 { 31 | text-align: center; 32 | } 33 | 34 | .chain { 35 | /* margin: 15px; */ 36 | box-sizing: border-box; 37 | border-radius: 15px; 38 | } 39 | 40 | th { 41 | text-align: left; 42 | vertical-align: top; 43 | } 44 | 45 | table { 46 | margin: 20px 0; 47 | } 48 | td, th { 49 | padding: 2px 15px; 50 | } 51 | 52 | .actions { 53 | margin: 15px; 54 | } 55 | button { 56 | margin: 5px; 57 | } 58 | h1, .footer { 59 | margin: 30px; 60 | } 61 | .footer { 62 | text-align: center; 63 | } 64 | .footer img { 65 | width: 50px; 66 | height: auto; 67 | opacity: 0.5; 68 | } -------------------------------------------------------------------------------- /ui/users.js: -------------------------------------------------------------------------------- 1 | import { ethers } from 'ethers'; 2 | 3 | const users = { 4 | alice: { 5 | pk: '0x0000000000000000000000000000000000000000000000000000000000000001' 6 | }, 7 | bob: { 8 | pk: '0x0000000000000000000000000000000000000000000000000000000000000002' 9 | }, 10 | charlie: { 11 | pk: '0x0000000000000000000000000000000000000000000000000000000000000003' 12 | }, 13 | dave: { 14 | pk: '0x0000000000000000000000000000000000000000000000000000000000000004' 15 | }, 16 | emma: { 17 | pk: '0x0000000000000000000000000000000000000000000000000000000000000005' 18 | }, 19 | fred: { 20 | pk: '0x0000000000000000000000000000000000000000000000000000000000000006' 21 | }, 22 | oracle: { 23 | pk: '0x0000000000000000000000000000000000000000000000000000000000000007' 24 | } 25 | }; 26 | 27 | Object.keys(users).forEach(user => { 28 | users[user] = { 29 | ...users[user], 30 | name: user, 31 | addr: ethers.utils.computeAddress(users[user].pk) 32 | }; 33 | }); 34 | 35 | export default users; 36 | -------------------------------------------------------------------------------- /web3-proof/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | 6 | # misc 7 | .DS_Store 8 | *.pem 9 | 10 | # debug 11 | npm-debug.log* 12 | yarn-debug.log* 13 | yarn-error.log* 14 | 15 | # local env files 16 | .env.local 17 | .env.development.local 18 | .env.test.local 19 | .env.production.local 20 | -------------------------------------------------------------------------------- /web3-proof/index.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable class-methods-use-this */ 2 | // modified from https://github.com/aragon/evm-storage-proofs/blob/eec39e0668304c0c0cc42eaa86fe6a459f623645/packages/web3-proofs/src/index.js 3 | // this is pretty hacky, refactor to just use ethersjs (!) 4 | 5 | const Web3 = require('web3') 6 | const { ethers } = require('ethers'); 7 | const EthereumBlock = require('ethereumjs-block/from-rpc') 8 | const RLP = require('rlp') 9 | const Trie = require('merkle-patricia-tree') 10 | const { promisify } = require('util') 11 | 12 | class Web3Proofs { 13 | constructor(ethersProvider) { 14 | this.ethersProvider = ethersProvider 15 | this.web3 = new Web3( 16 | new Web3.providers.HttpProvider(ethersProvider.connection.url), 17 | ) 18 | } 19 | 20 | async getProof( 21 | address, 22 | storageKeys = [], 23 | blockNumber = 'latest', 24 | verify = true, 25 | ) { 26 | const blockNumParsed = 27 | blockNumber === 'latest' ? 'latest' : this.web3.utils.toHex(blockNumber) 28 | const proof = await this.ethersProvider.send('eth_getProof', [ 29 | address, 30 | storageKeys, 31 | blockNumParsed, 32 | ]) 33 | 34 | const block = await this.web3.eth.getBlock(blockNumber) 35 | const blockHeaderRLP = this.blockHeaderRLP(block) 36 | 37 | if (verify) { 38 | // Verify account proof locally 39 | const accountProofVerification = await this.verifyAccountProof( 40 | block.stateRoot, 41 | address, 42 | proof, 43 | ) 44 | if (!accountProofVerification) { 45 | throw new Error('Local verification of account proof failed') 46 | } 47 | 48 | // Verify storage proofs locally 49 | const storageProofs = await Promise.all( 50 | proof.storageProof.map((storageProof) => 51 | this.verifyStorageProof(proof.storageHash, storageProof), 52 | ), 53 | ) 54 | 55 | const failedProofs = storageProofs 56 | .filter((result) => !result) // filter failed proofs 57 | .map((_, i) => i) 58 | 59 | if (failedProofs.length > 0) { 60 | throw new Error( 61 | `Proof failed for storage proofs ${JSON.stringify(failedProofs)}`, 62 | ) 63 | } 64 | } 65 | 66 | const accountProofRLP = this.encodeProof(proof.accountProof) 67 | const storageProofsRLP = proof.storageProof.map((p) => 68 | this.encodeProof(p.proof), 69 | ) 70 | 71 | return { 72 | proof, 73 | block, 74 | blockHeaderRLP, 75 | accountProofRLP, 76 | storageProofsRLP, 77 | } 78 | } 79 | 80 | encodeProof(proof) { 81 | return `0x${RLP.encode(proof.map((part) => RLP.decode(part))).toString( 82 | 'hex', 83 | )}` 84 | } 85 | 86 | async verifyAccountProof(stateRoot, address, proof) { 87 | const path = this.web3.utils.sha3(address).slice(2) 88 | 89 | const proofAccountRLP = await this.verifyProof( 90 | stateRoot, 91 | Buffer.from(path, 'hex'), 92 | proof.accountProof, 93 | ) 94 | const stateAccountRLP = this.accountRLP(proof) 95 | 96 | return Buffer.compare(stateAccountRLP, proofAccountRLP) === 0 97 | } 98 | 99 | async verifyStorageProof(storageRoot, storageProof) { 100 | const path = this.web3.utils 101 | .soliditySha3({ t: 'uint256', v: storageProof.key }) 102 | .slice(2) 103 | 104 | const proofStorageValue = await this.verifyProof( 105 | storageRoot, 106 | Buffer.from(path, 'hex'), 107 | storageProof.proof, 108 | ) 109 | const stateValueRLP = RLP.encode(storageProof.value) 110 | 111 | return Buffer.compare(proofStorageValue, stateValueRLP) === 0 112 | } 113 | 114 | async verifyProof(rootHash, path, proof) { 115 | // Note: it crashes when the account is not used??? () 116 | // Error: Key does not match with the proof one (extention|leaf) 117 | return promisify(Trie.verifyProof)(rootHash, path, proof) 118 | } 119 | 120 | accountRLP({ nonce, balance, storageHash, codeHash }) { 121 | const bal = balance === '0x0' ? null : balance 122 | return RLP.encode([nonce, bal, storageHash, codeHash]) 123 | } 124 | 125 | blockHeaderRLP(_block) { 126 | // From https://github.com/zmitton/eth-proof/blob/master/buildProof.js#L274 127 | 128 | const block = { ..._block } 129 | block.difficulty = `0x${this.web3.utils 130 | .toBN(block.difficulty) 131 | .toString(16)}` 132 | const ethereumBlock = new EthereumBlock(block) 133 | const blockHeaderRLP = `0x${RLP.encode(ethereumBlock.header.raw).toString( 134 | 'hex', 135 | )}` 136 | 137 | const solidityBlockHash = this.web3.utils.soliditySha3(blockHeaderRLP) 138 | 139 | if (solidityBlockHash !== block.hash) { 140 | throw new Error( 141 | `Block header rlp hash (${solidityBlockHash}) doesnt match block hash (${block.hash})`, 142 | ) 143 | } 144 | 145 | return blockHeaderRLP 146 | } 147 | } 148 | 149 | // storage slot position - modify if the contact changes the location of `actions` 150 | const SLOT_POSITION = 0 151 | 152 | async function getProof(address, actionId, blockNumber = 'latest', ethersProvider) { 153 | const w3p = new Web3Proofs(ethersProvider); 154 | const slot = ethers.utils.solidityKeccak256( 155 | ['bytes32', 'uint256'], 156 | [actionId, SLOT_POSITION], 157 | ) 158 | const proofs = await w3p.getProof(address, [slot], blockNumber) 159 | return proofs 160 | } 161 | 162 | module.exports = getProof 163 | -------------------------------------------------------------------------------- /web3-proof/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "web3-proof", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "ethereumjs-block": "^2.2.2", 13 | "merkle-patricia-tree": "2.3.2", 14 | "rlp": "^2.2.6", 15 | "web3": "^1.3.0" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /web3-proof/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@ethersproject/abi@5.0.0-beta.153": 6 | version "5.0.0-beta.153" 7 | resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.0.0-beta.153.tgz#43a37172b33794e4562999f6e2d555b7599a8eee" 8 | integrity sha512-aXweZ1Z7vMNzJdLpR1CZUAIgnwjrZeUSvN9syCwlBaEBUFJmFY+HHnfuTI5vIhVs/mRkfJVrbEyl51JZQqyjAg== 9 | dependencies: 10 | "@ethersproject/address" ">=5.0.0-beta.128" 11 | "@ethersproject/bignumber" ">=5.0.0-beta.130" 12 | "@ethersproject/bytes" ">=5.0.0-beta.129" 13 | "@ethersproject/constants" ">=5.0.0-beta.128" 14 | "@ethersproject/hash" ">=5.0.0-beta.128" 15 | "@ethersproject/keccak256" ">=5.0.0-beta.127" 16 | "@ethersproject/logger" ">=5.0.0-beta.129" 17 | "@ethersproject/properties" ">=5.0.0-beta.131" 18 | "@ethersproject/strings" ">=5.0.0-beta.130" 19 | 20 | "@ethersproject/abstract-provider@^5.0.4": 21 | version "5.0.7" 22 | resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.0.7.tgz#04ee3bfe43323384e7fecf6c774975b8dec4bdc9" 23 | integrity sha512-NF16JGn6M0zZP5ZS8KtDL2Rh7yHxZbUjBIHLNHMm/0X0BephhjUWy8jqs/Zks6kDJRzNthgmPVy41Ec0RYWPYA== 24 | dependencies: 25 | "@ethersproject/bignumber" "^5.0.7" 26 | "@ethersproject/bytes" "^5.0.4" 27 | "@ethersproject/logger" "^5.0.5" 28 | "@ethersproject/networks" "^5.0.3" 29 | "@ethersproject/properties" "^5.0.3" 30 | "@ethersproject/transactions" "^5.0.5" 31 | "@ethersproject/web" "^5.0.6" 32 | 33 | "@ethersproject/abstract-signer@^5.0.6": 34 | version "5.0.9" 35 | resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.0.9.tgz#238ddc06031aeb9dfceee2add965292d7dd1acbf" 36 | integrity sha512-CM5UNmXQaA03MyYARFDDRjHWBxujO41tVle7glf5kHcQsDDULgqSVpkliLJMtPzZjOKFeCVZBHybTZDEZg5zzg== 37 | dependencies: 38 | "@ethersproject/abstract-provider" "^5.0.4" 39 | "@ethersproject/bignumber" "^5.0.7" 40 | "@ethersproject/bytes" "^5.0.4" 41 | "@ethersproject/logger" "^5.0.5" 42 | "@ethersproject/properties" "^5.0.3" 43 | 44 | "@ethersproject/address@>=5.0.0-beta.128", "@ethersproject/address@^5.0.4", "@ethersproject/address@^5.0.5": 45 | version "5.0.8" 46 | resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.0.8.tgz#0c551659144a5a7643c6bea337149d410825298f" 47 | integrity sha512-V87DHiZMZR6hmFYmoGaHex0D53UEbZpW75uj8AqPbjYUmi65RB4N2LPRcJXuWuN2R0Y2CxkvW6ArijWychr5FA== 48 | dependencies: 49 | "@ethersproject/bignumber" "^5.0.10" 50 | "@ethersproject/bytes" "^5.0.4" 51 | "@ethersproject/keccak256" "^5.0.3" 52 | "@ethersproject/logger" "^5.0.5" 53 | "@ethersproject/rlp" "^5.0.3" 54 | 55 | "@ethersproject/base64@^5.0.3": 56 | version "5.0.6" 57 | resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.0.6.tgz#26311ebf29ea3d0b9c300ccf3e1fdc44b7481516" 58 | integrity sha512-HwrGn8YMiUf7bcdVvB4NJ+eWT0BtEFpDtrYxVXEbR7p/XBSJjwiR7DEggIiRvxbualMKg+EZijQWJ3az2li0uw== 59 | dependencies: 60 | "@ethersproject/bytes" "^5.0.4" 61 | 62 | "@ethersproject/bignumber@>=5.0.0-beta.130", "@ethersproject/bignumber@^5.0.10", "@ethersproject/bignumber@^5.0.7", "@ethersproject/bignumber@^5.0.8": 63 | version "5.0.12" 64 | resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.0.12.tgz#fe4a78667d7cb01790f75131147e82d6ea7e7cba" 65 | integrity sha512-mbFZjwthx6vFlHG9owXP/C5QkNvsA+xHpDCkPPPdG2n1dS9AmZAL5DI0InNLid60rQWL3MXpEl19tFmtL7Q9jw== 66 | dependencies: 67 | "@ethersproject/bytes" "^5.0.8" 68 | "@ethersproject/logger" "^5.0.5" 69 | bn.js "^4.4.0" 70 | 71 | "@ethersproject/bytes@>=5.0.0-beta.129", "@ethersproject/bytes@^5.0.4", "@ethersproject/bytes@^5.0.8": 72 | version "5.0.8" 73 | resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.0.8.tgz#cf1246a6a386086e590063a4602b1ffb6cc43db1" 74 | integrity sha512-O+sJNVGzzuy51g+EMK8BegomqNIg+C2RO6vOt0XP6ac4o4saiq69FnjlsrNslaiMFVO7qcEHBsWJ9hx1tj1lMw== 75 | dependencies: 76 | "@ethersproject/logger" "^5.0.5" 77 | 78 | "@ethersproject/constants@>=5.0.0-beta.128", "@ethersproject/constants@^5.0.4": 79 | version "5.0.7" 80 | resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.0.7.tgz#44ff979e5781b17c8c6901266896c3ee745f4e7e" 81 | integrity sha512-cbQK1UpE4hamB52Eg6DLhJoXeQ1plSzekh5Ujir1xdREdwdsZPPXKczkrWqBBR0KyywJZHN/o/hj0w8j7scSGg== 82 | dependencies: 83 | "@ethersproject/bignumber" "^5.0.7" 84 | 85 | "@ethersproject/hash@>=5.0.0-beta.128": 86 | version "5.0.9" 87 | resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.0.9.tgz#81252a848185b584aa600db4a1a68cad9229a4d4" 88 | integrity sha512-e8/i2ZDeGSgCxXT0vocL54+pMbw5oX5fNjb2E3bAIvdkh5kH29M7zz1jHu1QDZnptIuvCZepIbhUH8lxKE2/SQ== 89 | dependencies: 90 | "@ethersproject/abstract-signer" "^5.0.6" 91 | "@ethersproject/address" "^5.0.5" 92 | "@ethersproject/bignumber" "^5.0.8" 93 | "@ethersproject/bytes" "^5.0.4" 94 | "@ethersproject/keccak256" "^5.0.3" 95 | "@ethersproject/logger" "^5.0.5" 96 | "@ethersproject/properties" "^5.0.4" 97 | "@ethersproject/strings" "^5.0.4" 98 | 99 | "@ethersproject/keccak256@>=5.0.0-beta.127", "@ethersproject/keccak256@^5.0.3": 100 | version "5.0.6" 101 | resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.0.6.tgz#5b5ba715ef1be86efde5c271f896fa0daf0e1efe" 102 | integrity sha512-eJ4Id/i2rwrf5JXEA7a12bG1phuxjj47mPZgDUbttuNBodhSuZF2nEO5QdpaRjmlphQ8Kt9PNqY/z7lhtJptZg== 103 | dependencies: 104 | "@ethersproject/bytes" "^5.0.4" 105 | js-sha3 "0.5.7" 106 | 107 | "@ethersproject/logger@>=5.0.0-beta.129", "@ethersproject/logger@^5.0.5": 108 | version "5.0.8" 109 | resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.0.8.tgz#135c1903d35c878265f3cbf2b287042c4c20d5d4" 110 | integrity sha512-SkJCTaVTnaZ3/ieLF5pVftxGEFX56pTH+f2Slrpv7cU0TNpUZNib84QQdukd++sWUp/S7j5t5NW+WegbXd4U/A== 111 | 112 | "@ethersproject/networks@^5.0.3": 113 | version "5.0.6" 114 | resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.0.6.tgz#4d6586bbebfde1c027504ebf6dfb783b29c3803a" 115 | integrity sha512-2Cg1N5109zzFOBfkyuPj+FfF7ioqAsRffmybJ2lrsiB5skphIAE72XNSCs4fqktlf+rwSh/5o/UXRjXxvSktZw== 116 | dependencies: 117 | "@ethersproject/logger" "^5.0.5" 118 | 119 | "@ethersproject/properties@>=5.0.0-beta.131", "@ethersproject/properties@^5.0.3", "@ethersproject/properties@^5.0.4": 120 | version "5.0.6" 121 | resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.0.6.tgz#44d82aaa294816fd63333e7def42426cf0e87b3b" 122 | integrity sha512-a9DUMizYhJ0TbtuDkO9iYlb2CDlpSKqGPDr+amvlZhRspQ6jbl5Eq8jfu4SCcGlcfaTbguJmqGnyOGn1EFt6xA== 123 | dependencies: 124 | "@ethersproject/logger" "^5.0.5" 125 | 126 | "@ethersproject/rlp@^5.0.3": 127 | version "5.0.6" 128 | resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.0.6.tgz#29f9097348a3c330811997433b7df89ab51cd644" 129 | integrity sha512-M223MTaydfmQSsvqAl0FJZDYFlSqt6cgbhnssLDwqCKYegAHE16vrFyo+eiOapYlt32XAIJm0BXlqSunULzZuQ== 130 | dependencies: 131 | "@ethersproject/bytes" "^5.0.4" 132 | "@ethersproject/logger" "^5.0.5" 133 | 134 | "@ethersproject/signing-key@^5.0.4": 135 | version "5.0.7" 136 | resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.0.7.tgz#d03bfc5f565efb962bafebf8e6965e70d1c46d31" 137 | integrity sha512-JYndnhFPKH0daPcIjyhi+GMcw3srIHkQ40hGRe6DA0CdGrpMfgyfSYDQ2D8HL2lgR+Xm4SHfEB0qba6+sCyrvg== 138 | dependencies: 139 | "@ethersproject/bytes" "^5.0.4" 140 | "@ethersproject/logger" "^5.0.5" 141 | "@ethersproject/properties" "^5.0.3" 142 | elliptic "6.5.3" 143 | 144 | "@ethersproject/strings@>=5.0.0-beta.130", "@ethersproject/strings@^5.0.4": 145 | version "5.0.7" 146 | resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.0.7.tgz#8dc68f794c9e2901f3b75e53b2afbcb6b6c15037" 147 | integrity sha512-a+6T80LvmXGMOOWQTZHtGGQEg1z4v8rm8oX70KNs55YtPXI/5J3LBbVf5pyqCKSlmiBw5IaepPvs5XGalRUSZQ== 148 | dependencies: 149 | "@ethersproject/bytes" "^5.0.4" 150 | "@ethersproject/constants" "^5.0.4" 151 | "@ethersproject/logger" "^5.0.5" 152 | 153 | "@ethersproject/transactions@^5.0.0-beta.135", "@ethersproject/transactions@^5.0.5": 154 | version "5.0.8" 155 | resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.0.8.tgz#3b4d7041e13b957a9c4f131e0aea9dae7b6f5a23" 156 | integrity sha512-i7NtOXVzUe+YSU6QufzlRrI2WzHaTmULAKHJv4duIZMLqzehCBXGA9lTpFgFdqGYcQJ7vOtNFC2BB2mSjmuXqg== 157 | dependencies: 158 | "@ethersproject/address" "^5.0.4" 159 | "@ethersproject/bignumber" "^5.0.7" 160 | "@ethersproject/bytes" "^5.0.4" 161 | "@ethersproject/constants" "^5.0.4" 162 | "@ethersproject/keccak256" "^5.0.3" 163 | "@ethersproject/logger" "^5.0.5" 164 | "@ethersproject/properties" "^5.0.3" 165 | "@ethersproject/rlp" "^5.0.3" 166 | "@ethersproject/signing-key" "^5.0.4" 167 | 168 | "@ethersproject/web@^5.0.6": 169 | version "5.0.11" 170 | resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.0.11.tgz#d47da612b958b4439e415782a53c8f8461522d68" 171 | integrity sha512-x03ihbPoN1S8Gsh9WSwxkYxUIumLi02ZEKJku1C43sxBfe+mdprWyvujzYlpuoRNfWRgNhdRDKMP8JbG6MwNGA== 172 | dependencies: 173 | "@ethersproject/base64" "^5.0.3" 174 | "@ethersproject/bytes" "^5.0.4" 175 | "@ethersproject/logger" "^5.0.5" 176 | "@ethersproject/properties" "^5.0.3" 177 | "@ethersproject/strings" "^5.0.4" 178 | 179 | "@sindresorhus/is@^0.14.0": 180 | version "0.14.0" 181 | resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" 182 | integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== 183 | 184 | "@szmarczak/http-timer@^1.1.2": 185 | version "1.1.2" 186 | resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" 187 | integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== 188 | dependencies: 189 | defer-to-connect "^1.0.1" 190 | 191 | "@types/bn.js@^4.11.3", "@types/bn.js@^4.11.5": 192 | version "4.11.6" 193 | resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c" 194 | integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg== 195 | dependencies: 196 | "@types/node" "*" 197 | 198 | "@types/node@*": 199 | version "14.14.13" 200 | resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.13.tgz#9e425079799322113ae8477297ae6ef51b8e0cdf" 201 | integrity sha512-vbxr0VZ8exFMMAjCW8rJwaya0dMCDyYW2ZRdTyjtrCvJoENMpdUHOT/eTzvgyA5ZnqRZ/sI0NwqAxNHKYokLJQ== 202 | 203 | "@types/node@^12.12.6": 204 | version "12.19.9" 205 | resolved "https://registry.yarnpkg.com/@types/node/-/node-12.19.9.tgz#990ad687ad8b26ef6dcc34a4f69c33d40c95b679" 206 | integrity sha512-yj0DOaQeUrk3nJ0bd3Y5PeDRJ6W0r+kilosLA+dzF3dola/o9hxhMSg2sFvVcA2UHS5JSOsZp4S0c1OEXc4m1Q== 207 | 208 | "@types/pbkdf2@^3.0.0": 209 | version "3.1.0" 210 | resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.0.tgz#039a0e9b67da0cdc4ee5dab865caa6b267bb66b1" 211 | integrity sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ== 212 | dependencies: 213 | "@types/node" "*" 214 | 215 | "@types/secp256k1@^4.0.1": 216 | version "4.0.1" 217 | resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.1.tgz#fb3aa61a1848ad97d7425ff9dcba784549fca5a4" 218 | integrity sha512-+ZjSA8ELlOp8SlKi0YLB2tz9d5iPNEmOBd+8Rz21wTMdaXQIa9b6TEnD6l5qKOCypE7FSyPyck12qZJxSDNoog== 219 | dependencies: 220 | "@types/node" "*" 221 | 222 | abstract-leveldown@~2.6.0: 223 | version "2.6.3" 224 | resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz#1c5e8c6a5ef965ae8c35dfb3a8770c476b82c4b8" 225 | integrity sha512-2++wDf/DYqkPR3o5tbfdhF96EfMApo1GpPfzOsR/ZYXdkSmELlvOOEAl9iKkRsktMPHdGjO4rtkBpf2I7TiTeA== 226 | dependencies: 227 | xtend "~4.0.0" 228 | 229 | abstract-leveldown@~2.7.1: 230 | version "2.7.2" 231 | resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz#87a44d7ebebc341d59665204834c8b7e0932cc93" 232 | integrity sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w== 233 | dependencies: 234 | xtend "~4.0.0" 235 | 236 | accepts@~1.3.7: 237 | version "1.3.7" 238 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" 239 | integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== 240 | dependencies: 241 | mime-types "~2.1.24" 242 | negotiator "0.6.2" 243 | 244 | ajv@^6.12.3: 245 | version "6.12.6" 246 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" 247 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 248 | dependencies: 249 | fast-deep-equal "^3.1.1" 250 | fast-json-stable-stringify "^2.0.0" 251 | json-schema-traverse "^0.4.1" 252 | uri-js "^4.2.2" 253 | 254 | array-flatten@1.1.1: 255 | version "1.1.1" 256 | resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" 257 | integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= 258 | 259 | asn1.js@^5.2.0: 260 | version "5.4.1" 261 | resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" 262 | integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== 263 | dependencies: 264 | bn.js "^4.0.0" 265 | inherits "^2.0.1" 266 | minimalistic-assert "^1.0.0" 267 | safer-buffer "^2.1.0" 268 | 269 | asn1@~0.2.3: 270 | version "0.2.4" 271 | resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" 272 | integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== 273 | dependencies: 274 | safer-buffer "~2.1.0" 275 | 276 | assert-plus@1.0.0, assert-plus@^1.0.0: 277 | version "1.0.0" 278 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" 279 | integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= 280 | 281 | async-limiter@~1.0.0: 282 | version "1.0.1" 283 | resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" 284 | integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== 285 | 286 | async@^1.4.2: 287 | version "1.5.2" 288 | resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" 289 | integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= 290 | 291 | async@^2.0.1: 292 | version "2.6.3" 293 | resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" 294 | integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== 295 | dependencies: 296 | lodash "^4.17.14" 297 | 298 | asynckit@^0.4.0: 299 | version "0.4.0" 300 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 301 | integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= 302 | 303 | aws-sign2@~0.7.0: 304 | version "0.7.0" 305 | resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" 306 | integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= 307 | 308 | aws4@^1.8.0: 309 | version "1.11.0" 310 | resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" 311 | integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== 312 | 313 | base-x@^3.0.2, base-x@^3.0.8: 314 | version "3.0.8" 315 | resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.8.tgz#1e1106c2537f0162e8b52474a557ebb09000018d" 316 | integrity sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA== 317 | dependencies: 318 | safe-buffer "^5.0.1" 319 | 320 | base64-js@^1.3.1: 321 | version "1.5.1" 322 | resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" 323 | integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== 324 | 325 | bcrypt-pbkdf@^1.0.0: 326 | version "1.0.2" 327 | resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" 328 | integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= 329 | dependencies: 330 | tweetnacl "^0.14.3" 331 | 332 | bignumber.js@^9.0.0: 333 | version "9.0.1" 334 | resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.1.tgz#8d7ba124c882bfd8e43260c67475518d0689e4e5" 335 | integrity sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA== 336 | 337 | blakejs@^1.1.0: 338 | version "1.1.0" 339 | resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.1.0.tgz#69df92ef953aa88ca51a32df6ab1c54a155fc7a5" 340 | integrity sha1-ad+S75U6qIylGjLfarHFShVfx6U= 341 | 342 | bluebird@^3.5.0: 343 | version "3.7.2" 344 | resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" 345 | integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== 346 | 347 | bn.js@4.11.6: 348 | version "4.11.6" 349 | resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" 350 | integrity sha1-UzRK2xRhehP26N0s4okF0cC6MhU= 351 | 352 | bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.0, bn.js@^4.11.1, bn.js@^4.11.6, bn.js@^4.11.9, bn.js@^4.4.0: 353 | version "4.11.9" 354 | resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828" 355 | integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw== 356 | 357 | bn.js@^5.0.0, bn.js@^5.1.1: 358 | version "5.1.3" 359 | resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.3.tgz#beca005408f642ebebea80b042b4d18d2ac0ee6b" 360 | integrity sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ== 361 | 362 | body-parser@1.19.0, body-parser@^1.16.0: 363 | version "1.19.0" 364 | resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" 365 | integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== 366 | dependencies: 367 | bytes "3.1.0" 368 | content-type "~1.0.4" 369 | debug "2.6.9" 370 | depd "~1.1.2" 371 | http-errors "1.7.2" 372 | iconv-lite "0.4.24" 373 | on-finished "~2.3.0" 374 | qs "6.7.0" 375 | raw-body "2.4.0" 376 | type-is "~1.6.17" 377 | 378 | brorand@^1.0.1: 379 | version "1.1.0" 380 | resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" 381 | integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= 382 | 383 | browserify-aes@^1.0.0, browserify-aes@^1.0.4, browserify-aes@^1.2.0: 384 | version "1.2.0" 385 | resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" 386 | integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== 387 | dependencies: 388 | buffer-xor "^1.0.3" 389 | cipher-base "^1.0.0" 390 | create-hash "^1.1.0" 391 | evp_bytestokey "^1.0.3" 392 | inherits "^2.0.1" 393 | safe-buffer "^5.0.1" 394 | 395 | browserify-cipher@^1.0.0: 396 | version "1.0.1" 397 | resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" 398 | integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== 399 | dependencies: 400 | browserify-aes "^1.0.4" 401 | browserify-des "^1.0.0" 402 | evp_bytestokey "^1.0.0" 403 | 404 | browserify-des@^1.0.0: 405 | version "1.0.2" 406 | resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" 407 | integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== 408 | dependencies: 409 | cipher-base "^1.0.1" 410 | des.js "^1.0.0" 411 | inherits "^2.0.1" 412 | safe-buffer "^5.1.2" 413 | 414 | browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: 415 | version "4.1.0" 416 | resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" 417 | integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== 418 | dependencies: 419 | bn.js "^5.0.0" 420 | randombytes "^2.0.1" 421 | 422 | browserify-sign@^4.0.0: 423 | version "4.2.1" 424 | resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" 425 | integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== 426 | dependencies: 427 | bn.js "^5.1.1" 428 | browserify-rsa "^4.0.1" 429 | create-hash "^1.2.0" 430 | create-hmac "^1.1.7" 431 | elliptic "^6.5.3" 432 | inherits "^2.0.4" 433 | parse-asn1 "^5.1.5" 434 | readable-stream "^3.6.0" 435 | safe-buffer "^5.2.0" 436 | 437 | bs58@^4.0.0: 438 | version "4.0.1" 439 | resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" 440 | integrity sha1-vhYedsNU9veIrkBx9j806MTwpCo= 441 | dependencies: 442 | base-x "^3.0.2" 443 | 444 | bs58check@^2.1.2: 445 | version "2.1.2" 446 | resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc" 447 | integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA== 448 | dependencies: 449 | bs58 "^4.0.0" 450 | create-hash "^1.1.0" 451 | safe-buffer "^5.1.2" 452 | 453 | buffer-to-arraybuffer@^0.0.5: 454 | version "0.0.5" 455 | resolved "https://registry.yarnpkg.com/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz#6064a40fa76eb43c723aba9ef8f6e1216d10511a" 456 | integrity sha1-YGSkD6dutDxyOrqe+PbhIW0QURo= 457 | 458 | buffer-xor@^1.0.3: 459 | version "1.0.3" 460 | resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" 461 | integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= 462 | 463 | buffer@^5.0.5, buffer@^5.5.0, buffer@^5.6.0: 464 | version "5.7.1" 465 | resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" 466 | integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== 467 | dependencies: 468 | base64-js "^1.3.1" 469 | ieee754 "^1.1.13" 470 | 471 | bufferutil@^4.0.1: 472 | version "4.0.2" 473 | resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.2.tgz#79f68631910f6b993d870fc77dc0a2894eb96cd5" 474 | integrity sha512-AtnG3W6M8B2n4xDQ5R+70EXvOpnXsFYg/AK2yTZd+HQ/oxAdz+GI+DvjmhBw3L0ole+LJ0ngqY4JMbDzkfNzhA== 475 | dependencies: 476 | node-gyp-build "^4.2.0" 477 | 478 | bytes@3.1.0: 479 | version "3.1.0" 480 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" 481 | integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== 482 | 483 | cacheable-request@^6.0.0: 484 | version "6.1.0" 485 | resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" 486 | integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== 487 | dependencies: 488 | clone-response "^1.0.2" 489 | get-stream "^5.1.0" 490 | http-cache-semantics "^4.0.0" 491 | keyv "^3.0.0" 492 | lowercase-keys "^2.0.0" 493 | normalize-url "^4.1.0" 494 | responselike "^1.0.2" 495 | 496 | caseless@~0.12.0: 497 | version "0.12.0" 498 | resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" 499 | integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= 500 | 501 | chownr@^1.1.1: 502 | version "1.1.4" 503 | resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" 504 | integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== 505 | 506 | cids@^0.7.1: 507 | version "0.7.5" 508 | resolved "https://registry.yarnpkg.com/cids/-/cids-0.7.5.tgz#60a08138a99bfb69b6be4ceb63bfef7a396b28b2" 509 | integrity sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA== 510 | dependencies: 511 | buffer "^5.5.0" 512 | class-is "^1.1.0" 513 | multibase "~0.6.0" 514 | multicodec "^1.0.0" 515 | multihashes "~0.4.15" 516 | 517 | cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: 518 | version "1.0.4" 519 | resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" 520 | integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== 521 | dependencies: 522 | inherits "^2.0.1" 523 | safe-buffer "^5.0.1" 524 | 525 | class-is@^1.1.0: 526 | version "1.1.0" 527 | resolved "https://registry.yarnpkg.com/class-is/-/class-is-1.1.0.tgz#9d3c0fba0440d211d843cec3dedfa48055005825" 528 | integrity sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw== 529 | 530 | clone-response@^1.0.2: 531 | version "1.0.2" 532 | resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" 533 | integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= 534 | dependencies: 535 | mimic-response "^1.0.0" 536 | 537 | combined-stream@^1.0.6, combined-stream@~1.0.6: 538 | version "1.0.8" 539 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" 540 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== 541 | dependencies: 542 | delayed-stream "~1.0.0" 543 | 544 | content-disposition@0.5.3: 545 | version "0.5.3" 546 | resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" 547 | integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== 548 | dependencies: 549 | safe-buffer "5.1.2" 550 | 551 | content-hash@^2.5.2: 552 | version "2.5.2" 553 | resolved "https://registry.yarnpkg.com/content-hash/-/content-hash-2.5.2.tgz#bbc2655e7c21f14fd3bfc7b7d4bfe6e454c9e211" 554 | integrity sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw== 555 | dependencies: 556 | cids "^0.7.1" 557 | multicodec "^0.5.5" 558 | multihashes "^0.4.15" 559 | 560 | content-type@~1.0.4: 561 | version "1.0.4" 562 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" 563 | integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== 564 | 565 | cookie-signature@1.0.6: 566 | version "1.0.6" 567 | resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" 568 | integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= 569 | 570 | cookie@0.4.0: 571 | version "0.4.0" 572 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" 573 | integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== 574 | 575 | cookiejar@^2.1.1: 576 | version "2.1.2" 577 | resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.2.tgz#dd8a235530752f988f9a0844f3fc589e3111125c" 578 | integrity sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA== 579 | 580 | core-util-is@1.0.2, core-util-is@~1.0.0: 581 | version "1.0.2" 582 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 583 | integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= 584 | 585 | cors@^2.8.1: 586 | version "2.8.5" 587 | resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" 588 | integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== 589 | dependencies: 590 | object-assign "^4" 591 | vary "^1" 592 | 593 | create-ecdh@^4.0.0: 594 | version "4.0.4" 595 | resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" 596 | integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== 597 | dependencies: 598 | bn.js "^4.1.0" 599 | elliptic "^6.5.3" 600 | 601 | create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: 602 | version "1.2.0" 603 | resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" 604 | integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== 605 | dependencies: 606 | cipher-base "^1.0.1" 607 | inherits "^2.0.1" 608 | md5.js "^1.3.4" 609 | ripemd160 "^2.0.1" 610 | sha.js "^2.4.0" 611 | 612 | create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: 613 | version "1.1.7" 614 | resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" 615 | integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== 616 | dependencies: 617 | cipher-base "^1.0.3" 618 | create-hash "^1.1.0" 619 | inherits "^2.0.1" 620 | ripemd160 "^2.0.0" 621 | safe-buffer "^5.0.1" 622 | sha.js "^2.4.8" 623 | 624 | crypto-browserify@3.12.0: 625 | version "3.12.0" 626 | resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" 627 | integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== 628 | dependencies: 629 | browserify-cipher "^1.0.0" 630 | browserify-sign "^4.0.0" 631 | create-ecdh "^4.0.0" 632 | create-hash "^1.1.0" 633 | create-hmac "^1.1.0" 634 | diffie-hellman "^5.0.0" 635 | inherits "^2.0.1" 636 | pbkdf2 "^3.0.3" 637 | public-encrypt "^4.0.0" 638 | randombytes "^2.0.0" 639 | randomfill "^1.0.3" 640 | 641 | d@1, d@^1.0.1: 642 | version "1.0.1" 643 | resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" 644 | integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== 645 | dependencies: 646 | es5-ext "^0.10.50" 647 | type "^1.0.1" 648 | 649 | dashdash@^1.12.0: 650 | version "1.14.1" 651 | resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" 652 | integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= 653 | dependencies: 654 | assert-plus "^1.0.0" 655 | 656 | debug@2.6.9, debug@^2.2.0: 657 | version "2.6.9" 658 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 659 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== 660 | dependencies: 661 | ms "2.0.0" 662 | 663 | decode-uri-component@^0.2.0: 664 | version "0.2.0" 665 | resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" 666 | integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= 667 | 668 | decompress-response@^3.2.0, decompress-response@^3.3.0: 669 | version "3.3.0" 670 | resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" 671 | integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= 672 | dependencies: 673 | mimic-response "^1.0.0" 674 | 675 | defer-to-connect@^1.0.1: 676 | version "1.1.3" 677 | resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" 678 | integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== 679 | 680 | deferred-leveldown@~1.2.1: 681 | version "1.2.2" 682 | resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-1.2.2.tgz#3acd2e0b75d1669924bc0a4b642851131173e1eb" 683 | integrity sha512-uukrWD2bguRtXilKt6cAWKyoXrTSMo5m7crUdLfWQmu8kIm88w3QZoUL+6nhpfKVmhHANER6Re3sKoNoZ3IKMA== 684 | dependencies: 685 | abstract-leveldown "~2.6.0" 686 | 687 | delayed-stream@~1.0.0: 688 | version "1.0.0" 689 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 690 | integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= 691 | 692 | depd@~1.1.2: 693 | version "1.1.2" 694 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" 695 | integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= 696 | 697 | des.js@^1.0.0: 698 | version "1.0.1" 699 | resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" 700 | integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== 701 | dependencies: 702 | inherits "^2.0.1" 703 | minimalistic-assert "^1.0.0" 704 | 705 | destroy@~1.0.4: 706 | version "1.0.4" 707 | resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" 708 | integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= 709 | 710 | diffie-hellman@^5.0.0: 711 | version "5.0.3" 712 | resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" 713 | integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== 714 | dependencies: 715 | bn.js "^4.1.0" 716 | miller-rabin "^4.0.0" 717 | randombytes "^2.0.0" 718 | 719 | dom-walk@^0.1.0: 720 | version "0.1.2" 721 | resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" 722 | integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== 723 | 724 | duplexer3@^0.1.4: 725 | version "0.1.4" 726 | resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" 727 | integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= 728 | 729 | ecc-jsbn@~0.1.1: 730 | version "0.1.2" 731 | resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" 732 | integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= 733 | dependencies: 734 | jsbn "~0.1.0" 735 | safer-buffer "^2.1.0" 736 | 737 | ee-first@1.1.1: 738 | version "1.1.1" 739 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" 740 | integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= 741 | 742 | elliptic@6.5.3, elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.3: 743 | version "6.5.3" 744 | resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6" 745 | integrity sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw== 746 | dependencies: 747 | bn.js "^4.4.0" 748 | brorand "^1.0.1" 749 | hash.js "^1.0.0" 750 | hmac-drbg "^1.0.0" 751 | inherits "^2.0.1" 752 | minimalistic-assert "^1.0.0" 753 | minimalistic-crypto-utils "^1.0.0" 754 | 755 | encodeurl@~1.0.2: 756 | version "1.0.2" 757 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" 758 | integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= 759 | 760 | end-of-stream@^1.1.0: 761 | version "1.4.4" 762 | resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" 763 | integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== 764 | dependencies: 765 | once "^1.4.0" 766 | 767 | errno@~0.1.1: 768 | version "0.1.7" 769 | resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" 770 | integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== 771 | dependencies: 772 | prr "~1.0.1" 773 | 774 | es5-ext@^0.10.35, es5-ext@^0.10.50: 775 | version "0.10.53" 776 | resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1" 777 | integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q== 778 | dependencies: 779 | es6-iterator "~2.0.3" 780 | es6-symbol "~3.1.3" 781 | next-tick "~1.0.0" 782 | 783 | es6-iterator@~2.0.3: 784 | version "2.0.3" 785 | resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" 786 | integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= 787 | dependencies: 788 | d "1" 789 | es5-ext "^0.10.35" 790 | es6-symbol "^3.1.1" 791 | 792 | es6-symbol@^3.1.1, es6-symbol@~3.1.3: 793 | version "3.1.3" 794 | resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" 795 | integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== 796 | dependencies: 797 | d "^1.0.1" 798 | ext "^1.1.2" 799 | 800 | escape-html@~1.0.3: 801 | version "1.0.3" 802 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" 803 | integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= 804 | 805 | etag@~1.8.1: 806 | version "1.8.1" 807 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" 808 | integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= 809 | 810 | eth-ens-namehash@2.0.8: 811 | version "2.0.8" 812 | resolved "https://registry.yarnpkg.com/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz#229ac46eca86d52e0c991e7cb2aef83ff0f68bcf" 813 | integrity sha1-IprEbsqG1S4MmR58sq74P/D2i88= 814 | dependencies: 815 | idna-uts46-hx "^2.3.1" 816 | js-sha3 "^0.5.7" 817 | 818 | eth-lib@0.2.8: 819 | version "0.2.8" 820 | resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.2.8.tgz#b194058bef4b220ad12ea497431d6cb6aa0623c8" 821 | integrity sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw== 822 | dependencies: 823 | bn.js "^4.11.6" 824 | elliptic "^6.4.0" 825 | xhr-request-promise "^0.1.2" 826 | 827 | eth-lib@^0.1.26: 828 | version "0.1.29" 829 | resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.1.29.tgz#0c11f5060d42da9f931eab6199084734f4dbd1d9" 830 | integrity sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ== 831 | dependencies: 832 | bn.js "^4.11.6" 833 | elliptic "^6.4.0" 834 | nano-json-stream-parser "^0.1.2" 835 | servify "^0.1.12" 836 | ws "^3.0.0" 837 | xhr-request-promise "^0.1.2" 838 | 839 | ethereum-bloom-filters@^1.0.6: 840 | version "1.0.7" 841 | resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.7.tgz#b7b80735e385dbb7f944ce6b4533e24511306060" 842 | integrity sha512-cDcJJSJ9GMAcURiAWO3DxIEhTL/uWqlQnvgKpuYQzYPrt/izuGU+1ntQmHt0IRq6ADoSYHFnB+aCEFIldjhkMQ== 843 | dependencies: 844 | js-sha3 "^0.8.0" 845 | 846 | ethereum-cryptography@^0.1.3: 847 | version "0.1.3" 848 | resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz#8d6143cfc3d74bf79bbd8edecdf29e4ae20dd191" 849 | integrity sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ== 850 | dependencies: 851 | "@types/pbkdf2" "^3.0.0" 852 | "@types/secp256k1" "^4.0.1" 853 | blakejs "^1.1.0" 854 | browserify-aes "^1.2.0" 855 | bs58check "^2.1.2" 856 | create-hash "^1.2.0" 857 | create-hmac "^1.1.7" 858 | hash.js "^1.1.7" 859 | keccak "^3.0.0" 860 | pbkdf2 "^3.0.17" 861 | randombytes "^2.1.0" 862 | safe-buffer "^5.1.2" 863 | scrypt-js "^3.0.0" 864 | secp256k1 "^4.0.1" 865 | setimmediate "^1.0.5" 866 | 867 | ethereumjs-block@^2.2.2: 868 | version "2.2.2" 869 | resolved "https://registry.yarnpkg.com/ethereumjs-block/-/ethereumjs-block-2.2.2.tgz#c7654be7e22df489fda206139ecd63e2e9c04965" 870 | integrity sha512-2p49ifhek3h2zeg/+da6XpdFR3GlqY3BIEiqxGF8j9aSRIgkb7M1Ky+yULBKJOu8PAZxfhsYA+HxUk2aCQp3vg== 871 | dependencies: 872 | async "^2.0.1" 873 | ethereumjs-common "^1.5.0" 874 | ethereumjs-tx "^2.1.1" 875 | ethereumjs-util "^5.0.0" 876 | merkle-patricia-tree "^2.1.2" 877 | 878 | ethereumjs-common@^1.3.2, ethereumjs-common@^1.5.0: 879 | version "1.5.2" 880 | resolved "https://registry.yarnpkg.com/ethereumjs-common/-/ethereumjs-common-1.5.2.tgz#2065dbe9214e850f2e955a80e650cb6999066979" 881 | integrity sha512-hTfZjwGX52GS2jcVO6E2sx4YuFnf0Fhp5ylo4pEPhEffNln7vS59Hr5sLnp3/QCazFLluuBZ+FZ6J5HTp0EqCA== 882 | 883 | ethereumjs-tx@^2.1.1: 884 | version "2.1.2" 885 | resolved "https://registry.yarnpkg.com/ethereumjs-tx/-/ethereumjs-tx-2.1.2.tgz#5dfe7688bf177b45c9a23f86cf9104d47ea35fed" 886 | integrity sha512-zZEK1onCeiORb0wyCXUvg94Ve5It/K6GD1K+26KfFKodiBiS6d9lfCXlUKGBBdQ+bv7Day+JK0tj1K+BeNFRAw== 887 | dependencies: 888 | ethereumjs-common "^1.5.0" 889 | ethereumjs-util "^6.0.0" 890 | 891 | ethereumjs-util@^5.0.0: 892 | version "5.2.1" 893 | resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz#a833f0e5fca7e5b361384dc76301a721f537bf65" 894 | integrity sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ== 895 | dependencies: 896 | bn.js "^4.11.0" 897 | create-hash "^1.1.2" 898 | elliptic "^6.5.2" 899 | ethereum-cryptography "^0.1.3" 900 | ethjs-util "^0.1.3" 901 | rlp "^2.0.0" 902 | safe-buffer "^5.1.1" 903 | 904 | ethereumjs-util@^6.0.0: 905 | version "6.2.1" 906 | resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz#fcb4e4dd5ceacb9d2305426ab1a5cd93e3163b69" 907 | integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw== 908 | dependencies: 909 | "@types/bn.js" "^4.11.3" 910 | bn.js "^4.11.0" 911 | create-hash "^1.1.2" 912 | elliptic "^6.5.2" 913 | ethereum-cryptography "^0.1.3" 914 | ethjs-util "0.1.6" 915 | rlp "^2.2.3" 916 | 917 | ethjs-unit@0.1.6: 918 | version "0.1.6" 919 | resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" 920 | integrity sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk= 921 | dependencies: 922 | bn.js "4.11.6" 923 | number-to-bn "1.7.0" 924 | 925 | ethjs-util@0.1.6, ethjs-util@^0.1.3: 926 | version "0.1.6" 927 | resolved "https://registry.yarnpkg.com/ethjs-util/-/ethjs-util-0.1.6.tgz#f308b62f185f9fe6237132fb2a9818866a5cd536" 928 | integrity sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w== 929 | dependencies: 930 | is-hex-prefixed "1.0.0" 931 | strip-hex-prefix "1.0.0" 932 | 933 | eventemitter3@4.0.4: 934 | version "4.0.4" 935 | resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" 936 | integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== 937 | 938 | evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: 939 | version "1.0.3" 940 | resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" 941 | integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== 942 | dependencies: 943 | md5.js "^1.3.4" 944 | safe-buffer "^5.1.1" 945 | 946 | express@^4.14.0: 947 | version "4.17.1" 948 | resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" 949 | integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== 950 | dependencies: 951 | accepts "~1.3.7" 952 | array-flatten "1.1.1" 953 | body-parser "1.19.0" 954 | content-disposition "0.5.3" 955 | content-type "~1.0.4" 956 | cookie "0.4.0" 957 | cookie-signature "1.0.6" 958 | debug "2.6.9" 959 | depd "~1.1.2" 960 | encodeurl "~1.0.2" 961 | escape-html "~1.0.3" 962 | etag "~1.8.1" 963 | finalhandler "~1.1.2" 964 | fresh "0.5.2" 965 | merge-descriptors "1.0.1" 966 | methods "~1.1.2" 967 | on-finished "~2.3.0" 968 | parseurl "~1.3.3" 969 | path-to-regexp "0.1.7" 970 | proxy-addr "~2.0.5" 971 | qs "6.7.0" 972 | range-parser "~1.2.1" 973 | safe-buffer "5.1.2" 974 | send "0.17.1" 975 | serve-static "1.14.1" 976 | setprototypeof "1.1.1" 977 | statuses "~1.5.0" 978 | type-is "~1.6.18" 979 | utils-merge "1.0.1" 980 | vary "~1.1.2" 981 | 982 | ext@^1.1.2: 983 | version "1.4.0" 984 | resolved "https://registry.yarnpkg.com/ext/-/ext-1.4.0.tgz#89ae7a07158f79d35517882904324077e4379244" 985 | integrity sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A== 986 | dependencies: 987 | type "^2.0.0" 988 | 989 | extend@~3.0.2: 990 | version "3.0.2" 991 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" 992 | integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== 993 | 994 | extsprintf@1.3.0: 995 | version "1.3.0" 996 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" 997 | integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= 998 | 999 | extsprintf@^1.2.0: 1000 | version "1.4.0" 1001 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" 1002 | integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= 1003 | 1004 | fast-deep-equal@^3.1.1: 1005 | version "3.1.3" 1006 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" 1007 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 1008 | 1009 | fast-json-stable-stringify@^2.0.0: 1010 | version "2.1.0" 1011 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 1012 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 1013 | 1014 | finalhandler@~1.1.2: 1015 | version "1.1.2" 1016 | resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" 1017 | integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== 1018 | dependencies: 1019 | debug "2.6.9" 1020 | encodeurl "~1.0.2" 1021 | escape-html "~1.0.3" 1022 | on-finished "~2.3.0" 1023 | parseurl "~1.3.3" 1024 | statuses "~1.5.0" 1025 | unpipe "~1.0.0" 1026 | 1027 | forever-agent@~0.6.1: 1028 | version "0.6.1" 1029 | resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" 1030 | integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= 1031 | 1032 | form-data@~2.3.2: 1033 | version "2.3.3" 1034 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" 1035 | integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== 1036 | dependencies: 1037 | asynckit "^0.4.0" 1038 | combined-stream "^1.0.6" 1039 | mime-types "^2.1.12" 1040 | 1041 | forwarded@~0.1.2: 1042 | version "0.1.2" 1043 | resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" 1044 | integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= 1045 | 1046 | fresh@0.5.2: 1047 | version "0.5.2" 1048 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" 1049 | integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= 1050 | 1051 | fs-extra@^4.0.2: 1052 | version "4.0.3" 1053 | resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" 1054 | integrity sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg== 1055 | dependencies: 1056 | graceful-fs "^4.1.2" 1057 | jsonfile "^4.0.0" 1058 | universalify "^0.1.0" 1059 | 1060 | fs-minipass@^1.2.5: 1061 | version "1.2.7" 1062 | resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" 1063 | integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== 1064 | dependencies: 1065 | minipass "^2.6.0" 1066 | 1067 | functional-red-black-tree@^1.0.1: 1068 | version "1.0.1" 1069 | resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" 1070 | integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= 1071 | 1072 | get-stream@^3.0.0: 1073 | version "3.0.0" 1074 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" 1075 | integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= 1076 | 1077 | get-stream@^4.1.0: 1078 | version "4.1.0" 1079 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" 1080 | integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== 1081 | dependencies: 1082 | pump "^3.0.0" 1083 | 1084 | get-stream@^5.1.0: 1085 | version "5.2.0" 1086 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" 1087 | integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== 1088 | dependencies: 1089 | pump "^3.0.0" 1090 | 1091 | getpass@^0.1.1: 1092 | version "0.1.7" 1093 | resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" 1094 | integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= 1095 | dependencies: 1096 | assert-plus "^1.0.0" 1097 | 1098 | global@~4.4.0: 1099 | version "4.4.0" 1100 | resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" 1101 | integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== 1102 | dependencies: 1103 | min-document "^2.19.0" 1104 | process "^0.11.10" 1105 | 1106 | got@9.6.0: 1107 | version "9.6.0" 1108 | resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" 1109 | integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== 1110 | dependencies: 1111 | "@sindresorhus/is" "^0.14.0" 1112 | "@szmarczak/http-timer" "^1.1.2" 1113 | cacheable-request "^6.0.0" 1114 | decompress-response "^3.3.0" 1115 | duplexer3 "^0.1.4" 1116 | get-stream "^4.1.0" 1117 | lowercase-keys "^1.0.1" 1118 | mimic-response "^1.0.1" 1119 | p-cancelable "^1.0.0" 1120 | to-readable-stream "^1.0.0" 1121 | url-parse-lax "^3.0.0" 1122 | 1123 | got@^7.1.0: 1124 | version "7.1.0" 1125 | resolved "https://registry.yarnpkg.com/got/-/got-7.1.0.tgz#05450fd84094e6bbea56f451a43a9c289166385a" 1126 | integrity sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw== 1127 | dependencies: 1128 | decompress-response "^3.2.0" 1129 | duplexer3 "^0.1.4" 1130 | get-stream "^3.0.0" 1131 | is-plain-obj "^1.1.0" 1132 | is-retry-allowed "^1.0.0" 1133 | is-stream "^1.0.0" 1134 | isurl "^1.0.0-alpha5" 1135 | lowercase-keys "^1.0.0" 1136 | p-cancelable "^0.3.0" 1137 | p-timeout "^1.1.1" 1138 | safe-buffer "^5.0.1" 1139 | timed-out "^4.0.0" 1140 | url-parse-lax "^1.0.0" 1141 | url-to-options "^1.0.1" 1142 | 1143 | graceful-fs@^4.1.2, graceful-fs@^4.1.6: 1144 | version "4.2.4" 1145 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" 1146 | integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== 1147 | 1148 | har-schema@^2.0.0: 1149 | version "2.0.0" 1150 | resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" 1151 | integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= 1152 | 1153 | har-validator@~5.1.3: 1154 | version "5.1.5" 1155 | resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" 1156 | integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== 1157 | dependencies: 1158 | ajv "^6.12.3" 1159 | har-schema "^2.0.0" 1160 | 1161 | has-symbol-support-x@^1.4.1: 1162 | version "1.4.2" 1163 | resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455" 1164 | integrity sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw== 1165 | 1166 | has-to-string-tag-x@^1.2.0: 1167 | version "1.4.1" 1168 | resolved "https://registry.yarnpkg.com/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d" 1169 | integrity sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw== 1170 | dependencies: 1171 | has-symbol-support-x "^1.4.1" 1172 | 1173 | hash-base@^3.0.0: 1174 | version "3.1.0" 1175 | resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" 1176 | integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== 1177 | dependencies: 1178 | inherits "^2.0.4" 1179 | readable-stream "^3.6.0" 1180 | safe-buffer "^5.2.0" 1181 | 1182 | hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: 1183 | version "1.1.7" 1184 | resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" 1185 | integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== 1186 | dependencies: 1187 | inherits "^2.0.3" 1188 | minimalistic-assert "^1.0.1" 1189 | 1190 | hmac-drbg@^1.0.0: 1191 | version "1.0.1" 1192 | resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" 1193 | integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= 1194 | dependencies: 1195 | hash.js "^1.0.3" 1196 | minimalistic-assert "^1.0.0" 1197 | minimalistic-crypto-utils "^1.0.1" 1198 | 1199 | http-cache-semantics@^4.0.0: 1200 | version "4.1.0" 1201 | resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" 1202 | integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== 1203 | 1204 | http-errors@1.7.2: 1205 | version "1.7.2" 1206 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" 1207 | integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== 1208 | dependencies: 1209 | depd "~1.1.2" 1210 | inherits "2.0.3" 1211 | setprototypeof "1.1.1" 1212 | statuses ">= 1.5.0 < 2" 1213 | toidentifier "1.0.0" 1214 | 1215 | http-errors@~1.7.2: 1216 | version "1.7.3" 1217 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" 1218 | integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== 1219 | dependencies: 1220 | depd "~1.1.2" 1221 | inherits "2.0.4" 1222 | setprototypeof "1.1.1" 1223 | statuses ">= 1.5.0 < 2" 1224 | toidentifier "1.0.0" 1225 | 1226 | http-https@^1.0.0: 1227 | version "1.0.0" 1228 | resolved "https://registry.yarnpkg.com/http-https/-/http-https-1.0.0.tgz#2f908dd5f1db4068c058cd6e6d4ce392c913389b" 1229 | integrity sha1-L5CN1fHbQGjAWM1ubUzjkskTOJs= 1230 | 1231 | http-signature@~1.2.0: 1232 | version "1.2.0" 1233 | resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" 1234 | integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= 1235 | dependencies: 1236 | assert-plus "^1.0.0" 1237 | jsprim "^1.2.2" 1238 | sshpk "^1.7.0" 1239 | 1240 | iconv-lite@0.4.24: 1241 | version "0.4.24" 1242 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 1243 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== 1244 | dependencies: 1245 | safer-buffer ">= 2.1.2 < 3" 1246 | 1247 | idna-uts46-hx@^2.3.1: 1248 | version "2.3.1" 1249 | resolved "https://registry.yarnpkg.com/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz#a1dc5c4df37eee522bf66d969cc980e00e8711f9" 1250 | integrity sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA== 1251 | dependencies: 1252 | punycode "2.1.0" 1253 | 1254 | ieee754@^1.1.13: 1255 | version "1.2.1" 1256 | resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" 1257 | integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== 1258 | 1259 | immediate@^3.2.3: 1260 | version "3.3.0" 1261 | resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.3.0.tgz#1aef225517836bcdf7f2a2de2600c79ff0269266" 1262 | integrity sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q== 1263 | 1264 | inherits@2.0.3: 1265 | version "2.0.3" 1266 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 1267 | integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= 1268 | 1269 | inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: 1270 | version "2.0.4" 1271 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 1272 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 1273 | 1274 | ipaddr.js@1.9.1: 1275 | version "1.9.1" 1276 | resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" 1277 | integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== 1278 | 1279 | is-function@^1.0.1: 1280 | version "1.0.2" 1281 | resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.2.tgz#4f097f30abf6efadac9833b17ca5dc03f8144e08" 1282 | integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ== 1283 | 1284 | is-hex-prefixed@1.0.0: 1285 | version "1.0.0" 1286 | resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" 1287 | integrity sha1-fY035q135dEnFIkTxXPggtd39VQ= 1288 | 1289 | is-object@^1.0.1: 1290 | version "1.0.2" 1291 | resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.2.tgz#a56552e1c665c9e950b4a025461da87e72f86fcf" 1292 | integrity sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA== 1293 | 1294 | is-plain-obj@^1.1.0: 1295 | version "1.1.0" 1296 | resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" 1297 | integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= 1298 | 1299 | is-retry-allowed@^1.0.0: 1300 | version "1.2.0" 1301 | resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" 1302 | integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== 1303 | 1304 | is-stream@^1.0.0: 1305 | version "1.1.0" 1306 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" 1307 | integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= 1308 | 1309 | is-typedarray@^1.0.0, is-typedarray@~1.0.0: 1310 | version "1.0.0" 1311 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" 1312 | integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= 1313 | 1314 | isarray@0.0.1: 1315 | version "0.0.1" 1316 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" 1317 | integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= 1318 | 1319 | isarray@~1.0.0: 1320 | version "1.0.0" 1321 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 1322 | integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= 1323 | 1324 | isstream@~0.1.2: 1325 | version "0.1.2" 1326 | resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" 1327 | integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= 1328 | 1329 | isurl@^1.0.0-alpha5: 1330 | version "1.0.0" 1331 | resolved "https://registry.yarnpkg.com/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67" 1332 | integrity sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w== 1333 | dependencies: 1334 | has-to-string-tag-x "^1.2.0" 1335 | is-object "^1.0.1" 1336 | 1337 | js-sha3@0.5.7, js-sha3@^0.5.7: 1338 | version "0.5.7" 1339 | resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.5.7.tgz#0d4ffd8002d5333aabaf4a23eed2f6374c9f28e7" 1340 | integrity sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc= 1341 | 1342 | js-sha3@^0.8.0: 1343 | version "0.8.0" 1344 | resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" 1345 | integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== 1346 | 1347 | jsbn@~0.1.0: 1348 | version "0.1.1" 1349 | resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" 1350 | integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= 1351 | 1352 | json-buffer@3.0.0: 1353 | version "3.0.0" 1354 | resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" 1355 | integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= 1356 | 1357 | json-schema-traverse@^0.4.1: 1358 | version "0.4.1" 1359 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 1360 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 1361 | 1362 | json-schema@0.2.3: 1363 | version "0.2.3" 1364 | resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" 1365 | integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= 1366 | 1367 | json-stringify-safe@~5.0.1: 1368 | version "5.0.1" 1369 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" 1370 | integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= 1371 | 1372 | jsonfile@^4.0.0: 1373 | version "4.0.0" 1374 | resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" 1375 | integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= 1376 | optionalDependencies: 1377 | graceful-fs "^4.1.6" 1378 | 1379 | jsprim@^1.2.2: 1380 | version "1.4.1" 1381 | resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" 1382 | integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= 1383 | dependencies: 1384 | assert-plus "1.0.0" 1385 | extsprintf "1.3.0" 1386 | json-schema "0.2.3" 1387 | verror "1.10.0" 1388 | 1389 | keccak@^3.0.0: 1390 | version "3.0.1" 1391 | resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.1.tgz#ae30a0e94dbe43414f741375cff6d64c8bea0bff" 1392 | integrity sha512-epq90L9jlFWCW7+pQa6JOnKn2Xgl2mtI664seYR6MHskvI9agt7AnDqmAlp9TqU4/caMYbA08Hi5DMZAl5zdkA== 1393 | dependencies: 1394 | node-addon-api "^2.0.0" 1395 | node-gyp-build "^4.2.0" 1396 | 1397 | keyv@^3.0.0: 1398 | version "3.1.0" 1399 | resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" 1400 | integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== 1401 | dependencies: 1402 | json-buffer "3.0.0" 1403 | 1404 | level-codec@~7.0.0: 1405 | version "7.0.1" 1406 | resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-7.0.1.tgz#341f22f907ce0f16763f24bddd681e395a0fb8a7" 1407 | integrity sha512-Ua/R9B9r3RasXdRmOtd+t9TCOEIIlts+TN/7XTT2unhDaL6sJn83S3rUyljbr6lVtw49N3/yA0HHjpV6Kzb2aQ== 1408 | 1409 | level-errors@^1.0.3: 1410 | version "1.1.2" 1411 | resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-1.1.2.tgz#4399c2f3d3ab87d0625f7e3676e2d807deff404d" 1412 | integrity sha512-Sw/IJwWbPKF5Ai4Wz60B52yj0zYeqzObLh8k1Tk88jVmD51cJSKWSYpRyhVIvFzZdvsPqlH5wfhp/yxdsaQH4w== 1413 | dependencies: 1414 | errno "~0.1.1" 1415 | 1416 | level-errors@~1.0.3: 1417 | version "1.0.5" 1418 | resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-1.0.5.tgz#83dbfb12f0b8a2516bdc9a31c4876038e227b859" 1419 | integrity sha512-/cLUpQduF6bNrWuAC4pwtUKA5t669pCsCi2XbmojG2tFeOr9j6ShtdDCtFFQO1DRt+EVZhx9gPzP9G2bUaG4ig== 1420 | dependencies: 1421 | errno "~0.1.1" 1422 | 1423 | level-iterator-stream@~1.3.0: 1424 | version "1.3.1" 1425 | resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-1.3.1.tgz#e43b78b1a8143e6fa97a4f485eb8ea530352f2ed" 1426 | integrity sha1-5Dt4sagUPm+pek9IXrjqUwNS8u0= 1427 | dependencies: 1428 | inherits "^2.0.1" 1429 | level-errors "^1.0.3" 1430 | readable-stream "^1.0.33" 1431 | xtend "^4.0.0" 1432 | 1433 | level-ws@0.0.0: 1434 | version "0.0.0" 1435 | resolved "https://registry.yarnpkg.com/level-ws/-/level-ws-0.0.0.tgz#372e512177924a00424b0b43aef2bb42496d228b" 1436 | integrity sha1-Ny5RIXeSSgBCSwtDrvK7QkltIos= 1437 | dependencies: 1438 | readable-stream "~1.0.15" 1439 | xtend "~2.1.1" 1440 | 1441 | levelup@^1.2.1: 1442 | version "1.3.9" 1443 | resolved "https://registry.yarnpkg.com/levelup/-/levelup-1.3.9.tgz#2dbcae845b2bb2b6bea84df334c475533bbd82ab" 1444 | integrity sha512-VVGHfKIlmw8w1XqpGOAGwq6sZm2WwWLmlDcULkKWQXEA5EopA8OBNJ2Ck2v6bdk8HeEZSbCSEgzXadyQFm76sQ== 1445 | dependencies: 1446 | deferred-leveldown "~1.2.1" 1447 | level-codec "~7.0.0" 1448 | level-errors "~1.0.3" 1449 | level-iterator-stream "~1.3.0" 1450 | prr "~1.0.1" 1451 | semver "~5.4.1" 1452 | xtend "~4.0.0" 1453 | 1454 | lodash@^4.17.14: 1455 | version "4.17.20" 1456 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" 1457 | integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== 1458 | 1459 | lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: 1460 | version "1.0.1" 1461 | resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" 1462 | integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== 1463 | 1464 | lowercase-keys@^2.0.0: 1465 | version "2.0.0" 1466 | resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" 1467 | integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== 1468 | 1469 | ltgt@~2.2.0: 1470 | version "2.2.1" 1471 | resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.2.1.tgz#f35ca91c493f7b73da0e07495304f17b31f87ee5" 1472 | integrity sha1-81ypHEk/e3PaDgdJUwTxezH4fuU= 1473 | 1474 | md5.js@^1.3.4: 1475 | version "1.3.5" 1476 | resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" 1477 | integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== 1478 | dependencies: 1479 | hash-base "^3.0.0" 1480 | inherits "^2.0.1" 1481 | safe-buffer "^5.1.2" 1482 | 1483 | media-typer@0.3.0: 1484 | version "0.3.0" 1485 | resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" 1486 | integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= 1487 | 1488 | memdown@^1.0.0: 1489 | version "1.4.1" 1490 | resolved "https://registry.yarnpkg.com/memdown/-/memdown-1.4.1.tgz#b4e4e192174664ffbae41361aa500f3119efe215" 1491 | integrity sha1-tOThkhdGZP+65BNhqlAPMRnv4hU= 1492 | dependencies: 1493 | abstract-leveldown "~2.7.1" 1494 | functional-red-black-tree "^1.0.1" 1495 | immediate "^3.2.3" 1496 | inherits "~2.0.1" 1497 | ltgt "~2.2.0" 1498 | safe-buffer "~5.1.1" 1499 | 1500 | merge-descriptors@1.0.1: 1501 | version "1.0.1" 1502 | resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" 1503 | integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= 1504 | 1505 | merkle-patricia-tree@2.3.2, merkle-patricia-tree@^2.1.2: 1506 | version "2.3.2" 1507 | resolved "https://registry.yarnpkg.com/merkle-patricia-tree/-/merkle-patricia-tree-2.3.2.tgz#982ca1b5a0fde00eed2f6aeed1f9152860b8208a" 1508 | integrity sha512-81PW5m8oz/pz3GvsAwbauj7Y00rqm81Tzad77tHBwU7pIAtN+TJnMSOJhxBKflSVYhptMMb9RskhqHqrSm1V+g== 1509 | dependencies: 1510 | async "^1.4.2" 1511 | ethereumjs-util "^5.0.0" 1512 | level-ws "0.0.0" 1513 | levelup "^1.2.1" 1514 | memdown "^1.0.0" 1515 | readable-stream "^2.0.0" 1516 | rlp "^2.0.0" 1517 | semaphore ">=1.0.1" 1518 | 1519 | methods@~1.1.2: 1520 | version "1.1.2" 1521 | resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" 1522 | integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= 1523 | 1524 | miller-rabin@^4.0.0: 1525 | version "4.0.1" 1526 | resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" 1527 | integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== 1528 | dependencies: 1529 | bn.js "^4.0.0" 1530 | brorand "^1.0.1" 1531 | 1532 | mime-db@1.44.0: 1533 | version "1.44.0" 1534 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" 1535 | integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== 1536 | 1537 | mime-types@^2.1.12, mime-types@^2.1.16, mime-types@~2.1.19, mime-types@~2.1.24: 1538 | version "2.1.27" 1539 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" 1540 | integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== 1541 | dependencies: 1542 | mime-db "1.44.0" 1543 | 1544 | mime@1.6.0: 1545 | version "1.6.0" 1546 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" 1547 | integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== 1548 | 1549 | mimic-response@^1.0.0, mimic-response@^1.0.1: 1550 | version "1.0.1" 1551 | resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" 1552 | integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== 1553 | 1554 | min-document@^2.19.0: 1555 | version "2.19.0" 1556 | resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" 1557 | integrity sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU= 1558 | dependencies: 1559 | dom-walk "^0.1.0" 1560 | 1561 | minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: 1562 | version "1.0.1" 1563 | resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" 1564 | integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== 1565 | 1566 | minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: 1567 | version "1.0.1" 1568 | resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" 1569 | integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= 1570 | 1571 | minimist@^1.2.5: 1572 | version "1.2.5" 1573 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" 1574 | integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== 1575 | 1576 | minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: 1577 | version "2.9.0" 1578 | resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" 1579 | integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== 1580 | dependencies: 1581 | safe-buffer "^5.1.2" 1582 | yallist "^3.0.0" 1583 | 1584 | minizlib@^1.2.1: 1585 | version "1.3.3" 1586 | resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" 1587 | integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== 1588 | dependencies: 1589 | minipass "^2.9.0" 1590 | 1591 | mkdirp-promise@^5.0.1: 1592 | version "5.0.1" 1593 | resolved "https://registry.yarnpkg.com/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz#e9b8f68e552c68a9c1713b84883f7a1dd039b8a1" 1594 | integrity sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE= 1595 | dependencies: 1596 | mkdirp "*" 1597 | 1598 | mkdirp@*: 1599 | version "1.0.4" 1600 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" 1601 | integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== 1602 | 1603 | mkdirp@^0.5.0: 1604 | version "0.5.5" 1605 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" 1606 | integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== 1607 | dependencies: 1608 | minimist "^1.2.5" 1609 | 1610 | mock-fs@^4.1.0: 1611 | version "4.13.0" 1612 | resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.13.0.tgz#31c02263673ec3789f90eb7b6963676aa407a598" 1613 | integrity sha512-DD0vOdofJdoaRNtnWcrXe6RQbpHkPPmtqGq14uRX0F8ZKJ5nv89CVTYl/BZdppDxBDaV0hl75htg3abpEWlPZA== 1614 | 1615 | ms@2.0.0: 1616 | version "2.0.0" 1617 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 1618 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= 1619 | 1620 | ms@2.1.1: 1621 | version "2.1.1" 1622 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" 1623 | integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== 1624 | 1625 | multibase@^0.7.0: 1626 | version "0.7.0" 1627 | resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.7.0.tgz#1adfc1c50abe05eefeb5091ac0c2728d6b84581b" 1628 | integrity sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg== 1629 | dependencies: 1630 | base-x "^3.0.8" 1631 | buffer "^5.5.0" 1632 | 1633 | multibase@~0.6.0: 1634 | version "0.6.1" 1635 | resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.6.1.tgz#b76df6298536cc17b9f6a6db53ec88f85f8cc12b" 1636 | integrity sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw== 1637 | dependencies: 1638 | base-x "^3.0.8" 1639 | buffer "^5.5.0" 1640 | 1641 | multicodec@^0.5.5: 1642 | version "0.5.7" 1643 | resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-0.5.7.tgz#1fb3f9dd866a10a55d226e194abba2dcc1ee9ffd" 1644 | integrity sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA== 1645 | dependencies: 1646 | varint "^5.0.0" 1647 | 1648 | multicodec@^1.0.0: 1649 | version "1.0.4" 1650 | resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-1.0.4.tgz#46ac064657c40380c28367c90304d8ed175a714f" 1651 | integrity sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg== 1652 | dependencies: 1653 | buffer "^5.6.0" 1654 | varint "^5.0.0" 1655 | 1656 | multihashes@^0.4.15, multihashes@~0.4.15: 1657 | version "0.4.21" 1658 | resolved "https://registry.yarnpkg.com/multihashes/-/multihashes-0.4.21.tgz#dc02d525579f334a7909ade8a122dabb58ccfcb5" 1659 | integrity sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw== 1660 | dependencies: 1661 | buffer "^5.5.0" 1662 | multibase "^0.7.0" 1663 | varint "^5.0.0" 1664 | 1665 | nano-json-stream-parser@^0.1.2: 1666 | version "0.1.2" 1667 | resolved "https://registry.yarnpkg.com/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz#0cc8f6d0e2b622b479c40d499c46d64b755c6f5f" 1668 | integrity sha1-DMj20OK2IrR5xA1JnEbWS3Vcb18= 1669 | 1670 | negotiator@0.6.2: 1671 | version "0.6.2" 1672 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" 1673 | integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== 1674 | 1675 | next-tick@~1.0.0: 1676 | version "1.0.0" 1677 | resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" 1678 | integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= 1679 | 1680 | node-addon-api@^2.0.0: 1681 | version "2.0.2" 1682 | resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" 1683 | integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== 1684 | 1685 | node-gyp-build@^4.2.0: 1686 | version "4.2.3" 1687 | resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.2.3.tgz#ce6277f853835f718829efb47db20f3e4d9c4739" 1688 | integrity sha512-MN6ZpzmfNCRM+3t57PTJHgHyw/h4OWnZ6mR8P5j/uZtqQr46RRuDE/P+g3n0YR/AiYXeWixZZzaip77gdICfRg== 1689 | 1690 | normalize-url@^4.1.0: 1691 | version "4.5.0" 1692 | resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" 1693 | integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== 1694 | 1695 | number-to-bn@1.7.0: 1696 | version "1.7.0" 1697 | resolved "https://registry.yarnpkg.com/number-to-bn/-/number-to-bn-1.7.0.tgz#bb3623592f7e5f9e0030b1977bd41a0c53fe1ea0" 1698 | integrity sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA= 1699 | dependencies: 1700 | bn.js "4.11.6" 1701 | strip-hex-prefix "1.0.0" 1702 | 1703 | oauth-sign@~0.9.0: 1704 | version "0.9.0" 1705 | resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" 1706 | integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== 1707 | 1708 | object-assign@^4, object-assign@^4.1.0, object-assign@^4.1.1: 1709 | version "4.1.1" 1710 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 1711 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= 1712 | 1713 | object-keys@~0.4.0: 1714 | version "0.4.0" 1715 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" 1716 | integrity sha1-KKaq50KN0sOpLz2V8hM13SBOAzY= 1717 | 1718 | oboe@2.1.5: 1719 | version "2.1.5" 1720 | resolved "https://registry.yarnpkg.com/oboe/-/oboe-2.1.5.tgz#5554284c543a2266d7a38f17e073821fbde393cd" 1721 | integrity sha1-VVQoTFQ6ImbXo48X4HOCH73jk80= 1722 | dependencies: 1723 | http-https "^1.0.0" 1724 | 1725 | on-finished@~2.3.0: 1726 | version "2.3.0" 1727 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" 1728 | integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= 1729 | dependencies: 1730 | ee-first "1.1.1" 1731 | 1732 | once@^1.3.1, once@^1.4.0: 1733 | version "1.4.0" 1734 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1735 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 1736 | dependencies: 1737 | wrappy "1" 1738 | 1739 | p-cancelable@^0.3.0: 1740 | version "0.3.0" 1741 | resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa" 1742 | integrity sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw== 1743 | 1744 | p-cancelable@^1.0.0: 1745 | version "1.1.0" 1746 | resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" 1747 | integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== 1748 | 1749 | p-finally@^1.0.0: 1750 | version "1.0.0" 1751 | resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" 1752 | integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= 1753 | 1754 | p-timeout@^1.1.1: 1755 | version "1.2.1" 1756 | resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-1.2.1.tgz#5eb3b353b7fce99f101a1038880bb054ebbea386" 1757 | integrity sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y= 1758 | dependencies: 1759 | p-finally "^1.0.0" 1760 | 1761 | parse-asn1@^5.0.0, parse-asn1@^5.1.5: 1762 | version "5.1.6" 1763 | resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" 1764 | integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== 1765 | dependencies: 1766 | asn1.js "^5.2.0" 1767 | browserify-aes "^1.0.0" 1768 | evp_bytestokey "^1.0.0" 1769 | pbkdf2 "^3.0.3" 1770 | safe-buffer "^5.1.1" 1771 | 1772 | parse-headers@^2.0.0: 1773 | version "2.0.3" 1774 | resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.3.tgz#5e8e7512383d140ba02f0c7aa9f49b4399c92515" 1775 | integrity sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA== 1776 | 1777 | parseurl@~1.3.3: 1778 | version "1.3.3" 1779 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" 1780 | integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== 1781 | 1782 | path-to-regexp@0.1.7: 1783 | version "0.1.7" 1784 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" 1785 | integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= 1786 | 1787 | pbkdf2@^3.0.17, pbkdf2@^3.0.3: 1788 | version "3.1.1" 1789 | resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.1.tgz#cb8724b0fada984596856d1a6ebafd3584654b94" 1790 | integrity sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg== 1791 | dependencies: 1792 | create-hash "^1.1.2" 1793 | create-hmac "^1.1.4" 1794 | ripemd160 "^2.0.1" 1795 | safe-buffer "^5.0.1" 1796 | sha.js "^2.4.8" 1797 | 1798 | performance-now@^2.1.0: 1799 | version "2.1.0" 1800 | resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" 1801 | integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= 1802 | 1803 | prepend-http@^1.0.1: 1804 | version "1.0.4" 1805 | resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" 1806 | integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= 1807 | 1808 | prepend-http@^2.0.0: 1809 | version "2.0.0" 1810 | resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" 1811 | integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= 1812 | 1813 | process-nextick-args@~2.0.0: 1814 | version "2.0.1" 1815 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" 1816 | integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== 1817 | 1818 | process@^0.11.10: 1819 | version "0.11.10" 1820 | resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" 1821 | integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= 1822 | 1823 | proxy-addr@~2.0.5: 1824 | version "2.0.6" 1825 | resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" 1826 | integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== 1827 | dependencies: 1828 | forwarded "~0.1.2" 1829 | ipaddr.js "1.9.1" 1830 | 1831 | prr@~1.0.1: 1832 | version "1.0.1" 1833 | resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" 1834 | integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= 1835 | 1836 | psl@^1.1.28: 1837 | version "1.8.0" 1838 | resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" 1839 | integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== 1840 | 1841 | public-encrypt@^4.0.0: 1842 | version "4.0.3" 1843 | resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" 1844 | integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== 1845 | dependencies: 1846 | bn.js "^4.1.0" 1847 | browserify-rsa "^4.0.0" 1848 | create-hash "^1.1.0" 1849 | parse-asn1 "^5.0.0" 1850 | randombytes "^2.0.1" 1851 | safe-buffer "^5.1.2" 1852 | 1853 | pump@^3.0.0: 1854 | version "3.0.0" 1855 | resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" 1856 | integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== 1857 | dependencies: 1858 | end-of-stream "^1.1.0" 1859 | once "^1.3.1" 1860 | 1861 | punycode@2.1.0: 1862 | version "2.1.0" 1863 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d" 1864 | integrity sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0= 1865 | 1866 | punycode@^2.1.0, punycode@^2.1.1: 1867 | version "2.1.1" 1868 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 1869 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 1870 | 1871 | qs@6.7.0: 1872 | version "6.7.0" 1873 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" 1874 | integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== 1875 | 1876 | qs@~6.5.2: 1877 | version "6.5.2" 1878 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" 1879 | integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== 1880 | 1881 | query-string@^5.0.1: 1882 | version "5.1.1" 1883 | resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb" 1884 | integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw== 1885 | dependencies: 1886 | decode-uri-component "^0.2.0" 1887 | object-assign "^4.1.0" 1888 | strict-uri-encode "^1.0.0" 1889 | 1890 | randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: 1891 | version "2.1.0" 1892 | resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" 1893 | integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== 1894 | dependencies: 1895 | safe-buffer "^5.1.0" 1896 | 1897 | randomfill@^1.0.3: 1898 | version "1.0.4" 1899 | resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" 1900 | integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== 1901 | dependencies: 1902 | randombytes "^2.0.5" 1903 | safe-buffer "^5.1.0" 1904 | 1905 | range-parser@~1.2.1: 1906 | version "1.2.1" 1907 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" 1908 | integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== 1909 | 1910 | raw-body@2.4.0: 1911 | version "2.4.0" 1912 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" 1913 | integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== 1914 | dependencies: 1915 | bytes "3.1.0" 1916 | http-errors "1.7.2" 1917 | iconv-lite "0.4.24" 1918 | unpipe "1.0.0" 1919 | 1920 | readable-stream@^1.0.33: 1921 | version "1.1.14" 1922 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" 1923 | integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk= 1924 | dependencies: 1925 | core-util-is "~1.0.0" 1926 | inherits "~2.0.1" 1927 | isarray "0.0.1" 1928 | string_decoder "~0.10.x" 1929 | 1930 | readable-stream@^2.0.0: 1931 | version "2.3.7" 1932 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" 1933 | integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== 1934 | dependencies: 1935 | core-util-is "~1.0.0" 1936 | inherits "~2.0.3" 1937 | isarray "~1.0.0" 1938 | process-nextick-args "~2.0.0" 1939 | safe-buffer "~5.1.1" 1940 | string_decoder "~1.1.1" 1941 | util-deprecate "~1.0.1" 1942 | 1943 | readable-stream@^3.6.0: 1944 | version "3.6.0" 1945 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" 1946 | integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== 1947 | dependencies: 1948 | inherits "^2.0.3" 1949 | string_decoder "^1.1.1" 1950 | util-deprecate "^1.0.1" 1951 | 1952 | readable-stream@~1.0.15: 1953 | version "1.0.34" 1954 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" 1955 | integrity sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw= 1956 | dependencies: 1957 | core-util-is "~1.0.0" 1958 | inherits "~2.0.1" 1959 | isarray "0.0.1" 1960 | string_decoder "~0.10.x" 1961 | 1962 | request@^2.79.0: 1963 | version "2.88.2" 1964 | resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" 1965 | integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== 1966 | dependencies: 1967 | aws-sign2 "~0.7.0" 1968 | aws4 "^1.8.0" 1969 | caseless "~0.12.0" 1970 | combined-stream "~1.0.6" 1971 | extend "~3.0.2" 1972 | forever-agent "~0.6.1" 1973 | form-data "~2.3.2" 1974 | har-validator "~5.1.3" 1975 | http-signature "~1.2.0" 1976 | is-typedarray "~1.0.0" 1977 | isstream "~0.1.2" 1978 | json-stringify-safe "~5.0.1" 1979 | mime-types "~2.1.19" 1980 | oauth-sign "~0.9.0" 1981 | performance-now "^2.1.0" 1982 | qs "~6.5.2" 1983 | safe-buffer "^5.1.2" 1984 | tough-cookie "~2.5.0" 1985 | tunnel-agent "^0.6.0" 1986 | uuid "^3.3.2" 1987 | 1988 | responselike@^1.0.2: 1989 | version "1.0.2" 1990 | resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" 1991 | integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= 1992 | dependencies: 1993 | lowercase-keys "^1.0.0" 1994 | 1995 | ripemd160@^2.0.0, ripemd160@^2.0.1: 1996 | version "2.0.2" 1997 | resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" 1998 | integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== 1999 | dependencies: 2000 | hash-base "^3.0.0" 2001 | inherits "^2.0.1" 2002 | 2003 | rlp@^2.0.0, rlp@^2.2.3, rlp@^2.2.6: 2004 | version "2.2.6" 2005 | resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.6.tgz#c80ba6266ac7a483ef1e69e8e2f056656de2fb2c" 2006 | integrity sha512-HAfAmL6SDYNWPUOJNrM500x4Thn4PZsEy5pijPh40U9WfNk0z15hUYzO9xVIMAdIHdFtD8CBDHd75Td1g36Mjg== 2007 | dependencies: 2008 | bn.js "^4.11.1" 2009 | 2010 | safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: 2011 | version "5.1.2" 2012 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 2013 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 2014 | 2015 | safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: 2016 | version "5.2.1" 2017 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 2018 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 2019 | 2020 | "safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: 2021 | version "2.1.2" 2022 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 2023 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 2024 | 2025 | scrypt-js@^3.0.0, scrypt-js@^3.0.1: 2026 | version "3.0.1" 2027 | resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" 2028 | integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== 2029 | 2030 | secp256k1@^4.0.1: 2031 | version "4.0.2" 2032 | resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.2.tgz#15dd57d0f0b9fdb54ac1fa1694f40e5e9a54f4a1" 2033 | integrity sha512-UDar4sKvWAksIlfX3xIaQReADn+WFnHvbVujpcbr+9Sf/69odMwy2MUsz5CKLQgX9nsIyrjuxL2imVyoNHa3fg== 2034 | dependencies: 2035 | elliptic "^6.5.2" 2036 | node-addon-api "^2.0.0" 2037 | node-gyp-build "^4.2.0" 2038 | 2039 | semaphore@>=1.0.1: 2040 | version "1.1.0" 2041 | resolved "https://registry.yarnpkg.com/semaphore/-/semaphore-1.1.0.tgz#aaad8b86b20fe8e9b32b16dc2ee682a8cd26a8aa" 2042 | integrity sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA== 2043 | 2044 | semver@~5.4.1: 2045 | version "5.4.1" 2046 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" 2047 | integrity sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg== 2048 | 2049 | send@0.17.1: 2050 | version "0.17.1" 2051 | resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" 2052 | integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== 2053 | dependencies: 2054 | debug "2.6.9" 2055 | depd "~1.1.2" 2056 | destroy "~1.0.4" 2057 | encodeurl "~1.0.2" 2058 | escape-html "~1.0.3" 2059 | etag "~1.8.1" 2060 | fresh "0.5.2" 2061 | http-errors "~1.7.2" 2062 | mime "1.6.0" 2063 | ms "2.1.1" 2064 | on-finished "~2.3.0" 2065 | range-parser "~1.2.1" 2066 | statuses "~1.5.0" 2067 | 2068 | serve-static@1.14.1: 2069 | version "1.14.1" 2070 | resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" 2071 | integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== 2072 | dependencies: 2073 | encodeurl "~1.0.2" 2074 | escape-html "~1.0.3" 2075 | parseurl "~1.3.3" 2076 | send "0.17.1" 2077 | 2078 | servify@^0.1.12: 2079 | version "0.1.12" 2080 | resolved "https://registry.yarnpkg.com/servify/-/servify-0.1.12.tgz#142ab7bee1f1d033b66d0707086085b17c06db95" 2081 | integrity sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw== 2082 | dependencies: 2083 | body-parser "^1.16.0" 2084 | cors "^2.8.1" 2085 | express "^4.14.0" 2086 | request "^2.79.0" 2087 | xhr "^2.3.3" 2088 | 2089 | setimmediate@^1.0.5: 2090 | version "1.0.5" 2091 | resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" 2092 | integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= 2093 | 2094 | setprototypeof@1.1.1: 2095 | version "1.1.1" 2096 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" 2097 | integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== 2098 | 2099 | sha.js@^2.4.0, sha.js@^2.4.8: 2100 | version "2.4.11" 2101 | resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" 2102 | integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== 2103 | dependencies: 2104 | inherits "^2.0.1" 2105 | safe-buffer "^5.0.1" 2106 | 2107 | simple-concat@^1.0.0: 2108 | version "1.0.1" 2109 | resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" 2110 | integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== 2111 | 2112 | simple-get@^2.7.0: 2113 | version "2.8.1" 2114 | resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-2.8.1.tgz#0e22e91d4575d87620620bc91308d57a77f44b5d" 2115 | integrity sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw== 2116 | dependencies: 2117 | decompress-response "^3.3.0" 2118 | once "^1.3.1" 2119 | simple-concat "^1.0.0" 2120 | 2121 | sshpk@^1.7.0: 2122 | version "1.16.1" 2123 | resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" 2124 | integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== 2125 | dependencies: 2126 | asn1 "~0.2.3" 2127 | assert-plus "^1.0.0" 2128 | bcrypt-pbkdf "^1.0.0" 2129 | dashdash "^1.12.0" 2130 | ecc-jsbn "~0.1.1" 2131 | getpass "^0.1.1" 2132 | jsbn "~0.1.0" 2133 | safer-buffer "^2.0.2" 2134 | tweetnacl "~0.14.0" 2135 | 2136 | "statuses@>= 1.5.0 < 2", statuses@~1.5.0: 2137 | version "1.5.0" 2138 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" 2139 | integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= 2140 | 2141 | strict-uri-encode@^1.0.0: 2142 | version "1.1.0" 2143 | resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" 2144 | integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= 2145 | 2146 | string_decoder@^1.1.1: 2147 | version "1.3.0" 2148 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" 2149 | integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== 2150 | dependencies: 2151 | safe-buffer "~5.2.0" 2152 | 2153 | string_decoder@~0.10.x: 2154 | version "0.10.31" 2155 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" 2156 | integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= 2157 | 2158 | string_decoder@~1.1.1: 2159 | version "1.1.1" 2160 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 2161 | integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== 2162 | dependencies: 2163 | safe-buffer "~5.1.0" 2164 | 2165 | strip-hex-prefix@1.0.0: 2166 | version "1.0.0" 2167 | resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f" 2168 | integrity sha1-DF8VX+8RUTczd96du1iNoFUA428= 2169 | dependencies: 2170 | is-hex-prefixed "1.0.0" 2171 | 2172 | swarm-js@^0.1.40: 2173 | version "0.1.40" 2174 | resolved "https://registry.yarnpkg.com/swarm-js/-/swarm-js-0.1.40.tgz#b1bc7b6dcc76061f6c772203e004c11997e06b99" 2175 | integrity sha512-yqiOCEoA4/IShXkY3WKwP5PvZhmoOOD8clsKA7EEcRILMkTEYHCQ21HDCAcVpmIxZq4LyZvWeRJ6quIyHk1caA== 2176 | dependencies: 2177 | bluebird "^3.5.0" 2178 | buffer "^5.0.5" 2179 | eth-lib "^0.1.26" 2180 | fs-extra "^4.0.2" 2181 | got "^7.1.0" 2182 | mime-types "^2.1.16" 2183 | mkdirp-promise "^5.0.1" 2184 | mock-fs "^4.1.0" 2185 | setimmediate "^1.0.5" 2186 | tar "^4.0.2" 2187 | xhr-request "^1.0.1" 2188 | 2189 | tar@^4.0.2: 2190 | version "4.4.13" 2191 | resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" 2192 | integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== 2193 | dependencies: 2194 | chownr "^1.1.1" 2195 | fs-minipass "^1.2.5" 2196 | minipass "^2.8.6" 2197 | minizlib "^1.2.1" 2198 | mkdirp "^0.5.0" 2199 | safe-buffer "^5.1.2" 2200 | yallist "^3.0.3" 2201 | 2202 | timed-out@^4.0.0, timed-out@^4.0.1: 2203 | version "4.0.1" 2204 | resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" 2205 | integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= 2206 | 2207 | to-readable-stream@^1.0.0: 2208 | version "1.0.0" 2209 | resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" 2210 | integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== 2211 | 2212 | toidentifier@1.0.0: 2213 | version "1.0.0" 2214 | resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" 2215 | integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== 2216 | 2217 | tough-cookie@~2.5.0: 2218 | version "2.5.0" 2219 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" 2220 | integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== 2221 | dependencies: 2222 | psl "^1.1.28" 2223 | punycode "^2.1.1" 2224 | 2225 | tunnel-agent@^0.6.0: 2226 | version "0.6.0" 2227 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" 2228 | integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= 2229 | dependencies: 2230 | safe-buffer "^5.0.1" 2231 | 2232 | tweetnacl@^0.14.3, tweetnacl@~0.14.0: 2233 | version "0.14.5" 2234 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" 2235 | integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= 2236 | 2237 | type-is@~1.6.17, type-is@~1.6.18: 2238 | version "1.6.18" 2239 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" 2240 | integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== 2241 | dependencies: 2242 | media-typer "0.3.0" 2243 | mime-types "~2.1.24" 2244 | 2245 | type@^1.0.1: 2246 | version "1.2.0" 2247 | resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" 2248 | integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== 2249 | 2250 | type@^2.0.0: 2251 | version "2.1.0" 2252 | resolved "https://registry.yarnpkg.com/type/-/type-2.1.0.tgz#9bdc22c648cf8cf86dd23d32336a41cfb6475e3f" 2253 | integrity sha512-G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA== 2254 | 2255 | typedarray-to-buffer@^3.1.5: 2256 | version "3.1.5" 2257 | resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" 2258 | integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== 2259 | dependencies: 2260 | is-typedarray "^1.0.0" 2261 | 2262 | ultron@~1.1.0: 2263 | version "1.1.1" 2264 | resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" 2265 | integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og== 2266 | 2267 | underscore@1.9.1: 2268 | version "1.9.1" 2269 | resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.9.1.tgz#06dce34a0e68a7babc29b365b8e74b8925203961" 2270 | integrity sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg== 2271 | 2272 | universalify@^0.1.0: 2273 | version "0.1.2" 2274 | resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" 2275 | integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== 2276 | 2277 | unpipe@1.0.0, unpipe@~1.0.0: 2278 | version "1.0.0" 2279 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" 2280 | integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= 2281 | 2282 | uri-js@^4.2.2: 2283 | version "4.4.0" 2284 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.0.tgz#aa714261de793e8a82347a7bcc9ce74e86f28602" 2285 | integrity sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g== 2286 | dependencies: 2287 | punycode "^2.1.0" 2288 | 2289 | url-parse-lax@^1.0.0: 2290 | version "1.0.0" 2291 | resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" 2292 | integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM= 2293 | dependencies: 2294 | prepend-http "^1.0.1" 2295 | 2296 | url-parse-lax@^3.0.0: 2297 | version "3.0.0" 2298 | resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" 2299 | integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= 2300 | dependencies: 2301 | prepend-http "^2.0.0" 2302 | 2303 | url-set-query@^1.0.0: 2304 | version "1.0.0" 2305 | resolved "https://registry.yarnpkg.com/url-set-query/-/url-set-query-1.0.0.tgz#016e8cfd7c20ee05cafe7795e892bd0702faa339" 2306 | integrity sha1-AW6M/Xwg7gXK/neV6JK9BwL6ozk= 2307 | 2308 | url-to-options@^1.0.1: 2309 | version "1.0.1" 2310 | resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9" 2311 | integrity sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k= 2312 | 2313 | utf-8-validate@^5.0.2: 2314 | version "5.0.3" 2315 | resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.3.tgz#3b64e418ad2ff829809025fdfef595eab2f03a27" 2316 | integrity sha512-jtJM6fpGv8C1SoH4PtG22pGto6x+Y8uPprW0tw3//gGFhDDTiuksgradgFN6yRayDP4SyZZa6ZMGHLIa17+M8A== 2317 | dependencies: 2318 | node-gyp-build "^4.2.0" 2319 | 2320 | utf8@3.0.0: 2321 | version "3.0.0" 2322 | resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1" 2323 | integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ== 2324 | 2325 | util-deprecate@^1.0.1, util-deprecate@~1.0.1: 2326 | version "1.0.2" 2327 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 2328 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= 2329 | 2330 | utils-merge@1.0.1: 2331 | version "1.0.1" 2332 | resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" 2333 | integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= 2334 | 2335 | uuid@3.3.2: 2336 | version "3.3.2" 2337 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" 2338 | integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== 2339 | 2340 | uuid@^3.3.2: 2341 | version "3.4.0" 2342 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" 2343 | integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== 2344 | 2345 | varint@^5.0.0: 2346 | version "5.0.2" 2347 | resolved "https://registry.yarnpkg.com/varint/-/varint-5.0.2.tgz#5b47f8a947eb668b848e034dcfa87d0ff8a7f7a4" 2348 | integrity sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow== 2349 | 2350 | vary@^1, vary@~1.1.2: 2351 | version "1.1.2" 2352 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" 2353 | integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= 2354 | 2355 | verror@1.10.0: 2356 | version "1.10.0" 2357 | resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" 2358 | integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= 2359 | dependencies: 2360 | assert-plus "^1.0.0" 2361 | core-util-is "1.0.2" 2362 | extsprintf "^1.2.0" 2363 | 2364 | web3-bzz@1.3.0: 2365 | version "1.3.0" 2366 | resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.3.0.tgz#83dfd77fa8a64bbb660462dffd0fee2a02ef1051" 2367 | integrity sha512-ibYAnKab+sgTo/UdfbrvYfWblXjjgSMgyy9/FHa6WXS14n/HVB+HfWqGz2EM3fok8Wy5XoKGMvdqvERQ/mzq1w== 2368 | dependencies: 2369 | "@types/node" "^12.12.6" 2370 | got "9.6.0" 2371 | swarm-js "^0.1.40" 2372 | underscore "1.9.1" 2373 | 2374 | web3-core-helpers@1.3.0: 2375 | version "1.3.0" 2376 | resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.3.0.tgz#697cc3246a7eaaaac64ea506828d861c981c3f31" 2377 | integrity sha512-+MFb1kZCrRctf7UYE7NCG4rGhSXaQJ/KF07di9GVK1pxy1K0+rFi61ZobuV1ky9uQp+uhhSPts4Zp55kRDB5sw== 2378 | dependencies: 2379 | underscore "1.9.1" 2380 | web3-eth-iban "1.3.0" 2381 | web3-utils "1.3.0" 2382 | 2383 | web3-core-method@1.3.0: 2384 | version "1.3.0" 2385 | resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.3.0.tgz#a71387af842aec7dbad5dbbd1130c14cc6c8beb3" 2386 | integrity sha512-h0yFDrYVzy5WkLxC/C3q+hiMnzxdWm9p1T1rslnuHgOp6nYfqzu/6mUIXrsS4h/OWiGJt+BZ0xVZmtC31HDWtg== 2387 | dependencies: 2388 | "@ethersproject/transactions" "^5.0.0-beta.135" 2389 | underscore "1.9.1" 2390 | web3-core-helpers "1.3.0" 2391 | web3-core-promievent "1.3.0" 2392 | web3-core-subscriptions "1.3.0" 2393 | web3-utils "1.3.0" 2394 | 2395 | web3-core-promievent@1.3.0: 2396 | version "1.3.0" 2397 | resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.3.0.tgz#e0442dd0a8989b6bdce09293976cee6d9237a484" 2398 | integrity sha512-blv69wrXw447TP3iPvYJpllkhW6B18nfuEbrfcr3n2Y0v1Jx8VJacNZFDFsFIcgXcgUIVCtOpimU7w9v4+rtaw== 2399 | dependencies: 2400 | eventemitter3 "4.0.4" 2401 | 2402 | web3-core-requestmanager@1.3.0: 2403 | version "1.3.0" 2404 | resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.3.0.tgz#c5b9a0304504c0e6cce6c90bc1a3bff82732aa1f" 2405 | integrity sha512-3yMbuGcomtzlmvTVqNRydxsx7oPlw3ioRL6ReF9PeNYDkUsZaUib+6Dp5eBt7UXh5X+SIn/xa1smhDHz5/HpAw== 2406 | dependencies: 2407 | underscore "1.9.1" 2408 | web3-core-helpers "1.3.0" 2409 | web3-providers-http "1.3.0" 2410 | web3-providers-ipc "1.3.0" 2411 | web3-providers-ws "1.3.0" 2412 | 2413 | web3-core-subscriptions@1.3.0: 2414 | version "1.3.0" 2415 | resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.3.0.tgz#c2622ccd2b84f4687475398ff966b579dba0847e" 2416 | integrity sha512-MUUQUAhJDb+Nz3S97ExVWveH4utoUnsbPWP+q1HJH437hEGb4vunIb9KvN3hFHLB+aHJfPeStM/4yYTz5PeuyQ== 2417 | dependencies: 2418 | eventemitter3 "4.0.4" 2419 | underscore "1.9.1" 2420 | web3-core-helpers "1.3.0" 2421 | 2422 | web3-core@1.3.0: 2423 | version "1.3.0" 2424 | resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.3.0.tgz#b818903738461c1cca0163339e1d6d3fa51242cf" 2425 | integrity sha512-BwWvAaKJf4KFG9QsKRi3MNoNgzjI6szyUlgme1qNPxUdCkaS3Rdpa0VKYNHP7M/YTk82/59kNE66mH5vmoaXjA== 2426 | dependencies: 2427 | "@types/bn.js" "^4.11.5" 2428 | "@types/node" "^12.12.6" 2429 | bignumber.js "^9.0.0" 2430 | web3-core-helpers "1.3.0" 2431 | web3-core-method "1.3.0" 2432 | web3-core-requestmanager "1.3.0" 2433 | web3-utils "1.3.0" 2434 | 2435 | web3-eth-abi@1.3.0: 2436 | version "1.3.0" 2437 | resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.3.0.tgz#387b7ea9b38be69ad8856bc7b4e9a6a69bb4d22b" 2438 | integrity sha512-1OrZ9+KGrBeBRd3lO8upkpNua9+7cBsQAgor9wbA25UrcUYSyL8teV66JNRu9gFxaTbkpdrGqM7J/LXpraXWrg== 2439 | dependencies: 2440 | "@ethersproject/abi" "5.0.0-beta.153" 2441 | underscore "1.9.1" 2442 | web3-utils "1.3.0" 2443 | 2444 | web3-eth-accounts@1.3.0: 2445 | version "1.3.0" 2446 | resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.3.0.tgz#010acf389b2bee6d5e1aecb2fe78bfa5c8f26c7a" 2447 | integrity sha512-/Q7EVW4L2wWUbNRtOTwAIrYvJid/5UnKMw67x/JpvRMwYC+e+744P536Ja6SG4X3MnzFvd3E/jruV4qa6k+zIw== 2448 | dependencies: 2449 | crypto-browserify "3.12.0" 2450 | eth-lib "0.2.8" 2451 | ethereumjs-common "^1.3.2" 2452 | ethereumjs-tx "^2.1.1" 2453 | scrypt-js "^3.0.1" 2454 | underscore "1.9.1" 2455 | uuid "3.3.2" 2456 | web3-core "1.3.0" 2457 | web3-core-helpers "1.3.0" 2458 | web3-core-method "1.3.0" 2459 | web3-utils "1.3.0" 2460 | 2461 | web3-eth-contract@1.3.0: 2462 | version "1.3.0" 2463 | resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.3.0.tgz#c758340ac800788e29fa29edc8b0c0ac957b741c" 2464 | integrity sha512-3SCge4SRNCnzLxf0R+sXk6vyTOl05g80Z5+9/B5pERwtPpPWaQGw8w01vqYqsYBKC7zH+dxhMaUgVzU2Dgf7bQ== 2465 | dependencies: 2466 | "@types/bn.js" "^4.11.5" 2467 | underscore "1.9.1" 2468 | web3-core "1.3.0" 2469 | web3-core-helpers "1.3.0" 2470 | web3-core-method "1.3.0" 2471 | web3-core-promievent "1.3.0" 2472 | web3-core-subscriptions "1.3.0" 2473 | web3-eth-abi "1.3.0" 2474 | web3-utils "1.3.0" 2475 | 2476 | web3-eth-ens@1.3.0: 2477 | version "1.3.0" 2478 | resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.3.0.tgz#0887ba38473c104cf5fb8a715828b3b354fa02a2" 2479 | integrity sha512-WnOru+EcuM5dteiVYJcHXo/I7Wq+ei8RrlS2nir49M0QpYvUPGbCGgTbifcjJQTWamgORtWdljSA1s2Asdb74w== 2480 | dependencies: 2481 | content-hash "^2.5.2" 2482 | eth-ens-namehash "2.0.8" 2483 | underscore "1.9.1" 2484 | web3-core "1.3.0" 2485 | web3-core-helpers "1.3.0" 2486 | web3-core-promievent "1.3.0" 2487 | web3-eth-abi "1.3.0" 2488 | web3-eth-contract "1.3.0" 2489 | web3-utils "1.3.0" 2490 | 2491 | web3-eth-iban@1.3.0: 2492 | version "1.3.0" 2493 | resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.3.0.tgz#15b782dfaf273ebc4e3f389f1367f4e88ddce4a5" 2494 | integrity sha512-v9mZWhR4fPF17/KhHLiWir4YHWLe09O3B/NTdhWqw3fdAMJNztzMHGzgHxA/4fU+rhrs/FhDzc4yt32zMEXBZw== 2495 | dependencies: 2496 | bn.js "^4.11.9" 2497 | web3-utils "1.3.0" 2498 | 2499 | web3-eth-personal@1.3.0: 2500 | version "1.3.0" 2501 | resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.3.0.tgz#d376e03dc737d961ff1f8d1aca866efad8477135" 2502 | integrity sha512-2czUhElsJdLpuNfun9GeLiClo5O6Xw+bLSjl3f4bNG5X2V4wcIjX2ygep/nfstLLtkz8jSkgl/bV7esANJyeRA== 2503 | dependencies: 2504 | "@types/node" "^12.12.6" 2505 | web3-core "1.3.0" 2506 | web3-core-helpers "1.3.0" 2507 | web3-core-method "1.3.0" 2508 | web3-net "1.3.0" 2509 | web3-utils "1.3.0" 2510 | 2511 | web3-eth@1.3.0: 2512 | version "1.3.0" 2513 | resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.3.0.tgz#898e5f5a8827f9bc6844e267a52eb388916a6771" 2514 | integrity sha512-/bzJcxXPM9EM18JM5kO2JjZ3nEqVo3HxqU93aWAEgJNqaP/Lltmufl2GpvIB2Hvj+FXAjAXquxUdQ2/xP7BzHQ== 2515 | dependencies: 2516 | underscore "1.9.1" 2517 | web3-core "1.3.0" 2518 | web3-core-helpers "1.3.0" 2519 | web3-core-method "1.3.0" 2520 | web3-core-subscriptions "1.3.0" 2521 | web3-eth-abi "1.3.0" 2522 | web3-eth-accounts "1.3.0" 2523 | web3-eth-contract "1.3.0" 2524 | web3-eth-ens "1.3.0" 2525 | web3-eth-iban "1.3.0" 2526 | web3-eth-personal "1.3.0" 2527 | web3-net "1.3.0" 2528 | web3-utils "1.3.0" 2529 | 2530 | web3-net@1.3.0: 2531 | version "1.3.0" 2532 | resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.3.0.tgz#b69068cccffab58911c2f08ca4abfbefb0f948c6" 2533 | integrity sha512-Xz02KylOyrB2YZzCkysEDrY7RbKxb7LADzx3Zlovfvuby7HBwtXVexXKtoGqksa+ns1lvjQLLQGb+OeLi7Sr7w== 2534 | dependencies: 2535 | web3-core "1.3.0" 2536 | web3-core-method "1.3.0" 2537 | web3-utils "1.3.0" 2538 | 2539 | web3-providers-http@1.3.0: 2540 | version "1.3.0" 2541 | resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.3.0.tgz#88227f64c88b32abed4359383c2663616e0dc531" 2542 | integrity sha512-cMKhUI6PqlY/EC+ZDacAxajySBu8AzW8jOjt1Pe/mbRQgS0rcZyvLePGTTuoyaA8C21F8UW+EE5jj7YsNgOuqA== 2543 | dependencies: 2544 | web3-core-helpers "1.3.0" 2545 | xhr2-cookies "1.1.0" 2546 | 2547 | web3-providers-ipc@1.3.0: 2548 | version "1.3.0" 2549 | resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.3.0.tgz#d7c2b203733b46f7b4e7b15633d891648cf9a293" 2550 | integrity sha512-0CrLuRofR+1J38nEj4WsId/oolwQEM6Yl1sOt41S/6bNI7htdkwgVhSloFIMJMDFHtRw229QIJ6wIaKQz0X1Og== 2551 | dependencies: 2552 | oboe "2.1.5" 2553 | underscore "1.9.1" 2554 | web3-core-helpers "1.3.0" 2555 | 2556 | web3-providers-ws@1.3.0: 2557 | version "1.3.0" 2558 | resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.3.0.tgz#84adeff65acd4624d7f5bb43c5b2b22d8f0f63a4" 2559 | integrity sha512-Im5MthhJnJst8nSoq0TgbyOdaiFQFa5r6sHPOVllhgIgViDqzbnlAFW9sNzQ0Q8VXPNfPIQKi9cOrHlSRNPjRw== 2560 | dependencies: 2561 | eventemitter3 "4.0.4" 2562 | underscore "1.9.1" 2563 | web3-core-helpers "1.3.0" 2564 | websocket "^1.0.32" 2565 | 2566 | web3-shh@1.3.0: 2567 | version "1.3.0" 2568 | resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.3.0.tgz#62d15297da8fb5f733dd1b98f9ade300590f4d49" 2569 | integrity sha512-IZTojA4VCwVq+7eEIHuL1tJXtU+LJDhO8Y2QmuwetEWW1iBgWCGPHZasipWP+7kDpSm/5lo5GRxL72FF/Os/tA== 2570 | dependencies: 2571 | web3-core "1.3.0" 2572 | web3-core-method "1.3.0" 2573 | web3-core-subscriptions "1.3.0" 2574 | web3-net "1.3.0" 2575 | 2576 | web3-utils@1.3.0: 2577 | version "1.3.0" 2578 | resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.3.0.tgz#5bac16e5e0ec9fe7bdcfadb621655e8aa3cf14e1" 2579 | integrity sha512-2mS5axFCbkhicmoDRuJeuo0TVGQDgC2sPi/5dblfVC+PMtX0efrb8Xlttv/eGkq7X4E83Pds34FH98TP2WOUZA== 2580 | dependencies: 2581 | bn.js "^4.11.9" 2582 | eth-lib "0.2.8" 2583 | ethereum-bloom-filters "^1.0.6" 2584 | ethjs-unit "0.1.6" 2585 | number-to-bn "1.7.0" 2586 | randombytes "^2.1.0" 2587 | underscore "1.9.1" 2588 | utf8 "3.0.0" 2589 | 2590 | web3@^1.3.0: 2591 | version "1.3.0" 2592 | resolved "https://registry.yarnpkg.com/web3/-/web3-1.3.0.tgz#8fe4cd6e2a21c91904f343ba75717ee4c76bb349" 2593 | integrity sha512-4q9dna0RecnrlgD/bD1C5S+81Untbd6Z/TBD7rb+D5Bvvc0Wxjr4OP70x+LlnwuRDjDtzBwJbNUblh2grlVArw== 2594 | dependencies: 2595 | web3-bzz "1.3.0" 2596 | web3-core "1.3.0" 2597 | web3-eth "1.3.0" 2598 | web3-eth-personal "1.3.0" 2599 | web3-net "1.3.0" 2600 | web3-shh "1.3.0" 2601 | web3-utils "1.3.0" 2602 | 2603 | websocket@^1.0.32: 2604 | version "1.0.33" 2605 | resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.33.tgz#407f763fc58e74a3fa41ca3ae5d78d3f5e3b82a5" 2606 | integrity sha512-XwNqM2rN5eh3G2CUQE3OHZj+0xfdH42+OFK6LdC2yqiC0YU8e5UK0nYre220T0IyyN031V/XOvtHvXozvJYFWA== 2607 | dependencies: 2608 | bufferutil "^4.0.1" 2609 | debug "^2.2.0" 2610 | es5-ext "^0.10.50" 2611 | typedarray-to-buffer "^3.1.5" 2612 | utf-8-validate "^5.0.2" 2613 | yaeti "^0.0.6" 2614 | 2615 | wrappy@1: 2616 | version "1.0.2" 2617 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 2618 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 2619 | 2620 | ws@^3.0.0: 2621 | version "3.3.3" 2622 | resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" 2623 | integrity sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA== 2624 | dependencies: 2625 | async-limiter "~1.0.0" 2626 | safe-buffer "~5.1.0" 2627 | ultron "~1.1.0" 2628 | 2629 | xhr-request-promise@^0.1.2: 2630 | version "0.1.3" 2631 | resolved "https://registry.yarnpkg.com/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz#2d5f4b16d8c6c893be97f1a62b0ed4cf3ca5f96c" 2632 | integrity sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg== 2633 | dependencies: 2634 | xhr-request "^1.1.0" 2635 | 2636 | xhr-request@^1.0.1, xhr-request@^1.1.0: 2637 | version "1.1.0" 2638 | resolved "https://registry.yarnpkg.com/xhr-request/-/xhr-request-1.1.0.tgz#f4a7c1868b9f198723444d82dcae317643f2e2ed" 2639 | integrity sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA== 2640 | dependencies: 2641 | buffer-to-arraybuffer "^0.0.5" 2642 | object-assign "^4.1.1" 2643 | query-string "^5.0.1" 2644 | simple-get "^2.7.0" 2645 | timed-out "^4.0.1" 2646 | url-set-query "^1.0.0" 2647 | xhr "^2.0.4" 2648 | 2649 | xhr2-cookies@1.1.0: 2650 | version "1.1.0" 2651 | resolved "https://registry.yarnpkg.com/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz#7d77449d0999197f155cb73b23df72505ed89d48" 2652 | integrity sha1-fXdEnQmZGX8VXLc7I99yUF7YnUg= 2653 | dependencies: 2654 | cookiejar "^2.1.1" 2655 | 2656 | xhr@^2.0.4, xhr@^2.3.3: 2657 | version "2.6.0" 2658 | resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.6.0.tgz#b69d4395e792b4173d6b7df077f0fc5e4e2b249d" 2659 | integrity sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA== 2660 | dependencies: 2661 | global "~4.4.0" 2662 | is-function "^1.0.1" 2663 | parse-headers "^2.0.0" 2664 | xtend "^4.0.0" 2665 | 2666 | xtend@^4.0.0, xtend@~4.0.0: 2667 | version "4.0.2" 2668 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" 2669 | integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== 2670 | 2671 | xtend@~2.1.1: 2672 | version "2.1.2" 2673 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b" 2674 | integrity sha1-bv7MKk2tjmlixJAbM3znuoe10os= 2675 | dependencies: 2676 | object-keys "~0.4.0" 2677 | 2678 | yaeti@^0.0.6: 2679 | version "0.0.6" 2680 | resolved "https://registry.yarnpkg.com/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577" 2681 | integrity sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc= 2682 | 2683 | yallist@^3.0.0, yallist@^3.0.3: 2684 | version "3.1.1" 2685 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" 2686 | integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== 2687 | --------------------------------------------------------------------------------