diff --git a/contracts/UFragments.sol b/contracts/UFragments.sol index 260ad682..c9a01910 100644 --- a/contracts/UFragments.sol +++ b/contracts/UFragments.sol @@ -76,6 +76,21 @@ contract UFragments is ERC20Detailed, Ownable { // it's fully paid. mapping(address => mapping(address => uint256)) private _allowedFragments; + // EIP-2612: permit – 712-signed approvals + // https://eips.ethereum.org/EIPS/eip-2612 + string public constant EIP712_REVISION = "1"; + bytes32 public constant EIP712_DOMAIN = + keccak256( + "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)" + ); + bytes32 public constant PERMIT_TYPEHASH = + keccak256( + "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)" + ); + + // EIP-2612: keeps track of number of permits per address + mapping(address => uint256) private _nonces; + /** * @param monetaryPolicy_ The address of the monetary policy contract to use for authentication. */ @@ -174,6 +189,35 @@ contract UFragments is ERC20Detailed, Ownable { return TOTAL_GONS; } + /** + * @return The number of successful permits by the specified address. + */ + function nonces(address who) public view returns (uint256) { + return _nonces[who]; + } + + /** + * @return The computed DOMAIN_SEPARATOR to be used off-chain services + * which implement EIP-712. + * https://eips.ethereum.org/EIPS/eip-2612 + */ + function DOMAIN_SEPARATOR() public view returns (bytes32) { + uint256 chainId; + assembly { + chainId := chainid() + } + return + keccak256( + abi.encode( + EIP712_DOMAIN, + keccak256(bytes(name())), + keccak256(bytes(EIP712_REVISION)), + chainId, + address(this) + ) + ); + } + /** * @dev Transfer tokens to a specified address. * @param to The address to transfer to. @@ -326,4 +370,39 @@ contract UFragments is ERC20Detailed, Ownable { return true; } + + /** + * @dev Allows for approvals to be made via secp256k1 signatures. + * @param owner The owner of the funds + * @param spender The spender + * @param value The amount + * @param deadline The deadline timestamp, type(uint256).max for max deadline + * @param v Signature param + * @param s Signature param + * @param r Signature param + */ + function permit( + address owner, + address spender, + uint256 value, + uint256 deadline, + uint8 v, + bytes32 r, + bytes32 s + ) public { + require(block.timestamp <= deadline); + + uint256 ownerNonce = _nonces[owner]; + bytes32 permitDataDigest = + keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, ownerNonce, deadline)); + bytes32 digest = + keccak256(abi.encodePacked("\x19\x01", DOMAIN_SEPARATOR(), permitDataDigest)); + + require(owner == ecrecover(digest, v, r, s)); + + _nonces[owner] = ownerNonce.add(1); + + _allowedFragments[owner][spender] = value; + emit Approval(owner, spender, value); + } } diff --git a/package.json b/package.json index 5a81c12a..aab21d4e 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,8 @@ "bignumber.js": "^9.0.0", "chai": "^4.2.0", "ethereum-waffle": "^3.2.1", - "ethers": "^5.0.24", + "ethereumjs-util": "^7.0.7", + "ethers": "5.0.18", "hardhat": "^2.0.6", "pre-commit": "^1.2.2", "prettier": "^2.1.1", diff --git a/test/unit/UFragments_erc20_permit.ts b/test/unit/UFragments_erc20_permit.ts new file mode 100644 index 00000000..176c0433 --- /dev/null +++ b/test/unit/UFragments_erc20_permit.ts @@ -0,0 +1,177 @@ +import { network, ethers, upgrades } from 'hardhat' +import { Contract, Signer, Wallet, BigNumber } from 'ethers' +import { expect } from 'chai' + +import { + EIP712_DOMAIN_TYPEHASH, + EIP2612_PERMIT_TYPEHASH, + getDomainSeparator, + signEIP712Permission, +} from '../utils/signatures' + +let accounts: Signer[], + deployer: Signer, + deployerAddress: string, + owner: Wallet, + ownerAddress: string, + spender: Wallet, + spenderAddress: string, + uFragments: Contract, + initialSupply: BigNumber + +async function setupContracts() { + // prepare signers + accounts = await ethers.getSigners() + deployer = accounts[0] + deployerAddress = await deployer.getAddress() + + owner = Wallet.createRandom() + ownerAddress = await owner.getAddress() + + spender = Wallet.createRandom() + spenderAddress = await spender.getAddress() + + // deploy upgradable token + const factory = await ethers.getContractFactory('UFragments') + uFragments = await upgrades.deployProxy(factory, [deployerAddress], { + initializer: 'initialize(address)', + }) + // fetch initial supply + initialSupply = await uFragments.totalSupply() +} + +// https://eips.ethereum.org/EIPS/eip-2612 +// Test cases as in: +// https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/test/drafts/ERC20Permit.test.js +describe('UFragments:Initialization', () => { + before('setup UFragments contract', setupContracts) + + it('should set the EIP2612 parameters', async function () { + expect(await uFragments.EIP712_REVISION()).to.eq('1') + expect(await uFragments.EIP712_DOMAIN()).to.eq(EIP712_DOMAIN_TYPEHASH) + expect(await uFragments.PERMIT_TYPEHASH()).to.eq(EIP2612_PERMIT_TYPEHASH) + // with hard-coded parameters + expect(await uFragments.DOMAIN_SEPARATOR()).to.eq( + getDomainSeparator( + await uFragments.EIP712_REVISION(), + await uFragments.name(), + uFragments.address, + network.config.chainId || 1, + ), + ) + }) + + it('initial nonce is 0', async function () { + expect(await uFragments.nonces(deployerAddress)).to.eq('0') + expect(await uFragments.nonces(ownerAddress)).to.eq('0') + expect(await uFragments.nonces(spenderAddress)).to.eq('0') + }) +}) + +// Using the cases specified by: +// https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/test/drafts/ERC20Permit.test.js +describe('UFragments:EIP-2612 Permit', () => { + const MAX_DEADLINE = BigNumber.from(2).pow(256).sub(1) + + beforeEach('setup UFragments contract', setupContracts) + + describe('permit', function () { + const signPermission = async ( + signer: Wallet, + owner: string, + spender: string, + value: number, + nonce: number, + deadline: BigNumber, + ) => { + return signEIP712Permission( + await uFragments.EIP712_REVISION(), + await uFragments.name(), + uFragments.address, + network.config.chainId || 1, + signer, + owner, + spender, + value, + nonce, + deadline, + ) + } + + it('accepts owner signature', async function () { + const { v, r, s } = await signPermission( + owner, + ownerAddress, + spenderAddress, + 123, + 0, + MAX_DEADLINE, + ) + await expect( + uFragments + .connect(deployer) + .permit(ownerAddress, spenderAddress, 123, MAX_DEADLINE, v, r, s), + ) + .to.emit(uFragments, 'Approval') + .withArgs(ownerAddress, spenderAddress, '123') + expect(await uFragments.nonces(ownerAddress)).to.eq('1') + expect(await uFragments.allowance(ownerAddress, spenderAddress)).to.eq( + '123', + ) + }) + + it('rejects reused signature', async function () { + const { v, r, s } = await signPermission( + owner, + ownerAddress, + spenderAddress, + 123, + 0, + MAX_DEADLINE, + ) + await uFragments + .connect(deployer) + .permit(ownerAddress, spenderAddress, 123, MAX_DEADLINE, v, r, s) + await expect( + uFragments + .connect(deployer) + .permit(ownerAddress, spenderAddress, 123, MAX_DEADLINE, v, r, s), + ).to.be.reverted + }) + + it('rejects other signature', async function () { + const { v, r, s } = await signPermission( + spender, + ownerAddress, + spenderAddress, + 123, + 0, + MAX_DEADLINE, + ) + await expect( + uFragments + .connect(deployer) + .permit(ownerAddress, spenderAddress, 123, MAX_DEADLINE, v, r, s), + ).to.be.reverted + }) + + it('rejects expired permit', async function () { + const currentTs = (await ethers.provider.getBlock('latest')).timestamp + const olderTs = currentTs - 3600 * 24 * 7 + const deadline = BigNumber.from(olderTs) + const { v, r, s } = await signPermission( + owner, + ownerAddress, + spenderAddress, + 123, + 0, + deadline, + ) + await expect( + uFragments + .connect(deployer) + .permit(ownerAddress, spenderAddress, 123, deadline, v, r, s), + ).to.be.reverted + }) + }) +}) diff --git a/test/utils/signatures.ts b/test/utils/signatures.ts new file mode 100644 index 00000000..2ec32e80 --- /dev/null +++ b/test/utils/signatures.ts @@ -0,0 +1,121 @@ +// https://github.com/albertocuestacanada/ERC20Permit/blob/master/utils/signatures.ts +import { + keccak256, + defaultAbiCoder, + toUtf8Bytes, + solidityPack, + splitSignature, +} from 'ethers/lib/utils' +import { ecsign } from 'ethereumjs-util' +import { BigNumberish, Wallet } from 'ethers' + +export const EIP712_DOMAIN_TYPEHASH = keccak256( + toUtf8Bytes( + 'EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)', + ), +) + +export const EIP712_DOMAIN_TYPE = [ + { name: 'name', type: 'string' }, + { name: 'version', type: 'string' }, + { name: 'chainId', type: 'uint256' }, + { name: 'verifyingContract', type: 'address' }, +] + +export const EIP2612_PERMIT_TYPEHASH = keccak256( + toUtf8Bytes( + 'Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)', + ), +) + +export const EIP2612_PERMIT_TYPE = [ + { name: 'owner', type: 'address' }, + { name: 'spender', type: 'address' }, + { name: 'value', type: 'uint256' }, + { name: 'nonce', type: 'uint256' }, + { name: 'deadline', type: 'uint256' }, +] + +// Gets the EIP712 domain separator +export function getDomainSeparator( + version: string, + name: string, + contractAddress: string, + chainId: number, +) { + return keccak256( + defaultAbiCoder.encode( + ['bytes32', 'bytes32', 'bytes32', 'uint256', 'address'], + [ + EIP712_DOMAIN_TYPEHASH, + keccak256(toUtf8Bytes(name)), + keccak256(toUtf8Bytes(version)), + chainId, + contractAddress, + ], + ), + ) +} + +// Returns the EIP712 hash which should be signed by the user +// in order to make a call to `permit` +export function getPermitDigest( + version: string, + name: string, + address: string, + chainId: number, + owner: string, + spender: string, + value: number, + nonce: number, + deadline: BigNumberish, +) { + const DOMAIN_SEPARATOR = getDomainSeparator(version, name, address, chainId) + const permitHash = keccak256( + defaultAbiCoder.encode( + ['bytes32', 'address', 'address', 'uint256', 'uint256', 'uint256'], + [EIP2612_PERMIT_TYPEHASH, owner, spender, value, nonce, deadline], + ), + ) + const hash = keccak256( + solidityPack( + ['bytes1', 'bytes1', 'bytes32', 'bytes32'], + ['0x19', '0x01', DOMAIN_SEPARATOR, permitHash], + ), + ) + return hash +} + +export const signEIP712Permission = async ( + version: string, + name: string, + verifyingContract: string, + chainId: number, + signer: Wallet, + owner: string, + spender: string, + value: number, + nonce: number, + deadline: BigNumberish, +) => { + const domain = { + name, + version, + chainId, + verifyingContract, + } + + const types = { Permit: EIP2612_PERMIT_TYPE } + + const data = { + owner, + spender, + value, + nonce, + deadline, + } + + const signature = await signer._signTypedData(domain, types, data) + + return splitSignature(signature) +} diff --git a/yarn.lock b/yarn.lock index 370ed7ce..83a9ff31 100644 --- a/yarn.lock +++ b/yarn.lock @@ -104,6 +104,21 @@ "@ethersproject/properties" ">=5.0.0-beta.131" "@ethersproject/strings" ">=5.0.0-beta.130" +"@ethersproject/abi@5.0.7": + version "5.0.7" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.0.7.tgz#79e52452bd3ca2956d0e1c964207a58ad1a0ee7b" + integrity sha512-Cqktk+hSIckwP/W8O47Eef60VwmoSC/L3lY0+dIBhQPCNn9E4V7rwmm2aFrNRRDJfFlGuZ1khkQUOc3oBX+niw== + dependencies: + "@ethersproject/address" "^5.0.4" + "@ethersproject/bignumber" "^5.0.7" + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/constants" "^5.0.4" + "@ethersproject/hash" "^5.0.4" + "@ethersproject/keccak256" "^5.0.3" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/properties" "^5.0.3" + "@ethersproject/strings" "^5.0.4" + "@ethersproject/abi@5.0.9", "@ethersproject/abi@^5.0.1", "@ethersproject/abi@^5.0.5": version "5.0.9" resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.0.9.tgz#738c1c557e56d8f395a5a27caef9b0449bc85a10" @@ -134,6 +149,19 @@ "@ethersproject/properties" "^5.0.7" "@ethersproject/strings" "^5.0.8" +"@ethersproject/abstract-provider@5.0.5": + version "5.0.5" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.0.5.tgz#797a32a8707830af1ad8f833e9c228994d5572b9" + integrity sha512-i/CjElAkzV7vQBAeoz+IpjGfcFYEP9eD7j3fzZ0fzTq03DO7PPnR+xkEZ1IoDXGwDS+55aLM1xvLDwB/Lx6IOQ== + dependencies: + "@ethersproject/bignumber" "^5.0.7" + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/networks" "^5.0.3" + "@ethersproject/properties" "^5.0.3" + "@ethersproject/transactions" "^5.0.5" + "@ethersproject/web" "^5.0.6" + "@ethersproject/abstract-provider@5.0.7", "@ethersproject/abstract-provider@^5.0.4": version "5.0.7" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.0.7.tgz#04ee3bfe43323384e7fecf6c774975b8dec4bdc9" @@ -160,6 +188,17 @@ "@ethersproject/transactions" "^5.0.9" "@ethersproject/web" "^5.0.12" +"@ethersproject/abstract-signer@5.0.7": + version "5.0.7" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.0.7.tgz#cdbd3bd479edf77c71b7f6a6156b0275b1176ded" + integrity sha512-8W8gy/QutEL60EoMEpvxZ8MFAEWs/JvH5nmZ6xeLXoZvmBCasGmxqHdYjo2cxg0nevkPkq9SeenSsBBZSCx+SQ== + dependencies: + "@ethersproject/abstract-provider" "^5.0.4" + "@ethersproject/bignumber" "^5.0.7" + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/properties" "^5.0.3" + "@ethersproject/abstract-signer@5.0.9", "@ethersproject/abstract-signer@^5.0.4", "@ethersproject/abstract-signer@^5.0.6": version "5.0.9" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.0.9.tgz#238ddc06031aeb9dfceee2add965292d7dd1acbf" @@ -182,6 +221,18 @@ "@ethersproject/logger" "^5.0.8" "@ethersproject/properties" "^5.0.7" +"@ethersproject/address@5.0.5": + version "5.0.5" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.0.5.tgz#2caa65f6b7125015395b1b54c985ee0b27059cc7" + integrity sha512-DpkQ6rwk9jTefrRsJzEm6nhRiJd9pvhn1xN0rw5N/jswXG5r7BLk/GVA0mMAVWAsYfvi2xSc5L41FMox43RYEA== + dependencies: + "@ethersproject/bignumber" "^5.0.7" + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/keccak256" "^5.0.3" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/rlp" "^5.0.3" + bn.js "^4.4.0" + "@ethersproject/address@5.0.8", "@ethersproject/address@>=5.0.0-beta.128", "@ethersproject/address@^5.0.4", "@ethersproject/address@^5.0.5": version "5.0.8" resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.0.8.tgz#0c551659144a5a7643c6bea337149d410825298f" @@ -204,6 +255,13 @@ "@ethersproject/logger" "^5.0.8" "@ethersproject/rlp" "^5.0.7" +"@ethersproject/base64@5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.0.4.tgz#b0d8fdbf3dda977cf546dcd35725a7b1d5256caa" + integrity sha512-4KRykQ7BQMeOXfvio1YITwHjxwBzh92UoXIdzxDE1p53CK28bbHPdsPNYo0wl0El7lJAMpT2SOdL0hhbWRnyIA== + dependencies: + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/base64@5.0.6", "@ethersproject/base64@^5.0.3": version "5.0.6" resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.0.6.tgz#26311ebf29ea3d0b9c300ccf3e1fdc44b7481516" @@ -218,6 +276,14 @@ dependencies: "@ethersproject/bytes" "^5.0.9" +"@ethersproject/basex@5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.0.4.tgz#93e1cd11f9a47281da2389de24f88e13e9d90847" + integrity sha512-ixIr/kKiAoSzOnSc777AGIOAhKai5Ivqr4HO/Gz+YG+xkfv6kqD6AW4ga9vM20Wwb0QBhh3LoRWTu4V1K+x9Ew== + dependencies: + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/properties" "^5.0.3" + "@ethersproject/basex@5.0.6", "@ethersproject/basex@^5.0.3": version "5.0.6" resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.0.6.tgz#ab95c32e48288a3d868726463506641cb1e9fb6b" @@ -235,6 +301,15 @@ "@ethersproject/logger" "^5.0.5" bn.js "^4.4.0" +"@ethersproject/bignumber@5.0.8": + version "5.0.8" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.0.8.tgz#cee33bd8eb0266176def0d371b45274b1d2c4ec0" + integrity sha512-KXFVAFKS1jdTXYN8BE5Oj+ZfPMh28iRdFeNGBVT6cUFdtiPVqeXqc0ggvBqA3A1VoFFGgM7oAeaagA393aORHA== + dependencies: + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/logger" "^5.0.5" + bn.js "^4.4.0" + "@ethersproject/bignumber@^5.0.13": version "5.0.13" resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.0.13.tgz#a5466412b3b80104097b9c694f6ae827df4353fe" @@ -244,6 +319,13 @@ "@ethersproject/logger" "^5.0.8" bn.js "^4.4.0" +"@ethersproject/bytes@5.0.5": + version "5.0.5" + resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.0.5.tgz#688b70000e550de0c97a151a21f15b87d7f97d7c" + integrity sha512-IEj9HpZB+ACS6cZ+QQMTqmu/cnUK2fYNE6ms/PVxjoBjoxc6HCraLpam1KuRvreMy0i523PLmjN8OYeikRdcUQ== + dependencies: + "@ethersproject/logger" "^5.0.5" + "@ethersproject/bytes@5.0.8", "@ethersproject/bytes@>=5.0.0-beta.129", "@ethersproject/bytes@^5.0.4", "@ethersproject/bytes@^5.0.8": version "5.0.8" resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.0.8.tgz#cf1246a6a386086e590063a4602b1ffb6cc43db1" @@ -258,6 +340,13 @@ dependencies: "@ethersproject/logger" "^5.0.8" +"@ethersproject/constants@5.0.5": + version "5.0.5" + resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.0.5.tgz#0ed19b002e8404bdf6d135234dc86a7d9bcf9b71" + integrity sha512-foaQVmxp2+ik9FrLUCtVrLZCj4M3Ibgkqvh+Xw/vFRSerkjVSYePApaVE5essxhoSlF1U9oXfWY09QI2AXtgKA== + dependencies: + "@ethersproject/bignumber" "^5.0.7" + "@ethersproject/constants@5.0.7", "@ethersproject/constants@>=5.0.0-beta.128", "@ethersproject/constants@^5.0.4": version "5.0.7" resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.0.7.tgz#44ff979e5781b17c8c6901266896c3ee745f4e7e" @@ -272,6 +361,21 @@ dependencies: "@ethersproject/bignumber" "^5.0.13" +"@ethersproject/contracts@5.0.5": + version "5.0.5" + resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.0.5.tgz#64831a341ec8ca225e83ff3e9437c26b970fd5d7" + integrity sha512-tFI255lFbmbqMkgnuyhDWHl3yWqttPlReplYuVvDCT/SuvBjLR4ad2uipBlh1fh5X1ipK9ettAoV4S0HKim4Kw== + dependencies: + "@ethersproject/abi" "^5.0.5" + "@ethersproject/abstract-provider" "^5.0.4" + "@ethersproject/abstract-signer" "^5.0.4" + "@ethersproject/address" "^5.0.4" + "@ethersproject/bignumber" "^5.0.7" + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/constants" "^5.0.4" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/properties" "^5.0.3" + "@ethersproject/contracts@5.0.8": version "5.0.8" resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.0.8.tgz#71d3ba16853a1555be2e161a6741df186f81c73b" @@ -287,6 +391,20 @@ "@ethersproject/logger" "^5.0.5" "@ethersproject/properties" "^5.0.3" +"@ethersproject/hash@5.0.6": + version "5.0.6" + resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.0.6.tgz#2a2e8a1470685421217e9e86e9971ca636e609ce" + integrity sha512-Gvh57v6BWhwnud6l7tMfQm32PRQ2DYx2WaAAQmAxAfYvmzUkpQCBstnGeNMXIL8/2wdkvcB2u+WZRWaZtsFuUQ== + dependencies: + "@ethersproject/abstract-signer" "^5.0.6" + "@ethersproject/address" "^5.0.5" + "@ethersproject/bignumber" "^5.0.8" + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/keccak256" "^5.0.3" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/properties" "^5.0.4" + "@ethersproject/strings" "^5.0.4" + "@ethersproject/hash@5.0.9", "@ethersproject/hash@>=5.0.0-beta.128", "@ethersproject/hash@^5.0.4": version "5.0.9" resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.0.9.tgz#81252a848185b584aa600db4a1a68cad9229a4d4" @@ -315,6 +433,24 @@ "@ethersproject/properties" "^5.0.7" "@ethersproject/strings" "^5.0.8" +"@ethersproject/hdnode@5.0.5": + version "5.0.5" + resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.0.5.tgz#1f89aad0a5ba9dfae3a85a36e0669f8bc7a74781" + integrity sha512-Ho4HZaK+KijE5adayvjAGusWMnT0mgwGa5hGMBofBOgX9nqiKf6Wxx68SXBGI1/L3rmKo6mlAjxUd8gefs0teQ== + dependencies: + "@ethersproject/abstract-signer" "^5.0.4" + "@ethersproject/basex" "^5.0.3" + "@ethersproject/bignumber" "^5.0.7" + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/pbkdf2" "^5.0.3" + "@ethersproject/properties" "^5.0.3" + "@ethersproject/sha2" "^5.0.3" + "@ethersproject/signing-key" "^5.0.4" + "@ethersproject/strings" "^5.0.4" + "@ethersproject/transactions" "^5.0.5" + "@ethersproject/wordlists" "^5.0.4" + "@ethersproject/hdnode@5.0.7", "@ethersproject/hdnode@^5.0.4": version "5.0.7" resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.0.7.tgz#c7bce94a337ea65e37c46bab09a83e1c1a555d99" @@ -333,6 +469,25 @@ "@ethersproject/transactions" "^5.0.5" "@ethersproject/wordlists" "^5.0.4" +"@ethersproject/json-wallets@5.0.7": + version "5.0.7" + resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.0.7.tgz#4c48753b38ce7bce23a55f25c23f24617cf560e5" + integrity sha512-dgOn9JtGgjT28mDXs4LYY2rT4CzS6bG/rxoYuPq3TLHIf6nmvBcr33Fee6RrM/y8UAx4gyIkf6wb2cXsOctvQQ== + dependencies: + "@ethersproject/abstract-signer" "^5.0.4" + "@ethersproject/address" "^5.0.4" + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/hdnode" "^5.0.4" + "@ethersproject/keccak256" "^5.0.3" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/pbkdf2" "^5.0.3" + "@ethersproject/properties" "^5.0.3" + "@ethersproject/random" "^5.0.3" + "@ethersproject/strings" "^5.0.4" + "@ethersproject/transactions" "^5.0.5" + aes-js "3.0.0" + scrypt-js "3.0.1" + "@ethersproject/json-wallets@5.0.9", "@ethersproject/json-wallets@^5.0.6": version "5.0.9" resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.0.9.tgz#2e1708c2854c4ab764e35920bd1f44c948b95434" @@ -352,6 +507,14 @@ aes-js "3.0.0" scrypt-js "3.0.1" +"@ethersproject/keccak256@5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.0.4.tgz#36ca0a7d1ae2a272da5654cb886776d0c680ef3a" + integrity sha512-GNpiOUm9PGUxFNqOxYKDQBM0u68bG9XC9iOulEQ8I0tOx/4qUpgVzvgXL6ugxr0RY554Gz/NQsVqknqPzUcxpQ== + dependencies: + "@ethersproject/bytes" "^5.0.4" + js-sha3 "0.5.7" + "@ethersproject/keccak256@5.0.6", "@ethersproject/keccak256@>=5.0.0-beta.127", "@ethersproject/keccak256@^5.0.3": version "5.0.6" resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.0.6.tgz#5b5ba715ef1be86efde5c271f896fa0daf0e1efe" @@ -368,11 +531,23 @@ "@ethersproject/bytes" "^5.0.9" js-sha3 "0.5.7" +"@ethersproject/logger@5.0.6": + version "5.0.6" + resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.0.6.tgz#faa484203e86e08be9e07fef826afeef7183fe88" + integrity sha512-FrX0Vnb3JZ1md/7GIZfmJ06XOAA8r3q9Uqt9O5orr4ZiksnbpXKlyDzQtlZ5Yv18RS8CAUbiKH9vwidJg1BPmQ== + "@ethersproject/logger@5.0.8", "@ethersproject/logger@>=5.0.0-beta.129", "@ethersproject/logger@^5.0.5", "@ethersproject/logger@^5.0.8": version "5.0.8" resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.0.8.tgz#135c1903d35c878265f3cbf2b287042c4c20d5d4" integrity sha512-SkJCTaVTnaZ3/ieLF5pVftxGEFX56pTH+f2Slrpv7cU0TNpUZNib84QQdukd++sWUp/S7j5t5NW+WegbXd4U/A== +"@ethersproject/networks@5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.0.4.tgz#6d320a5e15a0cda804f5da88be0ba846156f6eec" + integrity sha512-/wHDTRms5mpJ09BoDrbNdFWINzONe05wZRgohCXvEv39rrH/Gd/yAnct8wC0RsW3tmFOgjgQxuBvypIxuUynTw== + dependencies: + "@ethersproject/logger" "^5.0.5" + "@ethersproject/networks@5.0.6", "@ethersproject/networks@^5.0.3": version "5.0.6" resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.0.6.tgz#4d6586bbebfde1c027504ebf6dfb783b29c3803a" @@ -387,6 +562,14 @@ dependencies: "@ethersproject/logger" "^5.0.8" +"@ethersproject/pbkdf2@5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.0.4.tgz#a0841d53f5ce9a2b52a65a349d2dc15910b0a767" + integrity sha512-9jVBjHXQKfr9+3bkCg01a8Cd1H9e+7Kw3ZMIvAxD0lZtuzrXsJxm1hVwY9KA+PRUvgS/9tTP4viXQYwLAax7zg== + dependencies: + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/sha2" "^5.0.3" + "@ethersproject/pbkdf2@5.0.6", "@ethersproject/pbkdf2@^5.0.3": version "5.0.6" resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.0.6.tgz#105dbfb08cd5fcf33869b42bfdc35a3ebd978cbd" @@ -395,6 +578,13 @@ "@ethersproject/bytes" "^5.0.4" "@ethersproject/sha2" "^5.0.3" +"@ethersproject/properties@5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.0.4.tgz#a67a1f5a52c30850b5062c861631e73d131f666e" + integrity sha512-UdyX3GqBxFt15B0uSESdDNmhvEbK3ACdDXl2soshoPcneXuTswHDeA0LoPlnaZzhbgk4p6jqb4GMms5C26Qu6A== + dependencies: + "@ethersproject/logger" "^5.0.5" + "@ethersproject/properties@5.0.6", "@ethersproject/properties@>=5.0.0-beta.131", "@ethersproject/properties@^5.0.3", "@ethersproject/properties@^5.0.4": version "5.0.6" resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.0.6.tgz#44d82aaa294816fd63333e7def42426cf0e87b3b" @@ -409,6 +599,31 @@ dependencies: "@ethersproject/logger" "^5.0.8" +"@ethersproject/providers@5.0.13": + version "5.0.13" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.0.13.tgz#1ec39e544353e1090803955ba6a1920ee942d6ab" + integrity sha512-5jsuk1FwXxmoQApGs8LSQyS43KP01pHA+6cQ1OPov5pT5Pcqe6ffh6UD1//BZ9Vjf+5e9AQqIk8w7FkGyROuCA== + dependencies: + "@ethersproject/abstract-provider" "^5.0.4" + "@ethersproject/abstract-signer" "^5.0.4" + "@ethersproject/address" "^5.0.4" + "@ethersproject/basex" "^5.0.3" + "@ethersproject/bignumber" "^5.0.7" + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/constants" "^5.0.4" + "@ethersproject/hash" "^5.0.4" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/networks" "^5.0.3" + "@ethersproject/properties" "^5.0.3" + "@ethersproject/random" "^5.0.3" + "@ethersproject/rlp" "^5.0.3" + "@ethersproject/sha2" "^5.0.3" + "@ethersproject/strings" "^5.0.4" + "@ethersproject/transactions" "^5.0.5" + "@ethersproject/web" "^5.0.6" + bech32 "1.1.4" + ws "7.2.3" + "@ethersproject/providers@5.0.17": version "5.0.17" resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.0.17.tgz#f380e7831149e24e7a1c6c9b5fb1d6dfc729d024" @@ -434,6 +649,14 @@ bech32 "1.1.4" ws "7.2.3" +"@ethersproject/random@5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.0.4.tgz#98f7cf65b0e588cec39ef24843e391ed5004556f" + integrity sha512-AIZJhqs6Ba4/+U3lOjt3QZbP6b/kuuGLJUYFUonAgWmkTHwqsCwYnFvnHKQSUuHbXHvErp7WFXFlztx+yMn3kQ== + dependencies: + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/random@5.0.6", "@ethersproject/random@^5.0.3": version "5.0.6" resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.0.6.tgz#9be80a1065f2b8e6f321dccb3ebeb4886cac9ea4" @@ -442,6 +665,14 @@ "@ethersproject/bytes" "^5.0.4" "@ethersproject/logger" "^5.0.5" +"@ethersproject/rlp@5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.0.4.tgz#0090a0271e84ea803016a112a79f5cfd80271a77" + integrity sha512-5qrrZad7VTjofxSsm7Zg/7Dr4ZOln4S2CqiDdOuTv6MBKnXj0CiBojXyuDy52M8O3wxH0CyE924hXWTDV1PQWQ== + dependencies: + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/rlp@5.0.6", "@ethersproject/rlp@^5.0.3": version "5.0.6" resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.0.6.tgz#29f9097348a3c330811997433b7df89ab51cd644" @@ -458,6 +689,15 @@ "@ethersproject/bytes" "^5.0.9" "@ethersproject/logger" "^5.0.8" +"@ethersproject/sha2@5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.0.4.tgz#40f639721a27dbe034b3dee021ba20b054586fec" + integrity sha512-0yFhf1mspxAfWdXXoPtK94adUeu1R7/FzAa+DfEiZTc76sz/vHXf0LSIazoR3znYKFny6haBxME+usbvvEcF3A== + dependencies: + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/logger" "^5.0.5" + hash.js "1.1.3" + "@ethersproject/sha2@5.0.6", "@ethersproject/sha2@^5.0.3": version "5.0.6" resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.0.6.tgz#175116dc10b866a0a381f6316d094bcc510bee3c" @@ -467,6 +707,16 @@ "@ethersproject/logger" "^5.0.5" hash.js "1.1.3" +"@ethersproject/signing-key@5.0.5": + version "5.0.5" + resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.0.5.tgz#acfd06fc05a14180df7e027688bbd23fc4baf782" + integrity sha512-Z1wY7JC1HVO4CvQWY2TyTTuAr8xK3bJijZw1a9G92JEmKdv1j255R/0YLBBcFTl2J65LUjtXynNJ2GbArPGi5g== + dependencies: + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/properties" "^5.0.3" + elliptic "6.5.3" + "@ethersproject/signing-key@5.0.7", "@ethersproject/signing-key@^5.0.4": version "5.0.7" resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.0.7.tgz#d03bfc5f565efb962bafebf8e6965e70d1c46d31" @@ -487,6 +737,17 @@ "@ethersproject/properties" "^5.0.7" elliptic "6.5.3" +"@ethersproject/solidity@5.0.5": + version "5.0.5" + resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.0.5.tgz#97a7d8a67f2d944f208c948fed0d565512bcc2be" + integrity sha512-DMFQ0ouXmNVoKWbGEUFGi8Urli4SJip9jXafQyFHWPRr5oJUqDVkNfwcyC37k+mhBG93k7qrYXCH2xJnGEOxHg== + dependencies: + "@ethersproject/bignumber" "^5.0.7" + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/keccak256" "^5.0.3" + "@ethersproject/sha2" "^5.0.3" + "@ethersproject/strings" "^5.0.4" + "@ethersproject/solidity@5.0.7": version "5.0.7" resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.0.7.tgz#72a3455f47a454db2dcf363992d42e9045dc7fce" @@ -498,6 +759,15 @@ "@ethersproject/sha2" "^5.0.3" "@ethersproject/strings" "^5.0.4" +"@ethersproject/strings@5.0.5": + version "5.0.5" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.0.5.tgz#ed7e99a282a02f40757691b04a24cd83f3752195" + integrity sha512-JED6WaIV00xM/gvj8vSnd+0VWtDYdidTmavFRCTQakqfz+4tDo6Jz5LHgG+dd45h7ah7ykCHW0C7ZXWEDROCXQ== + dependencies: + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/constants" "^5.0.4" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/strings@5.0.7", "@ethersproject/strings@>=5.0.0-beta.130", "@ethersproject/strings@^5.0.4": version "5.0.7" resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.0.7.tgz#8dc68f794c9e2901f3b75e53b2afbcb6b6c15037" @@ -516,6 +786,21 @@ "@ethersproject/constants" "^5.0.8" "@ethersproject/logger" "^5.0.8" +"@ethersproject/transactions@5.0.6": + version "5.0.6" + resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.0.6.tgz#b8b27938be6e9ed671dbdd35fe98af8b14d0df7c" + integrity sha512-htsFhOD+NMBxx676A8ehSuwVV49iqpSB+CkjPZ02tpNew0K6p8g0CZ46Z1ZP946gIHAU80xQ0NACHYrjIUaCFA== + dependencies: + "@ethersproject/address" "^5.0.4" + "@ethersproject/bignumber" "^5.0.7" + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/constants" "^5.0.4" + "@ethersproject/keccak256" "^5.0.3" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/properties" "^5.0.3" + "@ethersproject/rlp" "^5.0.3" + "@ethersproject/signing-key" "^5.0.4" + "@ethersproject/transactions@5.0.8", "@ethersproject/transactions@^5.0.0-beta.135", "@ethersproject/transactions@^5.0.5": version "5.0.8" resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.0.8.tgz#3b4d7041e13b957a9c4f131e0aea9dae7b6f5a23" @@ -546,6 +831,15 @@ "@ethersproject/rlp" "^5.0.7" "@ethersproject/signing-key" "^5.0.8" +"@ethersproject/units@5.0.6": + version "5.0.6" + resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.0.6.tgz#e1169ecffb7e8d5eab84e1481a4e35df19045708" + integrity sha512-tsJuy4mipppdmooukRfhXt8fGx9nxvfvG6Xdy0RDm7LzHsjghjwQ69m2bCpId6SDSR1Uq1cQ9irPiUBSyWolUA== + dependencies: + "@ethersproject/bignumber" "^5.0.7" + "@ethersproject/constants" "^5.0.4" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/units@5.0.8": version "5.0.8" resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.0.8.tgz#563325b20fe1eceff7b61857711d5e2b3f38fd09" @@ -555,6 +849,27 @@ "@ethersproject/constants" "^5.0.4" "@ethersproject/logger" "^5.0.5" +"@ethersproject/wallet@5.0.6": + version "5.0.6" + resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.0.6.tgz#8a3f7556a614b54c24f729b2dac893a66b931ac9" + integrity sha512-dRqx3+Degc5pvjaeeTHuk2EuTRM3b6ce/TiV0HRZhRXYnKyyjg0iYXEZo/b6p3rnV+Xhwxkc0+I/ISPkNpictA== + dependencies: + "@ethersproject/abstract-provider" "^5.0.4" + "@ethersproject/abstract-signer" "^5.0.4" + "@ethersproject/address" "^5.0.4" + "@ethersproject/bignumber" "^5.0.7" + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/hash" "^5.0.4" + "@ethersproject/hdnode" "^5.0.4" + "@ethersproject/json-wallets" "^5.0.6" + "@ethersproject/keccak256" "^5.0.3" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/properties" "^5.0.3" + "@ethersproject/random" "^5.0.3" + "@ethersproject/signing-key" "^5.0.4" + "@ethersproject/transactions" "^5.0.5" + "@ethersproject/wordlists" "^5.0.4" + "@ethersproject/wallet@5.0.9": version "5.0.9" resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.0.9.tgz#976c7d950489c40308d676869d24e59ab7b82ad1" @@ -587,6 +902,17 @@ "@ethersproject/properties" "^5.0.3" "@ethersproject/strings" "^5.0.4" +"@ethersproject/web@5.0.9": + version "5.0.9" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.0.9.tgz#b08f8295f4bfd4777c8723fe9572f5453b9f03cb" + integrity sha512-//QNlv1MSkOII1hv3+HQwWoiVFS+BMVGI0KYeUww4cyrEktnx1QIez5bTSab9s9fWTFaWKNmQNBwMbxAqPuYDw== + dependencies: + "@ethersproject/base64" "^5.0.3" + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/properties" "^5.0.3" + "@ethersproject/strings" "^5.0.4" + "@ethersproject/web@^5.0.12": version "5.0.12" resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.0.12.tgz#f123397c107f863c31fce5f31a97c66ec155e755" @@ -598,6 +924,17 @@ "@ethersproject/properties" "^5.0.7" "@ethersproject/strings" "^5.0.8" +"@ethersproject/wordlists@5.0.5": + version "5.0.5" + resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.0.5.tgz#a935b7fdb86c96b44ea8391fed94b3fa2f33c606" + integrity sha512-XA3ycFltVrCTQt04w5nHu3Xq5Z6HjqWsXaAYQHFdqtugyUsIumaO9S5MOwFFuUYTNkZUoT3jCRa/OBS+K4tLfA== + dependencies: + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/hash" "^5.0.4" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/properties" "^5.0.3" + "@ethersproject/strings" "^5.0.4" + "@ethersproject/wordlists@5.0.7", "@ethersproject/wordlists@^5.0.4": version "5.0.7" resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.0.7.tgz#4e5ad38cfbef746b196a3290c0d41696eb7ab468" @@ -3601,7 +3938,7 @@ ethereumjs-util@^5.0.0, ethereumjs-util@^5.0.1, ethereumjs-util@^5.1.1, ethereum rlp "^2.0.0" safe-buffer "^5.1.1" -ethereumjs-util@^7.0.2, ethereumjs-util@^7.0.3: +ethereumjs-util@^7.0.2, ethereumjs-util@^7.0.3, ethereumjs-util@^7.0.7: version "7.0.7" resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.0.7.tgz#484fb9c03b766b2ee64821281070616562fb5a59" integrity sha512-vU5rtZBlZsgkTw3o6PDKyB8li2EgLavnAbsKcfsH2YhHH1Le+PP8vEiMnAnvgc1B6uMoaM5GDCrVztBw0Q5K9g== @@ -3666,6 +4003,42 @@ ethereumjs-wallet@0.6.5: utf8 "^3.0.0" uuid "^3.3.2" +ethers@5.0.18: + version "5.0.18" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.0.18.tgz#2ccf382d32b9712e6967d0b14303cb0fe8056c7a" + integrity sha512-WCiKGfAt09hBS1HZspu+JTgeunFcUCVRhCXO8X+VadBJGTRlG722XXib79Vz2oyBperz90CcjkBPdNly61Ah4A== + dependencies: + "@ethersproject/abi" "5.0.7" + "@ethersproject/abstract-provider" "5.0.5" + "@ethersproject/abstract-signer" "5.0.7" + "@ethersproject/address" "5.0.5" + "@ethersproject/base64" "5.0.4" + "@ethersproject/basex" "5.0.4" + "@ethersproject/bignumber" "5.0.8" + "@ethersproject/bytes" "5.0.5" + "@ethersproject/constants" "5.0.5" + "@ethersproject/contracts" "5.0.5" + "@ethersproject/hash" "5.0.6" + "@ethersproject/hdnode" "5.0.5" + "@ethersproject/json-wallets" "5.0.7" + "@ethersproject/keccak256" "5.0.4" + "@ethersproject/logger" "5.0.6" + "@ethersproject/networks" "5.0.4" + "@ethersproject/pbkdf2" "5.0.4" + "@ethersproject/properties" "5.0.4" + "@ethersproject/providers" "5.0.13" + "@ethersproject/random" "5.0.4" + "@ethersproject/rlp" "5.0.4" + "@ethersproject/sha2" "5.0.4" + "@ethersproject/signing-key" "5.0.5" + "@ethersproject/solidity" "5.0.5" + "@ethersproject/strings" "5.0.5" + "@ethersproject/transactions" "5.0.6" + "@ethersproject/units" "5.0.6" + "@ethersproject/wallet" "5.0.6" + "@ethersproject/web" "5.0.9" + "@ethersproject/wordlists" "5.0.5" + ethers@^4.0.32, ethers@^4.0.40: version "4.0.48" resolved "https://registry.yarnpkg.com/ethers/-/ethers-4.0.48.tgz#330c65b8133e112b0613156e57e92d9009d8fbbe" @@ -3681,7 +4054,7 @@ ethers@^4.0.32, ethers@^4.0.40: uuid "2.0.1" xmlhttprequest "1.8.0" -ethers@^5.0.0, ethers@^5.0.1, ethers@^5.0.24: +ethers@^5.0.0, ethers@^5.0.1: version "5.0.24" resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.0.24.tgz#fbb8e4d35070d134f2eb846c07500b8c0eaef6d3" integrity sha512-77CEtVC88fJGEhxGXRvQqAEH6e2A+ZFiv2FBT6ikXndlty5sw6vMatAhg1v+w3CaaGZOf1CP81jl4Mc8Zrj08A==