fmg-simple-adjudicator
Advanced tools
Comparing version 0.0.10 to 0.1.4
{ | ||
"name": "fmg-simple-adjudicator", | ||
"version": "0.0.10", | ||
"version": "0.1.4", | ||
"description": "Simple adjudicator for force-move games", | ||
@@ -16,11 +16,12 @@ "directories": { | ||
"dependencies": { | ||
"fmg-core": "^0.0.6", | ||
"fmg-core": "^0.1.4", | ||
"sha3": "^1.2.2", | ||
"web3-utils": "^1.0.0-beta.30" | ||
"web3": "^1.0.0-beta.36", | ||
"web3-utils": "^1.0.0-beta.36" | ||
}, | ||
"devDependencies": { | ||
"esm": "^3.0.52", | ||
"truffle-assertions": "^0.4.0", | ||
"truffle-core": "^4.1.11" | ||
"truffle": "^5.0.0-beta.1", | ||
"truffle-assertions": "^0.4.0" | ||
} | ||
} |
@@ -1,2 +0,4 @@ | ||
import { Channel, State, assertRevert, increaseTime, duration, CountingGame } from 'fmg-core'; | ||
import { toWei } from 'web3-utils'; | ||
import { Channel, State, assertRevert, increaseTime, DURATION, CountingGame, sign, } from 'fmg-core'; | ||
import BN from 'bn.js'; | ||
@@ -13,4 +15,4 @@ var SimpleAdjudicator = artifacts.require("./SimpleAdjudicator.sol"); | ||
const B_IDX = 2; | ||
const aBal = Number(web3.toWei('6', "ether")); | ||
const bBal = Number(web3.toWei('4', "ether")); | ||
const aBal = Number(toWei('6', "wei")); | ||
const bBal = Number(toWei('4', "wei")); | ||
const resolution = [aBal, bBal]; | ||
@@ -20,9 +22,18 @@ const differentResolution = [bBal, aBal]; | ||
contract('SimpleAdjudicator', (accounts) => { | ||
let simpleAdj, countingGame; | ||
let simpleAdj; | ||
let channel; | ||
let state0, state1, state2, state3, state1alt, state2alt; | ||
let alice, aliceState, aliceBal, r0, v0, s0; | ||
let bob, bobState, bobBal, r1, v1, s1; | ||
// private keys are from the accounts generated by `ganache-cli -d` | ||
const alice = web3.eth.accounts.privateKeyToAccount('6cbed15c793ce57650b9877cf6fa156fbef513c4e6134f022a85b1ffdd59b2a1'); | ||
const bob = web3.eth.accounts.privateKeyToAccount('6370fd033278c143179d81c5526140625662b8daa446c22ee2d73db3707e620c'); | ||
let aliceDestination, bobDestination; | ||
const challenger = bob; | ||
const challengee = alice; | ||
let aliceState, aliceBal, r0, v0, s0; | ||
let bobState, bobBal, r1, v1, s1; | ||
let aliceEthAccount, bobEthAccount; | ||
before(async () => { | ||
@@ -33,3 +44,7 @@ CountingStateContract.link(StateLib); | ||
let countingGameContract = await CountingGameContract.new(); | ||
channel = new Channel(countingGameContract.address, 0, [accounts[A_IDX], accounts[B_IDX]]); | ||
channel = new Channel( | ||
countingGameContract.address.toLowerCase(), | ||
0, | ||
[alice.address.toLowerCase(), bob.address.toLowerCase()] | ||
); | ||
@@ -52,8 +67,5 @@ state0 = CountingGame.gameState({channel, resolution, turnNum: 6, gameCounter: 1}); | ||
let challenger = accounts[B_IDX]; | ||
let challengee = accounts[A_IDX]; | ||
let { r: r0, s: s0, v: v0 } = sign(agreedState.toHex(), challengee.privateKey); | ||
let { r: r1, s: s1, v: v1 } = sign(challengeState.toHex(), challenger.privateKey); | ||
let [r0, s0, v0] = agreedState.sign(challengee); | ||
let [r1, s1, v1] = challengeState.sign(challenger); | ||
assert.equal(await simpleAdj.currentChallengePresent(), false); | ||
@@ -70,3 +82,3 @@ | ||
// Have to cancel the challenge as to not muck up further tests... | ||
let [r2, s2, v2] = responseState.sign(challengee); | ||
const { r: r2, s: s2, v: v2 } = sign(responseState.toHex(), challengee.privateKey); | ||
await simpleAdj.respondWithMove(responseState.toHex(), v2, r2, s2); | ||
@@ -80,8 +92,5 @@ }); | ||
let challenger = accounts[B_IDX]; | ||
let challengee = accounts[A_IDX]; | ||
const { r: r0, s: s0, v: v0 } = sign(agreedState.toHex(), challengee.privateKey) | ||
const { r: r1, s: s1, v: v1 } = sign(challengeState.toHex(), challenger.privateKey); | ||
let [r0, s0, v0] = agreedState.sign(challengee); | ||
let [r1, s1, v1] = challengeState.sign(challenger); | ||
assert.equal(await simpleAdj.currentChallengePresent(), false); | ||
@@ -94,3 +103,3 @@ | ||
let [r2, s2, v2] = responseState.sign(challengee); | ||
let { r: r2, s: s2, v: v2 } = sign(responseState.toHex(), challengee.privateKey); | ||
let tx = await simpleAdj.respondWithMove(responseState.toHex(), v2, r2, s2); | ||
@@ -109,8 +118,5 @@ | ||
let challenger = accounts[B_IDX]; | ||
let challengee = accounts[A_IDX]; | ||
let { r: r0, s: s0, v: v0 } = sign(agreedState.toHex(), challengee.privateKey); | ||
let { r: r1, s: s1, v: v1 } = sign(challengeState.toHex(), challenger.privateKey); | ||
let [r0, s0, v0] = agreedState.sign(challengee); | ||
let [r1, s1, v1] = challengeState.sign(challenger); | ||
assert.equal(await simpleAdj.currentChallengePresent(), false, "challenge exists at start of game"); | ||
@@ -122,3 +128,3 @@ | ||
// refute | ||
let [r2, s2, v2] = refutationState.sign(challenger); | ||
let { r: r2, s: s2, v: v2 } = sign(refutationState.toHex(), challenger.privateKey); | ||
@@ -138,8 +144,5 @@ let tx = await simpleAdj.refute(refutationState.toHex(), v2, r2, s2); | ||
let challenger = accounts[B_IDX]; | ||
let challengee = accounts[A_IDX]; | ||
let { r: r0, s: s0, v: v0 } = sign(agreedState.toHex(), challengee.privateKey); | ||
let { r: r1, s: s1, v: v1 } = sign(challengeState.toHex(), challenger.privateKey); | ||
let [r0, s0, v0] = agreedState.sign(challengee); | ||
let [r1, s1, v1] = challengeState.sign(challenger); | ||
assert.equal(await simpleAdj.currentChallengePresent(), false, "challenge exists at start of game"); | ||
@@ -150,4 +153,4 @@ | ||
let [r2, s2, v2] = alternativeState.sign(challenger); | ||
let [r3, s3, v3] = responseState.sign(challengee); | ||
let { r: r2, s: s2, v: v2 } = sign(alternativeState.toHex(), challenger.privateKey); | ||
let { r: r3, s: s3, v: v3 } = sign(responseState.toHex(), challengee.privateKey); | ||
@@ -169,13 +172,7 @@ let tx = await simpleAdj.alternativeRespondWithMove( | ||
bobState = state1; | ||
alice = accounts[A_IDX]; | ||
bob = accounts[B_IDX]; | ||
aliceState.stateType = State.StateType.Conclude; | ||
aliceState.stateType = State.StateType.Conclude; | ||
bobState.stateType = State.StateType.Conclude; | ||
[r0, s0, v0] = aliceState.sign(alice); | ||
[r1, s1, v1] = bobState.sign(bob); | ||
await simpleAdj.conclude(aliceState.toHex(), bobState.toHex(), [v0, v1], [r0, r1], [s0, s1] ); | ||
const { r: r0, s: s0, v: v0 } = sign(aliceState.toHex(), alice.privateKey); | ||
const { r: r1, s: s1, v: v1 } = sign(bobState.toHex(), bob.privateKey); | ||
await simpleAdj.conclude(aliceState.toHex(), bobState.toHex(), [v0, v1], [r0, r1], [s0, s1] ); | ||
assertRevert( | ||
@@ -185,4 +182,23 @@ simpleAdj.conclude(aliceState.toHex(), bobState.toHex(), [v0, v1], [r0, r1], [s0, s1]) | ||
}); | ||
describe("withdrawals", () => { | ||
let aliceStart, bobStart; | ||
async function withdrawHelper(account, destination) { | ||
const { v, r, s } = sign( | ||
[ | ||
{ type: 'address', value: account.address }, | ||
{ type: 'address', value: destination }, | ||
{ type: 'bytes32', value: channel.id }, | ||
], | ||
account.privateKey | ||
); | ||
describe("withdrawals", () => { | ||
await simpleAdj.withdraw( | ||
account.address, | ||
destination, | ||
channel.id, | ||
v, r, s, | ||
); | ||
} | ||
beforeEach(async () => { | ||
@@ -192,15 +208,22 @@ aliceState = state0; | ||
alice = accounts[A_IDX]; | ||
bob = accounts[B_IDX]; | ||
aliceBal = aBal; | ||
bobBal = bBal; | ||
aliceEthAccount = accounts[A_IDX]; | ||
bobEthAccount = accounts[B_IDX]; | ||
aliceStart = await Number(await web3.eth.getBalance(aliceEthAccount)); | ||
bobStart = await Number(await web3.eth.getBalance(bobEthAccount)); | ||
// Generate random destination addresses for more deterministic tests. | ||
// How ironic. | ||
aliceDestination = web3.eth.accounts.create().address.toLowerCase(); | ||
bobDestination = web3.eth.accounts.create().address.toLowerCase(); | ||
simpleAdj = await SimpleAdjudicator.new(channel.id); | ||
}); | ||
it("forceMove -> timeout -> withdraw", async () => { | ||
// fund the contract | ||
it("conclude -> withdraw", async () => { | ||
await web3.eth.sendTransaction({ | ||
from: alice, // challengee | ||
from: aliceEthAccount, | ||
to: simpleAdj.address, | ||
@@ -212,3 +235,3 @@ value: aliceBal, | ||
await web3.eth.sendTransaction({ | ||
from: bob, // challenger | ||
from: bobEthAccount, | ||
to: simpleAdj.address, | ||
@@ -220,3 +243,3 @@ value: bobBal, | ||
assert.equal( | ||
web3.eth.getBalance(simpleAdj.address), | ||
await web3.eth.getBalance(simpleAdj.address), | ||
aliceBal + bobBal, | ||
@@ -226,41 +249,62 @@ "Funds were not deposited in the SimpleAdjudicator" | ||
assert.equal( | ||
Number(web3.eth.getBalance(bob)), | ||
START_BALANCE - bobBal, | ||
Number(await web3.eth.getBalance(bobEthAccount)), | ||
bobStart - bobBal, | ||
"Funds were not deposited from bob" | ||
); | ||
assert.equal( | ||
Number(web3.eth.getBalance(alice)), | ||
START_BALANCE - aliceBal, | ||
Number(await web3.eth.getBalance(aliceEthAccount)), | ||
aliceStart - aliceBal, | ||
"Funds were not deposited from alice" | ||
); | ||
// create a valid conclusion proof | ||
aliceState.stateType = State.StateType.Conclude; | ||
bobState.stateType = State.StateType.Conclude; | ||
[r0, s0, v0] = aliceState.sign(alice); | ||
[r1, s1, v1] = bobState.sign(bob); | ||
const { r: r0, s: s0, v: v0 } = sign(aliceState.toHex(), alice.privateKey); | ||
const { r: r1, s: s1, v: v1 } = sign(bobState.toHex(), bob.privateKey); | ||
await simpleAdj.forceMove(aliceState.toHex(), bobState.toHex(), [v0, v1], [r0, r1], [s0, s1] ); | ||
await increaseTime(duration.days(2)); | ||
await simpleAdj.withdraw(alice); | ||
await simpleAdj.withdraw(bob); | ||
// pass the conclusion proof | ||
await simpleAdj.conclude(aliceState.toHex(), bobState.toHex(), [v0, v1], [r0, r1], [s0, s1] ); | ||
await withdrawHelper(bob, bobDestination); | ||
assert.equal( | ||
web3.eth.getBalance(simpleAdj.address), | ||
Number(await web3.eth.getBalance(bobDestination)), | ||
bBal, | ||
"Bob's balance resolved incorrectly after his withdrawal." | ||
); | ||
assert.equal( | ||
Number(await web3.eth.getBalance(aliceDestination)), | ||
0, | ||
"SimpleAdjudicator wasn't emptied" | ||
"Alice's balance resolved incorrectly before her withdrawal." | ||
); | ||
await withdrawHelper(alice, aliceDestination); | ||
assert.equal( | ||
Number(web3.eth.getBalance(bob)), | ||
START_BALANCE, | ||
"Resolved balances incorrectly." | ||
Number(await web3.eth.getBalance(aliceDestination)), | ||
aliceBal, | ||
"Alice's balance resolved incorrectly after her withdrawal." | ||
); | ||
assert.equal( | ||
Number(web3.eth.getBalance(alice)), | ||
START_BALANCE, | ||
"Resolved balances incorrectly." | ||
await web3.eth.getBalance(simpleAdj.address), | ||
0, | ||
"SimpleAdjudicator wasn't emptied" | ||
); | ||
await withdrawHelper(bob, bobDestination); | ||
assert.equal( | ||
Number(await web3.eth.getBalance(bobDestination)), | ||
bBal, | ||
"Bob withdrew multiple times." | ||
); | ||
}); | ||
it("conclude -> withdraw", async () => { | ||
it("forceMove -> timeout -> withdraw", async () => { | ||
// fund the contract | ||
await web3.eth.sendTransaction({ | ||
from: alice, | ||
from: aliceEthAccount, // challengee | ||
to: simpleAdj.address, | ||
@@ -272,3 +316,3 @@ value: aliceBal, | ||
await web3.eth.sendTransaction({ | ||
from: bob, | ||
from: bobEthAccount, // challenger | ||
to: simpleAdj.address, | ||
@@ -280,3 +324,3 @@ value: bobBal, | ||
assert.equal( | ||
web3.eth.getBalance(simpleAdj.address), | ||
await web3.eth.getBalance(simpleAdj.address), | ||
aliceBal + bobBal, | ||
@@ -286,52 +330,37 @@ "Funds were not deposited in the SimpleAdjudicator" | ||
assert.equal( | ||
Number(web3.eth.getBalance(bob)), | ||
START_BALANCE - bobBal, | ||
Number(await web3.eth.getBalance(bobEthAccount)), | ||
bobStart - bobBal, | ||
"Funds were not deposited from bob" | ||
); | ||
assert.equal( | ||
Number(web3.eth.getBalance(alice)), | ||
START_BALANCE - aliceBal, | ||
Number(await web3.eth.getBalance(aliceEthAccount)), | ||
aliceStart - aliceBal, | ||
"Funds were not deposited from alice" | ||
); | ||
aliceState.stateType = State.StateType.Conclude; | ||
bobState.stateType = State.StateType.Conclude; | ||
[r0, s0, v0] = aliceState.sign(alice); | ||
[r1, s1, v1] = bobState.sign(bob); | ||
const { r: r0, s: s0, v: v0 } = sign(aliceState.toHex(), alice.privateKey); | ||
const { r: r1, s: s1, v: v1 } = sign(bobState.toHex(), bob.privateKey) | ||
await simpleAdj.conclude(aliceState.toHex(), bobState.toHex(), [v0, v1], [r0, r1], [s0, s1] ); | ||
await simpleAdj.forceMove(aliceState.toHex(), bobState.toHex(), [v0, v1], [r0, r1], [s0, s1] ); | ||
await increaseTime(DURATION.days(2)); | ||
await simpleAdj.withdraw(bob); | ||
assert.equal( | ||
Number(web3.eth.getBalance(bob)), | ||
START_BALANCE, | ||
"Bob's balance resolved incorrectly after his withdrawal." | ||
); | ||
await withdrawHelper(alice, aliceDestination); | ||
await withdrawHelper(bob, bobDestination); | ||
assert.equal( | ||
Number(web3.eth.getBalance(alice)), | ||
START_BALANCE - aliceBal, | ||
"Alice's balance resolved incorrectly before her withdrawal." | ||
await web3.eth.getBalance(simpleAdj.address), | ||
0, | ||
"SimpleAdjudicator wasn't emptied" | ||
); | ||
await simpleAdj.withdraw(alice); | ||
assert.equal( | ||
Number(web3.eth.getBalance(alice)), | ||
START_BALANCE, | ||
"Alice's balance resolved incorrectly after her withdrawal." | ||
Number(await web3.eth.getBalance(bobDestination)), | ||
bobBal, | ||
"Resolved Bob's balances incorrectly." | ||
); | ||
assert.equal( | ||
web3.eth.getBalance(simpleAdj.address), | ||
0, | ||
"SimpleAdjudicator wasn't emptied" | ||
Number(await web3.eth.getBalance(aliceDestination)), | ||
aliceBal, | ||
"Resolved Alice's balances incorrectly." | ||
); | ||
await simpleAdj.withdraw(bob); | ||
assert.equal( | ||
Number(web3.eth.getBalance(bob)), | ||
START_BALANCE, | ||
"Bob withdrew multiple times." | ||
); | ||
}); | ||
@@ -341,3 +370,3 @@ | ||
await web3.eth.sendTransaction({ | ||
from: bob, | ||
from: bobEthAccount, | ||
to: simpleAdj.address, | ||
@@ -349,3 +378,3 @@ value: bobBal, | ||
assert.equal( | ||
Number(web3.eth.getBalance(simpleAdj.address)), | ||
Number(await web3.eth.getBalance(simpleAdj.address)), | ||
bobBal, | ||
@@ -355,9 +384,9 @@ "Funds were not deposited in the SimpleAdjudicator" | ||
assert.equal( | ||
Number(web3.eth.getBalance(bob)), | ||
START_BALANCE - bobBal, | ||
Number(await web3.eth.getBalance(bobEthAccount)), | ||
bobStart - bobBal, | ||
"Funds were not deposited from bob" | ||
); | ||
assert.equal( | ||
Number(web3.eth.getBalance(alice)), | ||
START_BALANCE, | ||
Number(await web3.eth.getBalance(aliceEthAccount)), | ||
aliceStart, | ||
"Funds were deposited from alice" | ||
@@ -369,18 +398,18 @@ ); | ||
[r0, s0, v0] = aliceState.sign(alice); | ||
[r1, s1, v1] = bobState.sign(bob); | ||
const { r: r0, s: s0, v: v0 } = sign(aliceState.toHex(), alice.privateKey) | ||
const { r: r1, s: s1, v: v1 } = sign(bobState.toHex(), bob.privateKey); | ||
await simpleAdj.conclude(aliceState.toHex(), bobState.toHex(), [v0, v1], [r0, r1], [s0, s1] ); | ||
await simpleAdj.withdraw(bob); | ||
await withdrawHelper(bob, bobDestination); | ||
assert.equal( | ||
Number(web3.eth.getBalance(bob)), | ||
START_BALANCE - bobBal, | ||
Number(await web3.eth.getBalance(bobDestination)), | ||
0, | ||
"Bob took alice's money." | ||
); | ||
await simpleAdj.withdraw(alice); | ||
await withdrawHelper(alice, aliceDestination); | ||
assert.equal( | ||
Number(web3.eth.getBalance(alice)), | ||
START_BALANCE + bobBal, | ||
Number(await web3.eth.getBalance(aliceDestination)), | ||
bobBal, | ||
"Alice's balance resolved incorrectly after her withdrawal." | ||
@@ -390,3 +419,3 @@ ); | ||
assert.equal( | ||
web3.eth.getBalance(simpleAdj.address), | ||
await web3.eth.getBalance(simpleAdj.address), | ||
0, | ||
@@ -399,3 +428,3 @@ "SimpleAdjudicator wasn't emptied" | ||
describe('events', async () => { | ||
it('emits fundsReceived upon contract creation', async () => { | ||
it.skip('emits fundsReceived upon contract creation', async () => { | ||
CountingStateContract.link(StateLib); | ||
@@ -405,3 +434,3 @@ let stateContract = await CountingStateContract.new(); | ||
let countingGameContract = await CountingGameContract.new(); | ||
channel = new Channel(countingGameContract.address, 0, [accounts[A_IDX], accounts[B_IDX]]); | ||
channel = new Channel(countingGameContract.address, 0, [alice.address, bob.address]); | ||
@@ -414,3 +443,3 @@ simpleAdj = await SimpleAdjudicator.new(channel.id); | ||
return ( | ||
event.adjudicatorBalance.toPrecision(1) === '0' | ||
event.adjudicatorBalance.eq(new BN(0)) | ||
); | ||
@@ -421,8 +450,9 @@ }); | ||
it('emits fundsReceived upon being sent funds', async () => { | ||
const address = accounts[9]; | ||
await simpleAdj.sendTransaction({ | ||
from: accounts[9], | ||
from: address, | ||
value: 50 | ||
}); | ||
let result = await simpleAdj.sendTransaction({ | ||
from: accounts[9], | ||
from: address, | ||
value: 100 | ||
@@ -433,5 +463,5 @@ }); | ||
return ( | ||
event.adjudicatorBalance.toPrecision(3) === '150' && | ||
event.sender === accounts[9] && | ||
event.amountReceived.toPrecision(3) === '100' | ||
event.adjudicatorBalance.eq(new BN(150)) && | ||
event.sender === address && | ||
event.amountReceived.eq(new BN(100)) | ||
); | ||
@@ -438,0 +468,0 @@ }); |
Sorry, the diff of this file is not supported yet
31968
386
4
+ Addedweb3@^1.0.0-beta.36
+ Added@ethereumjs/common@2.6.5(transitive)
+ Added@ethereumjs/tx@3.5.2(transitive)
+ Added@ethersproject/abi@5.7.0(transitive)
+ Added@ethersproject/abstract-provider@5.7.0(transitive)
+ Added@ethersproject/abstract-signer@5.7.0(transitive)
+ Added@ethersproject/address@5.7.0(transitive)
+ Added@ethersproject/base64@5.7.0(transitive)
+ Added@ethersproject/bignumber@5.7.0(transitive)
+ Added@ethersproject/bytes@5.7.0(transitive)
+ Added@ethersproject/constants@5.7.0(transitive)
+ Added@ethersproject/hash@5.7.0(transitive)
+ Added@ethersproject/keccak256@5.7.0(transitive)
+ Added@ethersproject/logger@5.7.0(transitive)
+ Added@ethersproject/networks@5.7.1(transitive)
+ Added@ethersproject/properties@5.7.0(transitive)
+ Added@ethersproject/rlp@5.7.0(transitive)
+ Added@ethersproject/signing-key@5.7.0(transitive)
+ Added@ethersproject/strings@5.7.0(transitive)
+ Added@ethersproject/transactions@5.7.0(transitive)
+ Added@ethersproject/web@5.7.1(transitive)
+ Added@sindresorhus/is@4.6.0(transitive)
+ Added@szmarczak/http-timer@4.0.65.0.1(transitive)
+ Added@types/bn.js@5.1.6(transitive)
+ Added@types/cacheable-request@6.0.3(transitive)
+ Added@types/http-cache-semantics@4.0.4(transitive)
+ Added@types/keyv@3.1.4(transitive)
+ Added@types/node@12.20.55(transitive)
+ Added@types/pbkdf2@3.1.2(transitive)
+ Added@types/responselike@1.0.3(transitive)
+ Added@types/secp256k1@4.0.6(transitive)
+ Addedabortcontroller-polyfill@1.7.8(transitive)
+ Addedaccepts@1.3.8(transitive)
+ Addedajv@6.12.6(transitive)
+ Addedarray-flatten@1.1.1(transitive)
+ Addedasn1@0.2.6(transitive)
+ Addedassert-plus@1.0.0(transitive)
+ Addedasync-limiter@1.0.1(transitive)
+ Addedasynckit@0.4.0(transitive)
+ Addedavailable-typed-arrays@1.0.7(transitive)
+ Addedaws-sign2@0.7.0(transitive)
+ Addedaws4@1.13.2(transitive)
+ Addedbase-x@3.0.10(transitive)
+ Addedbase64-js@1.5.1(transitive)
+ Addedbcrypt-pbkdf@1.0.2(transitive)
+ Addedbignumber.js@9.1.2(transitive)
+ Addedblakejs@1.2.1(transitive)
+ Addedbluebird@3.7.2(transitive)
+ Addedbn.js@4.12.1(transitive)
+ Addedbody-parser@1.20.3(transitive)
+ Addedbrorand@1.1.0(transitive)
+ Addedbrowserify-aes@1.2.0(transitive)
+ Addedbs58@4.0.1(transitive)
+ Addedbs58check@2.1.2(transitive)
+ Addedbuffer@5.7.1(transitive)
+ Addedbuffer-to-arraybuffer@0.0.5(transitive)
+ Addedbuffer-xor@1.0.3(transitive)
+ Addedbufferutil@4.0.9(transitive)
+ Addedbytes@3.1.2(transitive)
+ Addedcacheable-lookup@5.0.46.1.0(transitive)
+ Addedcacheable-request@7.0.4(transitive)
+ Addedcall-bind@1.0.8(transitive)
+ Addedcall-bind-apply-helpers@1.0.2(transitive)
+ Addedcall-bound@1.0.3(transitive)
+ Addedcaseless@0.12.0(transitive)
+ Addedchownr@1.1.4(transitive)
+ Addedcids@0.7.5(transitive)
+ Addedcipher-base@1.0.6(transitive)
+ Addedclass-is@1.1.0(transitive)
+ Addedclone-response@1.0.3(transitive)
+ Addedcombined-stream@1.0.8(transitive)
+ Addedcontent-disposition@0.5.4(transitive)
+ Addedcontent-hash@2.5.2(transitive)
+ Addedcontent-type@1.0.5(transitive)
+ Addedcookie@0.7.1(transitive)
+ Addedcookie-signature@1.0.6(transitive)
+ Addedcore-util-is@1.0.2(transitive)
+ Addedcors@2.8.5(transitive)
+ Addedcrc-32@1.2.2(transitive)
+ Addedcreate-hash@1.2.0(transitive)
+ Addedcreate-hmac@1.1.7(transitive)
+ Addedcross-fetch@4.1.0(transitive)
+ Addedd@1.0.2(transitive)
+ Addeddashdash@1.14.1(transitive)
+ Addeddebug@2.6.9(transitive)
+ Addeddecode-uri-component@0.2.2(transitive)
+ Addeddecompress-response@3.3.06.0.0(transitive)
+ Addeddefer-to-connect@2.0.1(transitive)
+ Addeddefine-data-property@1.1.4(transitive)
+ Addeddelayed-stream@1.0.0(transitive)
+ Addeddepd@2.0.0(transitive)
+ Addeddestroy@1.2.0(transitive)
+ Addeddom-walk@0.1.2(transitive)
+ Addeddunder-proto@1.0.1(transitive)
+ Addedecc-jsbn@0.1.2(transitive)
+ Addedee-first@1.1.1(transitive)
+ Addedelliptic@6.5.46.6.1(transitive)
+ Addedencodeurl@1.0.22.0.0(transitive)
+ Addedend-of-stream@1.4.4(transitive)
+ Addedes-define-property@1.0.1(transitive)
+ Addedes-errors@1.3.0(transitive)
+ Addedes-object-atoms@1.1.1(transitive)
+ Addedes5-ext@0.10.64(transitive)
+ Addedes6-iterator@2.0.3(transitive)
+ Addedes6-promise@4.2.8(transitive)
+ Addedes6-symbol@3.1.4(transitive)
+ Addedescape-html@1.0.3(transitive)
+ Addedesniff@2.0.1(transitive)
+ Addedetag@1.8.1(transitive)
+ Addedeth-ens-namehash@2.0.8(transitive)
+ Addedeth-lib@0.1.290.2.8(transitive)
+ Addedethereum-cryptography@0.1.3(transitive)
+ Addedethereumjs-util@7.1.5(transitive)
+ Addedevent-emitter@0.3.5(transitive)
+ Addedeventemitter3@4.0.4(transitive)
+ Addedevp_bytestokey@1.0.3(transitive)
+ Addedexpress@4.21.2(transitive)
+ Addedext@1.7.0(transitive)
+ Addedextend@3.0.2(transitive)
+ Addedextsprintf@1.3.0(transitive)
+ Addedfast-deep-equal@3.1.3(transitive)
+ Addedfast-json-stable-stringify@2.1.0(transitive)
+ Addedfinalhandler@1.3.1(transitive)
+ Addedfmg-core@0.1.6(transitive)
+ Addedfor-each@0.3.5(transitive)
+ Addedforever-agent@0.6.1(transitive)
+ Addedform-data@2.3.3(transitive)
+ Addedform-data-encoder@1.7.1(transitive)
+ Addedforwarded@0.2.0(transitive)
+ Addedfresh@0.5.2(transitive)
+ Addedfs-extra@4.0.3(transitive)
+ Addedfs-minipass@1.2.7(transitive)
+ Addedfunction-bind@1.1.2(transitive)
+ Addedget-intrinsic@1.2.7(transitive)
+ Addedget-proto@1.0.1(transitive)
+ Addedget-stream@5.2.06.0.1(transitive)
+ Addedgetpass@0.1.7(transitive)
+ Addedglobal@4.4.0(transitive)
+ Addedgopd@1.2.0(transitive)
+ Addedgot@11.8.612.1.0(transitive)
+ Addedgraceful-fs@4.2.11(transitive)
+ Addedhar-schema@2.0.0(transitive)
+ Addedhar-validator@5.1.5(transitive)
+ Addedhas-property-descriptors@1.0.2(transitive)
+ Addedhas-symbols@1.1.0(transitive)
+ Addedhas-tostringtag@1.0.2(transitive)
+ Addedhash-base@3.1.0(transitive)
+ Addedhash.js@1.1.7(transitive)
+ Addedhasown@2.0.2(transitive)
+ Addedhmac-drbg@1.0.1(transitive)
+ Addedhttp-cache-semantics@4.1.1(transitive)
+ Addedhttp-errors@2.0.0(transitive)
+ Addedhttp-https@1.0.0(transitive)
+ Addedhttp-signature@1.2.0(transitive)
+ Addedhttp2-wrapper@1.0.32.2.1(transitive)
+ Addediconv-lite@0.4.24(transitive)
+ Addedidna-uts46-hx@2.3.1(transitive)
+ Addedieee754@1.2.1(transitive)
+ Addedinherits@2.0.4(transitive)
+ Addedipaddr.js@1.9.1(transitive)
+ Addedis-arguments@1.2.0(transitive)
+ Addedis-callable@1.2.7(transitive)
+ Addedis-function@1.0.2(transitive)
+ Addedis-generator-function@1.1.0(transitive)
+ Addedis-regex@1.2.1(transitive)
+ Addedis-typed-array@1.1.15(transitive)
+ Addedis-typedarray@1.0.0(transitive)
+ Addedisstream@0.1.2(transitive)
+ Addedjs-sha3@0.5.70.8.0(transitive)
+ Addedjsbn@0.1.1(transitive)
+ Addedjson-buffer@3.0.1(transitive)
+ Addedjson-schema@0.4.0(transitive)
+ Addedjson-schema-traverse@0.4.1(transitive)
+ Addedjson-stringify-safe@5.0.1(transitive)
+ Addedjsonfile@4.0.0(transitive)
+ Addedjsprim@1.4.2(transitive)
+ Addedkeccak@3.0.4(transitive)
+ Addedkeyv@4.5.4(transitive)
+ Addedlowercase-keys@2.0.03.0.0(transitive)
+ Addedmath-intrinsics@1.1.0(transitive)
+ Addedmd5.js@1.3.5(transitive)
+ Addedmedia-typer@0.3.0(transitive)
+ Addedmerge-descriptors@1.0.3(transitive)
+ Addedmethods@1.1.2(transitive)
+ Addedmime@1.6.0(transitive)
+ Addedmime-db@1.52.0(transitive)
+ Addedmime-types@2.1.35(transitive)
+ Addedmimic-response@1.0.13.1.0(transitive)
+ Addedmin-document@2.19.0(transitive)
+ Addedminimalistic-assert@1.0.1(transitive)
+ Addedminimalistic-crypto-utils@1.0.1(transitive)
+ Addedminimist@1.2.8(transitive)
+ Addedminipass@2.9.0(transitive)
+ Addedminizlib@1.3.3(transitive)
+ Addedmkdirp@0.5.63.0.1(transitive)
+ Addedmkdirp-promise@5.0.1(transitive)
+ Addedmock-fs@4.14.0(transitive)
+ Addedms@2.0.02.1.3(transitive)
+ Addedmultibase@0.6.10.7.0(transitive)
+ Addedmulticodec@0.5.71.0.4(transitive)
+ Addedmultihashes@0.4.21(transitive)
+ Addednano-json-stream-parser@0.1.2(transitive)
+ Addednegotiator@0.6.3(transitive)
+ Addednext-tick@1.1.0(transitive)
+ Addednode-addon-api@2.0.25.1.0(transitive)
+ Addednode-fetch@2.7.0(transitive)
+ Addednode-gyp-build@4.8.4(transitive)
+ Addednormalize-url@6.1.0(transitive)
+ Addedoauth-sign@0.9.0(transitive)
+ Addedobject-assign@4.1.1(transitive)
+ Addedobject-inspect@1.13.4(transitive)
+ Addedoboe@2.1.5(transitive)
+ Addedon-finished@2.4.1(transitive)
+ Addedonce@1.4.0(transitive)
+ Addedp-cancelable@2.1.13.0.0(transitive)
+ Addedparse-headers@2.0.5(transitive)
+ Addedparseurl@1.3.3(transitive)
+ Addedpath-to-regexp@0.1.12(transitive)
+ Addedpbkdf2@3.1.2(transitive)
+ Addedperformance-now@2.1.0(transitive)
+ Addedpossible-typed-array-names@1.1.0(transitive)
+ Addedprocess@0.11.10(transitive)
+ Addedproxy-addr@2.0.7(transitive)
+ Addedpsl@1.15.0(transitive)
+ Addedpump@3.0.2(transitive)
+ Addedpunycode@2.1.02.3.1(transitive)
+ Addedqs@6.13.06.5.3(transitive)
+ Addedquery-string@5.1.1(transitive)
+ Addedquick-lru@5.1.1(transitive)
+ Addedrange-parser@1.2.1(transitive)
+ Addedraw-body@2.5.2(transitive)
+ Addedreadable-stream@3.6.2(transitive)
+ Addedrequest@2.88.2(transitive)
+ Addedresolve-alpn@1.2.1(transitive)
+ Addedresponselike@2.0.1(transitive)
+ Addedripemd160@2.0.2(transitive)
+ Addedrlp@2.2.7(transitive)
+ Addedsafe-buffer@5.1.2(transitive)
+ Addedsafe-regex-test@1.1.0(transitive)
+ Addedsafer-buffer@2.1.2(transitive)
+ Addedscrypt-js@3.0.1(transitive)
+ Addedsecp256k1@4.0.4(transitive)
+ Addedsend@0.19.0(transitive)
+ Addedserve-static@1.16.2(transitive)
+ Addedservify@0.1.12(transitive)
+ Addedset-function-length@1.2.2(transitive)
+ Addedsetimmediate@1.0.5(transitive)
+ Addedsetprototypeof@1.2.0(transitive)
+ Addedsha.js@2.4.11(transitive)
+ Addedside-channel@1.1.0(transitive)
+ Addedside-channel-list@1.0.0(transitive)
+ Addedside-channel-map@1.0.1(transitive)
+ Addedside-channel-weakmap@1.0.2(transitive)
+ Addedsimple-concat@1.0.1(transitive)
+ Addedsimple-get@2.8.2(transitive)
+ Addedsshpk@1.18.0(transitive)
+ Addedstatuses@2.0.1(transitive)
+ Addedstrict-uri-encode@1.1.0(transitive)
+ Addedstring_decoder@1.3.0(transitive)
+ Addedswarm-js@0.1.42(transitive)
+ Addedtar@4.4.19(transitive)
+ Addedtimed-out@4.0.1(transitive)
+ Addedtoidentifier@1.0.1(transitive)
+ Addedtough-cookie@2.5.0(transitive)
+ Addedtr46@0.0.3(transitive)
+ Addedtunnel-agent@0.6.0(transitive)
+ Addedtweetnacl@0.14.5(transitive)
+ Addedtype@2.7.3(transitive)
+ Addedtype-is@1.6.18(transitive)
+ Addedtypedarray-to-buffer@3.1.5(transitive)
+ Addedultron@1.1.1(transitive)
+ Addeduniversalify@0.1.2(transitive)
+ Addedunpipe@1.0.0(transitive)
+ Addeduri-js@4.4.1(transitive)
+ Addedurl-set-query@1.0.0(transitive)
+ Addedutf-8-validate@5.0.10(transitive)
+ Addedutil@0.12.5(transitive)
+ Addedutil-deprecate@1.0.2(transitive)
+ Addedutils-merge@1.0.1(transitive)
+ Addeduuid@3.4.09.0.1(transitive)
+ Addedvarint@5.0.2(transitive)
+ Addedvary@1.1.2(transitive)
+ Addedverror@1.10.0(transitive)
+ Addedweb3@1.10.4(transitive)
+ Addedweb3-bzz@1.10.4(transitive)
+ Addedweb3-core@1.10.4(transitive)
+ Addedweb3-core-helpers@1.10.4(transitive)
+ Addedweb3-core-method@1.10.4(transitive)
+ Addedweb3-core-promievent@1.10.4(transitive)
+ Addedweb3-core-requestmanager@1.10.4(transitive)
+ Addedweb3-core-subscriptions@1.10.4(transitive)
+ Addedweb3-eth@1.10.4(transitive)
+ Addedweb3-eth-abi@1.10.4(transitive)
+ Addedweb3-eth-accounts@1.10.4(transitive)
+ Addedweb3-eth-contract@1.10.4(transitive)
+ Addedweb3-eth-ens@1.10.4(transitive)
+ Addedweb3-eth-iban@1.10.4(transitive)
+ Addedweb3-eth-personal@1.10.4(transitive)
+ Addedweb3-net@1.10.4(transitive)
+ Addedweb3-providers-http@1.10.4(transitive)
+ Addedweb3-providers-ipc@1.10.4(transitive)
+ Addedweb3-providers-ws@1.10.4(transitive)
+ Addedweb3-shh@1.10.4(transitive)
+ Addedwebidl-conversions@3.0.1(transitive)
+ Addedwebsocket@1.0.35(transitive)
+ Addedwhatwg-url@5.0.0(transitive)
+ Addedwhich-typed-array@1.1.18(transitive)
+ Addedwrappy@1.0.2(transitive)
+ Addedws@3.3.3(transitive)
+ Addedxhr@2.6.0(transitive)
+ Addedxhr-request@1.1.0(transitive)
+ Addedxhr-request-promise@0.1.3(transitive)
+ Addedxtend@4.0.2(transitive)
+ Addedyaeti@0.0.6(transitive)
+ Addedyallist@3.1.1(transitive)
- Removed@noble/hashes@1.7.1(transitive)
- Removedfmg-core@0.0.6(transitive)
Updatedfmg-core@^0.1.4
Updatedweb3-utils@^1.0.0-beta.36