From f3ba31cf6f8deaed27d0b85964ca7232ee412bf8 Mon Sep 17 00:00:00 2001 From: Sophia Koehler Date: Wed, 28 Aug 2024 11:55:03 +0200 Subject: [PATCH 01/15] chore: Update to latest multi-backend commit in go-perun. fix(All): Adjust to usage of Address maps instead of singular addresses. Signed-off-by: Sophia Koehler --- channel/adjudicator_test.go | 2 +- channel/asset.go | 4 +++ channel/backend.go | 16 ++++++------ channel/backend_test.go | 13 +++++----- channel/conclude_test.go | 8 +++--- channel/contractbackend_test.go | 15 ++++++------ channel/funder.go | 4 +-- channel/funder_test.go | 20 +++++++-------- channel/init.go | 2 +- channel/register_test.go | 6 ++--- channel/test/setup.go | 20 +++++++-------- channel/withdraw.go | 4 +-- channel/withdraw_test.go | 14 +++++------ client/app_test.go | 2 +- client/payment_test.go | 10 ++++---- client/subchannel_test.go | 4 +-- client/test/multiledger.go | 39 +++++++++++++++--------------- client/test/setup.go | 2 +- go.mod | 2 +- go.sum | 4 +-- wallet/address.go | 9 ++++++- wallet/hd/account.go | 4 +-- wallet/hd/transactor_test.go | 2 +- wallet/hd/wallet.go | 10 ++++---- wallet/hd/wallet_test.go | 5 ++-- wallet/init.go | 2 +- wallet/keystore/account.go | 4 +-- wallet/keystore/transactor_test.go | 2 +- wallet/keystore/wallet.go | 11 +++++---- wallet/keystore/wallet_test.go | 4 +-- wallet/simple/account.go | 4 +-- wallet/simple/transactor.go | 3 ++- wallet/simple/transactor_test.go | 2 +- wallet/simple/wallet.go | 11 +++++---- wallet/simple/wallet_test.go | 9 ++++--- wire/account.go | 4 +-- 36 files changed, 147 insertions(+), 130 deletions(-) diff --git a/channel/adjudicator_test.go b/channel/adjudicator_test.go index 3b163aa..60f1158 100644 --- a/channel/adjudicator_test.go +++ b/channel/adjudicator_test.go @@ -65,7 +65,7 @@ func TestSubscribeRegistered(t *testing.T) { params, state := channeltest.NewRandomParamsAndState( rng, channeltest.WithChallengeDuration(uint64(100*time.Second)), - channeltest.WithParts(s.Parts...), + channeltest.WithParts(s.Parts), channeltest.WithAssets(s.Asset), channeltest.WithIsFinal(false), channeltest.WithLedgerChannel(true), diff --git a/channel/asset.go b/channel/asset.go index a301127..b4ea8b6 100644 --- a/channel/asset.go +++ b/channel/asset.go @@ -79,6 +79,10 @@ type ( AssetMapKey string ) +func (a Asset) AssetID() multi.AssetID { + return multi.AssetID{BackendID: 1, LedgerId: a.ChainID} +} + // MapKey returns the asset's map key representation. func (a Asset) MapKey() AssetMapKey { d, err := a.MarshalBinary() diff --git a/channel/backend.go b/channel/backend.go index 77a800a..6e0f3e1 100644 --- a/channel/backend.go +++ b/channel/backend.go @@ -87,14 +87,14 @@ func init() { type Backend struct{} // CalcID calculates the channelID as needed by the ethereum smart contracts. -func (*Backend) CalcID(p *channel.Params) (id channel.ID) { +func (*Backend) CalcID(p *channel.Params) (id channel.ID, err error) { return CalcID(p) } // NewAppID creates a new app identifier, using an empty ethereum struct. -func (b *Backend) NewAppID() channel.AppID { +func (b *Backend) NewAppID() (channel.AppID, error) { addr := ðwallet.Address{} - return &AppID{addr} + return &AppID{addr}, nil } // Sign signs the channel state as needed by the ethereum smart contracts. @@ -114,14 +114,14 @@ func (b *Backend) NewAsset() channel.Asset { } // CalcID calculates the channelID as needed by the ethereum smart contracts. -func CalcID(p *channel.Params) (id channel.ID) { +func CalcID(p *channel.Params) (id channel.ID, err error) { params := ToEthParams(p) bytes, err := EncodeParams(¶ms) if err != nil { - log.Panicf("could not encode parameters: %v", err) + return id, errors.WithMessage(err, "could not encode parameters") } // Hash encoded params. - return crypto.Keccak256Hash(bytes) + return crypto.Keccak256Hash(bytes), nil } // HashState calculates the hash of a state as needed by the ethereum smart contracts. @@ -230,10 +230,10 @@ func EncodeState(state *adjudicator.ChannelState) ([]byte, error) { } // pwToCommonAddresses converts an array of perun/ethwallet.Addresses to common.Addresses. -func pwToCommonAddresses(addr []wallet.Address) []common.Address { +func pwToCommonAddresses(addr []map[int]wallet.Address) []common.Address { cAddrs := make([]common.Address, len(addr)) for i, part := range addr { - cAddrs[i] = ethwallet.AsEthAddr(part) + cAddrs[i] = ethwallet.AsEthAddr(part[1]) } return cAddrs } diff --git a/channel/backend_test.go b/channel/backend_test.go index 5cf2df0..ae89986 100644 --- a/channel/backend_test.go +++ b/channel/backend_test.go @@ -88,11 +88,12 @@ func TestAdjudicator_PureFunctions(t *testing.T) { func testCalcID(t *testing.T, rng *rand.Rand, contr *adjudicator.Adjudicator, opts *bind.CallOpts) { t.Helper() for i := 0; i < 100; i++ { - params := test.NewRandomParams(rng) + opt := test.WithBackend(1) + params := test.NewRandomParams(rng, opt) ethParams := channel.ToEthParams(params) ethID, err := contr.ChannelID(opts, ethParams) require.NoError(t, err) - chID := channel.CalcID(params) + chID, _ := channel.CalcID(params) require.NoError(t, err) require.Equal(t, chID, ethID) @@ -128,11 +129,11 @@ func TestGenericTests(t *testing.T) { } func newChannelSetup(rng *rand.Rand) *test.Setup { - params, state := test.NewRandomParamsAndState(rng, test.WithNumLocked(int(rng.Int31n(4)+1))) - params2, state2 := test.NewRandomParamsAndState(rng, test.WithIsFinal(!state.IsFinal), test.WithNumLocked(int(rng.Int31n(4)+1))) + params, state := test.NewRandomParamsAndState(rng, test.WithNumLocked(int(rng.Int31n(4)+1)), test.WithBackend(1)) + params2, state2 := test.NewRandomParamsAndState(rng, test.WithIsFinal(!state.IsFinal), test.WithNumLocked(int(rng.Int31n(4)+1)), test.WithBackend(1)) - createAddr := func() perunwallet.Address { - return wallettest.NewRandomAddress(rng) + createAddr := func() map[int]perunwallet.Address { + return map[int]perunwallet.Address{1: wallettest.NewRandomAddress(rng)} } return &test.Setup{ diff --git a/channel/conclude_test.go b/channel/conclude_test.go index 37e5561..a6ed45f 100644 --- a/channel/conclude_test.go +++ b/channel/conclude_test.go @@ -48,7 +48,7 @@ func testConcludeFinal(t *testing.T, numParts int) { // create valid state and params params, state := channeltest.NewRandomParamsAndState( rng, - channeltest.WithParts(s.Parts...), + channeltest.WithParts(s.Parts), channeltest.WithAssets(s.Asset), channeltest.WithIsFinal(true), channeltest.WithLedgerChannel(true), @@ -82,7 +82,7 @@ func testConcludeFinal(t *testing.T, numParts int) { Tx: tx, Secondary: (i != initiator), } - diff, err := test.NonceDiff(s.Accs[i].Address(), s.Adjs[i], func() error { + diff, err := test.NonceDiff(s.Accs[i].Address()[1], s.Adjs[i], func() error { return s.Adjs[i].Register(ctx, req, nil) }) require.NoError(t, err, "Withdrawing should succeed") @@ -198,10 +198,10 @@ type paramsAndState struct { state *channel.State } -func makeRandomChannel(rng *rand.Rand, participants []wallet.Address, asset channel.Asset, challengeDuration uint64, ledger bool) paramsAndState { +func makeRandomChannel(rng *rand.Rand, participants []map[int]wallet.Address, asset channel.Asset, challengeDuration uint64, ledger bool) paramsAndState { params, state := channeltest.NewRandomParamsAndState( rng, - channeltest.WithParts(participants...), + channeltest.WithParts(participants), channeltest.WithAssets(asset), channeltest.WithIsFinal(false), channeltest.WithNumLocked(0), diff --git a/channel/contractbackend_test.go b/channel/contractbackend_test.go index 07b910a..6d81714 100644 --- a/channel/contractbackend_test.go +++ b/channel/contractbackend_test.go @@ -41,29 +41,28 @@ func fromEthAddr(a common.Address) wallet.Address { func Test_calcFundingIDs(t *testing.T) { tests := []struct { name string - participants []wallet.Address + participants []map[int]wallet.Address channelID [32]byte want [][32]byte }{ {"Test nil array, empty channelID", nil, [32]byte{}, make([][32]byte, 0)}, {"Test nil array, non-empty channelID", nil, [32]byte{1}, make([][32]byte, 0)}, - {"Test empty array, non-empty channelID", []wallet.Address{}, [32]byte{1}, make([][32]byte, 0)}, + {"Test empty array, non-empty channelID", []map[int]wallet.Address{}, [32]byte{1}, make([][32]byte, 0)}, // Tests based on actual data from contracts. { - "Test non-empty array, empty channelID", - []wallet.Address{ðwallet.Address{}}, - [32]byte{}, - [][32]byte{{173, 50, 40, 182, 118, 247, 211, 205, 66, 132, 165, 68, 63, 23, 241, 150, 43, 54, 228, 145, 179, 10, 64, 178, 64, 88, 73, 229, 151, 186, 95, 181}}, + name: "Test non-empty array, empty channelID", + participants: []map[int]wallet.Address{{1: ðwallet.Address{}}}, + want: [][32]byte{{173, 50, 40, 182, 118, 247, 211, 205, 66, 132, 165, 68, 63, 23, 241, 150, 43, 54, 228, 145, 179, 10, 64, 178, 64, 88, 73, 229, 151, 186, 95, 181}}, }, { "Test non-empty array, non-empty channelID", - []wallet.Address{ðwallet.Address{}}, + []map[int]wallet.Address{{1: ðwallet.Address{}}}, [32]byte{1}, [][32]byte{{130, 172, 39, 157, 178, 106, 32, 109, 155, 165, 169, 76, 7, 255, 148, 10, 234, 75, 59, 253, 232, 130, 14, 201, 95, 78, 250, 10, 207, 208, 213, 188}}, }, { "Test non-empty array, non-empty channelID", - []wallet.Address{fromEthAddr(common.BytesToAddress([]byte{}))}, + []map[int]wallet.Address{{1: fromEthAddr(common.BytesToAddress([]byte{}))}}, [32]byte{1}, [][32]byte{{130, 172, 39, 157, 178, 106, 32, 109, 155, 165, 169, 76, 7, 255, 148, 10, 234, 75, 59, 253, 232, 130, 14, 201, 95, 78, 250, 10, 207, 208, 213, 188}}, }, diff --git a/channel/funder.go b/channel/funder.go index ff8b905..152a558 100644 --- a/channel/funder.go +++ b/channel/funder.go @@ -539,10 +539,10 @@ func partIdx(partID [32]byte, fundingIDs [][32]byte) int { // FundingIDs returns a slice the same size as the number of passed participants // where each entry contains the hash Keccak256(channel id || participant address). -func FundingIDs(channelID channel.ID, participants ...perunwallet.Address) [][32]byte { +func FundingIDs(channelID channel.ID, participants ...map[int]perunwallet.Address) [][32]byte { ids := make([][32]byte, len(participants)) for idx, pID := range participants { - address, ok := pID.(*wallet.Address) + address, ok := pID[1].(*wallet.Address) if !ok { log.Panic("wrong address type") } diff --git a/channel/funder_test.go b/channel/funder_test.go index f32b48f..31649c7 100644 --- a/channel/funder_test.go +++ b/channel/funder_test.go @@ -138,7 +138,7 @@ func testFunderOneForAllFunding(t *testing.T, n int) { i := i go ct.StageN("funding", n, func(rt pkgtest.ConcT) { req := channel.NewFundingReq(params, &channel.State{Allocation: *alloc}, channel.Index(i), agreement) - diff, err := test.NonceDiff(parts[i], funders[i], func() error { + diff, err := test.NonceDiff(parts[i][1], funders[i], func() error { return funders[i].Fund(ctx, *req) }) require.NoError(rt, err) @@ -183,7 +183,7 @@ func testFunderCrossOverFunding(t *testing.T, n int) { req := channel.NewFundingReq(params, &channel.State{Allocation: *alloc}, channel.Index(i), agreement) numTx, err := funders[i].NumTX(*req) require.NoError(t, err) - diff, err := test.NonceDiff(parts[i], funder, func() error { + diff, err := test.NonceDiff(parts[i][1], funder, func() error { return funder.Fund(ctx, *req) }) require.NoError(rt, err, "funding should succeed") @@ -276,7 +276,7 @@ func testFunderZeroBalance(t *testing.T, n int) { go ct.StageN("funding", n, func(rt pkgtest.ConcT) { req := channel.NewFundingReq(params, &channel.State{Allocation: *alloc}, channel.Index(i), agreement) - diff, err := test.NonceDiff(parts[i], funders[i], func() error { + diff, err := test.NonceDiff(parts[i][1], funders[i], func() error { return funders[i].Fund(ctx, *req) }) require.NoError(rt, err) @@ -316,7 +316,7 @@ func TestFunder_Multiple(t *testing.T) { numTx, err = funders[0].NumTX(*req) require.NoError(t, err) } - diff, err := test.NonceDiff(parts[0], funders[0], func() error { + diff, err := test.NonceDiff(parts[0][1], funders[0], func() error { return funders[0].Fund(ctx, *req) }) require.NoError(t, err) @@ -433,7 +433,7 @@ func newNFunders( rng *rand.Rand, n int, ) ( - parts []wallet.Address, + parts []map[int]wallet.Address, funders []*ethchannel.Funder, params *channel.Params, allocation *channel.Allocation, @@ -471,14 +471,14 @@ func newNFunders( t.Logf("asset holder #2 address is %s", assetAddr2.Hex()) asset2 := ethchannel.NewAsset(chainID, assetAddr2) - parts = make([]wallet.Address, n) + parts = make([]map[int]wallet.Address, n) funders = make([]*ethchannel.Funder, n) for i := range parts { acc := ksWallet.NewRandomAccount(rng).(*keystore.Account).Account - parts[i] = ethwallet.AsWalletAddr(acc.Address) + parts[i] = map[int]wallet.Address{1: ethwallet.AsWalletAddr(acc.Address)} - simBackend.FundAddress(ctx, ethwallet.AsEthAddr(parts[i])) - err = fundERC20(ctx, cb, *tokenAcc, ethwallet.AsEthAddr(parts[i]), token, *asset2) + simBackend.FundAddress(ctx, ethwallet.AsEthAddr(parts[i][1])) + err = fundERC20(ctx, cb, *tokenAcc, ethwallet.AsEthAddr(parts[i][1]), token, *asset2) require.NoError(t, err) funders[i] = ethchannel.NewFunder(cb) @@ -491,7 +491,7 @@ func newNFunders( // By using a large value, we make sure that longer running tests work. params = channeltest.NewRandomParams( rng, - channeltest.WithParts(parts...), + channeltest.WithParts(parts), channeltest.WithChallengeDuration(uint64(n)*40000), ) allocation = channeltest.NewRandomAllocation( diff --git a/channel/init.go b/channel/init.go index 028eb7d..9830d59 100644 --- a/channel/init.go +++ b/channel/init.go @@ -19,5 +19,5 @@ import ( ) func init() { - channel.SetBackend(new(Backend)) + channel.SetBackend(new(Backend), 1) } diff --git a/channel/register_test.go b/channel/register_test.go index d1d16be..ab1a702 100644 --- a/channel/register_test.go +++ b/channel/register_test.go @@ -54,7 +54,7 @@ func registerMultiple(t *testing.T, numParts int, parallel bool) { params, state := channeltest.NewRandomParamsAndState( rng, channeltest.WithChallengeDuration(uint64(100*time.Second)), - channeltest.WithParts(s.Parts...), + channeltest.WithParts(s.Parts), channeltest.WithAssets(s.Asset), channeltest.WithIsFinal(false), channeltest.WithLedgerChannel(true), @@ -150,7 +150,7 @@ func TestRegister_FinalState(t *testing.T) { params, state := channeltest.NewRandomParamsAndState( rng, channeltest.WithChallengeDuration(uint64(100*time.Second)), - channeltest.WithParts(s.Parts...), + channeltest.WithParts(s.Parts), channeltest.WithAssets(s.Asset), channeltest.WithIsFinal(true), channeltest.WithLedgerChannel(true), @@ -192,7 +192,7 @@ func TestRegister_CancelledContext(t *testing.T) { params, state := channeltest.NewRandomParamsAndState( rng, channeltest.WithChallengeDuration(uint64(100*time.Second)), - channeltest.WithParts(s.Parts...), + channeltest.WithParts(s.Parts), channeltest.WithAssets(s.Asset), channeltest.WithIsFinal(false), channeltest.WithLedgerChannel(true), diff --git a/channel/test/setup.go b/channel/test/setup.go index 5aaaecc..5d50a4d 100644 --- a/channel/test/setup.go +++ b/channel/test/setup.go @@ -50,12 +50,12 @@ type ( // Setup holds a complete test setup for channel backend testing. Setup struct { SimSetup - Accs []*keystore.Account // on-chain funders and channel participant accounts - Parts []wallet.Address // channel participants - Recvs []*ethwallet.Address // on-chain receivers of withdrawn funds - Funders []*ethchannel.Funder // funders, bound to respective account - Adjs []*SimAdjudicator // adjudicator, withdrawal bound to respecive receivers - Asset *ethchannel.Asset // the asset + Accs []*keystore.Account // on-chain funders and channel participant accounts + Parts []map[int]wallet.Address // channel participants + Recvs []map[int]*ethwallet.Address // on-chain receivers of withdrawn funds + Funders []*ethchannel.Funder // funders, bound to respective account + Adjs []*SimAdjudicator // adjudicator, withdrawal bound to respecive receivers + Asset *ethchannel.Asset // the asset } ) @@ -101,8 +101,8 @@ func NewSetup(t *testing.T, rng *rand.Rand, n int, blockInterval time.Duration, s := &Setup{ SimSetup: *NewSimSetup(t, rng, txFinalityDepth, blockInterval), Accs: make([]*keystore.Account, n), - Parts: make([]wallet.Address, n), - Recvs: make([]*ethwallet.Address, n), + Parts: make([]map[int]wallet.Address, n), + Recvs: make([]map[int]*ethwallet.Address, n), Funders: make([]*ethchannel.Funder, n), Adjs: make([]*SimAdjudicator, n), } @@ -120,7 +120,7 @@ func NewSetup(t *testing.T, rng *rand.Rand, n int, blockInterval time.Duration, s.Accs[i] = ksWallet.NewRandomAccount(rng).(*keystore.Account) s.Parts[i] = s.Accs[i].Address() s.SimBackend.FundAddress(ctx, s.Accs[i].Account.Address) - s.Recvs[i] = ksWallet.NewRandomAccount(rng).Address().(*ethwallet.Address) + s.Recvs[i] = map[int]*ethwallet.Address{1: ksWallet.NewRandomAccount(rng).Address()[1].(*ethwallet.Address)} cb := ethchannel.NewContractBackend( s.SimBackend, ethchannel.MakeChainID(s.SimBackend.ChainID()), @@ -129,7 +129,7 @@ func NewSetup(t *testing.T, rng *rand.Rand, n int, blockInterval time.Duration, ) s.Funders[i] = ethchannel.NewFunder(cb) require.True(t, s.Funders[i].RegisterAsset(*s.Asset, ethchannel.NewETHDepositor(defaultETHGasLimit), s.Accs[i].Account)) - s.Adjs[i] = NewSimAdjudicator(cb, adjudicator, common.Address(*s.Recvs[i]), s.Accs[i].Account) + s.Adjs[i] = NewSimAdjudicator(cb, adjudicator, common.Address(*s.Recvs[i][1]), s.Accs[i].Account) } return s diff --git a/channel/withdraw.go b/channel/withdraw.go index 541709b..5aa4317 100644 --- a/channel/withdraw.go +++ b/channel/withdraw.go @@ -163,7 +163,7 @@ func (a *Adjudicator) callAssetWithdraw(ctx context.Context, request channel.Adj } func (a *Adjudicator) newWithdrawalAuth(request channel.AdjudicatorReq, asset assetHolder) (assetholder.AssetHolderWithdrawalAuth, []byte, error) { - fid := FundingID(request.Tx.ID, request.Params.Parts[request.Idx]) + fid := FundingID(request.Tx.ID, request.Params.Parts[request.Idx][1]) bal, err := asset.Assetholder.Holdings(nil, fid) if err != nil { return assetholder.AssetHolderWithdrawalAuth{}, nil, fmt.Errorf("getting balance: %w", err) @@ -171,7 +171,7 @@ func (a *Adjudicator) newWithdrawalAuth(request channel.AdjudicatorReq, asset as auth := assetholder.AssetHolderWithdrawalAuth{ ChannelID: request.Params.ID(), - Participant: wallet.AsEthAddr(request.Acc.Address()), + Participant: wallet.AsEthAddr(request.Acc.Address()[1]), Receiver: a.Receiver, Amount: bal, } diff --git a/channel/withdraw_test.go b/channel/withdraw_test.go index e5b0d5d..bd5d6d6 100644 --- a/channel/withdraw_test.go +++ b/channel/withdraw_test.go @@ -54,7 +54,7 @@ func withdrawMultipleConcurrentFinal(t *testing.T, numParts int, parallel bool) // create valid state and params params, state := channeltest.NewRandomParamsAndState( rng, - channeltest.WithParts(s.Parts...), + channeltest.WithParts(s.Parts), channeltest.WithAssets(s.Asset), channeltest.WithIsFinal(false), channeltest.WithLedgerChannel(true), @@ -133,7 +133,7 @@ func testWithdrawZeroBalance(t *testing.T, n int) { // create valid state and params params, state := channeltest.NewRandomParamsAndState( rng, - channeltest.WithParts(s.Parts...), + channeltest.WithParts(s.Parts), channeltest.WithAssets(s.Asset), channeltest.WithIsFinal(true), channeltest.WithLedgerChannel(true), @@ -175,7 +175,7 @@ func testWithdrawZeroBalance(t *testing.T, n int) { req.Acc = s.Accs[i] req.Idx = channel.Index(i) // check that the nonce stays the same for zero balance withdrawals - diff, err := test.NonceDiff(s.Accs[i].Address(), adj, func() error { + diff, err := test.NonceDiff(s.Accs[i].Address()[1], adj, func() error { return adj.Withdraw(context.Background(), req, nil) }) require.NoError(t, err) @@ -195,7 +195,7 @@ func TestWithdraw(t *testing.T) { // create valid state and params params, state := channeltest.NewRandomParamsAndState( rng, - channeltest.WithParts(s.Parts...), + channeltest.WithParts(s.Parts), channeltest.WithAssets(s.Asset), channeltest.WithIsFinal(false), channeltest.WithLedgerChannel(true), @@ -238,12 +238,12 @@ func TestWithdraw(t *testing.T) { t.Run("Withdrawal idempotence", func(t *testing.T) { for i := 0; i < 10; i++ { // get nonce - oldNonce, err := s.Adjs[0].PendingNonceAt(context.Background(), ethwallet.AsEthAddr(s.Accs[0].Address())) + oldNonce, err := s.Adjs[0].PendingNonceAt(context.Background(), ethwallet.AsEthAddr(s.Accs[0].Address()[1])) require.NoError(t, err) // withdraw testWithdraw(t, true) // get nonce - nonce, err := s.Adjs[0].PendingNonceAt(context.Background(), ethwallet.AsEthAddr(s.Accs[0].Address())) + nonce, err := s.Adjs[0].PendingNonceAt(context.Background(), ethwallet.AsEthAddr(s.Accs[0].Address()[1])) require.NoError(t, err) assert.Equal(t, oldNonce, nonce, "Nonce must not change in subsequent withdrawals") } @@ -259,7 +259,7 @@ func TestWithdrawNonFinal(t *testing.T) { params, state := channeltest.NewRandomParamsAndState( rng, channeltest.WithChallengeDuration(60), - channeltest.WithParts(s.Parts...), + channeltest.WithParts(s.Parts), channeltest.WithAssets(s.Asset), channeltest.WithIsFinal(false), channeltest.WithoutApp(), diff --git a/client/app_test.go b/client/app_test.go index 8b46b3b..70bd3ae 100644 --- a/client/app_test.go +++ b/client/app_test.go @@ -73,7 +73,7 @@ func deployMockApp(t *testing.T, s *test.Setup) wallet.Address { return ethwallet.AsWalletAddr(addr) } -func clientAddresses(roleSetups []clienttest.RoleSetup) (addresses [2]wire.Address) { +func clientAddresses(roleSetups []clienttest.RoleSetup) (addresses [2]map[int]wire.Address) { for i := 0; i < len(roleSetups); i++ { addresses[i] = roleSetups[i].Identity.Address() } diff --git a/client/payment_test.go b/client/payment_test.go index e592b45..4c6f150 100644 --- a/client/payment_test.go +++ b/client/payment_test.go @@ -63,7 +63,7 @@ func TestPaymentHappy(t *testing.T) { execConfig := &clienttest.AliceBobExecConfig{ BaseExecConfig: clienttest.MakeBaseExecConfig( - [2]wire.Address{setup[A].Identity.Address(), setup[B].Identity.Address()}, + [2]map[int]wire.Address{setup[A].Identity.Address(), setup[B].Identity.Address()}, s.Asset, [2]*big.Int{big.NewInt(100), big.NewInt(100)}, client.WithApp(chtest.NewRandomAppAndData(rng)), @@ -98,8 +98,8 @@ func TestPaymentHappy(t *testing.T) { assert.Zero(t, bal.Cmp(b), "ETH balance mismatch") } - assertBal(s.Recvs[A], finalBalAlice) - assertBal(s.Recvs[B], finalBalBob) + assertBal(s.Recvs[A][1], finalBalAlice) + assertBal(s.Recvs[B][1], finalBalBob) log.Info("Happy test done") } @@ -122,7 +122,7 @@ func TestPaymentDispute(t *testing.T) { execConfig := &clienttest.MalloryCarolExecConfig{ BaseExecConfig: clienttest.MakeBaseExecConfig( - [2]wire.Address{setup[A].Identity.Address(), setup[B].Identity.Address()}, + [2]map[int]wire.Address{setup[A].Identity.Address(), setup[B].Identity.Address()}, s.Asset, [2]*big.Int{big.NewInt(100), big.NewInt(1)}, client.WithoutApp(), @@ -146,7 +146,7 @@ func TestPaymentDispute(t *testing.T) { ctx, cancel = context.WithTimeout(context.Background(), ctest.DefaultTimeout) defer cancel() for i, bal := range finalBal { - b, err := s.SimBackend.BalanceAt(ctx, common.Address(*s.Recvs[i]), nil) + b, err := s.SimBackend.BalanceAt(ctx, common.Address(*s.Recvs[i][1]), nil) require.NoError(t, err) assert.Zero(t, b.Cmp(bal), "ETH balance mismatch") } diff --git a/client/subchannel_test.go b/client/subchannel_test.go index 3ba550e..5d7bc77 100644 --- a/client/subchannel_test.go +++ b/client/subchannel_test.go @@ -44,7 +44,7 @@ func TestSubChannelHappy(t *testing.T) { // Build configuration. baseCfg := clienttest.MakeBaseExecConfig( - [2]wire.Address{setups[A].Identity.Address(), setups[B].Identity.Address()}, + [2]map[int]wire.Address{setups[A].Identity.Address(), setups[B].Identity.Address()}, s.Asset, [2]*big.Int{big.NewInt(100), big.NewInt(100)}, client.WithoutApp(), @@ -97,7 +97,7 @@ func TestSubChannelDispute(t *testing.T) { roles[B].SetStages(stages) baseCfg := clienttest.MakeBaseExecConfig( - [2]wire.Address{setups[A].Identity.Address(), setups[B].Identity.Address()}, + [2]map[int]wire.Address{setups[A].Identity.Address(), setups[B].Identity.Address()}, s.Asset, [2]*big.Int{big.NewInt(100), big.NewInt(100)}, client.WithoutApp(), diff --git a/client/test/multiledger.go b/client/test/multiledger.go index 711e631..f5cb8b6 100644 --- a/client/test/multiledger.go +++ b/client/test/multiledger.go @@ -25,7 +25,7 @@ import ( "github.com/ethereum/go-ethereum/params" ethchannel "github.com/perun-network/perun-eth-backend/channel" chtest "github.com/perun-network/perun-eth-backend/channel/test" - "github.com/perun-network/perun-eth-backend/wallet" + ethwallet "github.com/perun-network/perun-eth-backend/wallet" "github.com/perun-network/perun-eth-backend/wallet/keystore" ethwire "github.com/perun-network/perun-eth-backend/wire" "github.com/stretchr/testify/require" @@ -34,6 +34,7 @@ import ( "perun.network/go-perun/channel/multi" "perun.network/go-perun/client" ctest "perun.network/go-perun/client/test" + "perun.network/go-perun/wallet" wtest "perun.network/go-perun/wallet/test" "perun.network/go-perun/watcher/local" "perun.network/go-perun/wire" @@ -65,10 +66,10 @@ func SetupMultiLedgerTest(t *testing.T, testDuration time.Duration) ctest.MultiL c2 := setupClient(t, rng, l1, l2, bus) // Fund accounts. - l1.simSetup.SimBackend.FundAddress(ctx, wallet.AsEthAddr(c1.WalletAddress)) - l1.simSetup.SimBackend.FundAddress(ctx, wallet.AsEthAddr(c2.WalletAddress)) - l2.simSetup.SimBackend.FundAddress(ctx, wallet.AsEthAddr(c1.WalletAddress)) - l2.simSetup.SimBackend.FundAddress(ctx, wallet.AsEthAddr(c2.WalletAddress)) + l1.simSetup.SimBackend.FundAddress(ctx, ethwallet.AsEthAddr(c1.WalletAddress[1])) + l1.simSetup.SimBackend.FundAddress(ctx, ethwallet.AsEthAddr(c2.WalletAddress[1])) + l2.simSetup.SimBackend.FundAddress(ctx, ethwallet.AsEthAddr(c1.WalletAddress[1])) + l2.simSetup.SimBackend.FundAddress(ctx, ethwallet.AsEthAddr(c2.WalletAddress[1])) //nolint:gomnd return ctest.MultiLedgerSetup{ @@ -99,8 +100,8 @@ type testLedger struct { asset *ethchannel.Asset } -func (l testLedger) ChainID() ethchannel.ChainID { - return ethchannel.MakeChainID(l.simSetup.SimBackend.ChainID()) +func (l testLedger) AssetID() multi.AssetID { + return multi.AssetID{1, ethchannel.MakeChainID(l.simSetup.SimBackend.ChainID())} } func setupLedger(ctx context.Context, t *testing.T, rng *rand.Rand, chainID *big.Int) testLedger { @@ -138,14 +139,14 @@ func setupClient(t *testing.T, rng *rand.Rand, l1, l2 testLedger, bus wire.Bus) signer1 := l1.simSetup.SimBackend.Signer cb1 := ethchannel.NewContractBackend( l1.simSetup.CB, - l1.ChainID(), + l1.AssetID().LedgerId.(ethchannel.ChainID), keystore.NewTransactor(*w, signer1), l1.simSetup.CB.TxFinalityDepth(), ) signer2 := l2.simSetup.SimBackend.Signer cb2 := ethchannel.NewContractBackend( l2.simSetup.CB, - l2.ChainID(), + l2.AssetID().LedgerId.(ethchannel.ChainID), keystore.NewTransactor(*w, signer2), l2.simSetup.CB.TxFinalityDepth(), ) @@ -162,25 +163,25 @@ func setupClient(t *testing.T, rng *rand.Rand, l1, l2 testLedger, bus wire.Bus) require.True(registered) registered = funderL2.RegisterAsset(*l2.asset, ethchannel.NewETHDepositor(defaultETHGasLimit), acc.Account) require.True(registered) - multiFunder.RegisterFunder(l1.ChainID(), funderL1) - multiFunder.RegisterFunder(l2.ChainID(), funderL2) + multiFunder.RegisterFunder(l1.AssetID(), funderL1) + multiFunder.RegisterFunder(l2.AssetID(), funderL2) // Setup adjudicator. multiAdj := multi.NewAdjudicator() adjL1 := chtest.NewSimAdjudicator(*l1.simSetup.CB, l1.adjudicator, acc.Account.Address, acc.Account) adjL2 := chtest.NewSimAdjudicator(*l2.simSetup.CB, l2.adjudicator, acc.Account.Address, acc.Account) - multiAdj.RegisterAdjudicator(l1.ChainID(), adjL1) - multiAdj.RegisterAdjudicator(l2.ChainID(), adjL2) + multiAdj.RegisterAdjudicator(l1.AssetID(), adjL1) + multiAdj.RegisterAdjudicator(l2.AssetID(), adjL2) // Setup watcher. watcher, err := local.NewWatcher(multiAdj) require.NoError(err) - walletAddr := acc.Address().(*wallet.Address) + walletAddr := acc.Address()[1].(*ethwallet.Address) wireAddr := ðwire.Address{Address: walletAddr} c, err := client.New( - wireAddr, + map[int]wire.Address{1: wireAddr}, bus, multiFunder, multiAdj, @@ -193,11 +194,11 @@ func setupClient(t *testing.T, rng *rand.Rand, l1, l2 testLedger, bus wire.Bus) Client: c, Adjudicator1: adjL1, Adjudicator2: adjL2, - WireAddress: wireAddr, - WalletAddress: walletAddr, + WireAddress: map[int]wire.Address{1: wireAddr}, + WalletAddress: map[int]wallet.Address{1: walletAddr}, Events: make(chan channel.AdjudicatorEvent), - BalanceReader1: l1.simSetup.SimBackend.NewBalanceReader(acc.Address()), - BalanceReader2: l2.simSetup.SimBackend.NewBalanceReader(acc.Address()), + BalanceReader1: l1.simSetup.SimBackend.NewBalanceReader(acc.Address()[1]), + BalanceReader2: l2.simSetup.SimBackend.NewBalanceReader(acc.Address()[1]), } } diff --git a/client/test/setup.go b/client/test/setup.go index 0095fe4..82080d1 100644 --- a/client/test/setup.go +++ b/client/test/setup.go @@ -57,7 +57,7 @@ func MakeRoleSetups(rng *rand.Rand, s *ethctest.Setup, names []string) []clientt // Scaled due to simbackend automining progressing faster than real time. ChallengeDuration: challengeDurationBlocks * uint64(time.Second/BlockInterval), Errors: make(chan error), - BalanceReader: s.SimBackend.NewBalanceReader(s.Accs[i].Address()), + BalanceReader: s.SimBackend.NewBalanceReader(s.Accs[i].Address()[1]), } } return setups diff --git a/go.mod b/go.mod index 48bf91d..74cceaa 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/sirupsen/logrus v1.8.1 github.com/stretchr/testify v1.7.0 golang.org/x/sync v0.0.0-20210220032951-036812b2e83c - perun.network/go-perun v0.11.1-0.20240326094100-011cfdf0ea51 + perun.network/go-perun v0.11.1-0.20240828094952-28685ea1a4e8 polycry.pt/poly-go v0.0.0-20220301085937-fb9d71b45a37 ) diff --git a/go.sum b/go.sum index ce9296c..2981a29 100644 --- a/go.sum +++ b/go.sum @@ -645,8 +645,8 @@ honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= -perun.network/go-perun v0.11.1-0.20240326094100-011cfdf0ea51 h1:fIM4nKc6OKkBX/gJrCTMMFmxeoFTE1DAerndDW/njVc= -perun.network/go-perun v0.11.1-0.20240326094100-011cfdf0ea51/go.mod h1:VfCebjZTnFrQRcjbkK1s1l+H71MKW7jodpFQBdP7tRQ= +perun.network/go-perun v0.11.1-0.20240828094952-28685ea1a4e8 h1:tP8t4ku45zprLodQO5zN7vd9RBEeTCN3PdTP7fdlgb4= +perun.network/go-perun v0.11.1-0.20240828094952-28685ea1a4e8/go.mod h1:mkmgZ/EQ7EPpDprFkg5+0Cz+QEIJb4SezkDdEPyKtVI= polycry.pt/poly-go v0.0.0-20220301085937-fb9d71b45a37 h1:iA5GzEa/hHfVlQpimEjPV09NATwHXxSjWNB0VVodtew= polycry.pt/poly-go v0.0.0-20220301085937-fb9d71b45a37/go.mod h1:XUBrNtqgEhN3EEOP/5gh7IBd3xVHKidCjXDZfl9+kMU= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= diff --git a/wallet/address.go b/wallet/address.go index 1898263..323381a 100644 --- a/wallet/address.go +++ b/wallet/address.go @@ -33,6 +33,11 @@ var _ wallet.Address = (*Address)(nil) // Address represents an ethereum address as a perun address. type Address common.Address +// BackendID returns the official identifier for the eth-backend. +func (a *Address) BackendID() int { + return 1 +} + // bytes returns the address as a byte slice. func (a *Address) bytes() []byte { return (*common.Address)(a).Bytes() @@ -70,7 +75,9 @@ func (a *Address) Equal(addr wallet.Address) bool { } // Cmp checks ordering of two addresses. -// 0 if a==b, +// +// 0 if a==b, +// // -1 if a < b, // +1 if a > b. // https://godoc.org/bytes#Compare diff --git a/wallet/hd/account.go b/wallet/hd/account.go index a2df903..5d16614 100644 --- a/wallet/hd/account.go +++ b/wallet/hd/account.go @@ -30,8 +30,8 @@ type Account struct { } // Address returns the address of this account. -func (a *Account) Address() wallet.Address { - return ethwallet.AsWalletAddr(a.Account.Address) +func (a *Account) Address() map[int]wallet.Address { + return map[int]wallet.Address{1: ethwallet.AsWalletAddr(a.Account.Address)} } // SignData is used to sign data with this account. diff --git a/wallet/hd/transactor_test.go b/wallet/hd/transactor_test.go index 8378521..0c8db45 100644 --- a/wallet/hd/transactor_test.go +++ b/wallet/hd/transactor_test.go @@ -124,7 +124,7 @@ func newTransactorSetup(t *testing.T, prng *rand.Rand, hideSignHash bool, signer ChainID: chainID, TxType: txType, Tr: hd.NewTransactor(hdWallet.Wallet(), signer), - ValidAcc: accounts.Account{Address: wallet.AsEthAddr(validAcc.Address())}, + ValidAcc: accounts.Account{Address: wallet.AsEthAddr(validAcc.Address()[1])}, MissingAcc: accounts.Account{Address: common.HexToAddress(missingAddr)}, } } diff --git a/wallet/hd/wallet.go b/wallet/hd/wallet.go index a5d8c7a..7b292f0 100644 --- a/wallet/hd/wallet.go +++ b/wallet/hd/wallet.go @@ -112,11 +112,11 @@ func (w *Wallet) newAccount() (*Account, error) { // Unlock checks if the wallet contains the account corresponding to the given address. // There is no concept of unlocking in software only hd wallet. -func (w *Wallet) Unlock(addr wallet.Address) (wallet.Account, error) { +func (w *Wallet) Unlock(addr map[int]wallet.Address) (wallet.Account, error) { w.mutex.Lock() defer w.mutex.Unlock() - - acc := accounts.Account{Address: ethwallet.AsEthAddr(addr)} + ethAddr := addr[1] + acc := accounts.Account{Address: ethwallet.AsEthAddr(ethAddr)} if !w.wallet.Contains(acc) { return nil, errors.New("account not found in wallet") } @@ -130,7 +130,7 @@ func (w *Wallet) Unlock(addr wallet.Address) (wallet.Account, error) { func (w *Wallet) LockAll() {} // IncrementUsage implements wallet.Wallet. It is a noop. -func (w *Wallet) IncrementUsage(a wallet.Address) {} +func (w *Wallet) IncrementUsage(a map[int]wallet.Address) {} // DecrementUsage implements wallet.Wallet. It is a noop. -func (w *Wallet) DecrementUsage(a wallet.Address) {} +func (w *Wallet) DecrementUsage(a map[int]wallet.Address) {} diff --git a/wallet/hd/wallet_test.go b/wallet/hd/wallet_test.go index 295a4a3..4df6fee 100644 --- a/wallet/hd/wallet_test.go +++ b/wallet/hd/wallet_test.go @@ -16,6 +16,7 @@ package hd_test import ( "math/rand" + "perun.network/go-perun/wallet" "testing" "github.com/ethereum/go-ethereum/accounts" @@ -82,7 +83,7 @@ func TestUnlock(t *testing.T) { setup, _, hdWallet := newSetup(t, pkgtest.Prng(t)) missingAddr := common.BytesToAddress(setup.AddressMarshalled) - _, err := hdWallet.Unlock(ethwallet.AsWalletAddr(missingAddr)) + _, err := hdWallet.Unlock(map[int]wallet.Address{1: ethwallet.AsWalletAddr(missingAddr)}) assert.Error(t, err, "should error on unlocking missing address") acc, err := hdWallet.Unlock(setup.AddressInWallet) @@ -98,7 +99,7 @@ func TestContains(t *testing.T) { missingAddr := common.BytesToAddress(setup.AddressMarshalled) assert.False(t, hdWallet.Contains(missingAddr), "should not contain address of the missing account") - assert.True(t, hdWallet.Contains(ethwallet.AsEthAddr(setup.AddressInWallet)), "should contain valid account") + assert.True(t, hdWallet.Contains(ethwallet.AsEthAddr(setup.AddressInWallet[1])), "should contain valid account") } func newSetup(t require.TestingT, prng *rand.Rand) (*test.Setup, accounts.Wallet, *hd.Wallet) { diff --git a/wallet/init.go b/wallet/init.go index 5cffa12..a351794 100644 --- a/wallet/init.go +++ b/wallet/init.go @@ -19,5 +19,5 @@ import ( ) func init() { - wallet.SetBackend(new(Backend)) + wallet.SetBackend(new(Backend), 1) } diff --git a/wallet/keystore/account.go b/wallet/keystore/account.go index 41ec767..ba64a39 100644 --- a/wallet/keystore/account.go +++ b/wallet/keystore/account.go @@ -29,8 +29,8 @@ type Account struct { } // Address returns the ethereum address of this account. -func (a *Account) Address() wallet.Address { - return (*ethwallet.Address)(&a.Account.Address) +func (a *Account) Address() map[int]wallet.Address { + return map[int]wallet.Address{1: (*ethwallet.Address)(&a.Account.Address)} } // SignData is used to sign data with this account. diff --git a/wallet/keystore/transactor_test.go b/wallet/keystore/transactor_test.go index 16d1f92..304def7 100644 --- a/wallet/keystore/transactor_test.go +++ b/wallet/keystore/transactor_test.go @@ -87,7 +87,7 @@ func newTransactorSetup(t require.TestingT, prng *rand.Rand, signer types.Signer ChainID: chainID, TxType: txType, Tr: keystore.NewTransactor(*ksWallet, signer), - ValidAcc: accounts.Account{Address: wallet.AsEthAddr(acc.Address())}, + ValidAcc: accounts.Account{Address: wallet.AsEthAddr(acc.Address()[1])}, MissingAcc: accounts.Account{Address: common.HexToAddress(randomAddr)}, } } diff --git a/wallet/keystore/wallet.go b/wallet/keystore/wallet.go index 15ad744..02f4ff2 100644 --- a/wallet/keystore/wallet.go +++ b/wallet/keystore/wallet.go @@ -93,7 +93,7 @@ func (w *Wallet) NewRandomAccount(rnd *rand.Rand) wallet.Account { acc = ethAcc } - _, err = w.Unlock((*ethwallet.Address)(&address)) // Unlock should never return an error. + _, err = w.Unlock(map[int]wallet.Address{1: (*ethwallet.Address)(&address)}) // Unlock should never return an error. if err != nil { log.Panic(err) } @@ -102,10 +102,11 @@ func (w *Wallet) NewRandomAccount(rnd *rand.Rand) wallet.Account { // Unlock retrieves the account with the given address and unlocks it. If there // is no matching account or unlocking fails, returns an error. -func (w *Wallet) Unlock(addr wallet.Address) (wallet.Account, error) { +func (w *Wallet) Unlock(addr map[int]wallet.Address) (wallet.Account, error) { log.Debugf("Unlocking account %v", addr) + Addr := addr[1] // Hack: create ethereum account from ethereum address. - ethAddr, ok := addr.(*ethwallet.Address) + ethAddr, ok := Addr.(*ethwallet.Address) if !ok { return nil, fmt.Errorf("wrong type: expected %T, got %T", ðwallet.Address{}, addr) } @@ -138,11 +139,11 @@ func (w *Wallet) LockAll() { } // IncrementUsage currently does nothing. In the future, it will track the usage of keys. -func (w *Wallet) IncrementUsage(a wallet.Address) { +func (w *Wallet) IncrementUsage(a map[int]wallet.Address) { log.Trace("IncrementUsage ", a) } // DecrementUsage currently does nothing. In the future, it will track the usage of keys and release unused keys. -func (w *Wallet) DecrementUsage(a wallet.Address) { +func (w *Wallet) DecrementUsage(a map[int]wallet.Address) { log.Trace("DecrementUsage ", a) } diff --git a/wallet/keystore/wallet_test.go b/wallet/keystore/wallet_test.go index 1cb87dd..4dd976b 100644 --- a/wallet/keystore/wallet_test.go +++ b/wallet/keystore/wallet_test.go @@ -53,7 +53,7 @@ func TestWallet_Contains(t *testing.T) { "Expected wallet not to contain an empty account") acc := w.NewAccount() - assert.True(t, w.Contains(ethwallet.AsEthAddr(acc.Address())), "Expected wallet to contain account") + assert.True(t, w.Contains(ethwallet.AsEthAddr(acc.Address()[1])), "Expected wallet to contain account") } func TestSignatures(t *testing.T) { @@ -61,7 +61,7 @@ func TestSignatures(t *testing.T) { sign, err := acc.SignData(dataToSign) assert.NoError(t, err, "Sign with new account should succeed") assert.Equal(t, len(sign), ethwallet.SigLen, "Ethereum signature has wrong length") - valid, err := new(ethwallet.Backend).VerifySignature(dataToSign, sign, acc.Address()) + valid, err := new(ethwallet.Backend).VerifySignature(dataToSign, sign, acc.Address()[1]) assert.True(t, valid, "Verification should succeed") assert.NoError(t, err, "Verification should succeed") } diff --git a/wallet/simple/account.go b/wallet/simple/account.go index f9c7f60..e908c48 100644 --- a/wallet/simple/account.go +++ b/wallet/simple/account.go @@ -32,8 +32,8 @@ type Account struct { } // Address returns the Ethereum address of this account. -func (a *Account) Address() wallet.Address { - return ethwallet.AsWalletAddr(a.Account.Address) +func (a *Account) Address() map[int]wallet.Address { + return map[int]wallet.Address{1: ethwallet.AsWalletAddr(a.Account.Address)} } // SignData is used to sign data with this account. diff --git a/wallet/simple/transactor.go b/wallet/simple/transactor.go index ba1e5f3..71d4f08 100644 --- a/wallet/simple/transactor.go +++ b/wallet/simple/transactor.go @@ -16,6 +16,7 @@ package simple import ( stderrors "errors" + "perun.network/go-perun/wallet" "github.com/ethereum/go-ethereum/accounts" "github.com/ethereum/go-ethereum/accounts/abi/bind" @@ -45,7 +46,7 @@ func IsErrWrongAddrType(err error) bool { // NewTransactor returns a TransactOpts for the given account. It errors if the // account is not contained in the wallet of the transactor factory. func (t *Transactor) NewTransactor(account accounts.Account) (*bind.TransactOpts, error) { - walletAcc, err := t.Wallet.Unlock(ethwallet.AsWalletAddr(account.Address)) + walletAcc, err := t.Wallet.Unlock(map[int]wallet.Address{1: ethwallet.AsWalletAddr(account.Address)}) if err != nil { return nil, err } diff --git a/wallet/simple/transactor_test.go b/wallet/simple/transactor_test.go index f197507..1101793 100644 --- a/wallet/simple/transactor_test.go +++ b/wallet/simple/transactor_test.go @@ -87,7 +87,7 @@ func newTransactorSetup(t require.TestingT, prng *rand.Rand, signer types.Signer ChainID: chainID, TxType: txType, Tr: simple.NewTransactor(simpleWallet, signer), - ValidAcc: accounts.Account{Address: wallet.AsEthAddr(validAcc.Address())}, + ValidAcc: accounts.Account{Address: wallet.AsEthAddr(validAcc.Address()[1])}, MissingAcc: accounts.Account{Address: common.HexToAddress(missingAddr)}, } } diff --git a/wallet/simple/wallet.go b/wallet/simple/wallet.go index a55a101..117f490 100644 --- a/wallet/simple/wallet.go +++ b/wallet/simple/wallet.go @@ -88,14 +88,15 @@ func (w *Wallet) NewRandomAccount(prng *rand.Rand) wallet.Account { // Unlock returns the account corresponding to the given address if the wallet // contains this account. -func (w *Wallet) Unlock(address wallet.Address) (wallet.Account, error) { - if _, ok := address.(*ethwallet.Address); !ok { +func (w *Wallet) Unlock(address map[int]wallet.Address) (wallet.Account, error) { + ethAddr := address[1] + if _, ok := ethAddr.(*ethwallet.Address); !ok { return nil, errors.New("address must be ethwallet.Address") } w.mutex.RLock() defer w.mutex.RUnlock() - if acc, ok := w.accounts[ethwallet.AsEthAddr(address)]; ok { + if acc, ok := w.accounts[ethwallet.AsEthAddr(ethAddr)]; ok { return acc, nil } return nil, errors.New("account not found in wallet") @@ -105,7 +106,7 @@ func (w *Wallet) Unlock(address wallet.Address) (wallet.Account, error) { func (w *Wallet) LockAll() {} // IncrementUsage is called whenever a new channel is created or restored. -func (w *Wallet) IncrementUsage(address wallet.Address) {} +func (w *Wallet) IncrementUsage(address map[int]wallet.Address) {} // DecrementUsage is called whenever a channel is settled. -func (w *Wallet) DecrementUsage(address wallet.Address) {} +func (w *Wallet) DecrementUsage(address map[int]wallet.Address) {} diff --git a/wallet/simple/wallet_test.go b/wallet/simple/wallet_test.go index 345935b..9663972 100644 --- a/wallet/simple/wallet_test.go +++ b/wallet/simple/wallet_test.go @@ -17,6 +17,7 @@ package simple_test import ( "crypto/ecdsa" "math/rand" + "perun.network/go-perun/wallet" "testing" "github.com/ethereum/go-ethereum/common" @@ -53,7 +54,7 @@ func TestUnlock(t *testing.T) { setup, simpleWallet := newSetup(t, pkgtest.Prng(t)) missingAddr := common.BytesToAddress(setup.AddressMarshalled) - _, err := simpleWallet.Unlock(ethwallet.AsWalletAddr(missingAddr)) + _, err := simpleWallet.Unlock(map[int]wallet.Address{1: ethwallet.AsWalletAddr(missingAddr)}) assert.Error(t, err, "should error on unlocking missing address") acc, err := simpleWallet.Unlock(setup.AddressInWallet) @@ -67,7 +68,7 @@ func TestWallet_Contains(t *testing.T) { missingAddr := common.BytesToAddress(setup.AddressMarshalled) assert.False(t, simpleWallet.Contains(missingAddr)) - assert.True(t, simpleWallet.Contains(ethwallet.AsEthAddr(setup.AddressInWallet))) + assert.True(t, simpleWallet.Contains(ethwallet.AsEthAddr(setup.AddressInWallet[1]))) } func TestSignatures(t *testing.T) { @@ -77,7 +78,7 @@ func TestSignatures(t *testing.T) { assert.NoError(t, err, "Sign with new account should succeed") assert.NotNil(t, sig) assert.Equal(t, len(sig), ethwallet.SigLen, "Ethereum signature has wrong length") - valid, err := new(ethwallet.Backend).VerifySignature(dataToSign, sig, acc.Address()) + valid, err := new(ethwallet.Backend).VerifySignature(dataToSign, sig, acc.Address()[1]) assert.True(t, valid, "Verification should succeed") assert.NoError(t, err, "Verification should succeed") } @@ -96,7 +97,7 @@ func newSetup(t require.TestingT, prng *rand.Rand) (*test.Setup, *simple.Wallet) randomKeyIndex := prng.Intn(numAccounts) addr := crypto.PubkeyToAddress(privateKeys[randomKeyIndex].PublicKey) - acc, err := simpleWallet.Unlock(ethwallet.AsWalletAddr(addr)) + acc, err := simpleWallet.Unlock(map[int]wallet.Address{1: ethwallet.AsWalletAddr(addr)}) require.NoError(t, err) require.NotNil(t, acc) diff --git a/wire/account.go b/wire/account.go index 65f71d2..e07d033 100644 --- a/wire/account.go +++ b/wire/account.go @@ -31,8 +31,8 @@ func (acc *Account) Sign(_ []byte) ([]byte, error) { } // Address returns the account's address. -func (acc *Account) Address() wire.Address { - return acc.addr +func (acc *Account) Address() map[int]wire.Address { + return map[int]wire.Address{1: acc.addr} } // NewRandomAccount generates a new random account. From 402ee09f79782ce6c585bc3b9a3f52b3c9c006c5 Mon Sep 17 00:00:00 2001 From: Sophia Koehler Date: Sun, 22 Sep 2024 16:27:41 +0200 Subject: [PATCH 02/15] chore: Update to latest multi-backend commit in go-perun. fix(All): Adjust to usage of BackendID in AddressMaps. feat: Latest cross-chain changes in eth-contract. Signed-off-by: Sophia Koehler --- bindings/adjudicator/Adjudicator.go | 119 ++++++++++-------- bindings/adjudicator/AdjudicatorBinRuntime.go | 2 +- bindings/assetholder/AssetHolder.go | 45 ++++--- bindings/assetholdererc20/AssetHolderERC20.go | 47 ++++--- .../AssetHolderERC20BinRuntime.go | 2 +- bindings/assetholdereth/AssetHolderETH.go | 47 ++++--- .../AssetHolderETHBinRuntime.go | 2 +- bindings/peruntoken/PerunToken.go | 5 +- bindings/trivialapp/TrivialApp.go | 39 +++--- bindings/trivialapp/TrivialAppBinRuntime.go | 2 +- channel/adjudicator.go | 5 +- channel/adjudicator_internal_test.go | 6 +- channel/adjudicator_test.go | 6 +- channel/backend.go | 96 +++++++++++--- channel/backend_test.go | 4 +- channel/conclude.go | 19 +-- channel/conclude_test.go | 18 +-- channel/contractbackend_test.go | 22 ++-- channel/funder.go | 4 +- channel/funder_test.go | 12 +- channel/init_test.go | 2 +- channel/register.go | 2 + channel/register_test.go | 8 +- channel/reorg_test.go | 2 +- channel/subscription.go | 17 ++- channel/test/adjudicator.go | 3 +- channel/test/fund.go | 2 +- channel/test/setup.go | 20 +-- channel/withdraw.go | 70 ++++++++--- channel/withdraw_test.go | 23 ++-- client/app_test.go | 5 +- client/payment_test.go | 7 +- client/subchannel_test.go | 7 +- client/test/multiledger.go | 24 ++-- client/test/setup.go | 8 +- go.mod | 2 +- go.sum | 4 +- subscription/eventsub_test.go | 22 ++-- wallet/address.go | 32 ++++- wallet/hd/account.go | 4 +- wallet/hd/transactor_test.go | 2 +- wallet/hd/wallet.go | 8 +- wallet/hd/wallet_test.go | 5 +- wallet/keystore/account.go | 4 +- wallet/keystore/transactor_test.go | 2 +- wallet/keystore/wallet.go | 11 +- wallet/keystore/wallet_test.go | 4 +- wallet/simple/account.go | 4 +- wallet/simple/transactor.go | 4 +- wallet/simple/transactor_test.go | 2 +- wallet/simple/wallet.go | 8 +- wallet/simple/wallet_test.go | 9 +- wire/account.go | 4 +- 53 files changed, 518 insertions(+), 315 deletions(-) diff --git a/bindings/adjudicator/Adjudicator.go b/bindings/adjudicator/Adjudicator.go index d97a86f..7b870c5 100644 --- a/bindings/adjudicator/Adjudicator.go +++ b/bindings/adjudicator/Adjudicator.go @@ -26,6 +26,7 @@ var ( _ = common.Big1 _ = types.BloomLookup _ = event.NewSubscription + _ = abi.ConvertType ) // AdjudicatorSignedState is an auto generated low-level Go binding around an user-defined struct. @@ -38,29 +39,37 @@ type AdjudicatorSignedState struct { // ChannelAllocation is an auto generated low-level Go binding around an user-defined struct. type ChannelAllocation struct { Assets []ChannelAsset + Backends []*big.Int Balances [][]*big.Int Locked []ChannelSubAlloc } // ChannelAsset is an auto generated low-level Go binding around an user-defined struct. type ChannelAsset struct { - ChainID *big.Int - Holder common.Address + ChainID *big.Int + EthHolder common.Address + CcHolder []byte } // ChannelParams is an auto generated low-level Go binding around an user-defined struct. type ChannelParams struct { ChallengeDuration *big.Int Nonce *big.Int - Participants []common.Address + Participants []ChannelParticipant App common.Address LedgerChannel bool VirtualChannel bool } +// ChannelParticipant is an auto generated low-level Go binding around an user-defined struct. +type ChannelParticipant struct { + EthAddress common.Address + CcAddress []byte +} + // ChannelState is an auto generated low-level Go binding around an user-defined struct. type ChannelState struct { - ChannelID [32]byte + ChannelID [][32]byte Version uint64 Outcome ChannelAllocation AppData []byte @@ -69,15 +78,15 @@ type ChannelState struct { // ChannelSubAlloc is an auto generated low-level Go binding around an user-defined struct. type ChannelSubAlloc struct { - ID [32]byte + ID [][32]byte Balances []*big.Int IndexMap []uint16 } // AdjudicatorMetaData contains all meta data concerning the Adjudicator contract. var AdjudicatorMetaData = &bind.MetaData{ - ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"channelID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"phase\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"timeout\",\"type\":\"uint64\"}],\"name\":\"ChannelUpdate\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"challengeDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"participants\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"app\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"ledgerChannel\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"virtualChannel\",\"type\":\"bool\"}],\"internalType\":\"structChannel.Params\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"channelID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"challengeDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"participants\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"app\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"ledgerChannel\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"virtualChannel\",\"type\":\"bool\"}],\"internalType\":\"structChannel.Params\",\"name\":\"params\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"channelID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"}],\"internalType\":\"structChannel.Asset[]\",\"name\":\"assets\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"balances\",\"type\":\"uint256[][]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"ID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint16[]\",\"name\":\"indexMap\",\"type\":\"uint16[]\"}],\"internalType\":\"structChannel.SubAlloc[]\",\"name\":\"locked\",\"type\":\"tuple[]\"}],\"internalType\":\"structChannel.Allocation\",\"name\":\"outcome\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"appData\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"isFinal\",\"type\":\"bool\"}],\"internalType\":\"structChannel.State\",\"name\":\"state\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"channelID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"}],\"internalType\":\"structChannel.Asset[]\",\"name\":\"assets\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"balances\",\"type\":\"uint256[][]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"ID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint16[]\",\"name\":\"indexMap\",\"type\":\"uint16[]\"}],\"internalType\":\"structChannel.SubAlloc[]\",\"name\":\"locked\",\"type\":\"tuple[]\"}],\"internalType\":\"structChannel.Allocation\",\"name\":\"outcome\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"appData\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"isFinal\",\"type\":\"bool\"}],\"internalType\":\"structChannel.State[]\",\"name\":\"subStates\",\"type\":\"tuple[]\"}],\"name\":\"conclude\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"challengeDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"participants\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"app\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"ledgerChannel\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"virtualChannel\",\"type\":\"bool\"}],\"internalType\":\"structChannel.Params\",\"name\":\"params\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"channelID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"}],\"internalType\":\"structChannel.Asset[]\",\"name\":\"assets\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"balances\",\"type\":\"uint256[][]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"ID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint16[]\",\"name\":\"indexMap\",\"type\":\"uint16[]\"}],\"internalType\":\"structChannel.SubAlloc[]\",\"name\":\"locked\",\"type\":\"tuple[]\"}],\"internalType\":\"structChannel.Allocation\",\"name\":\"outcome\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"appData\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"isFinal\",\"type\":\"bool\"}],\"internalType\":\"structChannel.State\",\"name\":\"state\",\"type\":\"tuple\"},{\"internalType\":\"bytes[]\",\"name\":\"sigs\",\"type\":\"bytes[]\"}],\"name\":\"concludeFinal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"timeout\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"challengeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"hasApp\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"phase\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"stateHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"channelID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"}],\"internalType\":\"structChannel.Asset[]\",\"name\":\"assets\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"balances\",\"type\":\"uint256[][]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"ID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint16[]\",\"name\":\"indexMap\",\"type\":\"uint16[]\"}],\"internalType\":\"structChannel.SubAlloc[]\",\"name\":\"locked\",\"type\":\"tuple[]\"}],\"internalType\":\"structChannel.Allocation\",\"name\":\"outcome\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"appData\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"isFinal\",\"type\":\"bool\"}],\"internalType\":\"structChannel.State\",\"name\":\"state\",\"type\":\"tuple\"}],\"name\":\"hashState\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"challengeDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"participants\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"app\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"ledgerChannel\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"virtualChannel\",\"type\":\"bool\"}],\"internalType\":\"structChannel.Params\",\"name\":\"params\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"channelID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"}],\"internalType\":\"structChannel.Asset[]\",\"name\":\"assets\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"balances\",\"type\":\"uint256[][]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"ID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint16[]\",\"name\":\"indexMap\",\"type\":\"uint16[]\"}],\"internalType\":\"structChannel.SubAlloc[]\",\"name\":\"locked\",\"type\":\"tuple[]\"}],\"internalType\":\"structChannel.Allocation\",\"name\":\"outcome\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"appData\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"isFinal\",\"type\":\"bool\"}],\"internalType\":\"structChannel.State\",\"name\":\"stateOld\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"channelID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"}],\"internalType\":\"structChannel.Asset[]\",\"name\":\"assets\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"balances\",\"type\":\"uint256[][]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"ID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint16[]\",\"name\":\"indexMap\",\"type\":\"uint16[]\"}],\"internalType\":\"structChannel.SubAlloc[]\",\"name\":\"locked\",\"type\":\"tuple[]\"}],\"internalType\":\"structChannel.Allocation\",\"name\":\"outcome\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"appData\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"isFinal\",\"type\":\"bool\"}],\"internalType\":\"structChannel.State\",\"name\":\"state\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"actorIdx\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"sig\",\"type\":\"bytes\"}],\"name\":\"progress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"challengeDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"participants\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"app\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"ledgerChannel\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"virtualChannel\",\"type\":\"bool\"}],\"internalType\":\"structChannel.Params\",\"name\":\"params\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"channelID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"}],\"internalType\":\"structChannel.Asset[]\",\"name\":\"assets\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"balances\",\"type\":\"uint256[][]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"ID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint16[]\",\"name\":\"indexMap\",\"type\":\"uint16[]\"}],\"internalType\":\"structChannel.SubAlloc[]\",\"name\":\"locked\",\"type\":\"tuple[]\"}],\"internalType\":\"structChannel.Allocation\",\"name\":\"outcome\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"appData\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"isFinal\",\"type\":\"bool\"}],\"internalType\":\"structChannel.State\",\"name\":\"state\",\"type\":\"tuple\"},{\"internalType\":\"bytes[]\",\"name\":\"sigs\",\"type\":\"bytes[]\"}],\"internalType\":\"structAdjudicator.SignedState\",\"name\":\"channel\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"challengeDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"participants\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"app\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"ledgerChannel\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"virtualChannel\",\"type\":\"bool\"}],\"internalType\":\"structChannel.Params\",\"name\":\"params\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"channelID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"}],\"internalType\":\"structChannel.Asset[]\",\"name\":\"assets\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"balances\",\"type\":\"uint256[][]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"ID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint16[]\",\"name\":\"indexMap\",\"type\":\"uint16[]\"}],\"internalType\":\"structChannel.SubAlloc[]\",\"name\":\"locked\",\"type\":\"tuple[]\"}],\"internalType\":\"structChannel.Allocation\",\"name\":\"outcome\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"appData\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"isFinal\",\"type\":\"bool\"}],\"internalType\":\"structChannel.State\",\"name\":\"state\",\"type\":\"tuple\"},{\"internalType\":\"bytes[]\",\"name\":\"sigs\",\"type\":\"bytes[]\"}],\"internalType\":\"structAdjudicator.SignedState[]\",\"name\":\"subChannels\",\"type\":\"tuple[]\"}],\"name\":\"register\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b506132b4806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063894afe2f1161005b578063894afe2f1461015b578063b1d6da2214610170578063da89ed2d14610183578063f53f5dfe1461019657600080fd5b806311be1997146100825780636914670e146101275780636f68e70e14610148575b600080fd5b6100df6100903660046122ea565b600060208190529081526040902080546001909101546001600160401b0380831692600160401b8104821692600160801b82049092169160ff600160c01b8304811692600160c81b9004169086565b604080516001600160401b039788168152958716602087015293909516928401929092521515606083015260ff16608082015260a081019190915260c0015b60405180910390f35b61013a610135366004612895565b6101a9565b60405190815260200161011e565b61013a6101563660046129ba565b6101c2565b61016e6101693660046129ee565b6101cd565b005b61016e61017e366004612aa4565b610455565b61016e610191366004612ca1565b6104b8565b61016e6101a4366004612d75565b6104e6565b60006101b482610661565b805190602001209050919050565b60006101b48261068a565b60006101dc846000015161069d565b608081015190915060ff166102445780516001600160401b031642101561023f5760405162461bcd60e51b81526020600482015260126024820152711d1a5b595bdd5d081b9bdd081c185cdcd95960721b60448201526064015b60405180910390fd5b6102d8565b600160ff16816080015160ff16036102a05780516001600160401b0316421061023f5760405162461bcd60e51b815260206004820152600e60248201526d1d1a5b595bdd5d081c185cdcd95960921b6044820152606401610236565b60405162461bcd60e51b815260206004820152600d60248201526c696e76616c696420706861736560981b6044820152606401610236565b60608601516001600160a01b03166103225760405162461bcd60e51b815260206004820152600d60248201526c06d75737420686176652061707609c1b6044820152606401610236565b856040015151831061036e5760405162461bcd60e51b81526020600482015260156024820152746163746f72496478206f7574206f662072616e676560581b6044820152606401610236565b6103788685610722565b610381856101a9565b8160a00151146103c55760405162461bcd60e51b815260206004820152600f60248201526e77726f6e67206f6c6420737461746560881b6044820152606401610236565b6103f56103d185610661565b83886040015186815181106103e8576103e8612e12565b602002602001015161076f565b6104355760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964207369676e617475726560781b6044820152606401610236565b610441868686866107f8565b61044d86856001610944565b505050505050565b82608001516104765760405162461bcd60e51b815260040161023690612e28565b6104808383610722565b61048982610a1a565b600061049783836000610b7d565b50835160408086015151908701519293506104b29284610f18565b50505050565b8151608001516104da5760405162461bcd60e51b815260040161023690612e28565b6104b282826000610fe0565b82608001516105075760405162461bcd60e51b815260040161023690612e28565b6080820151151560011461054f5760405162461bcd60e51b815260206004820152600f60248201526e1cdd185d19481b9bdd08199a5b985b608a1b6044820152606401610236565b604080830151015151156105a55760405162461bcd60e51b815260206004820152601860248201527f63616e6e6f742068617665207375622d6368616e6e656c7300000000000000006044820152606401610236565b6105af8383610722565b6105ba838383611166565b6000806105ca846000015161125a565b91509150801561062a57600260ff16826080015160ff160361062a5760405162461bcd60e51b815260206004820152601960248201527818da185b9b995b08185b1c9958591e4818dbdb98db1d591959603a1b6044820152606401610236565b61063685856002610944565b61065a84600001518560400151600001518760400151876040015160200151610f18565b5050505050565b60608160405160200161067491906130cf565b6040516020818303038152906040529050919050565b6060816040516020016106749190613179565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905290806106d98461125a565b915091508061071b5760405162461bcd60e51b815260206004820152600e60248201526d1b9bdd081c9959da5cdd195c995960921b6044820152606401610236565b5092915050565b61072b826101c2565b81511461076b5760405162461bcd60e51b815260206004820152600e60248201526d696e76616c696420706172616d7360901b6044820152606401610236565b5050565b6000806107d085805190602001206040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b905060006107de828661130a565b6001600160a01b0390811690851614925050509392505050565b60208301516108089060016131a2565b6001600160401b031682602001516001600160401b03161461086c5760405162461bcd60e51b815260206004820152601d60248201527f76657273696f6e206d75737420696e6372656d656e74206279206f6e650000006044820152606401610236565b6080830151156108be5760405162461bcd60e51b815260206004820181905260248201527f63616e6e6f742070726f67726573732066726f6d2066696e616c2073746174656044820152606401610236565b6108d683604001518360400151866040015151611330565b6060840151604051636d7eba0d60e01b81526001600160a01b03821690636d7eba0d9061090d9088908890889088906004016131cd565b60006040518083038186803b15801561092557600080fd5b505afa158015610939573d6000803e3d6000fd5b505050505050505050565b600080610954846000015161125a565b86516001600160401b039081166020848101919091528701511660408301526060808801516001600160a01b0316151590830152909250905082600281111561099f5761099f612dfc565b60ff1660808301526109b0846101a9565b60a08301526080840151156109d0576001600160401b0342168252610a0e565b8015806109e45750608082015160ff166001145b15610a0e576020820151610a02906001600160401b0342169061162d565b6001600160401b031682525b835161065a9083611688565b6000610a29826000015161069d565b9050610a34826101a9565b8160a0015114610a7e5760405162461bcd60e51b8152602060048201526015602482015274696e76616c6964206368616e6e656c20737461746560581b6044820152606401610236565b600260ff16816080015160ff1603610ad45760405162461bcd60e51b815260206004820152601960248201527818da185b9b995b08185b1c9958591e4818dbdb98db1d591959603a1b6044820152606401610236565b608081015160ff16158015610aea575080606001515b15610b175760208101518151610b0b916001600160401b039091169061162d565b6001600160401b031681525b80516001600160401b0316421015610b6a5760405162461bcd60e51b81526020600482015260166024820152751d1a5b595bdd5d081b9bdd081c185cdcd959081e595d60521b6044820152606401610236565b60026080820152815161076b9082611688565b60606000610b8a8561177d565b60408501515180516001600160401b03811115610ba957610ba9612303565b604051908082528060200260200182016040528015610bdc57816020015b6060815260200190600190039081610bc75790505b50925060005b8151811015610d155760008760400151602001518281518110610c0757610c07612e12565b6020026020010151905080516001600160401b03811115610c2a57610c2a612303565b604051908082528060200260200182016040528015610c53578160200160208202803683370190505b50858381518110610c6657610c66612e12565b602002602001018190525060005b8151811015610d00578860400151602001518381518110610c9757610c97612e12565b60200260200101518181518110610cb057610cb0612e12565b6020026020010151868481518110610cca57610cca612e12565b60200260200101518281518110610ce357610ce3612e12565b602090810291909101015280610cf881613218565b915050610c74565b50508080610d0d90613218565b915050610be2565b50604080870151015184925060005b8151811015610f0d576000828281518110610d4157610d41612e12565b602002602001015190506000888680610d5990613218565b975081518110610d6b57610d6b612e12565b602002602001015190508060000151826000015114610dc45760405162461bcd60e51b81526020600482015260156024820152741a5b9d985b1a59081cdd5898da185b9b995b081a59605a1b6044820152606401610236565b6060610dd1828b89610b7d565b604085015190985090915060005b8751811015610ef55760005b8251811015610ee2576000848381518110610e0857610e08612e12565b60200260200101518281518110610e2157610e21612e12565b602002602001015190506000848381518110610e3f57610e3f612e12565b60200260200101519050610e92828e8681518110610e5f57610e5f612e12565b60200260200101518361ffff1681518110610e7c57610e7c612e12565b60200260200101516117e190919063ffffffff16565b8d8581518110610ea457610ea4612e12565b60200260200101518261ffff1681518110610ec157610ec1612e12565b60200260200101818152505050508080610eda90613218565b915050610deb565b5080610eed81613218565b915050610ddf565b50505050508080610f0590613218565b915050610d24565b505050935093915050565b60005b835181101561065a576000848281518110610f3857610f38612e12565b6020026020010151905046816000015103610fcd5780602001516001600160a01b031663fc79a66d8786868681518110610f7457610f74612e12565b60200260200101516040518463ffffffff1660e01b8152600401610f9a93929190613231565b600060405180830381600087803b158015610fb457600080fd5b505af1158015610fc8573d6000803e3d6000fd5b505050505b5080610fd881613218565b915050610f1b565b60208301516040015180516060918391610ff9876117f4565b61100682602001516119fc565b935060008260400151905086518151111561105c5760405162461bcd60e51b81526020600482015260166024820152751cdd5890da185b9b995b1cce881d1bdbc81cda1bdc9d60521b6044820152606401610236565b60005b815181101561115a576000888661107581613218565b97508151811061108757611087612e12565b602002602001015190506000808484815181106110a6576110a6612e12565b602002602001015183602001519150915080600001518260000151146111075760405162461bcd60e51b81526020600482015260166024820152751a5b9d985b1a59081cdd588b58da185b9b995b081a5960521b6044820152606401610236565b6060611114848d8b610fe0565b604084015151909a5090915061112b908890611af2565b611139836020015182611b95565b6111438a82611c85565b50505050808061115290613218565b91505061105f565b50505050935093915050565b600061117183610661565b90508151846040015151146111c85760405162461bcd60e51b815260206004820152601a60248201527f7369676e617475726573206c656e677468206d69736d617463680000000000006044820152606401610236565b60005b825181101561065a57611208828483815181106111ea576111ea612e12565b6020026020010151876040015184815181106103e8576103e8612e12565b6112485760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964207369676e617475726560781b6044820152606401610236565b8061125281613218565b9150506111cb565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091525060009081526020818152604091829020825160c08101845281546001600160401b038082168352600160401b8204811694830194909452600160801b81049093169381019390935260ff600160c01b8304811615156060850152600160c81b90920490911660808301526001015460a08201819052909190151590565b60008060006113198585611cef565b9150915061132681611d5d565b5090505b92915050565b816020015151836020015151146113895760405162461bcd60e51b815260206004820152601860248201527f62616c616e636573206c656e677468206d69736d6174636800000000000000006044820152606401610236565b815151835151146113d55760405162461bcd60e51b81526020600482015260166024820152750c2e6e6cae8e640d8cadccee8d040dad2e6dac2e8c6d60531b6044820152606401610236565b6113e783604001518360400151611f16565b60005b8251518110156104b2576114388460000151828151811061140d5761140d612e12565b60200260200101518460000151838151811061142b5761142b612e12565b6020026020010151611fc1565b600080838660200151848151811061145257611452612e12565b602002602001015151146114a85760405162461bcd60e51b815260206004820152601c60248201527f6f6c642062616c616e636573206c656e677468206d69736d61746368000000006044820152606401610236565b83856020015184815181106114bf576114bf612e12565b602002602001015151146115155760405162461bcd60e51b815260206004820152601c60248201527f6e65772062616c616e636573206c656e677468206d69736d61746368000000006044820152606401610236565b60005b848110156115c8576115698760200151858151811061153957611539612e12565b6020026020010151828151811061155257611552612e12565b6020026020010151846117e190919063ffffffff16565b92506115b48660200151858151811061158457611584612e12565b6020026020010151828151811061159d5761159d612e12565b6020026020010151836117e190919063ffffffff16565b9150806115c081613218565b915050611518565b508082146116185760405162461bcd60e51b815260206004820152601860248201527f73756d206f662062616c616e636573206d69736d6174636800000000000000006044820152606401610236565b5050808061162590613218565b9150506113ea565b60006001600160401b03831661164383856131a2565b9150816001600160401b0316101561132a5760405162461bcd60e51b81526020600482015260086024820152676f766572666c6f7760c01b6044820152606401610236565b6000828152602081815260409182902083518154858401518686015160608089015160808a015160ff16600160c81b810260ff60c81b19921515600160c01b0260ff60c01b196001600160401b03968716600160801b81029190911668ffffffffffffffffff60801b19988816600160401b026fffffffffffffffffffffffffffffffff19909a1697909a16968717989098179690961697909717949094171694909417855560a08801516001909501949094558551918252938101939093529282015283917f895ef5a5fc3efd313a300b006d6ce97ff0670dfe04f6eea90417edf924fa786b910160405180910390a25050565b600061178c826000015161069d565b9050611797826101a9565b8160a0015114610b6a5760405162461bcd60e51b8152602060048201526015602482015274696e76616c6964206368616e6e656c20737461746560581b6044820152606401610236565b60006117ed8284613266565b9392505050565b805160208201516118058282610722565b61181482828560400151611166565b8160a00151156118c15760608201516001600160a01b03161561186b5760405162461bcd60e51b815260206004820152600f60248201526e063616e6e6f7420686176652061707608c1b6044820152606401610236565b604080820151015151156118c15760405162461bcd60e51b815260206004820152601860248201527f63616e6e6f742068617665206c6f636b65642066756e647300000000000000006044820152606401610236565b6000806118d1836000015161125a565b9150915080156119f0576118e4836101a9565b8260a00151036118f5575050505050565b82602001516001600160401b031682604001516001600160401b0316106119505760405162461bcd60e51b815260206004820152600f60248201526e34b73b30b634b2103b32b939b4b7b760891b6044820152606401610236565b608082015160ff16156119975760405162461bcd60e51b815260206004820152600f60248201526e696e636f727265637420706861736560881b6044820152606401610236565b81516001600160401b031642106119f05760405162461bcd60e51b815260206004820152601960248201527f72656675746174696f6e2074696d656f757420706173736564000000000000006044820152606401610236565b61065a84846000610944565b606081516001600160401b03811115611a1757611a17612303565b604051908082528060200260200182016040528015611a40578160200160208202803683370190505b50905060005b8251811015611aec576000838281518110611a6357611a63612e12565b6020026020010151905060005b8151811015611ad757611aa8828281518110611a8e57611a8e612e12565b6020026020010151858581518110610e7c57610e7c612e12565b848481518110611aba57611aba612e12565b602090810291909101015280611acf81613218565b915050611a70565b50508080611ae490613218565b915050611a46565b50919050565b8051825114611b435760405162461bcd60e51b815260206004820152601760248201527f41737365745b5d3a20756e657175616c206c656e6774680000000000000000006044820152606401610236565b60005b8251811015611b9057611b7e838281518110611b6457611b64612e12565b602002602001015183838151811061142b5761142b612e12565b80611b8881613218565b915050611b46565b505050565b8051825114611be65760405162461bcd60e51b815260206004820152601960248201527f75696e743235365b5d3a20756e657175616c206c656e677468000000000000006044820152606401610236565b60005b8251811015611b9057818181518110611c0457611c04612e12565b6020026020010151838281518110611c1e57611c1e612e12565b602002602001015114611c735760405162461bcd60e51b815260206004820152601760248201527f75696e743235365b5d3a20756e657175616c206974656d0000000000000000006044820152606401610236565b80611c7d81613218565b915050611be9565b60005b8251811015611b9057611cc0828281518110611ca657611ca6612e12565b6020026020010151848381518110610e7c57610e7c612e12565b838281518110611cd257611cd2612e12565b602090810291909101015280611ce781613218565b915050611c88565b6000808251604103611d255760208301516040840151606085015160001a611d198782858561206c565b94509450505050611d56565b8251604003611d4e5760208301516040840151611d43868383612159565b935093505050611d56565b506000905060025b9250929050565b6000816004811115611d7157611d71612dfc565b03611d795750565b6001816004811115611d8d57611d8d612dfc565b03611dda5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610236565b6002816004811115611dee57611dee612dfc565b03611e3b5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610236565b6003816004811115611e4f57611e4f612dfc565b03611ea75760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610236565b6004816004811115611ebb57611ebb612dfc565b03611f135760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610236565b50565b8051825114611f675760405162461bcd60e51b815260206004820152601a60248201527f537562416c6c6f635b5d3a20756e657175616c206c656e6774680000000000006044820152606401610236565b60005b8251811015611b9057611faf838281518110611f8857611f88612e12565b6020026020010151838381518110611fa257611fa2612e12565b6020026020010151612192565b80611fb981613218565b915050611f6a565b805182511461200b5760405162461bcd60e51b8152602060048201526016602482015275105cdcd95d0e881d5b995c5d585b0818da185a5b925160521b6044820152606401610236565b80602001516001600160a01b031682602001516001600160a01b03161461076b5760405162461bcd60e51b815260206004820152601560248201527420b9b9b2ba1d103ab732b8bab0b6103437b63232b960591b6044820152606401610236565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156120a35750600090506003612150565b8460ff16601b141580156120bb57508460ff16601c14155b156120cc5750600090506004612150565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612120573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661214957600060019250925050612150565b9150600090505b94509492505050565b6000806001600160ff1b0383168161217660ff86901c601b613266565b90506121848782888561206c565b935093505050935093915050565b80518251146121da5760405162461bcd60e51b815260206004820152601460248201527314dd58905b1b1bd8ce881d5b995c5d585b08125160621b6044820152606401610236565b6121ec82602001518260200151611b95565b61076b82604001518260400151805182511461224a5760405162461bcd60e51b815260206004820152601860248201527f75696e7431365b5d3a20756e657175616c206c656e67746800000000000000006044820152606401610236565b60005b8251811015611b905781818151811061226857612268612e12565b602002602001015161ffff1683828151811061228657612286612e12565b602002602001015161ffff16146122d85760405162461bcd60e51b815260206004820152601660248201527575696e7431365b5d3a20756e657175616c206974656d60501b6044820152606401610236565b806122e281613218565b91505061224d565b6000602082840312156122fc57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b038111828210171561233b5761233b612303565b60405290565b604080519081016001600160401b038111828210171561233b5761233b612303565b60405160a081016001600160401b038111828210171561233b5761233b612303565b60405160c081016001600160401b038111828210171561233b5761233b612303565b604051601f8201601f191681016001600160401b03811182821017156123cf576123cf612303565b604052919050565b60006001600160401b038211156123f0576123f0612303565b5060051b60200190565b80356001600160a01b038116811461241157600080fd5b919050565b600082601f83011261242757600080fd5b8135602061243c612437836123d7565b6123a7565b82815260059290921b8401810191818101908684111561245b57600080fd5b8286015b84811015612476578035835291830191830161245f565b509695505050505050565b600082601f83011261249257600080fd5b813560206124a2612437836123d7565b82815260059290921b840181019181810190868411156124c157600080fd5b8286015b848110156124765780356001600160401b038111156124e45760008081fd5b6124f28986838b0101612416565b8452509183019183016124c5565b600082601f83011261251157600080fd5b81356020612521612437836123d7565b828152600592831b850182019282820191908785111561254057600080fd5b8387015b858110156126505780356001600160401b03808211156125645760008081fd5b908901906060828c03601f190181131561257e5760008081fd5b612586612319565b888401358152604080850135848111156125a05760008081fd5b6125ae8f8c83890101612416565b838c0152509184013591838311156125c65760008081fd5b82850194508d603f8601126125dd57600093508384fd5b8985013593506125ef612437856123d7565b84815293871b85018101938a810193508e85111561260d5760008081fd5b948101945b8486101561263c57853561ffff8116811461262d5760008081fd5b8452948a0194928a0192612612565b908201528752505050928401928401612544565b5090979650505050505050565b60006060828403121561266f57600080fd5b612677612319565b905081356001600160401b038082111561269057600080fd5b818401915084601f8301126126a457600080fd5b813560206126b4612437836123d7565b82815260069290921b840181019181810190888411156126d357600080fd5b948201945b8386101561271e576040868a0312156126f15760008081fd5b6126f9612341565b863581526127088488016123fa565b81850152825260409590950194908201906126d8565b8652508581013593508284111561273457600080fd5b61274087858801612481565b9085015250604084013591508082111561275957600080fd5b5061276684828501612500565b60408301525092915050565b600082601f83011261278357600080fd5b81356001600160401b0381111561279c5761279c612303565b6127af601f8201601f19166020016123a7565b8181528460208386010111156127c457600080fd5b816020850160208301376000918101602001919091529392505050565b8035801515811461241157600080fd5b600060a0828403121561280357600080fd5b61280b612363565b90508135815260208201356001600160401b03808216821461282c57600080fd5b816020840152604084013591508082111561284657600080fd5b6128528583860161265d565b6040840152606084013591508082111561286b57600080fd5b5061287884828501612772565b60608301525061288a608083016127e1565b608082015292915050565b6000602082840312156128a757600080fd5b81356001600160401b038111156128bd57600080fd5b6128c9848285016127f1565b949350505050565b600060c082840312156128e357600080fd5b6128eb612385565b9050813581526020808301358183015260408301356001600160401b0381111561291457600080fd5b8301601f8101851361292557600080fd5b8035612933612437826123d7565b81815260059190911b8201830190838101908783111561295257600080fd5b928401925b8284101561297757612968846123fa565b82529284019290840190612957565b60408601525061298d92505050606083016123fa565b606082015261299e608083016127e1565b60808201526129af60a083016127e1565b60a082015292915050565b6000602082840312156129cc57600080fd5b81356001600160401b038111156129e257600080fd5b6128c9848285016128d1565b600080600080600060a08688031215612a0657600080fd5b85356001600160401b0380821115612a1d57600080fd5b612a2989838a016128d1565b96506020880135915080821115612a3f57600080fd5b612a4b89838a016127f1565b95506040880135915080821115612a6157600080fd5b612a6d89838a016127f1565b9450606088013593506080880135915080821115612a8a57600080fd5b50612a9788828901612772565b9150509295509295909350565b600080600060608486031215612ab957600080fd5b83356001600160401b0380821115612ad057600080fd5b612adc878388016128d1565b9450602091508186013581811115612af357600080fd5b612aff888289016127f1565b945050604086013581811115612b1457600080fd5b8601601f81018813612b2557600080fd5b8035612b33612437826123d7565b81815260059190911b8201840190848101908a831115612b5257600080fd5b8584015b83811015612b8a57803586811115612b6e5760008081fd5b612b7c8d89838901016127f1565b845250918601918601612b56565b508096505050505050509250925092565b600082601f830112612bac57600080fd5b81356020612bbc612437836123d7565b82815260059290921b84018101918181019086841115612bdb57600080fd5b8286015b848110156124765780356001600160401b03811115612bfe5760008081fd5b612c0c8986838b0101612772565b845250918301918301612bdf565b600060608284031215612c2c57600080fd5b612c34612319565b905081356001600160401b0380821115612c4d57600080fd5b612c59858386016128d1565b83526020840135915080821115612c6f57600080fd5b612c7b858386016127f1565b60208401526040840135915080821115612c9457600080fd5b5061276684828501612b9b565b60008060408385031215612cb457600080fd5b82356001600160401b0380821115612ccb57600080fd5b612cd786838701612c1a565b9350602091508185013581811115612cee57600080fd5b8501601f81018713612cff57600080fd5b8035612d0d612437826123d7565b81815260059190911b82018401908481019089831115612d2c57600080fd5b8584015b83811015612d6457803586811115612d485760008081fd5b612d568c8983890101612c1a565b845250918601918601612d30565b508096505050505050509250929050565b600080600060608486031215612d8a57600080fd5b83356001600160401b0380821115612da157600080fd5b612dad878388016128d1565b94506020860135915080821115612dc357600080fd5b612dcf878388016127f1565b93506040860135915080821115612de557600080fd5b50612df286828701612b9b565b9150509250925092565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6020808252600a90820152693737ba103632b233b2b960b11b604082015260600190565b600081518084526020808501945080840160005b83811015612e7c57815187529582019590820190600101612e60565b509495945050505050565b600081518084526020808501808196508360051b8101915082860160005b85811015612ecf578284038952612ebd848351612e4c565b98850198935090840190600101612ea5565b5091979650505050505050565b600081518084526020808501808196508360051b810191508286016000805b86811015612f80578385038a528251606081518752878201518189890152612f2582890182612e4c565b604093840151898203948a01949094528351808252938a0193869350908a0191505b80831015612f6b57835161ffff168252928901926001929092019190890190612f47565b509b88019b9650505091850191600101612efb565b509298975050505050505050565b6000815180845260005b81811015612fb457602081850181015186830182015201612f98565b81811115612fc6576000602083870101525b50601f01601f19169290920160200192915050565b80518252600060206001600160401b0381840151168185015260408084015160a08287015261010086018151606060a08901528181518084526101208a0191508683019350600092505b80831015613057578351805183528701516001600160a01b031687830152928601926001929092019190850190613025565b50858401519550609f199250828982030160c08a01526130778187612e87565b95505050828201519250808785030160e088015250506130978282612edc565b915050606083015184820360608601526130b18282612f8e565b91505060808301516130c7608086018215159052565b509392505050565b6020815260006117ed6020830184612fdb565b600081518084526020808501945080840160005b83811015612e7c5781516001600160a01b0316875295820195908201906001016130f6565b80518252602081015160208301526000604082015160c0604085015261314460c08501826130e2565b6060848101516001600160a01b03169086015260808085015115159086015260a0938401511515949093019390935250919050565b6020815260006117ed602083018461311b565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b038083168185168083038211156131c4576131c461318c565b01949350505050565b6080815260006131e0608083018761311b565b82810360208401526131f28187612fdb565b905082810360408401526132068186612fdb565b91505082606083015295945050505050565b60006001820161322a5761322a61318c565b5060010190565b83815260606020820152600061324a60608301856130e2565b828103604084015261325c8185612e4c565b9695505050505050565b600082198211156132795761327961318c565b50019056fea26469706673582212209cf6452c4d23141fbc53107c61d4c07976ee23ddccb1c2885bd4dd293ace00aa64736f6c634300080f0033", + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"channelID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"phase\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"timeout\",\"type\":\"uint64\"}],\"name\":\"ChannelUpdate\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"challengeDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"ethAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ccAddress\",\"type\":\"bytes\"}],\"internalType\":\"structChannel.Participant[]\",\"name\":\"participants\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"app\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"ledgerChannel\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"virtualChannel\",\"type\":\"bool\"}],\"internalType\":\"structChannel.Params\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"channelID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"challengeDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"ethAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ccAddress\",\"type\":\"bytes\"}],\"internalType\":\"structChannel.Participant[]\",\"name\":\"participants\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"app\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"ledgerChannel\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"virtualChannel\",\"type\":\"bool\"}],\"internalType\":\"structChannel.Params\",\"name\":\"params\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"channelID\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"ethHolder\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ccHolder\",\"type\":\"bytes\"}],\"internalType\":\"structChannel.Asset[]\",\"name\":\"assets\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"backends\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"balances\",\"type\":\"uint256[][]\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"ID\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint16[]\",\"name\":\"indexMap\",\"type\":\"uint16[]\"}],\"internalType\":\"structChannel.SubAlloc[]\",\"name\":\"locked\",\"type\":\"tuple[]\"}],\"internalType\":\"structChannel.Allocation\",\"name\":\"outcome\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"appData\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"isFinal\",\"type\":\"bool\"}],\"internalType\":\"structChannel.State\",\"name\":\"state\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"channelID\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"ethHolder\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ccHolder\",\"type\":\"bytes\"}],\"internalType\":\"structChannel.Asset[]\",\"name\":\"assets\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"backends\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"balances\",\"type\":\"uint256[][]\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"ID\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint16[]\",\"name\":\"indexMap\",\"type\":\"uint16[]\"}],\"internalType\":\"structChannel.SubAlloc[]\",\"name\":\"locked\",\"type\":\"tuple[]\"}],\"internalType\":\"structChannel.Allocation\",\"name\":\"outcome\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"appData\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"isFinal\",\"type\":\"bool\"}],\"internalType\":\"structChannel.State[]\",\"name\":\"subStates\",\"type\":\"tuple[]\"}],\"name\":\"conclude\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"challengeDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"ethAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ccAddress\",\"type\":\"bytes\"}],\"internalType\":\"structChannel.Participant[]\",\"name\":\"participants\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"app\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"ledgerChannel\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"virtualChannel\",\"type\":\"bool\"}],\"internalType\":\"structChannel.Params\",\"name\":\"params\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"channelID\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"ethHolder\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ccHolder\",\"type\":\"bytes\"}],\"internalType\":\"structChannel.Asset[]\",\"name\":\"assets\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"backends\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"balances\",\"type\":\"uint256[][]\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"ID\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint16[]\",\"name\":\"indexMap\",\"type\":\"uint16[]\"}],\"internalType\":\"structChannel.SubAlloc[]\",\"name\":\"locked\",\"type\":\"tuple[]\"}],\"internalType\":\"structChannel.Allocation\",\"name\":\"outcome\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"appData\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"isFinal\",\"type\":\"bool\"}],\"internalType\":\"structChannel.State\",\"name\":\"state\",\"type\":\"tuple\"},{\"internalType\":\"bytes[]\",\"name\":\"sigs\",\"type\":\"bytes[]\"}],\"name\":\"concludeFinal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"timeout\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"challengeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"phase\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"stateHash\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"hasApp\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"channelID\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"ethHolder\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ccHolder\",\"type\":\"bytes\"}],\"internalType\":\"structChannel.Asset[]\",\"name\":\"assets\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"backends\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"balances\",\"type\":\"uint256[][]\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"ID\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint16[]\",\"name\":\"indexMap\",\"type\":\"uint16[]\"}],\"internalType\":\"structChannel.SubAlloc[]\",\"name\":\"locked\",\"type\":\"tuple[]\"}],\"internalType\":\"structChannel.Allocation\",\"name\":\"outcome\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"appData\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"isFinal\",\"type\":\"bool\"}],\"internalType\":\"structChannel.State\",\"name\":\"state\",\"type\":\"tuple\"}],\"name\":\"hashState\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"challengeDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"ethAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ccAddress\",\"type\":\"bytes\"}],\"internalType\":\"structChannel.Participant[]\",\"name\":\"participants\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"app\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"ledgerChannel\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"virtualChannel\",\"type\":\"bool\"}],\"internalType\":\"structChannel.Params\",\"name\":\"params\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"channelID\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"ethHolder\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ccHolder\",\"type\":\"bytes\"}],\"internalType\":\"structChannel.Asset[]\",\"name\":\"assets\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"backends\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"balances\",\"type\":\"uint256[][]\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"ID\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint16[]\",\"name\":\"indexMap\",\"type\":\"uint16[]\"}],\"internalType\":\"structChannel.SubAlloc[]\",\"name\":\"locked\",\"type\":\"tuple[]\"}],\"internalType\":\"structChannel.Allocation\",\"name\":\"outcome\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"appData\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"isFinal\",\"type\":\"bool\"}],\"internalType\":\"structChannel.State\",\"name\":\"stateOld\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"channelID\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"ethHolder\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ccHolder\",\"type\":\"bytes\"}],\"internalType\":\"structChannel.Asset[]\",\"name\":\"assets\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"backends\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"balances\",\"type\":\"uint256[][]\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"ID\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint16[]\",\"name\":\"indexMap\",\"type\":\"uint16[]\"}],\"internalType\":\"structChannel.SubAlloc[]\",\"name\":\"locked\",\"type\":\"tuple[]\"}],\"internalType\":\"structChannel.Allocation\",\"name\":\"outcome\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"appData\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"isFinal\",\"type\":\"bool\"}],\"internalType\":\"structChannel.State\",\"name\":\"state\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"actorIdx\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"sig\",\"type\":\"bytes\"}],\"name\":\"progress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"challengeDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"ethAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ccAddress\",\"type\":\"bytes\"}],\"internalType\":\"structChannel.Participant[]\",\"name\":\"participants\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"app\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"ledgerChannel\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"virtualChannel\",\"type\":\"bool\"}],\"internalType\":\"structChannel.Params\",\"name\":\"params\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"channelID\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"ethHolder\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ccHolder\",\"type\":\"bytes\"}],\"internalType\":\"structChannel.Asset[]\",\"name\":\"assets\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"backends\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"balances\",\"type\":\"uint256[][]\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"ID\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint16[]\",\"name\":\"indexMap\",\"type\":\"uint16[]\"}],\"internalType\":\"structChannel.SubAlloc[]\",\"name\":\"locked\",\"type\":\"tuple[]\"}],\"internalType\":\"structChannel.Allocation\",\"name\":\"outcome\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"appData\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"isFinal\",\"type\":\"bool\"}],\"internalType\":\"structChannel.State\",\"name\":\"state\",\"type\":\"tuple\"},{\"internalType\":\"bytes[]\",\"name\":\"sigs\",\"type\":\"bytes[]\"}],\"internalType\":\"structAdjudicator.SignedState\",\"name\":\"channel\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"challengeDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"ethAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ccAddress\",\"type\":\"bytes\"}],\"internalType\":\"structChannel.Participant[]\",\"name\":\"participants\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"app\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"ledgerChannel\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"virtualChannel\",\"type\":\"bool\"}],\"internalType\":\"structChannel.Params\",\"name\":\"params\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"channelID\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"ethHolder\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ccHolder\",\"type\":\"bytes\"}],\"internalType\":\"structChannel.Asset[]\",\"name\":\"assets\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"backends\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"balances\",\"type\":\"uint256[][]\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"ID\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint16[]\",\"name\":\"indexMap\",\"type\":\"uint16[]\"}],\"internalType\":\"structChannel.SubAlloc[]\",\"name\":\"locked\",\"type\":\"tuple[]\"}],\"internalType\":\"structChannel.Allocation\",\"name\":\"outcome\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"appData\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"isFinal\",\"type\":\"bool\"}],\"internalType\":\"structChannel.State\",\"name\":\"state\",\"type\":\"tuple\"},{\"internalType\":\"bytes[]\",\"name\":\"sigs\",\"type\":\"bytes[]\"}],\"internalType\":\"structAdjudicator.SignedState[]\",\"name\":\"subChannels\",\"type\":\"tuple[]\"}],\"name\":\"register\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x608060405234801561001057600080fd5b50613785806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063848890001161005b578063848890001461014b578063c5457f0d1461016c578063db77bb271461017f578063e9bc418d1461019257600080fd5b806311be1997146100825780634176e7ae146101235780634c33077514610138575b600080fd5b6100dd6100903660046125fb565b6000602081905290815260409020805460018201546002909201546001600160401b0380831693600160401b8404821693600160801b81049092169260ff600160c01b9093048316921686565b604080516001600160401b0397881681529587166020870152939095169284019290925260ff166060830152608082015290151560a082015260c0015b60405180910390f35b610136610131366004612dc8565b6101a5565b005b610136610146366004612f3e565b610211565b61015e610159366004612fc5565b6103af565b60405190815260200161011a565b61013661017a366004613094565b6103c8565b61015e61018d366004613168565b6103f6565b6101366101a036600461319c565b610401565b82608001516101cf5760405162461bcd60e51b81526004016101c690613252565b60405180910390fd5b6101d983836106bc565b6101e282610747565b60006101f0838360006108f1565b508351604080860151519087015192935061020b9284610c94565b50505050565b82608001516102325760405162461bcd60e51b81526004016101c690613252565b6080820151151560011461027a5760405162461bcd60e51b815260206004820152600f60248201526e1cdd185d19481b9bdd08199a5b985b608a1b60448201526064016101c6565b60408201516060015151156102c45760405162461bcd60e51b815260206004820152601060248201526f686173207375622d6368616e6e656c7360801b60448201526064016101c6565b6102ce83836106bc565b6102d9838383610d88565b60008061032084600001516102fa8660000151876040015160200151610e7c565b6001600160401b03168151811061031357610313613276565b6020026020010151610f34565b91509150801561037857600260ff16826060015160ff16036103785760405162461bcd60e51b8152602060048201526011602482015270636f6e636c7564656420616c726561647960781b60448201526064016101c6565b61038485856002610fe3565b6103a884600001518560400151600001518760400151876040015160400151610c94565b5050505050565b60006103ba82611105565b805190602001209050919050565b8151608001516103ea5760405162461bcd60e51b81526004016101c690613252565b61020b8282600061112e565b60006103ba826112ba565b82516040840151602001516000916104449161041e908290610e7c565b6001600160401b03168151811061043757610437613276565b60200260200101516112cd565b606081015190915060ff166104a75780516001600160401b03164210156104a25760405162461bcd60e51b81526020600482015260126024820152711d1a5b595bdd5d081b9bdd081c185cdcd95960721b60448201526064016101c6565b61053b565b600160ff16816060015160ff16036105035780516001600160401b031642106104a25760405162461bcd60e51b815260206004820152600e60248201526d1d1a5b595bdd5d081c185cdcd95960921b60448201526064016101c6565b60405162461bcd60e51b815260206004820152600d60248201526c696e76616c696420706861736560981b60448201526064016101c6565b60608601516001600160a01b03166105855760405162461bcd60e51b815260206004820152600d60248201526c06d75737420686176652061707609c1b60448201526064016101c6565b85604001515183106105d15760405162461bcd60e51b81526020600482015260156024820152746163746f72496478206f7574206f662072616e676560581b60448201526064016101c6565b6105db86856106bc565b6105e4856103af565b8160800151146106285760405162461bcd60e51b815260206004820152600f60248201526e77726f6e67206f6c6420737461746560881b60448201526064016101c6565b61065c61063485611105565b838860400151868151811061064b5761064b613276565b602002602001015160000151611352565b61069c5760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964207369676e617475726560781b60448201526064016101c6565b6106a8868686866113db565b6106b486856001610fe3565b505050505050565b60006106d48260000151836040015160200151610e7c565b6001600160401b031690506106e8836103f6565b82518051839081106106fc576106fc613276565b6020026020010151146107425760405162461bcd60e51b815260206004820152600e60248201526d696e76616c696420706172616d7360901b60448201526064016101c6565b505050565b600061075f8260000151836040015160200151610e7c565b905060006107858360000151836001600160401b03168151811061043757610437613276565b9050610790836103af565b8160800151146107d25760405162461bcd60e51b815260206004820152600d60248201526c696e76616c696420737461746560981b60448201526064016101c6565b600260ff16816060015160ff16036108205760405162461bcd60e51b8152602060048201526011602482015270185b1c9958591e4818dbdb98db1d591959607a1b60448201526064016101c6565b606081015160ff1615801561083657508060a001515b156108635760208101518151610857916001600160401b039091169061150f565b6001600160401b031681525b80516001600160401b03164210156108b65760405162461bcd60e51b81526020600482015260166024820152751d1a5b595bdd5d081b9bdd081c185cdcd959081e595d60521b60448201526064016101c6565b60025b60ff1660608201528251805161074291906001600160401b0385169081106108e3576108e3613276565b60200260200101518261156a565b606060006108fe8561165c565b60408501515180516001600160401b0381111561091d5761091d612614565b60405190808252806020026020018201604052801561095057816020015b606081526020019060019003908161093b5790505b50925060005b8151811015610a89576000876040015160400151828151811061097b5761097b613276565b6020026020010151905080516001600160401b0381111561099e5761099e612614565b6040519080825280602002602001820160405280156109c7578160200160208202803683370190505b508583815181106109da576109da613276565b602002602001018190525060005b8151811015610a74578860400151604001518381518110610a0b57610a0b613276565b60200260200101518181518110610a2457610a24613276565b6020026020010151868481518110610a3e57610a3e613276565b60200260200101518281518110610a5757610a57613276565b602090810291909101015280610a6c816132b8565b9150506109e8565b50508080610a81906132b8565b915050610956565b5060408601516060015184925060005b8151811015610c89576000828281518110610ab657610ab6613276565b602002602001015190506000888680610ace906132b8565b975081518110610ae057610ae0613276565b60200260200101519050610afc826000015182600001516116fd565b610b405760405162461bcd60e51b81526020600482015260156024820152741a5b9d985b1a59081cdd5898da185b9b995b081a59605a1b60448201526064016101c6565b6060610b4d828b896108f1565b604085015190985090915060005b8751811015610c715760005b8251811015610c5e576000848381518110610b8457610b84613276565b60200260200101518281518110610b9d57610b9d613276565b602002602001015190506000848381518110610bbb57610bbb613276565b60200260200101519050610c0e828e8681518110610bdb57610bdb613276565b60200260200101518361ffff1681518110610bf857610bf8613276565b602002602001015161177b90919063ffffffff16565b8d8581518110610c2057610c20613276565b60200260200101518261ffff1681518110610c3d57610c3d613276565b60200260200101818152505050508080610c56906132b8565b915050610b67565b5080610c69816132b8565b915050610b5b565b50505050508080610c81906132b8565b915050610a99565b505050935093915050565b60005b83518110156103a8576000848281518110610cb457610cb4613276565b6020026020010151905046816000015103610d755760208101516001600160a01b031615610d755780602001516001600160a01b031663295482ce878481518110610d0157610d01613276565b602002602001015186868681518110610d1c57610d1c613276565b60200260200101516040518463ffffffff1660e01b8152600401610d42939291906133cb565b600060405180830381600087803b158015610d5c57600080fd5b505af1158015610d70573d6000803e3d6000fd5b505050505b5080610d80816132b8565b915050610c97565b6000610d9383611105565b9050815184604001515114610dea5760405162461bcd60e51b815260206004820152601a60248201527f7369676e617475726573206c656e677468206d69736d6174636800000000000060448201526064016101c6565b60005b82518110156103a857610e2a82848381518110610e0c57610e0c613276565b60200260200101518760400151848151811061064b5761064b613276565b610e6a5760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964207369676e617475726560781b60448201526064016101c6565b80610e74816132b8565b915050610ded565b60008151835114610ec85760405162461bcd60e51b8152602060048201526016602482015275082e4e4c2f240d8cadccee8d0e640dad2e6dac2e8c6d60531b60448201526064016101c6565b81600081518110610edb57610edb613276565b6020026020010151600103610ef257506000610f2e565b60018251118015610f1d575081600181518110610f1157610f11613276565b60200260200101516001145b15610f2a57506001610f2e565b5060005b92915050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091525060009081526020818152604091829020825160c08101845281546001600160401b038082168352600160401b8204811694830194909452600160801b810490931693810193909352600160c01b90910460ff908116606084015260018201546080840181905260029092015416151560a0830152909190151590565b6000610ffb8360000151846040015160200151610e7c565b6001600160401b031690506000806110228560000151848151811061031357610313613276565b87516001600160401b0390811660208481019190915288015116604083015260608801516001600160a01b0316151560a0830152909250905083600281111561106d5761106d61328c565b60ff16606083015261107e856103af565b608080840191909152850151156110a0576001600160401b03421682526110de565b8015806110b45750606082015160ff166001145b156110de5760208201516110d2906001600160401b0342169061150f565b6001600160401b031682525b6106b4856000015184815181106110f7576110f7613276565b60200260200101518361156a565b606081604051602001611118919061363d565b6040516020818303038152906040529050919050565b602083015160400151805160609183916111478761178e565b6111548260400151611997565b93506000826060015190508651815111156111a95760405162461bcd60e51b81526020600482015260156024820152741cdd5890da185b9b995b1cc81d1bdbc81cda1bdc9d605a1b60448201526064016101c6565b60005b81518110156112ae57600088866111c2816132b8565b9750815181106111d4576111d4613276565b602002602001015190506000808484815181106111f3576111f3613276565b6020026020010151836020015191509150611216826000015182600001516116fd565b61125b5760405162461bcd60e51b81526020600482015260166024820152751a5b9d985b1a59081cdd588b58da185b9b995b081a5960521b60448201526064016101c6565b6060611268848d8b61112e565b604084015151909a5090915061127f908890611a8d565b61128d836020015182611b38565b6112978a82611c28565b5050505080806112a6906132b8565b9150506111ac565b50505050935093915050565b60608160405160200161111891906136ae565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101829052908061130984610f34565b915091508061134b5760405162461bcd60e51b815260206004820152600e60248201526d1b9bdd081c9959da5cdd195c995960921b60448201526064016101c6565b5092915050565b6000806113b385805190602001206040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b905060006113c18286611c92565b6001600160a01b0390811690851614925050509392505050565b60208301516113eb9060016136c1565b6001600160401b031682602001516001600160401b0316146114485760405162461bcd60e51b81526020600482015260166024820152751d995c9cda5bdb881b5d5cdd081a5b98dc995b595b9d60521b60448201526064016101c6565b60808301511561148a5760405162461bcd60e51b815260206004820152600d60248201526c185b1c9958591e48199a5b985b609a1b60448201526064016101c6565b6114a283604001518360400151866040015151611cb6565b60608401516040516206371b60ea1b81526001600160a01b038216906318dc6c00906114d89088908890889088906004016136ec565b60006040518083038186803b1580156114f057600080fd5b505afa158015611504573d6000803e3d6000fd5b505050505050505050565b60006001600160401b03831661152583856136c1565b9150816001600160401b03161015610f2e5760405162461bcd60e51b81526020600482015260086024820152676f766572666c6f7760c01b60448201526064016101c6565b600082815260208181526040918290208351815485840151868601516060808901516001600160401b039586166fffffffffffffffffffffffffffffffff199095168517600160401b948716949094029390931768ffffffffffffffffff60801b1916600160801b9590921694850260ff60c01b191691909117600160c01b60ff9093169283021785556080880151600186015560a08801516002909501805460ff1916951515959095179094558551928352938201939093529283019190915283917f895ef5a5fc3efd313a300b006d6ce97ff0670dfe04f6eea90417edf924fa786b910160405180910390a25050565b60006116748260000151836040015160200151610e7c565b9050600061169a8360000151836001600160401b03168151811061043757610437613276565b90506116a5836103af565b8160800151146116e75760405162461bcd60e51b815260206004820152600d60248201526c696e76616c696420737461746560981b60448201526064016101c6565b606081015160ff166002146107425760026108b9565b6000815183511461171057506000610f2e565b60005b83518110156117715782818151811061172e5761172e613276565b602002602001015184828151811061174857611748613276565b60200260200101511461175f576000915050610f2e565b80611769816132b8565b915050611713565b5060019392505050565b60006117878284613737565b9392505050565b8051602082015161179f82826106bc565b6117ae82828560400151610d88565b8160a001511561184b5760608201516001600160a01b0316156118055760405162461bcd60e51b815260206004820152600f60248201526e063616e6e6f7420686176652061707608c1b60448201526064016101c6565b604081015160600151511561184b5760405162461bcd60e51b815260206004820152600c60248201526b199d5b991cc81b1bd8dad95960a21b60448201526064016101c6565b60008061186c83600001516102fa8560000151866040015160200151610e7c565b91509150801561198b5761187f836103af565b826080015103611890575050505050565b82602001516001600160401b031682604001516001600160401b0316106118eb5760405162461bcd60e51b815260206004820152600f60248201526e34b73b30b634b2103b32b939b4b7b760891b60448201526064016101c6565b606082015160ff16156119325760405162461bcd60e51b815260206004820152600f60248201526e696e636f727265637420706861736560881b60448201526064016101c6565b81516001600160401b0316421061198b5760405162461bcd60e51b815260206004820152601960248201527f72656675746174696f6e2074696d656f7574207061737365640000000000000060448201526064016101c6565b6103a884846000610fe3565b606081516001600160401b038111156119b2576119b2612614565b6040519080825280602002602001820160405280156119db578160200160208202803683370190505b50905060005b8251811015611a875760008382815181106119fe576119fe613276565b6020026020010151905060005b8151811015611a7257611a43828281518110611a2957611a29613276565b6020026020010151858581518110610bf857610bf8613276565b848481518110611a5557611a55613276565b602090810291909101015280611a6a816132b8565b915050611a0b565b50508080611a7f906132b8565b9150506119e1565b50919050565b8051825114611ade5760405162461bcd60e51b815260206004820152601760248201527f41737365745b5d3a20756e657175616c206c656e67746800000000000000000060448201526064016101c6565b60005b825181101561074257611b26838281518110611aff57611aff613276565b6020026020010151838381518110611b1957611b19613276565b6020026020010151611fa6565b80611b30816132b8565b915050611ae1565b8051825114611b895760405162461bcd60e51b815260206004820152601960248201527f75696e743235365b5d3a20756e657175616c206c656e6774680000000000000060448201526064016101c6565b60005b825181101561074257818181518110611ba757611ba7613276565b6020026020010151838281518110611bc157611bc1613276565b602002602001015114611c165760405162461bcd60e51b815260206004820152601760248201527f75696e743235365b5d3a20756e657175616c206974656d00000000000000000060448201526064016101c6565b80611c20816132b8565b915050611b8c565b60005b825181101561074257611c63828281518110611c4957611c49613276565b6020026020010151848381518110610bf857610bf8613276565b838281518110611c7557611c75613276565b602090810291909101015280611c8a816132b8565b915050611c2b565b6000806000611ca185856120a2565b91509150611cae81612110565b509392505050565b81604001515183604001515114611d0f5760405162461bcd60e51b815260206004820152601860248201527f62616c616e636573206c656e677468206d69736d61746368000000000000000060448201526064016101c6565b81515183515114611d5b5760405162461bcd60e51b81526020600482015260166024820152750c2e6e6cae8e640d8cadccee8d040dad2e6dac2e8c6d60531b60448201526064016101c6565b611d6d836060015183606001516122c9565b60005b82515181101561020b57611db184600001518281518110611d9357611d93613276565b602002602001015184600001518381518110611b1957611b19613276565b6000808386604001518481518110611dcb57611dcb613276565b60200260200101515114611e215760405162461bcd60e51b815260206004820152601c60248201527f6f6c642062616c616e636573206c656e677468206d69736d617463680000000060448201526064016101c6565b8385604001518481518110611e3857611e38613276565b60200260200101515114611e8e5760405162461bcd60e51b815260206004820152601c60248201527f6e65772062616c616e636573206c656e677468206d69736d617463680000000060448201526064016101c6565b60005b84811015611f4157611ee287604001518581518110611eb257611eb2613276565b60200260200101518281518110611ecb57611ecb613276565b60200260200101518461177b90919063ffffffff16565b9250611f2d86604001518581518110611efd57611efd613276565b60200260200101518281518110611f1657611f16613276565b60200260200101518361177b90919063ffffffff16565b915080611f39816132b8565b915050611e91565b50808214611f915760405162461bcd60e51b815260206004820152601860248201527f73756d206f662062616c616e636573206d69736d61746368000000000000000060448201526064016101c6565b50508080611f9e906132b8565b915050611d70565b8051825114611fe95760405162461bcd60e51b815260206004820152600f60248201526e1d5b995c5d585b0818da185a5b9251608a1b60448201526064016101c6565b80602001516001600160a01b031682602001516001600160a01b0316146120465760405162461bcd60e51b81526020600482015260116024820152703ab732b8bab0b61032ba342437b63232b960791b60448201526064016101c6565b8060400151805190602001208260400151805190602001201461209e5760405162461bcd60e51b815260206004820152601060248201526f3ab732b8bab0b61031b1a437b63232b960811b60448201526064016101c6565b5050565b60008082516041036120d85760208301516040840151606085015160001a6120cc87828585612374565b94509450505050612109565b825160400361210157602083015160408401516120f6868383612461565b935093505050612109565b506000905060025b9250929050565b60008160048111156121245761212461328c565b0361212c5750565b60018160048111156121405761214061328c565b0361218d5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016101c6565b60028160048111156121a1576121a161328c565b036121ee5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016101c6565b60038160048111156122025761220261328c565b0361225a5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016101c6565b600481600481111561226e5761226e61328c565b036122c65760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016101c6565b50565b805182511461231a5760405162461bcd60e51b815260206004820152601a60248201527f537562416c6c6f635b5d3a20756e657175616c206c656e67746800000000000060448201526064016101c6565b60005b82518110156107425761236283828151811061233b5761233b613276565b602002602001015183838151811061235557612355613276565b602002602001015161249a565b8061236c816132b8565b91505061231d565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156123ab5750600090506003612458565b8460ff16601b141580156123c357508460ff16601c14155b156123d45750600090506004612458565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612428573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661245157600060019250925050612458565b9150600090505b94509492505050565b6000806001600160ff1b0383168161247e60ff86901c601b613737565b905061248c87828885612374565b935093505050935093915050565b815181516124a891906116fd565b6124eb5760405162461bcd60e51b815260206004820152601460248201527314dd58905b1b1bd8ce881d5b995c5d585b08125160621b60448201526064016101c6565b6124fd82602001518260200151611b38565b61209e82604001518260400151805182511461255b5760405162461bcd60e51b815260206004820152601860248201527f75696e7431365b5d3a20756e657175616c206c656e677468000000000000000060448201526064016101c6565b60005b82518110156107425781818151811061257957612579613276565b602002602001015161ffff1683828151811061259757612597613276565b602002602001015161ffff16146125e95760405162461bcd60e51b815260206004820152601660248201527575696e7431365b5d3a20756e657175616c206974656d60501b60448201526064016101c6565b806125f3816132b8565b91505061255e565b60006020828403121561260d57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b038111828210171561264c5761264c612614565b60405290565b604080519081016001600160401b038111828210171561264c5761264c612614565b604051606081016001600160401b038111828210171561264c5761264c612614565b604051608081016001600160401b038111828210171561264c5761264c612614565b60405160a081016001600160401b038111828210171561264c5761264c612614565b604051601f8201601f191681016001600160401b038111828210171561270257612702612614565b604052919050565b60006001600160401b0382111561272357612723612614565b5060051b60200190565b80356001600160a01b038116811461274457600080fd5b919050565b600082601f83011261275a57600080fd5b81356001600160401b0381111561277357612773612614565b612786601f8201601f19166020016126da565b81815284602083860101111561279b57600080fd5b816020850160208301376000918101602001919091529392505050565b8035801515811461274457600080fd5b600060c082840312156127da57600080fd5b6127e261262a565b905081358152602080830135818301526040808401356001600160401b038082111561280d57600080fd5b818601915086601f83011261282157600080fd5b813561283461282f8261270a565b6126da565b81815260059190911b8301850190858101908983111561285357600080fd5b8685015b838110156128cd5780358581111561286f5760008081fd5b8601808c03601f19018813156128855760008081fd5b61288d612652565b6128988a830161272d565b815288820135878111156128ac5760008081fd5b6128ba8e8c83860101612749565b828c015250845250918701918701612857565b508086890152505050505050506128e66060830161272d565b60608201526128f7608083016127b8565b608082015261290860a083016127b8565b60a082015292915050565b600082601f83011261292457600080fd5b8135602061293461282f8361270a565b82815260059290921b8401810191818101908684111561295357600080fd5b8286015b8481101561296e5780358352918301918301612957565b509695505050505050565b80356001600160401b038116811461274457600080fd5b600082601f8301126129a157600080fd5b813560206129b161282f8361270a565b82815260059290921b840181019181810190868411156129d057600080fd5b8286015b8481101561296e5780356001600160401b03808211156129f45760008081fd5b908801906060828b03601f1901811315612a0e5760008081fd5b612a16612674565b8784013581526040612a2981860161272d565b828a0152918401359183831115612a405760008081fd5b612a4e8d8a85880101612749565b9082015286525050509183019183016129d4565b600082601f830112612a7357600080fd5b81356020612a8361282f8361270a565b82815260059290921b84018101918181019086841115612aa257600080fd5b8286015b8481101561296e5780356001600160401b03811115612ac55760008081fd5b612ad38986838b0101612913565b845250918301918301612aa6565b600082601f830112612af257600080fd5b81356020612b0261282f8361270a565b828152600592831b8501820192828201919087851115612b2157600080fd5b8387015b85811015612c4e5780356001600160401b0380821115612b455760008081fd5b908901906060828c03601f1901811315612b5f5760008081fd5b612b67612674565b8884013583811115612b795760008081fd5b612b878e8b83880101612913565b82525060408085013584811115612b9e5760008081fd5b612bac8f8c83890101612913565b838c015250918401359183831115612bc45760008081fd5b82850194508d603f860112612bdb57600093508384fd5b898501359350612bed61282f8561270a565b84815293871b85018101938a810193508e851115612c0b5760008081fd5b948101945b84861015612c3a57853561ffff81168114612c2b5760008081fd5b8452948a0194928a0192612c10565b908201528752505050928401928401612b25565b5090979650505050505050565b600060808284031215612c6d57600080fd5b612c75612696565b905081356001600160401b0380821115612c8e57600080fd5b612c9a85838601612990565b83526020840135915080821115612cb057600080fd5b612cbc85838601612913565b60208401526040840135915080821115612cd557600080fd5b612ce185838601612a62565b60408401526060840135915080821115612cfa57600080fd5b50612d0784828501612ae1565b60608301525092915050565b600060a08284031215612d2557600080fd5b612d2d6126b8565b905081356001600160401b0380821115612d4657600080fd5b612d5285838601612913565b8352612d6060208501612979565b60208401526040840135915080821115612d7957600080fd5b612d8585838601612c5b565b60408401526060840135915080821115612d9e57600080fd5b50612dab84828501612749565b606083015250612dbd608083016127b8565b608082015292915050565b600080600060608486031215612ddd57600080fd5b83356001600160401b0380821115612df457600080fd5b612e00878388016127c8565b9450602091508186013581811115612e1757600080fd5b612e2388828901612d13565b945050604086013581811115612e3857600080fd5b8601601f81018813612e4957600080fd5b8035612e5761282f8261270a565b81815260059190911b8201840190848101908a831115612e7657600080fd5b8584015b83811015612eae57803586811115612e925760008081fd5b612ea08d8983890101612d13565b845250918601918601612e7a565b508096505050505050509250925092565b600082601f830112612ed057600080fd5b81356020612ee061282f8361270a565b82815260059290921b84018101918181019086841115612eff57600080fd5b8286015b8481101561296e5780356001600160401b03811115612f225760008081fd5b612f308986838b0101612749565b845250918301918301612f03565b600080600060608486031215612f5357600080fd5b83356001600160401b0380821115612f6a57600080fd5b612f76878388016127c8565b94506020860135915080821115612f8c57600080fd5b612f9887838801612d13565b93506040860135915080821115612fae57600080fd5b50612fbb86828701612ebf565b9150509250925092565b600060208284031215612fd757600080fd5b81356001600160401b03811115612fed57600080fd5b612ff984828501612d13565b949350505050565b60006060828403121561301357600080fd5b61301b612674565b905081356001600160401b038082111561303457600080fd5b613040858386016127c8565b8352602084013591508082111561305657600080fd5b61306285838601612d13565b6020840152604084013591508082111561307b57600080fd5b5061308884828501612ebf565b60408301525092915050565b600080604083850312156130a757600080fd5b82356001600160401b03808211156130be57600080fd5b6130ca86838701613001565b93506020915081850135818111156130e157600080fd5b8501601f810187136130f257600080fd5b803561310061282f8261270a565b81815260059190911b8201840190848101908983111561311f57600080fd5b8584015b838110156131575780358681111561313b5760008081fd5b6131498c8983890101613001565b845250918601918601613123565b508096505050505050509250929050565b60006020828403121561317a57600080fd5b81356001600160401b0381111561319057600080fd5b612ff9848285016127c8565b600080600080600060a086880312156131b457600080fd5b85356001600160401b03808211156131cb57600080fd5b6131d789838a016127c8565b965060208801359150808211156131ed57600080fd5b6131f989838a01612d13565b9550604088013591508082111561320f57600080fd5b61321b89838a01612d13565b945060608801359350608088013591508082111561323857600080fd5b5061324588828901612749565b9150509295509295909350565b6020808252600a90820152693737ba103632b233b2b960b11b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016132ca576132ca6132a2565b5060010190565b6000815180845260005b818110156132f7576020818501810151868301820152016132db565b81811115613309576000602083870101525b50601f01601f19169290920160200192915050565b600081518084526020808501808196508360051b8101915082860160005b85811015613383578284038952815180516001600160a01b03168552850151604086860181905261336f818701836132d1565b9a87019a955050509084019060010161333c565b5091979650505050505050565b600081518084526020808501945080840160005b838110156133c0578151875295820195908201906001016133a4565b509495945050505050565b8381526060602082015260006133e4606083018561331e565b82810360408401526133f68185613390565b9695505050505050565b600081518084526020808501808196508360051b8101915082860160005b85811015613383578284038952613436848351613390565b9885019893509084019060010161341e565b600081518084526020808501808196508360051b810191508286016000805b868110156134fc578385038a5282516060815181885261348982890182613390565b91505087820151878203898901526134a18282613390565b604093840151898203948a01949094528351808252938a0193869350908a0191505b808310156134e757835161ffff1682529289019260019290920191908901906134c3565b509b88019b9650505091850191600101613467565b509298975050505050505050565b6000815160a0845261351f60a0850182613390565b905060206001600160401b03818501511681860152604080850151868403828801526080840181516080865281815180845260a08801915060a08160051b8901019350868301925060005b818110156135bd57888503609f19018352835180518652888101516001600160a01b03168987015287015160608887018190526135a9818801836132d1565b96505050928701929187019160010161356a565b5050505083820151858203858701526135d68282613390565b9450505081810151848403838601526135ef8482613400565b9350506060810151915050828203606084015261360c8282613448565b925050506060830151848203606086015261362782826132d1565b9150506080830151611cae608086018215159052565b602081526000611787602083018461350a565b80518252602081015160208301526000604082015160c0604085015261367960c085018261331e565b6060848101516001600160a01b03169086015260808085015115159086015260a0938401511515949093019390935250919050565b6020815260006117876020830184613650565b60006001600160401b038083168185168083038211156136e3576136e36132a2565b01949350505050565b6080815260006136ff6080830187613650565b8281036020840152613711818761350a565b90508281036040840152613725818661350a565b91505082606083015295945050505050565b6000821982111561374a5761374a6132a2565b50019056fea26469706673582212205530585eb54cf40e9a0fd5c6f2665357bbbc73417b63654a5f743cee7efd06a964736f6c634300080f0033", } // AdjudicatorABI is the input ABI used to generate the binding from. @@ -202,11 +211,11 @@ func NewAdjudicatorFilterer(address common.Address, filterer bind.ContractFilter // bindAdjudicator binds a generic wrapper to an already deployed contract. func bindAdjudicator(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(AdjudicatorABI)) + parsed, err := AdjudicatorMetaData.GetAbi() if err != nil { return nil, err } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil } // Call invokes the (constant) contract method with params as input values and @@ -247,9 +256,9 @@ func (_Adjudicator *AdjudicatorTransactorRaw) Transact(opts *bind.TransactOpts, return _Adjudicator.Contract.contract.Transact(opts, method, params...) } -// ChannelID is a free data retrieval call binding the contract method 0x6f68e70e. +// ChannelID is a free data retrieval call binding the contract method 0xdb77bb27. // -// Solidity: function channelID((uint256,uint256,address[],address,bool,bool) params) pure returns(bytes32) +// Solidity: function channelID((uint256,uint256,(address,bytes)[],address,bool,bool) params) pure returns(bytes32) func (_Adjudicator *AdjudicatorCaller) ChannelID(opts *bind.CallOpts, params ChannelParams) ([32]byte, error) { var out []interface{} err := _Adjudicator.contract.Call(opts, &out, "channelID", params) @@ -264,30 +273,30 @@ func (_Adjudicator *AdjudicatorCaller) ChannelID(opts *bind.CallOpts, params Cha } -// ChannelID is a free data retrieval call binding the contract method 0x6f68e70e. +// ChannelID is a free data retrieval call binding the contract method 0xdb77bb27. // -// Solidity: function channelID((uint256,uint256,address[],address,bool,bool) params) pure returns(bytes32) +// Solidity: function channelID((uint256,uint256,(address,bytes)[],address,bool,bool) params) pure returns(bytes32) func (_Adjudicator *AdjudicatorSession) ChannelID(params ChannelParams) ([32]byte, error) { return _Adjudicator.Contract.ChannelID(&_Adjudicator.CallOpts, params) } -// ChannelID is a free data retrieval call binding the contract method 0x6f68e70e. +// ChannelID is a free data retrieval call binding the contract method 0xdb77bb27. // -// Solidity: function channelID((uint256,uint256,address[],address,bool,bool) params) pure returns(bytes32) +// Solidity: function channelID((uint256,uint256,(address,bytes)[],address,bool,bool) params) pure returns(bytes32) func (_Adjudicator *AdjudicatorCallerSession) ChannelID(params ChannelParams) ([32]byte, error) { return _Adjudicator.Contract.ChannelID(&_Adjudicator.CallOpts, params) } // Disputes is a free data retrieval call binding the contract method 0x11be1997. // -// Solidity: function disputes(bytes32 ) view returns(uint64 timeout, uint64 challengeDuration, uint64 version, bool hasApp, uint8 phase, bytes32 stateHash) +// Solidity: function disputes(bytes32 ) view returns(uint64 timeout, uint64 challengeDuration, uint64 version, uint8 phase, bytes32 stateHash, bool hasApp) func (_Adjudicator *AdjudicatorCaller) Disputes(opts *bind.CallOpts, arg0 [32]byte) (struct { Timeout uint64 ChallengeDuration uint64 Version uint64 - HasApp bool Phase uint8 StateHash [32]byte + HasApp bool }, error) { var out []interface{} err := _Adjudicator.contract.Call(opts, &out, "disputes", arg0) @@ -296,9 +305,9 @@ func (_Adjudicator *AdjudicatorCaller) Disputes(opts *bind.CallOpts, arg0 [32]by Timeout uint64 ChallengeDuration uint64 Version uint64 - HasApp bool Phase uint8 StateHash [32]byte + HasApp bool }) if err != nil { return *outstruct, err @@ -307,9 +316,9 @@ func (_Adjudicator *AdjudicatorCaller) Disputes(opts *bind.CallOpts, arg0 [32]by outstruct.Timeout = *abi.ConvertType(out[0], new(uint64)).(*uint64) outstruct.ChallengeDuration = *abi.ConvertType(out[1], new(uint64)).(*uint64) outstruct.Version = *abi.ConvertType(out[2], new(uint64)).(*uint64) - outstruct.HasApp = *abi.ConvertType(out[3], new(bool)).(*bool) - outstruct.Phase = *abi.ConvertType(out[4], new(uint8)).(*uint8) - outstruct.StateHash = *abi.ConvertType(out[5], new([32]byte)).(*[32]byte) + outstruct.Phase = *abi.ConvertType(out[3], new(uint8)).(*uint8) + outstruct.StateHash = *abi.ConvertType(out[4], new([32]byte)).(*[32]byte) + outstruct.HasApp = *abi.ConvertType(out[5], new(bool)).(*bool) return *outstruct, err @@ -317,35 +326,35 @@ func (_Adjudicator *AdjudicatorCaller) Disputes(opts *bind.CallOpts, arg0 [32]by // Disputes is a free data retrieval call binding the contract method 0x11be1997. // -// Solidity: function disputes(bytes32 ) view returns(uint64 timeout, uint64 challengeDuration, uint64 version, bool hasApp, uint8 phase, bytes32 stateHash) +// Solidity: function disputes(bytes32 ) view returns(uint64 timeout, uint64 challengeDuration, uint64 version, uint8 phase, bytes32 stateHash, bool hasApp) func (_Adjudicator *AdjudicatorSession) Disputes(arg0 [32]byte) (struct { Timeout uint64 ChallengeDuration uint64 Version uint64 - HasApp bool Phase uint8 StateHash [32]byte + HasApp bool }, error) { return _Adjudicator.Contract.Disputes(&_Adjudicator.CallOpts, arg0) } // Disputes is a free data retrieval call binding the contract method 0x11be1997. // -// Solidity: function disputes(bytes32 ) view returns(uint64 timeout, uint64 challengeDuration, uint64 version, bool hasApp, uint8 phase, bytes32 stateHash) +// Solidity: function disputes(bytes32 ) view returns(uint64 timeout, uint64 challengeDuration, uint64 version, uint8 phase, bytes32 stateHash, bool hasApp) func (_Adjudicator *AdjudicatorCallerSession) Disputes(arg0 [32]byte) (struct { Timeout uint64 ChallengeDuration uint64 Version uint64 - HasApp bool Phase uint8 StateHash [32]byte + HasApp bool }, error) { return _Adjudicator.Contract.Disputes(&_Adjudicator.CallOpts, arg0) } -// HashState is a free data retrieval call binding the contract method 0x6914670e. +// HashState is a free data retrieval call binding the contract method 0x84889000. // -// Solidity: function hashState((bytes32,uint64,((uint256,address)[],uint256[][],(bytes32,uint256[],uint16[])[]),bytes,bool) state) pure returns(bytes32) +// Solidity: function hashState((bytes32[],uint64,((uint256,address,bytes)[],uint256[],uint256[][],(bytes32[],uint256[],uint16[])[]),bytes,bool) state) pure returns(bytes32) func (_Adjudicator *AdjudicatorCaller) HashState(opts *bind.CallOpts, state ChannelState) ([32]byte, error) { var out []interface{} err := _Adjudicator.contract.Call(opts, &out, "hashState", state) @@ -360,100 +369,100 @@ func (_Adjudicator *AdjudicatorCaller) HashState(opts *bind.CallOpts, state Chan } -// HashState is a free data retrieval call binding the contract method 0x6914670e. +// HashState is a free data retrieval call binding the contract method 0x84889000. // -// Solidity: function hashState((bytes32,uint64,((uint256,address)[],uint256[][],(bytes32,uint256[],uint16[])[]),bytes,bool) state) pure returns(bytes32) +// Solidity: function hashState((bytes32[],uint64,((uint256,address,bytes)[],uint256[],uint256[][],(bytes32[],uint256[],uint16[])[]),bytes,bool) state) pure returns(bytes32) func (_Adjudicator *AdjudicatorSession) HashState(state ChannelState) ([32]byte, error) { return _Adjudicator.Contract.HashState(&_Adjudicator.CallOpts, state) } -// HashState is a free data retrieval call binding the contract method 0x6914670e. +// HashState is a free data retrieval call binding the contract method 0x84889000. // -// Solidity: function hashState((bytes32,uint64,((uint256,address)[],uint256[][],(bytes32,uint256[],uint16[])[]),bytes,bool) state) pure returns(bytes32) +// Solidity: function hashState((bytes32[],uint64,((uint256,address,bytes)[],uint256[],uint256[][],(bytes32[],uint256[],uint16[])[]),bytes,bool) state) pure returns(bytes32) func (_Adjudicator *AdjudicatorCallerSession) HashState(state ChannelState) ([32]byte, error) { return _Adjudicator.Contract.HashState(&_Adjudicator.CallOpts, state) } -// Conclude is a paid mutator transaction binding the contract method 0xb1d6da22. +// Conclude is a paid mutator transaction binding the contract method 0x4176e7ae. // -// Solidity: function conclude((uint256,uint256,address[],address,bool,bool) params, (bytes32,uint64,((uint256,address)[],uint256[][],(bytes32,uint256[],uint16[])[]),bytes,bool) state, (bytes32,uint64,((uint256,address)[],uint256[][],(bytes32,uint256[],uint16[])[]),bytes,bool)[] subStates) returns() +// Solidity: function conclude((uint256,uint256,(address,bytes)[],address,bool,bool) params, (bytes32[],uint64,((uint256,address,bytes)[],uint256[],uint256[][],(bytes32[],uint256[],uint16[])[]),bytes,bool) state, (bytes32[],uint64,((uint256,address,bytes)[],uint256[],uint256[][],(bytes32[],uint256[],uint16[])[]),bytes,bool)[] subStates) returns() func (_Adjudicator *AdjudicatorTransactor) Conclude(opts *bind.TransactOpts, params ChannelParams, state ChannelState, subStates []ChannelState) (*types.Transaction, error) { return _Adjudicator.contract.Transact(opts, "conclude", params, state, subStates) } -// Conclude is a paid mutator transaction binding the contract method 0xb1d6da22. +// Conclude is a paid mutator transaction binding the contract method 0x4176e7ae. // -// Solidity: function conclude((uint256,uint256,address[],address,bool,bool) params, (bytes32,uint64,((uint256,address)[],uint256[][],(bytes32,uint256[],uint16[])[]),bytes,bool) state, (bytes32,uint64,((uint256,address)[],uint256[][],(bytes32,uint256[],uint16[])[]),bytes,bool)[] subStates) returns() +// Solidity: function conclude((uint256,uint256,(address,bytes)[],address,bool,bool) params, (bytes32[],uint64,((uint256,address,bytes)[],uint256[],uint256[][],(bytes32[],uint256[],uint16[])[]),bytes,bool) state, (bytes32[],uint64,((uint256,address,bytes)[],uint256[],uint256[][],(bytes32[],uint256[],uint16[])[]),bytes,bool)[] subStates) returns() func (_Adjudicator *AdjudicatorSession) Conclude(params ChannelParams, state ChannelState, subStates []ChannelState) (*types.Transaction, error) { return _Adjudicator.Contract.Conclude(&_Adjudicator.TransactOpts, params, state, subStates) } -// Conclude is a paid mutator transaction binding the contract method 0xb1d6da22. +// Conclude is a paid mutator transaction binding the contract method 0x4176e7ae. // -// Solidity: function conclude((uint256,uint256,address[],address,bool,bool) params, (bytes32,uint64,((uint256,address)[],uint256[][],(bytes32,uint256[],uint16[])[]),bytes,bool) state, (bytes32,uint64,((uint256,address)[],uint256[][],(bytes32,uint256[],uint16[])[]),bytes,bool)[] subStates) returns() +// Solidity: function conclude((uint256,uint256,(address,bytes)[],address,bool,bool) params, (bytes32[],uint64,((uint256,address,bytes)[],uint256[],uint256[][],(bytes32[],uint256[],uint16[])[]),bytes,bool) state, (bytes32[],uint64,((uint256,address,bytes)[],uint256[],uint256[][],(bytes32[],uint256[],uint16[])[]),bytes,bool)[] subStates) returns() func (_Adjudicator *AdjudicatorTransactorSession) Conclude(params ChannelParams, state ChannelState, subStates []ChannelState) (*types.Transaction, error) { return _Adjudicator.Contract.Conclude(&_Adjudicator.TransactOpts, params, state, subStates) } -// ConcludeFinal is a paid mutator transaction binding the contract method 0xf53f5dfe. +// ConcludeFinal is a paid mutator transaction binding the contract method 0x4c330775. // -// Solidity: function concludeFinal((uint256,uint256,address[],address,bool,bool) params, (bytes32,uint64,((uint256,address)[],uint256[][],(bytes32,uint256[],uint16[])[]),bytes,bool) state, bytes[] sigs) returns() +// Solidity: function concludeFinal((uint256,uint256,(address,bytes)[],address,bool,bool) params, (bytes32[],uint64,((uint256,address,bytes)[],uint256[],uint256[][],(bytes32[],uint256[],uint16[])[]),bytes,bool) state, bytes[] sigs) returns() func (_Adjudicator *AdjudicatorTransactor) ConcludeFinal(opts *bind.TransactOpts, params ChannelParams, state ChannelState, sigs [][]byte) (*types.Transaction, error) { return _Adjudicator.contract.Transact(opts, "concludeFinal", params, state, sigs) } -// ConcludeFinal is a paid mutator transaction binding the contract method 0xf53f5dfe. +// ConcludeFinal is a paid mutator transaction binding the contract method 0x4c330775. // -// Solidity: function concludeFinal((uint256,uint256,address[],address,bool,bool) params, (bytes32,uint64,((uint256,address)[],uint256[][],(bytes32,uint256[],uint16[])[]),bytes,bool) state, bytes[] sigs) returns() +// Solidity: function concludeFinal((uint256,uint256,(address,bytes)[],address,bool,bool) params, (bytes32[],uint64,((uint256,address,bytes)[],uint256[],uint256[][],(bytes32[],uint256[],uint16[])[]),bytes,bool) state, bytes[] sigs) returns() func (_Adjudicator *AdjudicatorSession) ConcludeFinal(params ChannelParams, state ChannelState, sigs [][]byte) (*types.Transaction, error) { return _Adjudicator.Contract.ConcludeFinal(&_Adjudicator.TransactOpts, params, state, sigs) } -// ConcludeFinal is a paid mutator transaction binding the contract method 0xf53f5dfe. +// ConcludeFinal is a paid mutator transaction binding the contract method 0x4c330775. // -// Solidity: function concludeFinal((uint256,uint256,address[],address,bool,bool) params, (bytes32,uint64,((uint256,address)[],uint256[][],(bytes32,uint256[],uint16[])[]),bytes,bool) state, bytes[] sigs) returns() +// Solidity: function concludeFinal((uint256,uint256,(address,bytes)[],address,bool,bool) params, (bytes32[],uint64,((uint256,address,bytes)[],uint256[],uint256[][],(bytes32[],uint256[],uint16[])[]),bytes,bool) state, bytes[] sigs) returns() func (_Adjudicator *AdjudicatorTransactorSession) ConcludeFinal(params ChannelParams, state ChannelState, sigs [][]byte) (*types.Transaction, error) { return _Adjudicator.Contract.ConcludeFinal(&_Adjudicator.TransactOpts, params, state, sigs) } -// Progress is a paid mutator transaction binding the contract method 0x894afe2f. +// Progress is a paid mutator transaction binding the contract method 0xe9bc418d. // -// Solidity: function progress((uint256,uint256,address[],address,bool,bool) params, (bytes32,uint64,((uint256,address)[],uint256[][],(bytes32,uint256[],uint16[])[]),bytes,bool) stateOld, (bytes32,uint64,((uint256,address)[],uint256[][],(bytes32,uint256[],uint16[])[]),bytes,bool) state, uint256 actorIdx, bytes sig) returns() +// Solidity: function progress((uint256,uint256,(address,bytes)[],address,bool,bool) params, (bytes32[],uint64,((uint256,address,bytes)[],uint256[],uint256[][],(bytes32[],uint256[],uint16[])[]),bytes,bool) stateOld, (bytes32[],uint64,((uint256,address,bytes)[],uint256[],uint256[][],(bytes32[],uint256[],uint16[])[]),bytes,bool) state, uint256 actorIdx, bytes sig) returns() func (_Adjudicator *AdjudicatorTransactor) Progress(opts *bind.TransactOpts, params ChannelParams, stateOld ChannelState, state ChannelState, actorIdx *big.Int, sig []byte) (*types.Transaction, error) { return _Adjudicator.contract.Transact(opts, "progress", params, stateOld, state, actorIdx, sig) } -// Progress is a paid mutator transaction binding the contract method 0x894afe2f. +// Progress is a paid mutator transaction binding the contract method 0xe9bc418d. // -// Solidity: function progress((uint256,uint256,address[],address,bool,bool) params, (bytes32,uint64,((uint256,address)[],uint256[][],(bytes32,uint256[],uint16[])[]),bytes,bool) stateOld, (bytes32,uint64,((uint256,address)[],uint256[][],(bytes32,uint256[],uint16[])[]),bytes,bool) state, uint256 actorIdx, bytes sig) returns() +// Solidity: function progress((uint256,uint256,(address,bytes)[],address,bool,bool) params, (bytes32[],uint64,((uint256,address,bytes)[],uint256[],uint256[][],(bytes32[],uint256[],uint16[])[]),bytes,bool) stateOld, (bytes32[],uint64,((uint256,address,bytes)[],uint256[],uint256[][],(bytes32[],uint256[],uint16[])[]),bytes,bool) state, uint256 actorIdx, bytes sig) returns() func (_Adjudicator *AdjudicatorSession) Progress(params ChannelParams, stateOld ChannelState, state ChannelState, actorIdx *big.Int, sig []byte) (*types.Transaction, error) { return _Adjudicator.Contract.Progress(&_Adjudicator.TransactOpts, params, stateOld, state, actorIdx, sig) } -// Progress is a paid mutator transaction binding the contract method 0x894afe2f. +// Progress is a paid mutator transaction binding the contract method 0xe9bc418d. // -// Solidity: function progress((uint256,uint256,address[],address,bool,bool) params, (bytes32,uint64,((uint256,address)[],uint256[][],(bytes32,uint256[],uint16[])[]),bytes,bool) stateOld, (bytes32,uint64,((uint256,address)[],uint256[][],(bytes32,uint256[],uint16[])[]),bytes,bool) state, uint256 actorIdx, bytes sig) returns() +// Solidity: function progress((uint256,uint256,(address,bytes)[],address,bool,bool) params, (bytes32[],uint64,((uint256,address,bytes)[],uint256[],uint256[][],(bytes32[],uint256[],uint16[])[]),bytes,bool) stateOld, (bytes32[],uint64,((uint256,address,bytes)[],uint256[],uint256[][],(bytes32[],uint256[],uint16[])[]),bytes,bool) state, uint256 actorIdx, bytes sig) returns() func (_Adjudicator *AdjudicatorTransactorSession) Progress(params ChannelParams, stateOld ChannelState, state ChannelState, actorIdx *big.Int, sig []byte) (*types.Transaction, error) { return _Adjudicator.Contract.Progress(&_Adjudicator.TransactOpts, params, stateOld, state, actorIdx, sig) } -// Register is a paid mutator transaction binding the contract method 0xda89ed2d. +// Register is a paid mutator transaction binding the contract method 0xc5457f0d. // -// Solidity: function register(((uint256,uint256,address[],address,bool,bool),(bytes32,uint64,((uint256,address)[],uint256[][],(bytes32,uint256[],uint16[])[]),bytes,bool),bytes[]) channel, ((uint256,uint256,address[],address,bool,bool),(bytes32,uint64,((uint256,address)[],uint256[][],(bytes32,uint256[],uint16[])[]),bytes,bool),bytes[])[] subChannels) returns() +// Solidity: function register(((uint256,uint256,(address,bytes)[],address,bool,bool),(bytes32[],uint64,((uint256,address,bytes)[],uint256[],uint256[][],(bytes32[],uint256[],uint16[])[]),bytes,bool),bytes[]) channel, ((uint256,uint256,(address,bytes)[],address,bool,bool),(bytes32[],uint64,((uint256,address,bytes)[],uint256[],uint256[][],(bytes32[],uint256[],uint16[])[]),bytes,bool),bytes[])[] subChannels) returns() func (_Adjudicator *AdjudicatorTransactor) Register(opts *bind.TransactOpts, channel AdjudicatorSignedState, subChannels []AdjudicatorSignedState) (*types.Transaction, error) { return _Adjudicator.contract.Transact(opts, "register", channel, subChannels) } -// Register is a paid mutator transaction binding the contract method 0xda89ed2d. +// Register is a paid mutator transaction binding the contract method 0xc5457f0d. // -// Solidity: function register(((uint256,uint256,address[],address,bool,bool),(bytes32,uint64,((uint256,address)[],uint256[][],(bytes32,uint256[],uint16[])[]),bytes,bool),bytes[]) channel, ((uint256,uint256,address[],address,bool,bool),(bytes32,uint64,((uint256,address)[],uint256[][],(bytes32,uint256[],uint16[])[]),bytes,bool),bytes[])[] subChannels) returns() +// Solidity: function register(((uint256,uint256,(address,bytes)[],address,bool,bool),(bytes32[],uint64,((uint256,address,bytes)[],uint256[],uint256[][],(bytes32[],uint256[],uint16[])[]),bytes,bool),bytes[]) channel, ((uint256,uint256,(address,bytes)[],address,bool,bool),(bytes32[],uint64,((uint256,address,bytes)[],uint256[],uint256[][],(bytes32[],uint256[],uint16[])[]),bytes,bool),bytes[])[] subChannels) returns() func (_Adjudicator *AdjudicatorSession) Register(channel AdjudicatorSignedState, subChannels []AdjudicatorSignedState) (*types.Transaction, error) { return _Adjudicator.Contract.Register(&_Adjudicator.TransactOpts, channel, subChannels) } -// Register is a paid mutator transaction binding the contract method 0xda89ed2d. +// Register is a paid mutator transaction binding the contract method 0xc5457f0d. // -// Solidity: function register(((uint256,uint256,address[],address,bool,bool),(bytes32,uint64,((uint256,address)[],uint256[][],(bytes32,uint256[],uint16[])[]),bytes,bool),bytes[]) channel, ((uint256,uint256,address[],address,bool,bool),(bytes32,uint64,((uint256,address)[],uint256[][],(bytes32,uint256[],uint16[])[]),bytes,bool),bytes[])[] subChannels) returns() +// Solidity: function register(((uint256,uint256,(address,bytes)[],address,bool,bool),(bytes32[],uint64,((uint256,address,bytes)[],uint256[],uint256[][],(bytes32[],uint256[],uint16[])[]),bytes,bool),bytes[]) channel, ((uint256,uint256,(address,bytes)[],address,bool,bool),(bytes32[],uint64,((uint256,address,bytes)[],uint256[],uint256[][],(bytes32[],uint256[],uint16[])[]),bytes,bool),bytes[])[] subChannels) returns() func (_Adjudicator *AdjudicatorTransactorSession) Register(channel AdjudicatorSignedState, subChannels []AdjudicatorSignedState) (*types.Transaction, error) { return _Adjudicator.Contract.Register(&_Adjudicator.TransactOpts, channel, subChannels) } diff --git a/bindings/adjudicator/AdjudicatorBinRuntime.go b/bindings/adjudicator/AdjudicatorBinRuntime.go index 6741f5b..e4f3493 100644 --- a/bindings/adjudicator/AdjudicatorBinRuntime.go +++ b/bindings/adjudicator/AdjudicatorBinRuntime.go @@ -1,4 +1,4 @@ package adjudicator // import "github.com/perun-network/perun-eth-backend/bindings/adjudicator" // AdjudicatorBinRuntime is the runtime part of the compiled bytecode used for deploying new contracts. -var AdjudicatorBinRuntime = "608060405234801561001057600080fd5b506004361061007d5760003560e01c8063894afe2f1161005b578063894afe2f1461015b578063b1d6da2214610170578063da89ed2d14610183578063f53f5dfe1461019657600080fd5b806311be1997146100825780636914670e146101275780636f68e70e14610148575b600080fd5b6100df6100903660046122ea565b600060208190529081526040902080546001909101546001600160401b0380831692600160401b8104821692600160801b82049092169160ff600160c01b8304811692600160c81b9004169086565b604080516001600160401b039788168152958716602087015293909516928401929092521515606083015260ff16608082015260a081019190915260c0015b60405180910390f35b61013a610135366004612895565b6101a9565b60405190815260200161011e565b61013a6101563660046129ba565b6101c2565b61016e6101693660046129ee565b6101cd565b005b61016e61017e366004612aa4565b610455565b61016e610191366004612ca1565b6104b8565b61016e6101a4366004612d75565b6104e6565b60006101b482610661565b805190602001209050919050565b60006101b48261068a565b60006101dc846000015161069d565b608081015190915060ff166102445780516001600160401b031642101561023f5760405162461bcd60e51b81526020600482015260126024820152711d1a5b595bdd5d081b9bdd081c185cdcd95960721b60448201526064015b60405180910390fd5b6102d8565b600160ff16816080015160ff16036102a05780516001600160401b0316421061023f5760405162461bcd60e51b815260206004820152600e60248201526d1d1a5b595bdd5d081c185cdcd95960921b6044820152606401610236565b60405162461bcd60e51b815260206004820152600d60248201526c696e76616c696420706861736560981b6044820152606401610236565b60608601516001600160a01b03166103225760405162461bcd60e51b815260206004820152600d60248201526c06d75737420686176652061707609c1b6044820152606401610236565b856040015151831061036e5760405162461bcd60e51b81526020600482015260156024820152746163746f72496478206f7574206f662072616e676560581b6044820152606401610236565b6103788685610722565b610381856101a9565b8160a00151146103c55760405162461bcd60e51b815260206004820152600f60248201526e77726f6e67206f6c6420737461746560881b6044820152606401610236565b6103f56103d185610661565b83886040015186815181106103e8576103e8612e12565b602002602001015161076f565b6104355760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964207369676e617475726560781b6044820152606401610236565b610441868686866107f8565b61044d86856001610944565b505050505050565b82608001516104765760405162461bcd60e51b815260040161023690612e28565b6104808383610722565b61048982610a1a565b600061049783836000610b7d565b50835160408086015151908701519293506104b29284610f18565b50505050565b8151608001516104da5760405162461bcd60e51b815260040161023690612e28565b6104b282826000610fe0565b82608001516105075760405162461bcd60e51b815260040161023690612e28565b6080820151151560011461054f5760405162461bcd60e51b815260206004820152600f60248201526e1cdd185d19481b9bdd08199a5b985b608a1b6044820152606401610236565b604080830151015151156105a55760405162461bcd60e51b815260206004820152601860248201527f63616e6e6f742068617665207375622d6368616e6e656c7300000000000000006044820152606401610236565b6105af8383610722565b6105ba838383611166565b6000806105ca846000015161125a565b91509150801561062a57600260ff16826080015160ff160361062a5760405162461bcd60e51b815260206004820152601960248201527818da185b9b995b08185b1c9958591e4818dbdb98db1d591959603a1b6044820152606401610236565b61063685856002610944565b61065a84600001518560400151600001518760400151876040015160200151610f18565b5050505050565b60608160405160200161067491906130cf565b6040516020818303038152906040529050919050565b6060816040516020016106749190613179565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905290806106d98461125a565b915091508061071b5760405162461bcd60e51b815260206004820152600e60248201526d1b9bdd081c9959da5cdd195c995960921b6044820152606401610236565b5092915050565b61072b826101c2565b81511461076b5760405162461bcd60e51b815260206004820152600e60248201526d696e76616c696420706172616d7360901b6044820152606401610236565b5050565b6000806107d085805190602001206040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b905060006107de828661130a565b6001600160a01b0390811690851614925050509392505050565b60208301516108089060016131a2565b6001600160401b031682602001516001600160401b03161461086c5760405162461bcd60e51b815260206004820152601d60248201527f76657273696f6e206d75737420696e6372656d656e74206279206f6e650000006044820152606401610236565b6080830151156108be5760405162461bcd60e51b815260206004820181905260248201527f63616e6e6f742070726f67726573732066726f6d2066696e616c2073746174656044820152606401610236565b6108d683604001518360400151866040015151611330565b6060840151604051636d7eba0d60e01b81526001600160a01b03821690636d7eba0d9061090d9088908890889088906004016131cd565b60006040518083038186803b15801561092557600080fd5b505afa158015610939573d6000803e3d6000fd5b505050505050505050565b600080610954846000015161125a565b86516001600160401b039081166020848101919091528701511660408301526060808801516001600160a01b0316151590830152909250905082600281111561099f5761099f612dfc565b60ff1660808301526109b0846101a9565b60a08301526080840151156109d0576001600160401b0342168252610a0e565b8015806109e45750608082015160ff166001145b15610a0e576020820151610a02906001600160401b0342169061162d565b6001600160401b031682525b835161065a9083611688565b6000610a29826000015161069d565b9050610a34826101a9565b8160a0015114610a7e5760405162461bcd60e51b8152602060048201526015602482015274696e76616c6964206368616e6e656c20737461746560581b6044820152606401610236565b600260ff16816080015160ff1603610ad45760405162461bcd60e51b815260206004820152601960248201527818da185b9b995b08185b1c9958591e4818dbdb98db1d591959603a1b6044820152606401610236565b608081015160ff16158015610aea575080606001515b15610b175760208101518151610b0b916001600160401b039091169061162d565b6001600160401b031681525b80516001600160401b0316421015610b6a5760405162461bcd60e51b81526020600482015260166024820152751d1a5b595bdd5d081b9bdd081c185cdcd959081e595d60521b6044820152606401610236565b60026080820152815161076b9082611688565b60606000610b8a8561177d565b60408501515180516001600160401b03811115610ba957610ba9612303565b604051908082528060200260200182016040528015610bdc57816020015b6060815260200190600190039081610bc75790505b50925060005b8151811015610d155760008760400151602001518281518110610c0757610c07612e12565b6020026020010151905080516001600160401b03811115610c2a57610c2a612303565b604051908082528060200260200182016040528015610c53578160200160208202803683370190505b50858381518110610c6657610c66612e12565b602002602001018190525060005b8151811015610d00578860400151602001518381518110610c9757610c97612e12565b60200260200101518181518110610cb057610cb0612e12565b6020026020010151868481518110610cca57610cca612e12565b60200260200101518281518110610ce357610ce3612e12565b602090810291909101015280610cf881613218565b915050610c74565b50508080610d0d90613218565b915050610be2565b50604080870151015184925060005b8151811015610f0d576000828281518110610d4157610d41612e12565b602002602001015190506000888680610d5990613218565b975081518110610d6b57610d6b612e12565b602002602001015190508060000151826000015114610dc45760405162461bcd60e51b81526020600482015260156024820152741a5b9d985b1a59081cdd5898da185b9b995b081a59605a1b6044820152606401610236565b6060610dd1828b89610b7d565b604085015190985090915060005b8751811015610ef55760005b8251811015610ee2576000848381518110610e0857610e08612e12565b60200260200101518281518110610e2157610e21612e12565b602002602001015190506000848381518110610e3f57610e3f612e12565b60200260200101519050610e92828e8681518110610e5f57610e5f612e12565b60200260200101518361ffff1681518110610e7c57610e7c612e12565b60200260200101516117e190919063ffffffff16565b8d8581518110610ea457610ea4612e12565b60200260200101518261ffff1681518110610ec157610ec1612e12565b60200260200101818152505050508080610eda90613218565b915050610deb565b5080610eed81613218565b915050610ddf565b50505050508080610f0590613218565b915050610d24565b505050935093915050565b60005b835181101561065a576000848281518110610f3857610f38612e12565b6020026020010151905046816000015103610fcd5780602001516001600160a01b031663fc79a66d8786868681518110610f7457610f74612e12565b60200260200101516040518463ffffffff1660e01b8152600401610f9a93929190613231565b600060405180830381600087803b158015610fb457600080fd5b505af1158015610fc8573d6000803e3d6000fd5b505050505b5080610fd881613218565b915050610f1b565b60208301516040015180516060918391610ff9876117f4565b61100682602001516119fc565b935060008260400151905086518151111561105c5760405162461bcd60e51b81526020600482015260166024820152751cdd5890da185b9b995b1cce881d1bdbc81cda1bdc9d60521b6044820152606401610236565b60005b815181101561115a576000888661107581613218565b97508151811061108757611087612e12565b602002602001015190506000808484815181106110a6576110a6612e12565b602002602001015183602001519150915080600001518260000151146111075760405162461bcd60e51b81526020600482015260166024820152751a5b9d985b1a59081cdd588b58da185b9b995b081a5960521b6044820152606401610236565b6060611114848d8b610fe0565b604084015151909a5090915061112b908890611af2565b611139836020015182611b95565b6111438a82611c85565b50505050808061115290613218565b91505061105f565b50505050935093915050565b600061117183610661565b90508151846040015151146111c85760405162461bcd60e51b815260206004820152601a60248201527f7369676e617475726573206c656e677468206d69736d617463680000000000006044820152606401610236565b60005b825181101561065a57611208828483815181106111ea576111ea612e12565b6020026020010151876040015184815181106103e8576103e8612e12565b6112485760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964207369676e617475726560781b6044820152606401610236565b8061125281613218565b9150506111cb565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091525060009081526020818152604091829020825160c08101845281546001600160401b038082168352600160401b8204811694830194909452600160801b81049093169381019390935260ff600160c01b8304811615156060850152600160c81b90920490911660808301526001015460a08201819052909190151590565b60008060006113198585611cef565b9150915061132681611d5d565b5090505b92915050565b816020015151836020015151146113895760405162461bcd60e51b815260206004820152601860248201527f62616c616e636573206c656e677468206d69736d6174636800000000000000006044820152606401610236565b815151835151146113d55760405162461bcd60e51b81526020600482015260166024820152750c2e6e6cae8e640d8cadccee8d040dad2e6dac2e8c6d60531b6044820152606401610236565b6113e783604001518360400151611f16565b60005b8251518110156104b2576114388460000151828151811061140d5761140d612e12565b60200260200101518460000151838151811061142b5761142b612e12565b6020026020010151611fc1565b600080838660200151848151811061145257611452612e12565b602002602001015151146114a85760405162461bcd60e51b815260206004820152601c60248201527f6f6c642062616c616e636573206c656e677468206d69736d61746368000000006044820152606401610236565b83856020015184815181106114bf576114bf612e12565b602002602001015151146115155760405162461bcd60e51b815260206004820152601c60248201527f6e65772062616c616e636573206c656e677468206d69736d61746368000000006044820152606401610236565b60005b848110156115c8576115698760200151858151811061153957611539612e12565b6020026020010151828151811061155257611552612e12565b6020026020010151846117e190919063ffffffff16565b92506115b48660200151858151811061158457611584612e12565b6020026020010151828151811061159d5761159d612e12565b6020026020010151836117e190919063ffffffff16565b9150806115c081613218565b915050611518565b508082146116185760405162461bcd60e51b815260206004820152601860248201527f73756d206f662062616c616e636573206d69736d6174636800000000000000006044820152606401610236565b5050808061162590613218565b9150506113ea565b60006001600160401b03831661164383856131a2565b9150816001600160401b0316101561132a5760405162461bcd60e51b81526020600482015260086024820152676f766572666c6f7760c01b6044820152606401610236565b6000828152602081815260409182902083518154858401518686015160608089015160808a015160ff16600160c81b810260ff60c81b19921515600160c01b0260ff60c01b196001600160401b03968716600160801b81029190911668ffffffffffffffffff60801b19988816600160401b026fffffffffffffffffffffffffffffffff19909a1697909a16968717989098179690961697909717949094171694909417855560a08801516001909501949094558551918252938101939093529282015283917f895ef5a5fc3efd313a300b006d6ce97ff0670dfe04f6eea90417edf924fa786b910160405180910390a25050565b600061178c826000015161069d565b9050611797826101a9565b8160a0015114610b6a5760405162461bcd60e51b8152602060048201526015602482015274696e76616c6964206368616e6e656c20737461746560581b6044820152606401610236565b60006117ed8284613266565b9392505050565b805160208201516118058282610722565b61181482828560400151611166565b8160a00151156118c15760608201516001600160a01b03161561186b5760405162461bcd60e51b815260206004820152600f60248201526e063616e6e6f7420686176652061707608c1b6044820152606401610236565b604080820151015151156118c15760405162461bcd60e51b815260206004820152601860248201527f63616e6e6f742068617665206c6f636b65642066756e647300000000000000006044820152606401610236565b6000806118d1836000015161125a565b9150915080156119f0576118e4836101a9565b8260a00151036118f5575050505050565b82602001516001600160401b031682604001516001600160401b0316106119505760405162461bcd60e51b815260206004820152600f60248201526e34b73b30b634b2103b32b939b4b7b760891b6044820152606401610236565b608082015160ff16156119975760405162461bcd60e51b815260206004820152600f60248201526e696e636f727265637420706861736560881b6044820152606401610236565b81516001600160401b031642106119f05760405162461bcd60e51b815260206004820152601960248201527f72656675746174696f6e2074696d656f757420706173736564000000000000006044820152606401610236565b61065a84846000610944565b606081516001600160401b03811115611a1757611a17612303565b604051908082528060200260200182016040528015611a40578160200160208202803683370190505b50905060005b8251811015611aec576000838281518110611a6357611a63612e12565b6020026020010151905060005b8151811015611ad757611aa8828281518110611a8e57611a8e612e12565b6020026020010151858581518110610e7c57610e7c612e12565b848481518110611aba57611aba612e12565b602090810291909101015280611acf81613218565b915050611a70565b50508080611ae490613218565b915050611a46565b50919050565b8051825114611b435760405162461bcd60e51b815260206004820152601760248201527f41737365745b5d3a20756e657175616c206c656e6774680000000000000000006044820152606401610236565b60005b8251811015611b9057611b7e838281518110611b6457611b64612e12565b602002602001015183838151811061142b5761142b612e12565b80611b8881613218565b915050611b46565b505050565b8051825114611be65760405162461bcd60e51b815260206004820152601960248201527f75696e743235365b5d3a20756e657175616c206c656e677468000000000000006044820152606401610236565b60005b8251811015611b9057818181518110611c0457611c04612e12565b6020026020010151838281518110611c1e57611c1e612e12565b602002602001015114611c735760405162461bcd60e51b815260206004820152601760248201527f75696e743235365b5d3a20756e657175616c206974656d0000000000000000006044820152606401610236565b80611c7d81613218565b915050611be9565b60005b8251811015611b9057611cc0828281518110611ca657611ca6612e12565b6020026020010151848381518110610e7c57610e7c612e12565b838281518110611cd257611cd2612e12565b602090810291909101015280611ce781613218565b915050611c88565b6000808251604103611d255760208301516040840151606085015160001a611d198782858561206c565b94509450505050611d56565b8251604003611d4e5760208301516040840151611d43868383612159565b935093505050611d56565b506000905060025b9250929050565b6000816004811115611d7157611d71612dfc565b03611d795750565b6001816004811115611d8d57611d8d612dfc565b03611dda5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610236565b6002816004811115611dee57611dee612dfc565b03611e3b5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610236565b6003816004811115611e4f57611e4f612dfc565b03611ea75760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610236565b6004816004811115611ebb57611ebb612dfc565b03611f135760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610236565b50565b8051825114611f675760405162461bcd60e51b815260206004820152601a60248201527f537562416c6c6f635b5d3a20756e657175616c206c656e6774680000000000006044820152606401610236565b60005b8251811015611b9057611faf838281518110611f8857611f88612e12565b6020026020010151838381518110611fa257611fa2612e12565b6020026020010151612192565b80611fb981613218565b915050611f6a565b805182511461200b5760405162461bcd60e51b8152602060048201526016602482015275105cdcd95d0e881d5b995c5d585b0818da185a5b925160521b6044820152606401610236565b80602001516001600160a01b031682602001516001600160a01b03161461076b5760405162461bcd60e51b815260206004820152601560248201527420b9b9b2ba1d103ab732b8bab0b6103437b63232b960591b6044820152606401610236565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156120a35750600090506003612150565b8460ff16601b141580156120bb57508460ff16601c14155b156120cc5750600090506004612150565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612120573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661214957600060019250925050612150565b9150600090505b94509492505050565b6000806001600160ff1b0383168161217660ff86901c601b613266565b90506121848782888561206c565b935093505050935093915050565b80518251146121da5760405162461bcd60e51b815260206004820152601460248201527314dd58905b1b1bd8ce881d5b995c5d585b08125160621b6044820152606401610236565b6121ec82602001518260200151611b95565b61076b82604001518260400151805182511461224a5760405162461bcd60e51b815260206004820152601860248201527f75696e7431365b5d3a20756e657175616c206c656e67746800000000000000006044820152606401610236565b60005b8251811015611b905781818151811061226857612268612e12565b602002602001015161ffff1683828151811061228657612286612e12565b602002602001015161ffff16146122d85760405162461bcd60e51b815260206004820152601660248201527575696e7431365b5d3a20756e657175616c206974656d60501b6044820152606401610236565b806122e281613218565b91505061224d565b6000602082840312156122fc57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b038111828210171561233b5761233b612303565b60405290565b604080519081016001600160401b038111828210171561233b5761233b612303565b60405160a081016001600160401b038111828210171561233b5761233b612303565b60405160c081016001600160401b038111828210171561233b5761233b612303565b604051601f8201601f191681016001600160401b03811182821017156123cf576123cf612303565b604052919050565b60006001600160401b038211156123f0576123f0612303565b5060051b60200190565b80356001600160a01b038116811461241157600080fd5b919050565b600082601f83011261242757600080fd5b8135602061243c612437836123d7565b6123a7565b82815260059290921b8401810191818101908684111561245b57600080fd5b8286015b84811015612476578035835291830191830161245f565b509695505050505050565b600082601f83011261249257600080fd5b813560206124a2612437836123d7565b82815260059290921b840181019181810190868411156124c157600080fd5b8286015b848110156124765780356001600160401b038111156124e45760008081fd5b6124f28986838b0101612416565b8452509183019183016124c5565b600082601f83011261251157600080fd5b81356020612521612437836123d7565b828152600592831b850182019282820191908785111561254057600080fd5b8387015b858110156126505780356001600160401b03808211156125645760008081fd5b908901906060828c03601f190181131561257e5760008081fd5b612586612319565b888401358152604080850135848111156125a05760008081fd5b6125ae8f8c83890101612416565b838c0152509184013591838311156125c65760008081fd5b82850194508d603f8601126125dd57600093508384fd5b8985013593506125ef612437856123d7565b84815293871b85018101938a810193508e85111561260d5760008081fd5b948101945b8486101561263c57853561ffff8116811461262d5760008081fd5b8452948a0194928a0192612612565b908201528752505050928401928401612544565b5090979650505050505050565b60006060828403121561266f57600080fd5b612677612319565b905081356001600160401b038082111561269057600080fd5b818401915084601f8301126126a457600080fd5b813560206126b4612437836123d7565b82815260069290921b840181019181810190888411156126d357600080fd5b948201945b8386101561271e576040868a0312156126f15760008081fd5b6126f9612341565b863581526127088488016123fa565b81850152825260409590950194908201906126d8565b8652508581013593508284111561273457600080fd5b61274087858801612481565b9085015250604084013591508082111561275957600080fd5b5061276684828501612500565b60408301525092915050565b600082601f83011261278357600080fd5b81356001600160401b0381111561279c5761279c612303565b6127af601f8201601f19166020016123a7565b8181528460208386010111156127c457600080fd5b816020850160208301376000918101602001919091529392505050565b8035801515811461241157600080fd5b600060a0828403121561280357600080fd5b61280b612363565b90508135815260208201356001600160401b03808216821461282c57600080fd5b816020840152604084013591508082111561284657600080fd5b6128528583860161265d565b6040840152606084013591508082111561286b57600080fd5b5061287884828501612772565b60608301525061288a608083016127e1565b608082015292915050565b6000602082840312156128a757600080fd5b81356001600160401b038111156128bd57600080fd5b6128c9848285016127f1565b949350505050565b600060c082840312156128e357600080fd5b6128eb612385565b9050813581526020808301358183015260408301356001600160401b0381111561291457600080fd5b8301601f8101851361292557600080fd5b8035612933612437826123d7565b81815260059190911b8201830190838101908783111561295257600080fd5b928401925b8284101561297757612968846123fa565b82529284019290840190612957565b60408601525061298d92505050606083016123fa565b606082015261299e608083016127e1565b60808201526129af60a083016127e1565b60a082015292915050565b6000602082840312156129cc57600080fd5b81356001600160401b038111156129e257600080fd5b6128c9848285016128d1565b600080600080600060a08688031215612a0657600080fd5b85356001600160401b0380821115612a1d57600080fd5b612a2989838a016128d1565b96506020880135915080821115612a3f57600080fd5b612a4b89838a016127f1565b95506040880135915080821115612a6157600080fd5b612a6d89838a016127f1565b9450606088013593506080880135915080821115612a8a57600080fd5b50612a9788828901612772565b9150509295509295909350565b600080600060608486031215612ab957600080fd5b83356001600160401b0380821115612ad057600080fd5b612adc878388016128d1565b9450602091508186013581811115612af357600080fd5b612aff888289016127f1565b945050604086013581811115612b1457600080fd5b8601601f81018813612b2557600080fd5b8035612b33612437826123d7565b81815260059190911b8201840190848101908a831115612b5257600080fd5b8584015b83811015612b8a57803586811115612b6e5760008081fd5b612b7c8d89838901016127f1565b845250918601918601612b56565b508096505050505050509250925092565b600082601f830112612bac57600080fd5b81356020612bbc612437836123d7565b82815260059290921b84018101918181019086841115612bdb57600080fd5b8286015b848110156124765780356001600160401b03811115612bfe5760008081fd5b612c0c8986838b0101612772565b845250918301918301612bdf565b600060608284031215612c2c57600080fd5b612c34612319565b905081356001600160401b0380821115612c4d57600080fd5b612c59858386016128d1565b83526020840135915080821115612c6f57600080fd5b612c7b858386016127f1565b60208401526040840135915080821115612c9457600080fd5b5061276684828501612b9b565b60008060408385031215612cb457600080fd5b82356001600160401b0380821115612ccb57600080fd5b612cd786838701612c1a565b9350602091508185013581811115612cee57600080fd5b8501601f81018713612cff57600080fd5b8035612d0d612437826123d7565b81815260059190911b82018401908481019089831115612d2c57600080fd5b8584015b83811015612d6457803586811115612d485760008081fd5b612d568c8983890101612c1a565b845250918601918601612d30565b508096505050505050509250929050565b600080600060608486031215612d8a57600080fd5b83356001600160401b0380821115612da157600080fd5b612dad878388016128d1565b94506020860135915080821115612dc357600080fd5b612dcf878388016127f1565b93506040860135915080821115612de557600080fd5b50612df286828701612b9b565b9150509250925092565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6020808252600a90820152693737ba103632b233b2b960b11b604082015260600190565b600081518084526020808501945080840160005b83811015612e7c57815187529582019590820190600101612e60565b509495945050505050565b600081518084526020808501808196508360051b8101915082860160005b85811015612ecf578284038952612ebd848351612e4c565b98850198935090840190600101612ea5565b5091979650505050505050565b600081518084526020808501808196508360051b810191508286016000805b86811015612f80578385038a528251606081518752878201518189890152612f2582890182612e4c565b604093840151898203948a01949094528351808252938a0193869350908a0191505b80831015612f6b57835161ffff168252928901926001929092019190890190612f47565b509b88019b9650505091850191600101612efb565b509298975050505050505050565b6000815180845260005b81811015612fb457602081850181015186830182015201612f98565b81811115612fc6576000602083870101525b50601f01601f19169290920160200192915050565b80518252600060206001600160401b0381840151168185015260408084015160a08287015261010086018151606060a08901528181518084526101208a0191508683019350600092505b80831015613057578351805183528701516001600160a01b031687830152928601926001929092019190850190613025565b50858401519550609f199250828982030160c08a01526130778187612e87565b95505050828201519250808785030160e088015250506130978282612edc565b915050606083015184820360608601526130b18282612f8e565b91505060808301516130c7608086018215159052565b509392505050565b6020815260006117ed6020830184612fdb565b600081518084526020808501945080840160005b83811015612e7c5781516001600160a01b0316875295820195908201906001016130f6565b80518252602081015160208301526000604082015160c0604085015261314460c08501826130e2565b6060848101516001600160a01b03169086015260808085015115159086015260a0938401511515949093019390935250919050565b6020815260006117ed602083018461311b565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b038083168185168083038211156131c4576131c461318c565b01949350505050565b6080815260006131e0608083018761311b565b82810360208401526131f28187612fdb565b905082810360408401526132068186612fdb565b91505082606083015295945050505050565b60006001820161322a5761322a61318c565b5060010190565b83815260606020820152600061324a60608301856130e2565b828103604084015261325c8185612e4c565b9695505050505050565b600082198211156132795761327961318c565b50019056fea26469706673582212209cf6452c4d23141fbc53107c61d4c07976ee23ddccb1c2885bd4dd293ace00aa64736f6c634300080f0033" +var AdjudicatorBinRuntime = "608060405234801561001057600080fd5b506004361061007d5760003560e01c8063848890001161005b578063848890001461014b578063c5457f0d1461016c578063db77bb271461017f578063e9bc418d1461019257600080fd5b806311be1997146100825780634176e7ae146101235780634c33077514610138575b600080fd5b6100dd6100903660046125fb565b6000602081905290815260409020805460018201546002909201546001600160401b0380831693600160401b8404821693600160801b81049092169260ff600160c01b9093048316921686565b604080516001600160401b0397881681529587166020870152939095169284019290925260ff166060830152608082015290151560a082015260c0015b60405180910390f35b610136610131366004612dc8565b6101a5565b005b610136610146366004612f3e565b610211565b61015e610159366004612fc5565b6103af565b60405190815260200161011a565b61013661017a366004613094565b6103c8565b61015e61018d366004613168565b6103f6565b6101366101a036600461319c565b610401565b82608001516101cf5760405162461bcd60e51b81526004016101c690613252565b60405180910390fd5b6101d983836106bc565b6101e282610747565b60006101f0838360006108f1565b508351604080860151519087015192935061020b9284610c94565b50505050565b82608001516102325760405162461bcd60e51b81526004016101c690613252565b6080820151151560011461027a5760405162461bcd60e51b815260206004820152600f60248201526e1cdd185d19481b9bdd08199a5b985b608a1b60448201526064016101c6565b60408201516060015151156102c45760405162461bcd60e51b815260206004820152601060248201526f686173207375622d6368616e6e656c7360801b60448201526064016101c6565b6102ce83836106bc565b6102d9838383610d88565b60008061032084600001516102fa8660000151876040015160200151610e7c565b6001600160401b03168151811061031357610313613276565b6020026020010151610f34565b91509150801561037857600260ff16826060015160ff16036103785760405162461bcd60e51b8152602060048201526011602482015270636f6e636c7564656420616c726561647960781b60448201526064016101c6565b61038485856002610fe3565b6103a884600001518560400151600001518760400151876040015160400151610c94565b5050505050565b60006103ba82611105565b805190602001209050919050565b8151608001516103ea5760405162461bcd60e51b81526004016101c690613252565b61020b8282600061112e565b60006103ba826112ba565b82516040840151602001516000916104449161041e908290610e7c565b6001600160401b03168151811061043757610437613276565b60200260200101516112cd565b606081015190915060ff166104a75780516001600160401b03164210156104a25760405162461bcd60e51b81526020600482015260126024820152711d1a5b595bdd5d081b9bdd081c185cdcd95960721b60448201526064016101c6565b61053b565b600160ff16816060015160ff16036105035780516001600160401b031642106104a25760405162461bcd60e51b815260206004820152600e60248201526d1d1a5b595bdd5d081c185cdcd95960921b60448201526064016101c6565b60405162461bcd60e51b815260206004820152600d60248201526c696e76616c696420706861736560981b60448201526064016101c6565b60608601516001600160a01b03166105855760405162461bcd60e51b815260206004820152600d60248201526c06d75737420686176652061707609c1b60448201526064016101c6565b85604001515183106105d15760405162461bcd60e51b81526020600482015260156024820152746163746f72496478206f7574206f662072616e676560581b60448201526064016101c6565b6105db86856106bc565b6105e4856103af565b8160800151146106285760405162461bcd60e51b815260206004820152600f60248201526e77726f6e67206f6c6420737461746560881b60448201526064016101c6565b61065c61063485611105565b838860400151868151811061064b5761064b613276565b602002602001015160000151611352565b61069c5760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964207369676e617475726560781b60448201526064016101c6565b6106a8868686866113db565b6106b486856001610fe3565b505050505050565b60006106d48260000151836040015160200151610e7c565b6001600160401b031690506106e8836103f6565b82518051839081106106fc576106fc613276565b6020026020010151146107425760405162461bcd60e51b815260206004820152600e60248201526d696e76616c696420706172616d7360901b60448201526064016101c6565b505050565b600061075f8260000151836040015160200151610e7c565b905060006107858360000151836001600160401b03168151811061043757610437613276565b9050610790836103af565b8160800151146107d25760405162461bcd60e51b815260206004820152600d60248201526c696e76616c696420737461746560981b60448201526064016101c6565b600260ff16816060015160ff16036108205760405162461bcd60e51b8152602060048201526011602482015270185b1c9958591e4818dbdb98db1d591959607a1b60448201526064016101c6565b606081015160ff1615801561083657508060a001515b156108635760208101518151610857916001600160401b039091169061150f565b6001600160401b031681525b80516001600160401b03164210156108b65760405162461bcd60e51b81526020600482015260166024820152751d1a5b595bdd5d081b9bdd081c185cdcd959081e595d60521b60448201526064016101c6565b60025b60ff1660608201528251805161074291906001600160401b0385169081106108e3576108e3613276565b60200260200101518261156a565b606060006108fe8561165c565b60408501515180516001600160401b0381111561091d5761091d612614565b60405190808252806020026020018201604052801561095057816020015b606081526020019060019003908161093b5790505b50925060005b8151811015610a89576000876040015160400151828151811061097b5761097b613276565b6020026020010151905080516001600160401b0381111561099e5761099e612614565b6040519080825280602002602001820160405280156109c7578160200160208202803683370190505b508583815181106109da576109da613276565b602002602001018190525060005b8151811015610a74578860400151604001518381518110610a0b57610a0b613276565b60200260200101518181518110610a2457610a24613276565b6020026020010151868481518110610a3e57610a3e613276565b60200260200101518281518110610a5757610a57613276565b602090810291909101015280610a6c816132b8565b9150506109e8565b50508080610a81906132b8565b915050610956565b5060408601516060015184925060005b8151811015610c89576000828281518110610ab657610ab6613276565b602002602001015190506000888680610ace906132b8565b975081518110610ae057610ae0613276565b60200260200101519050610afc826000015182600001516116fd565b610b405760405162461bcd60e51b81526020600482015260156024820152741a5b9d985b1a59081cdd5898da185b9b995b081a59605a1b60448201526064016101c6565b6060610b4d828b896108f1565b604085015190985090915060005b8751811015610c715760005b8251811015610c5e576000848381518110610b8457610b84613276565b60200260200101518281518110610b9d57610b9d613276565b602002602001015190506000848381518110610bbb57610bbb613276565b60200260200101519050610c0e828e8681518110610bdb57610bdb613276565b60200260200101518361ffff1681518110610bf857610bf8613276565b602002602001015161177b90919063ffffffff16565b8d8581518110610c2057610c20613276565b60200260200101518261ffff1681518110610c3d57610c3d613276565b60200260200101818152505050508080610c56906132b8565b915050610b67565b5080610c69816132b8565b915050610b5b565b50505050508080610c81906132b8565b915050610a99565b505050935093915050565b60005b83518110156103a8576000848281518110610cb457610cb4613276565b6020026020010151905046816000015103610d755760208101516001600160a01b031615610d755780602001516001600160a01b031663295482ce878481518110610d0157610d01613276565b602002602001015186868681518110610d1c57610d1c613276565b60200260200101516040518463ffffffff1660e01b8152600401610d42939291906133cb565b600060405180830381600087803b158015610d5c57600080fd5b505af1158015610d70573d6000803e3d6000fd5b505050505b5080610d80816132b8565b915050610c97565b6000610d9383611105565b9050815184604001515114610dea5760405162461bcd60e51b815260206004820152601a60248201527f7369676e617475726573206c656e677468206d69736d6174636800000000000060448201526064016101c6565b60005b82518110156103a857610e2a82848381518110610e0c57610e0c613276565b60200260200101518760400151848151811061064b5761064b613276565b610e6a5760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964207369676e617475726560781b60448201526064016101c6565b80610e74816132b8565b915050610ded565b60008151835114610ec85760405162461bcd60e51b8152602060048201526016602482015275082e4e4c2f240d8cadccee8d0e640dad2e6dac2e8c6d60531b60448201526064016101c6565b81600081518110610edb57610edb613276565b6020026020010151600103610ef257506000610f2e565b60018251118015610f1d575081600181518110610f1157610f11613276565b60200260200101516001145b15610f2a57506001610f2e565b5060005b92915050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091525060009081526020818152604091829020825160c08101845281546001600160401b038082168352600160401b8204811694830194909452600160801b810490931693810193909352600160c01b90910460ff908116606084015260018201546080840181905260029092015416151560a0830152909190151590565b6000610ffb8360000151846040015160200151610e7c565b6001600160401b031690506000806110228560000151848151811061031357610313613276565b87516001600160401b0390811660208481019190915288015116604083015260608801516001600160a01b0316151560a0830152909250905083600281111561106d5761106d61328c565b60ff16606083015261107e856103af565b608080840191909152850151156110a0576001600160401b03421682526110de565b8015806110b45750606082015160ff166001145b156110de5760208201516110d2906001600160401b0342169061150f565b6001600160401b031682525b6106b4856000015184815181106110f7576110f7613276565b60200260200101518361156a565b606081604051602001611118919061363d565b6040516020818303038152906040529050919050565b602083015160400151805160609183916111478761178e565b6111548260400151611997565b93506000826060015190508651815111156111a95760405162461bcd60e51b81526020600482015260156024820152741cdd5890da185b9b995b1cc81d1bdbc81cda1bdc9d605a1b60448201526064016101c6565b60005b81518110156112ae57600088866111c2816132b8565b9750815181106111d4576111d4613276565b602002602001015190506000808484815181106111f3576111f3613276565b6020026020010151836020015191509150611216826000015182600001516116fd565b61125b5760405162461bcd60e51b81526020600482015260166024820152751a5b9d985b1a59081cdd588b58da185b9b995b081a5960521b60448201526064016101c6565b6060611268848d8b61112e565b604084015151909a5090915061127f908890611a8d565b61128d836020015182611b38565b6112978a82611c28565b5050505080806112a6906132b8565b9150506111ac565b50505050935093915050565b60608160405160200161111891906136ae565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101829052908061130984610f34565b915091508061134b5760405162461bcd60e51b815260206004820152600e60248201526d1b9bdd081c9959da5cdd195c995960921b60448201526064016101c6565b5092915050565b6000806113b385805190602001206040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b905060006113c18286611c92565b6001600160a01b0390811690851614925050509392505050565b60208301516113eb9060016136c1565b6001600160401b031682602001516001600160401b0316146114485760405162461bcd60e51b81526020600482015260166024820152751d995c9cda5bdb881b5d5cdd081a5b98dc995b595b9d60521b60448201526064016101c6565b60808301511561148a5760405162461bcd60e51b815260206004820152600d60248201526c185b1c9958591e48199a5b985b609a1b60448201526064016101c6565b6114a283604001518360400151866040015151611cb6565b60608401516040516206371b60ea1b81526001600160a01b038216906318dc6c00906114d89088908890889088906004016136ec565b60006040518083038186803b1580156114f057600080fd5b505afa158015611504573d6000803e3d6000fd5b505050505050505050565b60006001600160401b03831661152583856136c1565b9150816001600160401b03161015610f2e5760405162461bcd60e51b81526020600482015260086024820152676f766572666c6f7760c01b60448201526064016101c6565b600082815260208181526040918290208351815485840151868601516060808901516001600160401b039586166fffffffffffffffffffffffffffffffff199095168517600160401b948716949094029390931768ffffffffffffffffff60801b1916600160801b9590921694850260ff60c01b191691909117600160c01b60ff9093169283021785556080880151600186015560a08801516002909501805460ff1916951515959095179094558551928352938201939093529283019190915283917f895ef5a5fc3efd313a300b006d6ce97ff0670dfe04f6eea90417edf924fa786b910160405180910390a25050565b60006116748260000151836040015160200151610e7c565b9050600061169a8360000151836001600160401b03168151811061043757610437613276565b90506116a5836103af565b8160800151146116e75760405162461bcd60e51b815260206004820152600d60248201526c696e76616c696420737461746560981b60448201526064016101c6565b606081015160ff166002146107425760026108b9565b6000815183511461171057506000610f2e565b60005b83518110156117715782818151811061172e5761172e613276565b602002602001015184828151811061174857611748613276565b60200260200101511461175f576000915050610f2e565b80611769816132b8565b915050611713565b5060019392505050565b60006117878284613737565b9392505050565b8051602082015161179f82826106bc565b6117ae82828560400151610d88565b8160a001511561184b5760608201516001600160a01b0316156118055760405162461bcd60e51b815260206004820152600f60248201526e063616e6e6f7420686176652061707608c1b60448201526064016101c6565b604081015160600151511561184b5760405162461bcd60e51b815260206004820152600c60248201526b199d5b991cc81b1bd8dad95960a21b60448201526064016101c6565b60008061186c83600001516102fa8560000151866040015160200151610e7c565b91509150801561198b5761187f836103af565b826080015103611890575050505050565b82602001516001600160401b031682604001516001600160401b0316106118eb5760405162461bcd60e51b815260206004820152600f60248201526e34b73b30b634b2103b32b939b4b7b760891b60448201526064016101c6565b606082015160ff16156119325760405162461bcd60e51b815260206004820152600f60248201526e696e636f727265637420706861736560881b60448201526064016101c6565b81516001600160401b0316421061198b5760405162461bcd60e51b815260206004820152601960248201527f72656675746174696f6e2074696d656f7574207061737365640000000000000060448201526064016101c6565b6103a884846000610fe3565b606081516001600160401b038111156119b2576119b2612614565b6040519080825280602002602001820160405280156119db578160200160208202803683370190505b50905060005b8251811015611a875760008382815181106119fe576119fe613276565b6020026020010151905060005b8151811015611a7257611a43828281518110611a2957611a29613276565b6020026020010151858581518110610bf857610bf8613276565b848481518110611a5557611a55613276565b602090810291909101015280611a6a816132b8565b915050611a0b565b50508080611a7f906132b8565b9150506119e1565b50919050565b8051825114611ade5760405162461bcd60e51b815260206004820152601760248201527f41737365745b5d3a20756e657175616c206c656e67746800000000000000000060448201526064016101c6565b60005b825181101561074257611b26838281518110611aff57611aff613276565b6020026020010151838381518110611b1957611b19613276565b6020026020010151611fa6565b80611b30816132b8565b915050611ae1565b8051825114611b895760405162461bcd60e51b815260206004820152601960248201527f75696e743235365b5d3a20756e657175616c206c656e6774680000000000000060448201526064016101c6565b60005b825181101561074257818181518110611ba757611ba7613276565b6020026020010151838281518110611bc157611bc1613276565b602002602001015114611c165760405162461bcd60e51b815260206004820152601760248201527f75696e743235365b5d3a20756e657175616c206974656d00000000000000000060448201526064016101c6565b80611c20816132b8565b915050611b8c565b60005b825181101561074257611c63828281518110611c4957611c49613276565b6020026020010151848381518110610bf857610bf8613276565b838281518110611c7557611c75613276565b602090810291909101015280611c8a816132b8565b915050611c2b565b6000806000611ca185856120a2565b91509150611cae81612110565b509392505050565b81604001515183604001515114611d0f5760405162461bcd60e51b815260206004820152601860248201527f62616c616e636573206c656e677468206d69736d61746368000000000000000060448201526064016101c6565b81515183515114611d5b5760405162461bcd60e51b81526020600482015260166024820152750c2e6e6cae8e640d8cadccee8d040dad2e6dac2e8c6d60531b60448201526064016101c6565b611d6d836060015183606001516122c9565b60005b82515181101561020b57611db184600001518281518110611d9357611d93613276565b602002602001015184600001518381518110611b1957611b19613276565b6000808386604001518481518110611dcb57611dcb613276565b60200260200101515114611e215760405162461bcd60e51b815260206004820152601c60248201527f6f6c642062616c616e636573206c656e677468206d69736d617463680000000060448201526064016101c6565b8385604001518481518110611e3857611e38613276565b60200260200101515114611e8e5760405162461bcd60e51b815260206004820152601c60248201527f6e65772062616c616e636573206c656e677468206d69736d617463680000000060448201526064016101c6565b60005b84811015611f4157611ee287604001518581518110611eb257611eb2613276565b60200260200101518281518110611ecb57611ecb613276565b60200260200101518461177b90919063ffffffff16565b9250611f2d86604001518581518110611efd57611efd613276565b60200260200101518281518110611f1657611f16613276565b60200260200101518361177b90919063ffffffff16565b915080611f39816132b8565b915050611e91565b50808214611f915760405162461bcd60e51b815260206004820152601860248201527f73756d206f662062616c616e636573206d69736d61746368000000000000000060448201526064016101c6565b50508080611f9e906132b8565b915050611d70565b8051825114611fe95760405162461bcd60e51b815260206004820152600f60248201526e1d5b995c5d585b0818da185a5b9251608a1b60448201526064016101c6565b80602001516001600160a01b031682602001516001600160a01b0316146120465760405162461bcd60e51b81526020600482015260116024820152703ab732b8bab0b61032ba342437b63232b960791b60448201526064016101c6565b8060400151805190602001208260400151805190602001201461209e5760405162461bcd60e51b815260206004820152601060248201526f3ab732b8bab0b61031b1a437b63232b960811b60448201526064016101c6565b5050565b60008082516041036120d85760208301516040840151606085015160001a6120cc87828585612374565b94509450505050612109565b825160400361210157602083015160408401516120f6868383612461565b935093505050612109565b506000905060025b9250929050565b60008160048111156121245761212461328c565b0361212c5750565b60018160048111156121405761214061328c565b0361218d5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016101c6565b60028160048111156121a1576121a161328c565b036121ee5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016101c6565b60038160048111156122025761220261328c565b0361225a5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016101c6565b600481600481111561226e5761226e61328c565b036122c65760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016101c6565b50565b805182511461231a5760405162461bcd60e51b815260206004820152601a60248201527f537562416c6c6f635b5d3a20756e657175616c206c656e67746800000000000060448201526064016101c6565b60005b82518110156107425761236283828151811061233b5761233b613276565b602002602001015183838151811061235557612355613276565b602002602001015161249a565b8061236c816132b8565b91505061231d565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156123ab5750600090506003612458565b8460ff16601b141580156123c357508460ff16601c14155b156123d45750600090506004612458565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612428573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661245157600060019250925050612458565b9150600090505b94509492505050565b6000806001600160ff1b0383168161247e60ff86901c601b613737565b905061248c87828885612374565b935093505050935093915050565b815181516124a891906116fd565b6124eb5760405162461bcd60e51b815260206004820152601460248201527314dd58905b1b1bd8ce881d5b995c5d585b08125160621b60448201526064016101c6565b6124fd82602001518260200151611b38565b61209e82604001518260400151805182511461255b5760405162461bcd60e51b815260206004820152601860248201527f75696e7431365b5d3a20756e657175616c206c656e677468000000000000000060448201526064016101c6565b60005b82518110156107425781818151811061257957612579613276565b602002602001015161ffff1683828151811061259757612597613276565b602002602001015161ffff16146125e95760405162461bcd60e51b815260206004820152601660248201527575696e7431365b5d3a20756e657175616c206974656d60501b60448201526064016101c6565b806125f3816132b8565b91505061255e565b60006020828403121561260d57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b038111828210171561264c5761264c612614565b60405290565b604080519081016001600160401b038111828210171561264c5761264c612614565b604051606081016001600160401b038111828210171561264c5761264c612614565b604051608081016001600160401b038111828210171561264c5761264c612614565b60405160a081016001600160401b038111828210171561264c5761264c612614565b604051601f8201601f191681016001600160401b038111828210171561270257612702612614565b604052919050565b60006001600160401b0382111561272357612723612614565b5060051b60200190565b80356001600160a01b038116811461274457600080fd5b919050565b600082601f83011261275a57600080fd5b81356001600160401b0381111561277357612773612614565b612786601f8201601f19166020016126da565b81815284602083860101111561279b57600080fd5b816020850160208301376000918101602001919091529392505050565b8035801515811461274457600080fd5b600060c082840312156127da57600080fd5b6127e261262a565b905081358152602080830135818301526040808401356001600160401b038082111561280d57600080fd5b818601915086601f83011261282157600080fd5b813561283461282f8261270a565b6126da565b81815260059190911b8301850190858101908983111561285357600080fd5b8685015b838110156128cd5780358581111561286f5760008081fd5b8601808c03601f19018813156128855760008081fd5b61288d612652565b6128988a830161272d565b815288820135878111156128ac5760008081fd5b6128ba8e8c83860101612749565b828c015250845250918701918701612857565b508086890152505050505050506128e66060830161272d565b60608201526128f7608083016127b8565b608082015261290860a083016127b8565b60a082015292915050565b600082601f83011261292457600080fd5b8135602061293461282f8361270a565b82815260059290921b8401810191818101908684111561295357600080fd5b8286015b8481101561296e5780358352918301918301612957565b509695505050505050565b80356001600160401b038116811461274457600080fd5b600082601f8301126129a157600080fd5b813560206129b161282f8361270a565b82815260059290921b840181019181810190868411156129d057600080fd5b8286015b8481101561296e5780356001600160401b03808211156129f45760008081fd5b908801906060828b03601f1901811315612a0e5760008081fd5b612a16612674565b8784013581526040612a2981860161272d565b828a0152918401359183831115612a405760008081fd5b612a4e8d8a85880101612749565b9082015286525050509183019183016129d4565b600082601f830112612a7357600080fd5b81356020612a8361282f8361270a565b82815260059290921b84018101918181019086841115612aa257600080fd5b8286015b8481101561296e5780356001600160401b03811115612ac55760008081fd5b612ad38986838b0101612913565b845250918301918301612aa6565b600082601f830112612af257600080fd5b81356020612b0261282f8361270a565b828152600592831b8501820192828201919087851115612b2157600080fd5b8387015b85811015612c4e5780356001600160401b0380821115612b455760008081fd5b908901906060828c03601f1901811315612b5f5760008081fd5b612b67612674565b8884013583811115612b795760008081fd5b612b878e8b83880101612913565b82525060408085013584811115612b9e5760008081fd5b612bac8f8c83890101612913565b838c015250918401359183831115612bc45760008081fd5b82850194508d603f860112612bdb57600093508384fd5b898501359350612bed61282f8561270a565b84815293871b85018101938a810193508e851115612c0b5760008081fd5b948101945b84861015612c3a57853561ffff81168114612c2b5760008081fd5b8452948a0194928a0192612c10565b908201528752505050928401928401612b25565b5090979650505050505050565b600060808284031215612c6d57600080fd5b612c75612696565b905081356001600160401b0380821115612c8e57600080fd5b612c9a85838601612990565b83526020840135915080821115612cb057600080fd5b612cbc85838601612913565b60208401526040840135915080821115612cd557600080fd5b612ce185838601612a62565b60408401526060840135915080821115612cfa57600080fd5b50612d0784828501612ae1565b60608301525092915050565b600060a08284031215612d2557600080fd5b612d2d6126b8565b905081356001600160401b0380821115612d4657600080fd5b612d5285838601612913565b8352612d6060208501612979565b60208401526040840135915080821115612d7957600080fd5b612d8585838601612c5b565b60408401526060840135915080821115612d9e57600080fd5b50612dab84828501612749565b606083015250612dbd608083016127b8565b608082015292915050565b600080600060608486031215612ddd57600080fd5b83356001600160401b0380821115612df457600080fd5b612e00878388016127c8565b9450602091508186013581811115612e1757600080fd5b612e2388828901612d13565b945050604086013581811115612e3857600080fd5b8601601f81018813612e4957600080fd5b8035612e5761282f8261270a565b81815260059190911b8201840190848101908a831115612e7657600080fd5b8584015b83811015612eae57803586811115612e925760008081fd5b612ea08d8983890101612d13565b845250918601918601612e7a565b508096505050505050509250925092565b600082601f830112612ed057600080fd5b81356020612ee061282f8361270a565b82815260059290921b84018101918181019086841115612eff57600080fd5b8286015b8481101561296e5780356001600160401b03811115612f225760008081fd5b612f308986838b0101612749565b845250918301918301612f03565b600080600060608486031215612f5357600080fd5b83356001600160401b0380821115612f6a57600080fd5b612f76878388016127c8565b94506020860135915080821115612f8c57600080fd5b612f9887838801612d13565b93506040860135915080821115612fae57600080fd5b50612fbb86828701612ebf565b9150509250925092565b600060208284031215612fd757600080fd5b81356001600160401b03811115612fed57600080fd5b612ff984828501612d13565b949350505050565b60006060828403121561301357600080fd5b61301b612674565b905081356001600160401b038082111561303457600080fd5b613040858386016127c8565b8352602084013591508082111561305657600080fd5b61306285838601612d13565b6020840152604084013591508082111561307b57600080fd5b5061308884828501612ebf565b60408301525092915050565b600080604083850312156130a757600080fd5b82356001600160401b03808211156130be57600080fd5b6130ca86838701613001565b93506020915081850135818111156130e157600080fd5b8501601f810187136130f257600080fd5b803561310061282f8261270a565b81815260059190911b8201840190848101908983111561311f57600080fd5b8584015b838110156131575780358681111561313b5760008081fd5b6131498c8983890101613001565b845250918601918601613123565b508096505050505050509250929050565b60006020828403121561317a57600080fd5b81356001600160401b0381111561319057600080fd5b612ff9848285016127c8565b600080600080600060a086880312156131b457600080fd5b85356001600160401b03808211156131cb57600080fd5b6131d789838a016127c8565b965060208801359150808211156131ed57600080fd5b6131f989838a01612d13565b9550604088013591508082111561320f57600080fd5b61321b89838a01612d13565b945060608801359350608088013591508082111561323857600080fd5b5061324588828901612749565b9150509295509295909350565b6020808252600a90820152693737ba103632b233b2b960b11b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016132ca576132ca6132a2565b5060010190565b6000815180845260005b818110156132f7576020818501810151868301820152016132db565b81811115613309576000602083870101525b50601f01601f19169290920160200192915050565b600081518084526020808501808196508360051b8101915082860160005b85811015613383578284038952815180516001600160a01b03168552850151604086860181905261336f818701836132d1565b9a87019a955050509084019060010161333c565b5091979650505050505050565b600081518084526020808501945080840160005b838110156133c0578151875295820195908201906001016133a4565b509495945050505050565b8381526060602082015260006133e4606083018561331e565b82810360408401526133f68185613390565b9695505050505050565b600081518084526020808501808196508360051b8101915082860160005b85811015613383578284038952613436848351613390565b9885019893509084019060010161341e565b600081518084526020808501808196508360051b810191508286016000805b868110156134fc578385038a5282516060815181885261348982890182613390565b91505087820151878203898901526134a18282613390565b604093840151898203948a01949094528351808252938a0193869350908a0191505b808310156134e757835161ffff1682529289019260019290920191908901906134c3565b509b88019b9650505091850191600101613467565b509298975050505050505050565b6000815160a0845261351f60a0850182613390565b905060206001600160401b03818501511681860152604080850151868403828801526080840181516080865281815180845260a08801915060a08160051b8901019350868301925060005b818110156135bd57888503609f19018352835180518652888101516001600160a01b03168987015287015160608887018190526135a9818801836132d1565b96505050928701929187019160010161356a565b5050505083820151858203858701526135d68282613390565b9450505081810151848403838601526135ef8482613400565b9350506060810151915050828203606084015261360c8282613448565b925050506060830151848203606086015261362782826132d1565b9150506080830151611cae608086018215159052565b602081526000611787602083018461350a565b80518252602081015160208301526000604082015160c0604085015261367960c085018261331e565b6060848101516001600160a01b03169086015260808085015115159086015260a0938401511515949093019390935250919050565b6020815260006117876020830184613650565b60006001600160401b038083168185168083038211156136e3576136e36132a2565b01949350505050565b6080815260006136ff6080830187613650565b8281036020840152613711818761350a565b90508281036040840152613725818661350a565b91505082606083015295945050505050565b6000821982111561374a5761374a6132a2565b50019056fea26469706673582212205530585eb54cf40e9a0fd5c6f2665357bbbc73417b63654a5f743cee7efd06a964736f6c634300080f0033" diff --git a/bindings/assetholder/AssetHolder.go b/bindings/assetholder/AssetHolder.go index 22d5e6b..d7c395d 100644 --- a/bindings/assetholder/AssetHolder.go +++ b/bindings/assetholder/AssetHolder.go @@ -26,19 +26,26 @@ var ( _ = common.Big1 _ = types.BloomLookup _ = event.NewSubscription + _ = abi.ConvertType ) // AssetHolderWithdrawalAuth is an auto generated low-level Go binding around an user-defined struct. type AssetHolderWithdrawalAuth struct { ChannelID [32]byte - Participant common.Address + Participant ChannelParticipant Receiver common.Address Amount *big.Int } +// ChannelParticipant is an auto generated low-level Go binding around an user-defined struct. +type ChannelParticipant struct { + EthAddress common.Address + CcAddress []byte +} + // AssetholderMetaData contains all meta data concerning the Assetholder contract. var AssetholderMetaData = &bind.MetaData{ - ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"fundingID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Deposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"channelID\",\"type\":\"bytes32\"}],\"name\":\"OutcomeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"fundingID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"Withdrawn\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"adjudicator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"fundingID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"holdings\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"channelID\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parts\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"newBals\",\"type\":\"uint256[]\"}],\"name\":\"setOutcome\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"settled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"channelID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"participant\",\"type\":\"address\"},{\"internalType\":\"addresspayable\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structAssetHolder.WithdrawalAuth\",\"name\":\"authorization\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"fundingID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Deposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"channelID\",\"type\":\"bytes32\"}],\"name\":\"OutcomeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"fundingID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"Withdrawn\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"adjudicator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"fundingID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"holdings\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"channelID\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"ethAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ccAddress\",\"type\":\"bytes\"}],\"internalType\":\"structChannel.Participant[]\",\"name\":\"parts\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"newBals\",\"type\":\"uint256[]\"}],\"name\":\"setOutcome\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"settled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"channelID\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"ethAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ccAddress\",\"type\":\"bytes\"}],\"internalType\":\"structChannel.Participant\",\"name\":\"participant\",\"type\":\"tuple\"},{\"internalType\":\"addresspayable\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structAssetHolder.WithdrawalAuth\",\"name\":\"authorization\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", } // AssetholderABI is the input ABI used to generate the binding from. @@ -142,11 +149,11 @@ func NewAssetholderFilterer(address common.Address, filterer bind.ContractFilter // bindAssetholder binds a generic wrapper to an already deployed contract. func bindAssetholder(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(AssetholderABI)) + parsed, err := AssetholderMetaData.GetAbi() if err != nil { return nil, err } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil } // Call invokes the (constant) contract method with params as input values and @@ -301,44 +308,44 @@ func (_Assetholder *AssetholderTransactorSession) Deposit(fundingID [32]byte, am return _Assetholder.Contract.Deposit(&_Assetholder.TransactOpts, fundingID, amount) } -// SetOutcome is a paid mutator transaction binding the contract method 0xfc79a66d. +// SetOutcome is a paid mutator transaction binding the contract method 0x295482ce. // -// Solidity: function setOutcome(bytes32 channelID, address[] parts, uint256[] newBals) returns() -func (_Assetholder *AssetholderTransactor) SetOutcome(opts *bind.TransactOpts, channelID [32]byte, parts []common.Address, newBals []*big.Int) (*types.Transaction, error) { +// Solidity: function setOutcome(bytes32 channelID, (address,bytes)[] parts, uint256[] newBals) returns() +func (_Assetholder *AssetholderTransactor) SetOutcome(opts *bind.TransactOpts, channelID [32]byte, parts []ChannelParticipant, newBals []*big.Int) (*types.Transaction, error) { return _Assetholder.contract.Transact(opts, "setOutcome", channelID, parts, newBals) } -// SetOutcome is a paid mutator transaction binding the contract method 0xfc79a66d. +// SetOutcome is a paid mutator transaction binding the contract method 0x295482ce. // -// Solidity: function setOutcome(bytes32 channelID, address[] parts, uint256[] newBals) returns() -func (_Assetholder *AssetholderSession) SetOutcome(channelID [32]byte, parts []common.Address, newBals []*big.Int) (*types.Transaction, error) { +// Solidity: function setOutcome(bytes32 channelID, (address,bytes)[] parts, uint256[] newBals) returns() +func (_Assetholder *AssetholderSession) SetOutcome(channelID [32]byte, parts []ChannelParticipant, newBals []*big.Int) (*types.Transaction, error) { return _Assetholder.Contract.SetOutcome(&_Assetholder.TransactOpts, channelID, parts, newBals) } -// SetOutcome is a paid mutator transaction binding the contract method 0xfc79a66d. +// SetOutcome is a paid mutator transaction binding the contract method 0x295482ce. // -// Solidity: function setOutcome(bytes32 channelID, address[] parts, uint256[] newBals) returns() -func (_Assetholder *AssetholderTransactorSession) SetOutcome(channelID [32]byte, parts []common.Address, newBals []*big.Int) (*types.Transaction, error) { +// Solidity: function setOutcome(bytes32 channelID, (address,bytes)[] parts, uint256[] newBals) returns() +func (_Assetholder *AssetholderTransactorSession) SetOutcome(channelID [32]byte, parts []ChannelParticipant, newBals []*big.Int) (*types.Transaction, error) { return _Assetholder.Contract.SetOutcome(&_Assetholder.TransactOpts, channelID, parts, newBals) } -// Withdraw is a paid mutator transaction binding the contract method 0x4ed4283c. +// Withdraw is a paid mutator transaction binding the contract method 0xfca0f778. // -// Solidity: function withdraw((bytes32,address,address,uint256) authorization, bytes signature) returns() +// Solidity: function withdraw((bytes32,(address,bytes),address,uint256) authorization, bytes signature) returns() func (_Assetholder *AssetholderTransactor) Withdraw(opts *bind.TransactOpts, authorization AssetHolderWithdrawalAuth, signature []byte) (*types.Transaction, error) { return _Assetholder.contract.Transact(opts, "withdraw", authorization, signature) } -// Withdraw is a paid mutator transaction binding the contract method 0x4ed4283c. +// Withdraw is a paid mutator transaction binding the contract method 0xfca0f778. // -// Solidity: function withdraw((bytes32,address,address,uint256) authorization, bytes signature) returns() +// Solidity: function withdraw((bytes32,(address,bytes),address,uint256) authorization, bytes signature) returns() func (_Assetholder *AssetholderSession) Withdraw(authorization AssetHolderWithdrawalAuth, signature []byte) (*types.Transaction, error) { return _Assetholder.Contract.Withdraw(&_Assetholder.TransactOpts, authorization, signature) } -// Withdraw is a paid mutator transaction binding the contract method 0x4ed4283c. +// Withdraw is a paid mutator transaction binding the contract method 0xfca0f778. // -// Solidity: function withdraw((bytes32,address,address,uint256) authorization, bytes signature) returns() +// Solidity: function withdraw((bytes32,(address,bytes),address,uint256) authorization, bytes signature) returns() func (_Assetholder *AssetholderTransactorSession) Withdraw(authorization AssetHolderWithdrawalAuth, signature []byte) (*types.Transaction, error) { return _Assetholder.Contract.Withdraw(&_Assetholder.TransactOpts, authorization, signature) } diff --git a/bindings/assetholdererc20/AssetHolderERC20.go b/bindings/assetholdererc20/AssetHolderERC20.go index 44b66af..bd878bf 100644 --- a/bindings/assetholdererc20/AssetHolderERC20.go +++ b/bindings/assetholdererc20/AssetHolderERC20.go @@ -26,20 +26,27 @@ var ( _ = common.Big1 _ = types.BloomLookup _ = event.NewSubscription + _ = abi.ConvertType ) // AssetHolderWithdrawalAuth is an auto generated low-level Go binding around an user-defined struct. type AssetHolderWithdrawalAuth struct { ChannelID [32]byte - Participant common.Address + Participant ChannelParticipant Receiver common.Address Amount *big.Int } +// ChannelParticipant is an auto generated low-level Go binding around an user-defined struct. +type ChannelParticipant struct { + EthAddress common.Address + CcAddress []byte +} + // Assetholdererc20MetaData contains all meta data concerning the Assetholdererc20 contract. var Assetholdererc20MetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_adjudicator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"fundingID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Deposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"channelID\",\"type\":\"bytes32\"}],\"name\":\"OutcomeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"fundingID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"Withdrawn\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"adjudicator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"fundingID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"holdings\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"channelID\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parts\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"newBals\",\"type\":\"uint256[]\"}],\"name\":\"setOutcome\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"settled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"channelID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"participant\",\"type\":\"address\"},{\"internalType\":\"addresspayable\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structAssetHolder.WithdrawalAuth\",\"name\":\"authorization\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x60a060405234801561001057600080fd5b506040516111af3803806111af83398101604081905261002f91610070565b600280546001600160a01b0319166001600160a01b03938416179055166080526100a3565b80516001600160a01b038116811461006b57600080fd5b919050565b6000806040838503121561008357600080fd5b61008c83610054565b915061009a60208401610054565b90509250929050565b6080516110e36100cc60003960008181610174015281816107f0015261099001526110e36000f3fe6080604052600436106100705760003560e01c8063ae9ee18c1161004e578063ae9ee18c146100e7578063d945af1d14610122578063fc0c546a14610162578063fc79a66d1461019657600080fd5b80631de26e16146100755780634ed4283c1461008a57806353c2ed8e146100aa575b600080fd5b610088610083366004610de8565b6101b6565b005b34801561009657600080fd5b506100886100a5366004610e0a565b610230565b3480156100b657600080fd5b506002546100ca906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100f357600080fd5b50610114610102366004610e95565b60006020819052908152604090205481565b6040519081526020016100de565b34801561012e57600080fd5b5061015261013d366004610e95565b60016020526000908152604090205460ff1681565b60405190151581526020016100de565b34801561016e57600080fd5b506100ca7f000000000000000000000000000000000000000000000000000000000000000081565b3480156101a257600080fd5b506100886101b1366004610ef3565b610448565b6101c08282610757565b6000828152602081905260409020546101d990826107bb565b6000838152602081905260409020556101f282826107ce565b817fcd2fe07293de5928c5df9505b65a8d6506f8668dfe81af09090920687edc48a98260405161022491815260200190565b60405180910390a25050565b823560009081526001602052604090205460ff1661028b5760405162461bcd60e51b815260206004820152601360248201527218da185b9b995b081b9bdd081cd95d1d1b1959606a1b60448201526064015b60405180910390fd5b6102f38360405160200161029f9190610f82565b60408051601f198184030181526020601f8601819004810284018101909252848352919085908590819084018382808284376000920191909152506102ee925050506040870160208801610fce565b6108a7565b61033f5760405162461bcd60e51b815260206004820152601d60248201527f7369676e617475726520766572696669636174696f6e206661696c65640000006044820152606401610282565b600061035b84356103566040870160208801610fce565b610930565b600081815260208190526040902054909150606085013511156103b55760405162461bcd60e51b8152602060048201526012602482015271696e73756666696369656e742066756e647360701b6044820152606401610282565b6000818152602081905260409020546103d290606086013561097a565b6000828152602081905260409020556103ec848484610986565b807fd0b6e7d0170f56c62f87de6a8a47a0ccf41c86ffb5084d399d8eb62e823f2a81606086018035906104229060408901610fce565b604080519283526001600160a01b0390911660208301520160405180910390a250505050565b6002546001600160a01b031633146104b05760405162461bcd60e51b815260206004820152602560248201527f63616e206f6e6c792062652063616c6c6564206279207468652061646a75646960448201526431b0ba37b960d91b6064820152608401610282565b8281146105115760405162461bcd60e51b815260206004820152602960248201527f7061727469636970616e7473206c656e6774682073686f756c6420657175616c6044820152682062616c616e63657360b81b6064820152608401610282565b60008581526001602052604090205460ff161561057e5760405162461bcd60e51b815260206004820152602560248201527f747279696e6720746f2073657420616c726561647920736574746c6564206368604482015264185b9b995b60da1b6064820152608401610282565b600085815260208190526040812080549082905590808567ffffffffffffffff8111156105ad576105ad610feb565b6040519080825280602002602001820160405280156105d6578160200160208202803683370190505b50905060005b8681101561069a5760006106118a8a8a858181106105fc576105fc611001565b90506020020160208101906103569190610fce565b90508083838151811061062657610626611001565b60200260200101818152505061065760008083815260200190815260200160002054866107bb90919063ffffffff16565b945061068487878481811061066e5761066e611001565b90506020020135856107bb90919063ffffffff16565b93505080806106929061102d565b9150506105dc565b5081831061070a5760005b86811015610708578585828181106106bf576106bf611001565b905060200201356000808484815181106106db576106db611001565b602002602001015181526020019081526020016000208190555080806107009061102d565b9150506106a5565b505b6000888152600160208190526040808320805460ff19169092179091555189917fef898d6cd3395b6dfe67a3c1923e5c726c1b154e979fb0a25a9c41d0093168b891a25050505050505050565b34156107b75760405162461bcd60e51b815260206004820152602960248201527f6d6573736167652076616c7565206d757374206265203020666f7220746f6b656044820152681b8819195c1bdcda5d60ba1b6064820152608401610282565b5050565b60006107c78284611046565b9392505050565b6040516323b872dd60e01b8152336004820152306024820152604481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064016020604051808303816000875af1158015610841573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610865919061105e565b6107b75760405162461bcd60e51b81526020600482015260136024820152721d1c985b9cd9995c919c9bdb4819985a5b1959606a1b6044820152606401610282565b60008061090885805190602001206040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b905060006109168286610a77565b6001600160a01b0390811690851614925050509392505050565b600082826040516020016109579291909182526001600160a01b0316602082015260400190565b60405160208183030381529060405280519060200120905092915050565b505050565b60006107c78284611080565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663a9059cbb6109c56060860160408701610fce565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152606086013560248201526044016020604051808303816000875af1158015610a15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a39919061105e565b6109755760405162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b6044820152606401610282565b6000806000610a868585610a9b565b91509150610a9381610b09565b509392505050565b6000808251604103610ad15760208301516040840151606085015160001a610ac587828585610cc2565b94509450505050610b02565b8251604003610afa5760208301516040840151610aef868383610daf565b935093505050610b02565b506000905060025b9250929050565b6000816004811115610b1d57610b1d611097565b03610b255750565b6001816004811115610b3957610b39611097565b03610b865760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610282565b6002816004811115610b9a57610b9a611097565b03610be75760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610282565b6003816004811115610bfb57610bfb611097565b03610c535760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610282565b6004816004811115610c6757610c67611097565b03610cbf5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610282565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610cf95750600090506003610da6565b8460ff16601b14158015610d1157508460ff16601c14155b15610d225750600090506004610da6565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610d76573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610d9f57600060019250925050610da6565b9150600090505b94509492505050565b6000806001600160ff1b03831681610dcc60ff86901c601b611046565b9050610dda87828885610cc2565b935093505050935093915050565b60008060408385031215610dfb57600080fd5b50508035926020909101359150565b600080600083850360a0811215610e2057600080fd5b6080811215610e2e57600080fd5b50839250608084013567ffffffffffffffff80821115610e4d57600080fd5b818601915086601f830112610e6157600080fd5b813581811115610e7057600080fd5b876020828501011115610e8257600080fd5b6020830194508093505050509250925092565b600060208284031215610ea757600080fd5b5035919050565b60008083601f840112610ec057600080fd5b50813567ffffffffffffffff811115610ed857600080fd5b6020830191508360208260051b8501011115610b0257600080fd5b600080600080600060608688031215610f0b57600080fd5b85359450602086013567ffffffffffffffff80821115610f2a57600080fd5b610f3689838a01610eae565b90965094506040880135915080821115610f4f57600080fd5b50610f5c88828901610eae565b969995985093965092949392505050565b6001600160a01b0381168114610cbf57600080fd5b81358152608081016020830135610f9881610f6d565b6001600160a01b039081166020840152604084013590610fb782610f6d565b166040830152606092830135929091019190915290565b600060208284031215610fe057600080fd5b81356107c781610f6d565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161103f5761103f611017565b5060010190565b6000821982111561105957611059611017565b500190565b60006020828403121561107057600080fd5b815180151581146107c757600080fd5b60008282101561109257611092611017565b500390565b634e487b7160e01b600052602160045260246000fdfea2646970667358221220d3e80917f9617ba8b135219fea2e91389e1e021193af03d47d7e36c46018351e64736f6c634300080f0033", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_adjudicator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"fundingID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Deposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"channelID\",\"type\":\"bytes32\"}],\"name\":\"OutcomeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"fundingID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"Withdrawn\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"adjudicator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"fundingID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"holdings\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"channelID\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"ethAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ccAddress\",\"type\":\"bytes\"}],\"internalType\":\"structChannel.Participant[]\",\"name\":\"parts\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"newBals\",\"type\":\"uint256[]\"}],\"name\":\"setOutcome\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"settled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"channelID\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"ethAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ccAddress\",\"type\":\"bytes\"}],\"internalType\":\"structChannel.Participant\",\"name\":\"participant\",\"type\":\"tuple\"},{\"internalType\":\"addresspayable\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structAssetHolder.WithdrawalAuth\",\"name\":\"authorization\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x60a060405234801561001057600080fd5b5060405161129d38038061129d83398101604081905261002f91610070565b600280546001600160a01b0319166001600160a01b03938416179055166080526100a3565b80516001600160a01b038116811461006b57600080fd5b919050565b6000806040838503121561008357600080fd5b61008c83610054565b915061009a60208401610054565b90509250929050565b6080516111d16100cc600039600081816101740152818161080301526109a301526111d16000f3fe6080604052600436106100705760003560e01c8063ae9ee18c1161004e578063ae9ee18c146100e7578063d945af1d14610122578063fc0c546a14610162578063fca0f7781461019657600080fd5b80631de26e1614610075578063295482ce1461008a57806353c2ed8e146100aa575b600080fd5b610088610083366004610dfb565b6101b6565b005b34801561009657600080fd5b506100886100a5366004610e62565b610230565b3480156100b657600080fd5b506002546100ca906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100f357600080fd5b50610114610102366004610edc565b60006020819052908152604090205481565b6040519081526020016100de565b34801561012e57600080fd5b5061015261013d366004610edc565b60016020526000908152604090205460ff1681565b60405190151581526020016100de565b34801561016e57600080fd5b506100ca7f000000000000000000000000000000000000000000000000000000000000000081565b3480156101a257600080fd5b506100886101b1366004610ef5565b610554565b6101c0828261076a565b6000828152602081905260409020546101d990826107ce565b6000838152602081905260409020556101f282826107e1565b817fcd2fe07293de5928c5df9505b65a8d6506f8668dfe81af09090920687edc48a98260405161022491815260200190565b60405180910390a25050565b6002546001600160a01b0316331461029d5760405162461bcd60e51b815260206004820152602560248201527f63616e206f6e6c792062652063616c6c6564206279207468652061646a75646960448201526431b0ba37b960d91b60648201526084015b60405180910390fd5b8281146102fe5760405162461bcd60e51b815260206004820152602960248201527f7061727469636970616e7473206c656e6774682073686f756c6420657175616c6044820152682062616c616e63657360b81b6064820152608401610294565b60008581526001602052604090205460ff161561036b5760405162461bcd60e51b815260206004820152602560248201527f747279696e6720746f2073657420616c726561647920736574746c6564206368604482015264185b9b995b60da1b6064820152608401610294565b600085815260208190526040812080549082905590808567ffffffffffffffff81111561039a5761039a610f94565b6040519080825280602002602001820160405280156103c3578160200160208202803683370190505b50905060005b8681101561049757600061040e8a8a8a858181106103e9576103e9610faa565b90506020028101906103fb9190610fc0565b610409906020810190610ff5565b6108ba565b90508083838151811061042357610423610faa565b60200260200101818152505061045460008083815260200190815260200160002054866107ce90919063ffffffff16565b945061048187878481811061046b5761046b610faa565b90506020020135856107ce90919063ffffffff16565b935050808061048f90611028565b9150506103c9565b508183106105075760005b86811015610505578585828181106104bc576104bc610faa565b905060200201356000808484815181106104d8576104d8610faa565b602002602001015181526020019081526020016000208190555080806104fd90611028565b9150506104a2565b505b6000888152600160208190526040808320805460ff19169092179091555189917fef898d6cd3395b6dfe67a3c1923e5c726c1b154e979fb0a25a9c41d0093168b891a25050505050505050565b823560009081526001602052604090205460ff166105aa5760405162461bcd60e51b815260206004820152601360248201527218da185b9b995b081b9bdd081cd95d1d1b1959606a1b6044820152606401610294565b61061d836040516020016105be9190611051565b60408051601f198184030181526020601f86018190048102840181019092528483529190859085908190840183828082843760009201919091525061060a925050506020870187610fc0565b610618906020810190610ff5565b6108ff565b6106695760405162461bcd60e51b815260206004820152601d60248201527f7369676e617475726520766572696669636174696f6e206661696c65640000006044820152606401610294565b600061067d84356103fb6020870187610fc0565b600081815260208190526040902054909150606085013511156106d75760405162461bcd60e51b8152602060048201526012602482015271696e73756666696369656e742066756e647360701b6044820152606401610294565b6000818152602081905260409020546106f490606086013561098d565b60008281526020819052604090205561070e848484610999565b807fd0b6e7d0170f56c62f87de6a8a47a0ccf41c86ffb5084d399d8eb62e823f2a81606086018035906107449060408901610ff5565b604080519283526001600160a01b0390911660208301520160405180910390a250505050565b34156107ca5760405162461bcd60e51b815260206004820152602960248201527f6d6573736167652076616c7565206d757374206265203020666f7220746f6b656044820152681b8819195c1bdcda5d60ba1b6064820152608401610294565b5050565b60006107da8284611134565b9392505050565b6040516323b872dd60e01b8152336004820152306024820152604481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064016020604051808303816000875af1158015610854573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610878919061114c565b6107ca5760405162461bcd60e51b81526020600482015260136024820152721d1c985b9cd9995c919c9bdb4819985a5b1959606a1b6044820152606401610294565b600082826040516020016108e19291909182526001600160a01b0316602082015260400190565b60405160208183030381529060405280519060200120905092915050565b60008061096085805190602001206040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b9050600061096e8286610a8a565b6001600160a01b0390811690851614925050509392505050565b505050565b60006107da828461116e565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663a9059cbb6109d86060860160408701610ff5565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152606086013560248201526044016020604051808303816000875af1158015610a28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4c919061114c565b6109885760405162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b6044820152606401610294565b6000806000610a998585610aae565b91509150610aa681610b1c565b509392505050565b6000808251604103610ae45760208301516040840151606085015160001a610ad887828585610cd5565b94509450505050610b15565b8251604003610b0d5760208301516040840151610b02868383610dc2565b935093505050610b15565b506000905060025b9250929050565b6000816004811115610b3057610b30611185565b03610b385750565b6001816004811115610b4c57610b4c611185565b03610b995760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610294565b6002816004811115610bad57610bad611185565b03610bfa5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610294565b6003816004811115610c0e57610c0e611185565b03610c665760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610294565b6004816004811115610c7a57610c7a611185565b03610cd25760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610294565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610d0c5750600090506003610db9565b8460ff16601b14158015610d2457508460ff16601c14155b15610d355750600090506004610db9565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610d89573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610db257600060019250925050610db9565b9150600090505b94509492505050565b6000806001600160ff1b03831681610ddf60ff86901c601b611134565b9050610ded87828885610cd5565b935093505050935093915050565b60008060408385031215610e0e57600080fd5b50508035926020909101359150565b60008083601f840112610e2f57600080fd5b50813567ffffffffffffffff811115610e4757600080fd5b6020830191508360208260051b8501011115610b1557600080fd5b600080600080600060608688031215610e7a57600080fd5b85359450602086013567ffffffffffffffff80821115610e9957600080fd5b610ea589838a01610e1d565b90965094506040880135915080821115610ebe57600080fd5b50610ecb88828901610e1d565b969995985093965092949392505050565b600060208284031215610eee57600080fd5b5035919050565b600080600060408486031215610f0a57600080fd5b833567ffffffffffffffff80821115610f2257600080fd5b9085019060808288031215610f3657600080fd5b90935060208501359080821115610f4c57600080fd5b818601915086601f830112610f6057600080fd5b813581811115610f6f57600080fd5b876020828501011115610f8157600080fd5b6020830194508093505050509250925092565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60008235603e19833603018112610fd657600080fd5b9190910192915050565b6001600160a01b0381168114610cd257600080fd5b60006020828403121561100757600080fd5b81356107da81610fe0565b634e487b7160e01b600052601160045260246000fd5b60006001820161103a5761103a611012565b5060010190565b803561104c81610fe0565b919050565b602081528135602082015260006020830135603e1984360301811261107557600080fd5b608060408401528301803561108981610fe0565b6001600160a01b031660a0840152602081013536829003601e190181126110af57600080fd5b0160208101903567ffffffffffffffff8111156110cb57600080fd5b8036038213156110da57600080fd5b604060c08501528060e0850152610100818382870137600081838701015261110460408701611041565b6001600160a01b03811660608701529250606095909501356080850152601f01601f191690920190920192915050565b6000821982111561114757611147611012565b500190565b60006020828403121561115e57600080fd5b815180151581146107da57600080fd5b60008282101561118057611180611012565b500390565b634e487b7160e01b600052602160045260246000fdfea2646970667358221220ad0874027a67427bfc782242eb9ed3252b2e96dbb6f2b27da3f355e3da35f48564736f6c634300080f0033", } // Assetholdererc20ABI is the input ABI used to generate the binding from. @@ -164,11 +171,11 @@ func NewAssetholdererc20Filterer(address common.Address, filterer bind.ContractF // bindAssetholdererc20 binds a generic wrapper to an already deployed contract. func bindAssetholdererc20(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(Assetholdererc20ABI)) + parsed, err := Assetholdererc20MetaData.GetAbi() if err != nil { return nil, err } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil } // Call invokes the (constant) contract method with params as input values and @@ -354,44 +361,44 @@ func (_Assetholdererc20 *Assetholdererc20TransactorSession) Deposit(fundingID [3 return _Assetholdererc20.Contract.Deposit(&_Assetholdererc20.TransactOpts, fundingID, amount) } -// SetOutcome is a paid mutator transaction binding the contract method 0xfc79a66d. +// SetOutcome is a paid mutator transaction binding the contract method 0x295482ce. // -// Solidity: function setOutcome(bytes32 channelID, address[] parts, uint256[] newBals) returns() -func (_Assetholdererc20 *Assetholdererc20Transactor) SetOutcome(opts *bind.TransactOpts, channelID [32]byte, parts []common.Address, newBals []*big.Int) (*types.Transaction, error) { +// Solidity: function setOutcome(bytes32 channelID, (address,bytes)[] parts, uint256[] newBals) returns() +func (_Assetholdererc20 *Assetholdererc20Transactor) SetOutcome(opts *bind.TransactOpts, channelID [32]byte, parts []ChannelParticipant, newBals []*big.Int) (*types.Transaction, error) { return _Assetholdererc20.contract.Transact(opts, "setOutcome", channelID, parts, newBals) } -// SetOutcome is a paid mutator transaction binding the contract method 0xfc79a66d. +// SetOutcome is a paid mutator transaction binding the contract method 0x295482ce. // -// Solidity: function setOutcome(bytes32 channelID, address[] parts, uint256[] newBals) returns() -func (_Assetholdererc20 *Assetholdererc20Session) SetOutcome(channelID [32]byte, parts []common.Address, newBals []*big.Int) (*types.Transaction, error) { +// Solidity: function setOutcome(bytes32 channelID, (address,bytes)[] parts, uint256[] newBals) returns() +func (_Assetholdererc20 *Assetholdererc20Session) SetOutcome(channelID [32]byte, parts []ChannelParticipant, newBals []*big.Int) (*types.Transaction, error) { return _Assetholdererc20.Contract.SetOutcome(&_Assetholdererc20.TransactOpts, channelID, parts, newBals) } -// SetOutcome is a paid mutator transaction binding the contract method 0xfc79a66d. +// SetOutcome is a paid mutator transaction binding the contract method 0x295482ce. // -// Solidity: function setOutcome(bytes32 channelID, address[] parts, uint256[] newBals) returns() -func (_Assetholdererc20 *Assetholdererc20TransactorSession) SetOutcome(channelID [32]byte, parts []common.Address, newBals []*big.Int) (*types.Transaction, error) { +// Solidity: function setOutcome(bytes32 channelID, (address,bytes)[] parts, uint256[] newBals) returns() +func (_Assetholdererc20 *Assetholdererc20TransactorSession) SetOutcome(channelID [32]byte, parts []ChannelParticipant, newBals []*big.Int) (*types.Transaction, error) { return _Assetholdererc20.Contract.SetOutcome(&_Assetholdererc20.TransactOpts, channelID, parts, newBals) } -// Withdraw is a paid mutator transaction binding the contract method 0x4ed4283c. +// Withdraw is a paid mutator transaction binding the contract method 0xfca0f778. // -// Solidity: function withdraw((bytes32,address,address,uint256) authorization, bytes signature) returns() +// Solidity: function withdraw((bytes32,(address,bytes),address,uint256) authorization, bytes signature) returns() func (_Assetholdererc20 *Assetholdererc20Transactor) Withdraw(opts *bind.TransactOpts, authorization AssetHolderWithdrawalAuth, signature []byte) (*types.Transaction, error) { return _Assetholdererc20.contract.Transact(opts, "withdraw", authorization, signature) } -// Withdraw is a paid mutator transaction binding the contract method 0x4ed4283c. +// Withdraw is a paid mutator transaction binding the contract method 0xfca0f778. // -// Solidity: function withdraw((bytes32,address,address,uint256) authorization, bytes signature) returns() +// Solidity: function withdraw((bytes32,(address,bytes),address,uint256) authorization, bytes signature) returns() func (_Assetholdererc20 *Assetholdererc20Session) Withdraw(authorization AssetHolderWithdrawalAuth, signature []byte) (*types.Transaction, error) { return _Assetholdererc20.Contract.Withdraw(&_Assetholdererc20.TransactOpts, authorization, signature) } -// Withdraw is a paid mutator transaction binding the contract method 0x4ed4283c. +// Withdraw is a paid mutator transaction binding the contract method 0xfca0f778. // -// Solidity: function withdraw((bytes32,address,address,uint256) authorization, bytes signature) returns() +// Solidity: function withdraw((bytes32,(address,bytes),address,uint256) authorization, bytes signature) returns() func (_Assetholdererc20 *Assetholdererc20TransactorSession) Withdraw(authorization AssetHolderWithdrawalAuth, signature []byte) (*types.Transaction, error) { return _Assetholdererc20.Contract.Withdraw(&_Assetholdererc20.TransactOpts, authorization, signature) } diff --git a/bindings/assetholdererc20/AssetHolderERC20BinRuntime.go b/bindings/assetholdererc20/AssetHolderERC20BinRuntime.go index 80dc959..f83e511 100644 --- a/bindings/assetholdererc20/AssetHolderERC20BinRuntime.go +++ b/bindings/assetholdererc20/AssetHolderERC20BinRuntime.go @@ -1,4 +1,4 @@ package assetholdererc20 // import "github.com/perun-network/perun-eth-backend/bindings/assetholdererc20" // AssetHolderERC20BinRuntime is the runtime part of the compiled bytecode used for deploying new contracts. -var AssetHolderERC20BinRuntime = "6080604052600436106100705760003560e01c8063ae9ee18c1161004e578063ae9ee18c146100e7578063d945af1d14610122578063fc0c546a14610162578063fc79a66d1461019657600080fd5b80631de26e16146100755780634ed4283c1461008a57806353c2ed8e146100aa575b600080fd5b610088610083366004610de8565b6101b6565b005b34801561009657600080fd5b506100886100a5366004610e0a565b610230565b3480156100b657600080fd5b506002546100ca906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100f357600080fd5b50610114610102366004610e95565b60006020819052908152604090205481565b6040519081526020016100de565b34801561012e57600080fd5b5061015261013d366004610e95565b60016020526000908152604090205460ff1681565b60405190151581526020016100de565b34801561016e57600080fd5b506100ca7f000000000000000000000000000000000000000000000000000000000000000081565b3480156101a257600080fd5b506100886101b1366004610ef3565b610448565b6101c08282610757565b6000828152602081905260409020546101d990826107bb565b6000838152602081905260409020556101f282826107ce565b817fcd2fe07293de5928c5df9505b65a8d6506f8668dfe81af09090920687edc48a98260405161022491815260200190565b60405180910390a25050565b823560009081526001602052604090205460ff1661028b5760405162461bcd60e51b815260206004820152601360248201527218da185b9b995b081b9bdd081cd95d1d1b1959606a1b60448201526064015b60405180910390fd5b6102f38360405160200161029f9190610f82565b60408051601f198184030181526020601f8601819004810284018101909252848352919085908590819084018382808284376000920191909152506102ee925050506040870160208801610fce565b6108a7565b61033f5760405162461bcd60e51b815260206004820152601d60248201527f7369676e617475726520766572696669636174696f6e206661696c65640000006044820152606401610282565b600061035b84356103566040870160208801610fce565b610930565b600081815260208190526040902054909150606085013511156103b55760405162461bcd60e51b8152602060048201526012602482015271696e73756666696369656e742066756e647360701b6044820152606401610282565b6000818152602081905260409020546103d290606086013561097a565b6000828152602081905260409020556103ec848484610986565b807fd0b6e7d0170f56c62f87de6a8a47a0ccf41c86ffb5084d399d8eb62e823f2a81606086018035906104229060408901610fce565b604080519283526001600160a01b0390911660208301520160405180910390a250505050565b6002546001600160a01b031633146104b05760405162461bcd60e51b815260206004820152602560248201527f63616e206f6e6c792062652063616c6c6564206279207468652061646a75646960448201526431b0ba37b960d91b6064820152608401610282565b8281146105115760405162461bcd60e51b815260206004820152602960248201527f7061727469636970616e7473206c656e6774682073686f756c6420657175616c6044820152682062616c616e63657360b81b6064820152608401610282565b60008581526001602052604090205460ff161561057e5760405162461bcd60e51b815260206004820152602560248201527f747279696e6720746f2073657420616c726561647920736574746c6564206368604482015264185b9b995b60da1b6064820152608401610282565b600085815260208190526040812080549082905590808567ffffffffffffffff8111156105ad576105ad610feb565b6040519080825280602002602001820160405280156105d6578160200160208202803683370190505b50905060005b8681101561069a5760006106118a8a8a858181106105fc576105fc611001565b90506020020160208101906103569190610fce565b90508083838151811061062657610626611001565b60200260200101818152505061065760008083815260200190815260200160002054866107bb90919063ffffffff16565b945061068487878481811061066e5761066e611001565b90506020020135856107bb90919063ffffffff16565b93505080806106929061102d565b9150506105dc565b5081831061070a5760005b86811015610708578585828181106106bf576106bf611001565b905060200201356000808484815181106106db576106db611001565b602002602001015181526020019081526020016000208190555080806107009061102d565b9150506106a5565b505b6000888152600160208190526040808320805460ff19169092179091555189917fef898d6cd3395b6dfe67a3c1923e5c726c1b154e979fb0a25a9c41d0093168b891a25050505050505050565b34156107b75760405162461bcd60e51b815260206004820152602960248201527f6d6573736167652076616c7565206d757374206265203020666f7220746f6b656044820152681b8819195c1bdcda5d60ba1b6064820152608401610282565b5050565b60006107c78284611046565b9392505050565b6040516323b872dd60e01b8152336004820152306024820152604481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064016020604051808303816000875af1158015610841573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610865919061105e565b6107b75760405162461bcd60e51b81526020600482015260136024820152721d1c985b9cd9995c919c9bdb4819985a5b1959606a1b6044820152606401610282565b60008061090885805190602001206040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b905060006109168286610a77565b6001600160a01b0390811690851614925050509392505050565b600082826040516020016109579291909182526001600160a01b0316602082015260400190565b60405160208183030381529060405280519060200120905092915050565b505050565b60006107c78284611080565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663a9059cbb6109c56060860160408701610fce565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152606086013560248201526044016020604051808303816000875af1158015610a15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a39919061105e565b6109755760405162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b6044820152606401610282565b6000806000610a868585610a9b565b91509150610a9381610b09565b509392505050565b6000808251604103610ad15760208301516040840151606085015160001a610ac587828585610cc2565b94509450505050610b02565b8251604003610afa5760208301516040840151610aef868383610daf565b935093505050610b02565b506000905060025b9250929050565b6000816004811115610b1d57610b1d611097565b03610b255750565b6001816004811115610b3957610b39611097565b03610b865760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610282565b6002816004811115610b9a57610b9a611097565b03610be75760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610282565b6003816004811115610bfb57610bfb611097565b03610c535760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610282565b6004816004811115610c6757610c67611097565b03610cbf5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610282565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610cf95750600090506003610da6565b8460ff16601b14158015610d1157508460ff16601c14155b15610d225750600090506004610da6565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610d76573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610d9f57600060019250925050610da6565b9150600090505b94509492505050565b6000806001600160ff1b03831681610dcc60ff86901c601b611046565b9050610dda87828885610cc2565b935093505050935093915050565b60008060408385031215610dfb57600080fd5b50508035926020909101359150565b600080600083850360a0811215610e2057600080fd5b6080811215610e2e57600080fd5b50839250608084013567ffffffffffffffff80821115610e4d57600080fd5b818601915086601f830112610e6157600080fd5b813581811115610e7057600080fd5b876020828501011115610e8257600080fd5b6020830194508093505050509250925092565b600060208284031215610ea757600080fd5b5035919050565b60008083601f840112610ec057600080fd5b50813567ffffffffffffffff811115610ed857600080fd5b6020830191508360208260051b8501011115610b0257600080fd5b600080600080600060608688031215610f0b57600080fd5b85359450602086013567ffffffffffffffff80821115610f2a57600080fd5b610f3689838a01610eae565b90965094506040880135915080821115610f4f57600080fd5b50610f5c88828901610eae565b969995985093965092949392505050565b6001600160a01b0381168114610cbf57600080fd5b81358152608081016020830135610f9881610f6d565b6001600160a01b039081166020840152604084013590610fb782610f6d565b166040830152606092830135929091019190915290565b600060208284031215610fe057600080fd5b81356107c781610f6d565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161103f5761103f611017565b5060010190565b6000821982111561105957611059611017565b500190565b60006020828403121561107057600080fd5b815180151581146107c757600080fd5b60008282101561109257611092611017565b500390565b634e487b7160e01b600052602160045260246000fdfea2646970667358221220d3e80917f9617ba8b135219fea2e91389e1e021193af03d47d7e36c46018351e64736f6c634300080f0033" +var AssetHolderERC20BinRuntime = "6080604052600436106100705760003560e01c8063ae9ee18c1161004e578063ae9ee18c146100e7578063d945af1d14610122578063fc0c546a14610162578063fca0f7781461019657600080fd5b80631de26e1614610075578063295482ce1461008a57806353c2ed8e146100aa575b600080fd5b610088610083366004610dfb565b6101b6565b005b34801561009657600080fd5b506100886100a5366004610e62565b610230565b3480156100b657600080fd5b506002546100ca906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100f357600080fd5b50610114610102366004610edc565b60006020819052908152604090205481565b6040519081526020016100de565b34801561012e57600080fd5b5061015261013d366004610edc565b60016020526000908152604090205460ff1681565b60405190151581526020016100de565b34801561016e57600080fd5b506100ca7f000000000000000000000000000000000000000000000000000000000000000081565b3480156101a257600080fd5b506100886101b1366004610ef5565b610554565b6101c0828261076a565b6000828152602081905260409020546101d990826107ce565b6000838152602081905260409020556101f282826107e1565b817fcd2fe07293de5928c5df9505b65a8d6506f8668dfe81af09090920687edc48a98260405161022491815260200190565b60405180910390a25050565b6002546001600160a01b0316331461029d5760405162461bcd60e51b815260206004820152602560248201527f63616e206f6e6c792062652063616c6c6564206279207468652061646a75646960448201526431b0ba37b960d91b60648201526084015b60405180910390fd5b8281146102fe5760405162461bcd60e51b815260206004820152602960248201527f7061727469636970616e7473206c656e6774682073686f756c6420657175616c6044820152682062616c616e63657360b81b6064820152608401610294565b60008581526001602052604090205460ff161561036b5760405162461bcd60e51b815260206004820152602560248201527f747279696e6720746f2073657420616c726561647920736574746c6564206368604482015264185b9b995b60da1b6064820152608401610294565b600085815260208190526040812080549082905590808567ffffffffffffffff81111561039a5761039a610f94565b6040519080825280602002602001820160405280156103c3578160200160208202803683370190505b50905060005b8681101561049757600061040e8a8a8a858181106103e9576103e9610faa565b90506020028101906103fb9190610fc0565b610409906020810190610ff5565b6108ba565b90508083838151811061042357610423610faa565b60200260200101818152505061045460008083815260200190815260200160002054866107ce90919063ffffffff16565b945061048187878481811061046b5761046b610faa565b90506020020135856107ce90919063ffffffff16565b935050808061048f90611028565b9150506103c9565b508183106105075760005b86811015610505578585828181106104bc576104bc610faa565b905060200201356000808484815181106104d8576104d8610faa565b602002602001015181526020019081526020016000208190555080806104fd90611028565b9150506104a2565b505b6000888152600160208190526040808320805460ff19169092179091555189917fef898d6cd3395b6dfe67a3c1923e5c726c1b154e979fb0a25a9c41d0093168b891a25050505050505050565b823560009081526001602052604090205460ff166105aa5760405162461bcd60e51b815260206004820152601360248201527218da185b9b995b081b9bdd081cd95d1d1b1959606a1b6044820152606401610294565b61061d836040516020016105be9190611051565b60408051601f198184030181526020601f86018190048102840181019092528483529190859085908190840183828082843760009201919091525061060a925050506020870187610fc0565b610618906020810190610ff5565b6108ff565b6106695760405162461bcd60e51b815260206004820152601d60248201527f7369676e617475726520766572696669636174696f6e206661696c65640000006044820152606401610294565b600061067d84356103fb6020870187610fc0565b600081815260208190526040902054909150606085013511156106d75760405162461bcd60e51b8152602060048201526012602482015271696e73756666696369656e742066756e647360701b6044820152606401610294565b6000818152602081905260409020546106f490606086013561098d565b60008281526020819052604090205561070e848484610999565b807fd0b6e7d0170f56c62f87de6a8a47a0ccf41c86ffb5084d399d8eb62e823f2a81606086018035906107449060408901610ff5565b604080519283526001600160a01b0390911660208301520160405180910390a250505050565b34156107ca5760405162461bcd60e51b815260206004820152602960248201527f6d6573736167652076616c7565206d757374206265203020666f7220746f6b656044820152681b8819195c1bdcda5d60ba1b6064820152608401610294565b5050565b60006107da8284611134565b9392505050565b6040516323b872dd60e01b8152336004820152306024820152604481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064016020604051808303816000875af1158015610854573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610878919061114c565b6107ca5760405162461bcd60e51b81526020600482015260136024820152721d1c985b9cd9995c919c9bdb4819985a5b1959606a1b6044820152606401610294565b600082826040516020016108e19291909182526001600160a01b0316602082015260400190565b60405160208183030381529060405280519060200120905092915050565b60008061096085805190602001206040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b9050600061096e8286610a8a565b6001600160a01b0390811690851614925050509392505050565b505050565b60006107da828461116e565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663a9059cbb6109d86060860160408701610ff5565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152606086013560248201526044016020604051808303816000875af1158015610a28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4c919061114c565b6109885760405162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b6044820152606401610294565b6000806000610a998585610aae565b91509150610aa681610b1c565b509392505050565b6000808251604103610ae45760208301516040840151606085015160001a610ad887828585610cd5565b94509450505050610b15565b8251604003610b0d5760208301516040840151610b02868383610dc2565b935093505050610b15565b506000905060025b9250929050565b6000816004811115610b3057610b30611185565b03610b385750565b6001816004811115610b4c57610b4c611185565b03610b995760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610294565b6002816004811115610bad57610bad611185565b03610bfa5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610294565b6003816004811115610c0e57610c0e611185565b03610c665760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610294565b6004816004811115610c7a57610c7a611185565b03610cd25760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610294565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610d0c5750600090506003610db9565b8460ff16601b14158015610d2457508460ff16601c14155b15610d355750600090506004610db9565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610d89573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610db257600060019250925050610db9565b9150600090505b94509492505050565b6000806001600160ff1b03831681610ddf60ff86901c601b611134565b9050610ded87828885610cd5565b935093505050935093915050565b60008060408385031215610e0e57600080fd5b50508035926020909101359150565b60008083601f840112610e2f57600080fd5b50813567ffffffffffffffff811115610e4757600080fd5b6020830191508360208260051b8501011115610b1557600080fd5b600080600080600060608688031215610e7a57600080fd5b85359450602086013567ffffffffffffffff80821115610e9957600080fd5b610ea589838a01610e1d565b90965094506040880135915080821115610ebe57600080fd5b50610ecb88828901610e1d565b969995985093965092949392505050565b600060208284031215610eee57600080fd5b5035919050565b600080600060408486031215610f0a57600080fd5b833567ffffffffffffffff80821115610f2257600080fd5b9085019060808288031215610f3657600080fd5b90935060208501359080821115610f4c57600080fd5b818601915086601f830112610f6057600080fd5b813581811115610f6f57600080fd5b876020828501011115610f8157600080fd5b6020830194508093505050509250925092565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60008235603e19833603018112610fd657600080fd5b9190910192915050565b6001600160a01b0381168114610cd257600080fd5b60006020828403121561100757600080fd5b81356107da81610fe0565b634e487b7160e01b600052601160045260246000fd5b60006001820161103a5761103a611012565b5060010190565b803561104c81610fe0565b919050565b602081528135602082015260006020830135603e1984360301811261107557600080fd5b608060408401528301803561108981610fe0565b6001600160a01b031660a0840152602081013536829003601e190181126110af57600080fd5b0160208101903567ffffffffffffffff8111156110cb57600080fd5b8036038213156110da57600080fd5b604060c08501528060e0850152610100818382870137600081838701015261110460408701611041565b6001600160a01b03811660608701529250606095909501356080850152601f01601f191690920190920192915050565b6000821982111561114757611147611012565b500190565b60006020828403121561115e57600080fd5b815180151581146107da57600080fd5b60008282101561118057611180611012565b500390565b634e487b7160e01b600052602160045260246000fdfea2646970667358221220ad0874027a67427bfc782242eb9ed3252b2e96dbb6f2b27da3f355e3da35f48564736f6c634300080f0033" diff --git a/bindings/assetholdereth/AssetHolderETH.go b/bindings/assetholdereth/AssetHolderETH.go index 218491f..64f9cd9 100644 --- a/bindings/assetholdereth/AssetHolderETH.go +++ b/bindings/assetholdereth/AssetHolderETH.go @@ -26,20 +26,27 @@ var ( _ = common.Big1 _ = types.BloomLookup _ = event.NewSubscription + _ = abi.ConvertType ) // AssetHolderWithdrawalAuth is an auto generated low-level Go binding around an user-defined struct. type AssetHolderWithdrawalAuth struct { ChannelID [32]byte - Participant common.Address + Participant ChannelParticipant Receiver common.Address Amount *big.Int } +// ChannelParticipant is an auto generated low-level Go binding around an user-defined struct. +type ChannelParticipant struct { + EthAddress common.Address + CcAddress []byte +} + // AssetholderethMetaData contains all meta data concerning the Assetholdereth contract. var AssetholderethMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_adjudicator\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"fundingID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Deposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"channelID\",\"type\":\"bytes32\"}],\"name\":\"OutcomeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"fundingID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"Withdrawn\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"adjudicator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"fundingID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"holdings\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"channelID\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parts\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"newBals\",\"type\":\"uint256[]\"}],\"name\":\"setOutcome\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"settled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"channelID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"participant\",\"type\":\"address\"},{\"internalType\":\"addresspayable\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structAssetHolder.WithdrawalAuth\",\"name\":\"authorization\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b50604051610f6d380380610f6d83398101604081905261002f91610054565b600280546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b610eda806100936000396000f3fe6080604052600436106100555760003560e01c80631de26e161461005a5780634ed4283c1461006f57806353c2ed8e1461008f578063ae9ee18c146100cc578063d945af1d14610107578063fc79a66d14610147575b600080fd5b61006d610068366004610c01565b610167565b005b34801561007b57600080fd5b5061006d61008a366004610c23565b6101d7565b34801561009b57600080fd5b506002546100af906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100d857600080fd5b506100f96100e7366004610cae565b60006020819052908152604090205481565b6040519081526020016100c3565b34801561011357600080fd5b50610137610122366004610cae565b60016020526000908152604090205460ff1681565b60405190151581526020016100c3565b34801561015357600080fd5b5061006d610162366004610d0c565b6103ef565b61017182826106fe565b60008281526020819052604090205461018a9082610751565b600083815260208190526040902055817fcd2fe07293de5928c5df9505b65a8d6506f8668dfe81af09090920687edc48a9826040516101cb91815260200190565b60405180910390a25050565b823560009081526001602052604090205460ff166102325760405162461bcd60e51b815260206004820152601360248201527218da185b9b995b081b9bdd081cd95d1d1b1959606a1b60448201526064015b60405180910390fd5b61029a836040516020016102469190610d9b565b60408051601f198184030181526020601f860181900481028401810190925284835291908590859081908401838280828437600092019190915250610295925050506040870160208801610de7565b610764565b6102e65760405162461bcd60e51b815260206004820152601d60248201527f7369676e617475726520766572696669636174696f6e206661696c65640000006044820152606401610229565b600061030284356102fd6040870160208801610de7565b6107ed565b6000818152602081905260409020549091506060850135111561035c5760405162461bcd60e51b8152602060048201526012602482015271696e73756666696369656e742066756e647360701b6044820152606401610229565b600081815260208190526040902054610379906060860135610832565b60008281526020819052604090205561039384848461083e565b807fd0b6e7d0170f56c62f87de6a8a47a0ccf41c86ffb5084d399d8eb62e823f2a81606086018035906103c99060408901610de7565b604080519283526001600160a01b0390911660208301520160405180910390a250505050565b6002546001600160a01b031633146104575760405162461bcd60e51b815260206004820152602560248201527f63616e206f6e6c792062652063616c6c6564206279207468652061646a75646960448201526431b0ba37b960d91b6064820152608401610229565b8281146104b85760405162461bcd60e51b815260206004820152602960248201527f7061727469636970616e7473206c656e6774682073686f756c6420657175616c6044820152682062616c616e63657360b81b6064820152608401610229565b60008581526001602052604090205460ff16156105255760405162461bcd60e51b815260206004820152602560248201527f747279696e6720746f2073657420616c726561647920736574746c6564206368604482015264185b9b995b60da1b6064820152608401610229565b600085815260208190526040812080549082905590808567ffffffffffffffff81111561055457610554610e04565b60405190808252806020026020018201604052801561057d578160200160208202803683370190505b50905060005b868110156106415760006105b88a8a8a858181106105a3576105a3610e1a565b90506020020160208101906102fd9190610de7565b9050808383815181106105cd576105cd610e1a565b6020026020010181815250506105fe600080838152602001908152602001600020548661075190919063ffffffff16565b945061062b87878481811061061557610615610e1a565b905060200201358561075190919063ffffffff16565b935050808061063990610e46565b915050610583565b508183106106b15760005b868110156106af5785858281811061066657610666610e1a565b9050602002013560008084848151811061068257610682610e1a565b602002602001015181526020019081526020016000208190555080806106a790610e46565b91505061064c565b505b6000888152600160208190526040808320805460ff19169092179091555189917fef898d6cd3395b6dfe67a3c1923e5c726c1b154e979fb0a25a9c41d0093168b891a25050505050505050565b80341461074d5760405162461bcd60e51b815260206004820152601f60248201527f77726f6e6720616d6f756e74206f662045544820666f72206465706f736974006044820152606401610229565b5050565b600061075d8284610e5f565b9392505050565b6000806107c585805190602001206040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b905060006107d38286610890565b6001600160a01b0390811690851614925050509392505050565b600082826040516020016108149291909182526001600160a01b0316602082015260400190565b60405160208183030381529060405280519060200120905092915050565b600061075d8284610e77565b61084e6060840160408501610de7565b6001600160a01b03166108fc84606001359081150290604051600060405180830381858888f1935050505015801561088a573d6000803e3d6000fd5b50505050565b600080600061089f85856108b4565b915091506108ac81610922565b509392505050565b60008082516041036108ea5760208301516040840151606085015160001a6108de87828585610adb565b9450945050505061091b565b82516040036109135760208301516040840151610908868383610bc8565b93509350505061091b565b506000905060025b9250929050565b600081600481111561093657610936610e8e565b0361093e5750565b600181600481111561095257610952610e8e565b0361099f5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610229565b60028160048111156109b3576109b3610e8e565b03610a005760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610229565b6003816004811115610a1457610a14610e8e565b03610a6c5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610229565b6004816004811115610a8057610a80610e8e565b03610ad85760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610229565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610b125750600090506003610bbf565b8460ff16601b14158015610b2a57508460ff16601c14155b15610b3b5750600090506004610bbf565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610b8f573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610bb857600060019250925050610bbf565b9150600090505b94509492505050565b6000806001600160ff1b03831681610be560ff86901c601b610e5f565b9050610bf387828885610adb565b935093505050935093915050565b60008060408385031215610c1457600080fd5b50508035926020909101359150565b600080600083850360a0811215610c3957600080fd5b6080811215610c4757600080fd5b50839250608084013567ffffffffffffffff80821115610c6657600080fd5b818601915086601f830112610c7a57600080fd5b813581811115610c8957600080fd5b876020828501011115610c9b57600080fd5b6020830194508093505050509250925092565b600060208284031215610cc057600080fd5b5035919050565b60008083601f840112610cd957600080fd5b50813567ffffffffffffffff811115610cf157600080fd5b6020830191508360208260051b850101111561091b57600080fd5b600080600080600060608688031215610d2457600080fd5b85359450602086013567ffffffffffffffff80821115610d4357600080fd5b610d4f89838a01610cc7565b90965094506040880135915080821115610d6857600080fd5b50610d7588828901610cc7565b969995985093965092949392505050565b6001600160a01b0381168114610ad857600080fd5b81358152608081016020830135610db181610d86565b6001600160a01b039081166020840152604084013590610dd082610d86565b166040830152606092830135929091019190915290565b600060208284031215610df957600080fd5b813561075d81610d86565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201610e5857610e58610e30565b5060010190565b60008219821115610e7257610e72610e30565b500190565b600082821015610e8957610e89610e30565b500390565b634e487b7160e01b600052602160045260246000fdfea2646970667358221220e67f794b0375e592581f6c9457e01b34a1c4011a9c0093598bcd7f4a9bd29f6864736f6c634300080f0033", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_adjudicator\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"fundingID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Deposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"channelID\",\"type\":\"bytes32\"}],\"name\":\"OutcomeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"fundingID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"Withdrawn\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"adjudicator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"fundingID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"holdings\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"channelID\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"ethAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ccAddress\",\"type\":\"bytes\"}],\"internalType\":\"structChannel.Participant[]\",\"name\":\"parts\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"newBals\",\"type\":\"uint256[]\"}],\"name\":\"setOutcome\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"settled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"channelID\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"ethAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ccAddress\",\"type\":\"bytes\"}],\"internalType\":\"structChannel.Participant\",\"name\":\"participant\",\"type\":\"tuple\"},{\"internalType\":\"addresspayable\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structAssetHolder.WithdrawalAuth\",\"name\":\"authorization\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x608060405234801561001057600080fd5b5060405161105b38038061105b83398101604081905261002f91610054565b600280546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b610fc8806100936000396000f3fe6080604052600436106100555760003560e01c80631de26e161461005a578063295482ce1461006f57806353c2ed8e1461008f578063ae9ee18c146100cc578063d945af1d14610107578063fca0f77814610147575b600080fd5b61006d610068366004610c14565b610167565b005b34801561007b57600080fd5b5061006d61008a366004610c7b565b6101d7565b34801561009b57600080fd5b506002546100af906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100d857600080fd5b506100f96100e7366004610cf5565b60006020819052908152604090205481565b6040519081526020016100c3565b34801561011357600080fd5b50610137610122366004610cf5565b60016020526000908152604090205460ff1681565b60405190151581526020016100c3565b34801561015357600080fd5b5061006d610162366004610d0e565b6104fb565b6101718282610711565b60008281526020819052604090205461018a9082610764565b600083815260208190526040902055817fcd2fe07293de5928c5df9505b65a8d6506f8668dfe81af09090920687edc48a9826040516101cb91815260200190565b60405180910390a25050565b6002546001600160a01b031633146102445760405162461bcd60e51b815260206004820152602560248201527f63616e206f6e6c792062652063616c6c6564206279207468652061646a75646960448201526431b0ba37b960d91b60648201526084015b60405180910390fd5b8281146102a55760405162461bcd60e51b815260206004820152602960248201527f7061727469636970616e7473206c656e6774682073686f756c6420657175616c6044820152682062616c616e63657360b81b606482015260840161023b565b60008581526001602052604090205460ff16156103125760405162461bcd60e51b815260206004820152602560248201527f747279696e6720746f2073657420616c726561647920736574746c6564206368604482015264185b9b995b60da1b606482015260840161023b565b600085815260208190526040812080549082905590808567ffffffffffffffff81111561034157610341610dad565b60405190808252806020026020018201604052801561036a578160200160208202803683370190505b50905060005b8681101561043e5760006103b58a8a8a8581811061039057610390610dc3565b90506020028101906103a29190610dd9565b6103b0906020810190610e0e565b610777565b9050808383815181106103ca576103ca610dc3565b6020026020010181815250506103fb600080838152602001908152602001600020548661076490919063ffffffff16565b945061042887878481811061041257610412610dc3565b905060200201358561076490919063ffffffff16565b935050808061043690610e41565b915050610370565b508183106104ae5760005b868110156104ac5785858281811061046357610463610dc3565b9050602002013560008084848151811061047f5761047f610dc3565b602002602001015181526020019081526020016000208190555080806104a490610e41565b915050610449565b505b6000888152600160208190526040808320805460ff19169092179091555189917fef898d6cd3395b6dfe67a3c1923e5c726c1b154e979fb0a25a9c41d0093168b891a25050505050505050565b823560009081526001602052604090205460ff166105515760405162461bcd60e51b815260206004820152601360248201527218da185b9b995b081b9bdd081cd95d1d1b1959606a1b604482015260640161023b565b6105c4836040516020016105659190610e6a565b60408051601f198184030181526020601f8601819004810284018101909252848352919085908590819084018382808284376000920191909152506105b1925050506020870187610dd9565b6105bf906020810190610e0e565b6107bc565b6106105760405162461bcd60e51b815260206004820152601d60248201527f7369676e617475726520766572696669636174696f6e206661696c6564000000604482015260640161023b565b600061062484356103a26020870187610dd9565b6000818152602081905260409020549091506060850135111561067e5760405162461bcd60e51b8152602060048201526012602482015271696e73756666696369656e742066756e647360701b604482015260640161023b565b60008181526020819052604090205461069b906060860135610845565b6000828152602081905260409020556106b5848484610851565b807fd0b6e7d0170f56c62f87de6a8a47a0ccf41c86ffb5084d399d8eb62e823f2a81606086018035906106eb9060408901610e0e565b604080519283526001600160a01b0390911660208301520160405180910390a250505050565b8034146107605760405162461bcd60e51b815260206004820152601f60248201527f77726f6e6720616d6f756e74206f662045544820666f72206465706f73697400604482015260640161023b565b5050565b60006107708284610f4d565b9392505050565b6000828260405160200161079e9291909182526001600160a01b0316602082015260400190565b60405160208183030381529060405280519060200120905092915050565b60008061081d85805190602001206040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b9050600061082b82866108a3565b6001600160a01b0390811690851614925050509392505050565b60006107708284610f65565b6108616060840160408501610e0e565b6001600160a01b03166108fc84606001359081150290604051600060405180830381858888f1935050505015801561089d573d6000803e3d6000fd5b50505050565b60008060006108b285856108c7565b915091506108bf81610935565b509392505050565b60008082516041036108fd5760208301516040840151606085015160001a6108f187828585610aee565b9450945050505061092e565b8251604003610926576020830151604084015161091b868383610bdb565b93509350505061092e565b506000905060025b9250929050565b600081600481111561094957610949610f7c565b036109515750565b600181600481111561096557610965610f7c565b036109b25760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161023b565b60028160048111156109c6576109c6610f7c565b03610a135760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161023b565b6003816004811115610a2757610a27610f7c565b03610a7f5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161023b565b6004816004811115610a9357610a93610f7c565b03610aeb5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b606482015260840161023b565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610b255750600090506003610bd2565b8460ff16601b14158015610b3d57508460ff16601c14155b15610b4e5750600090506004610bd2565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610ba2573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610bcb57600060019250925050610bd2565b9150600090505b94509492505050565b6000806001600160ff1b03831681610bf860ff86901c601b610f4d565b9050610c0687828885610aee565b935093505050935093915050565b60008060408385031215610c2757600080fd5b50508035926020909101359150565b60008083601f840112610c4857600080fd5b50813567ffffffffffffffff811115610c6057600080fd5b6020830191508360208260051b850101111561092e57600080fd5b600080600080600060608688031215610c9357600080fd5b85359450602086013567ffffffffffffffff80821115610cb257600080fd5b610cbe89838a01610c36565b90965094506040880135915080821115610cd757600080fd5b50610ce488828901610c36565b969995985093965092949392505050565b600060208284031215610d0757600080fd5b5035919050565b600080600060408486031215610d2357600080fd5b833567ffffffffffffffff80821115610d3b57600080fd5b9085019060808288031215610d4f57600080fd5b90935060208501359080821115610d6557600080fd5b818601915086601f830112610d7957600080fd5b813581811115610d8857600080fd5b876020828501011115610d9a57600080fd5b6020830194508093505050509250925092565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60008235603e19833603018112610def57600080fd5b9190910192915050565b6001600160a01b0381168114610aeb57600080fd5b600060208284031215610e2057600080fd5b813561077081610df9565b634e487b7160e01b600052601160045260246000fd5b600060018201610e5357610e53610e2b565b5060010190565b8035610e6581610df9565b919050565b602081528135602082015260006020830135603e19843603018112610e8e57600080fd5b6080604084015283018035610ea281610df9565b6001600160a01b031660a0840152602081013536829003601e19018112610ec857600080fd5b0160208101903567ffffffffffffffff811115610ee457600080fd5b803603821315610ef357600080fd5b604060c08501528060e08501526101008183828701376000818387010152610f1d60408701610e5a565b6001600160a01b03811660608701529250606095909501356080850152601f01601f191690920190920192915050565b60008219821115610f6057610f60610e2b565b500190565b600082821015610f7757610f77610e2b565b500390565b634e487b7160e01b600052602160045260246000fdfea2646970667358221220dea45cdf7eabfb0362894605f2b04ce28ac37ab4c50adf6c360fd904a7c797c364736f6c634300080f0033", } // AssetholderethABI is the input ABI used to generate the binding from. @@ -164,11 +171,11 @@ func NewAssetholderethFilterer(address common.Address, filterer bind.ContractFil // bindAssetholdereth binds a generic wrapper to an already deployed contract. func bindAssetholdereth(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(AssetholderethABI)) + parsed, err := AssetholderethMetaData.GetAbi() if err != nil { return nil, err } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil } // Call invokes the (constant) contract method with params as input values and @@ -323,44 +330,44 @@ func (_Assetholdereth *AssetholderethTransactorSession) Deposit(fundingID [32]by return _Assetholdereth.Contract.Deposit(&_Assetholdereth.TransactOpts, fundingID, amount) } -// SetOutcome is a paid mutator transaction binding the contract method 0xfc79a66d. +// SetOutcome is a paid mutator transaction binding the contract method 0x295482ce. // -// Solidity: function setOutcome(bytes32 channelID, address[] parts, uint256[] newBals) returns() -func (_Assetholdereth *AssetholderethTransactor) SetOutcome(opts *bind.TransactOpts, channelID [32]byte, parts []common.Address, newBals []*big.Int) (*types.Transaction, error) { +// Solidity: function setOutcome(bytes32 channelID, (address,bytes)[] parts, uint256[] newBals) returns() +func (_Assetholdereth *AssetholderethTransactor) SetOutcome(opts *bind.TransactOpts, channelID [32]byte, parts []ChannelParticipant, newBals []*big.Int) (*types.Transaction, error) { return _Assetholdereth.contract.Transact(opts, "setOutcome", channelID, parts, newBals) } -// SetOutcome is a paid mutator transaction binding the contract method 0xfc79a66d. +// SetOutcome is a paid mutator transaction binding the contract method 0x295482ce. // -// Solidity: function setOutcome(bytes32 channelID, address[] parts, uint256[] newBals) returns() -func (_Assetholdereth *AssetholderethSession) SetOutcome(channelID [32]byte, parts []common.Address, newBals []*big.Int) (*types.Transaction, error) { +// Solidity: function setOutcome(bytes32 channelID, (address,bytes)[] parts, uint256[] newBals) returns() +func (_Assetholdereth *AssetholderethSession) SetOutcome(channelID [32]byte, parts []ChannelParticipant, newBals []*big.Int) (*types.Transaction, error) { return _Assetholdereth.Contract.SetOutcome(&_Assetholdereth.TransactOpts, channelID, parts, newBals) } -// SetOutcome is a paid mutator transaction binding the contract method 0xfc79a66d. +// SetOutcome is a paid mutator transaction binding the contract method 0x295482ce. // -// Solidity: function setOutcome(bytes32 channelID, address[] parts, uint256[] newBals) returns() -func (_Assetholdereth *AssetholderethTransactorSession) SetOutcome(channelID [32]byte, parts []common.Address, newBals []*big.Int) (*types.Transaction, error) { +// Solidity: function setOutcome(bytes32 channelID, (address,bytes)[] parts, uint256[] newBals) returns() +func (_Assetholdereth *AssetholderethTransactorSession) SetOutcome(channelID [32]byte, parts []ChannelParticipant, newBals []*big.Int) (*types.Transaction, error) { return _Assetholdereth.Contract.SetOutcome(&_Assetholdereth.TransactOpts, channelID, parts, newBals) } -// Withdraw is a paid mutator transaction binding the contract method 0x4ed4283c. +// Withdraw is a paid mutator transaction binding the contract method 0xfca0f778. // -// Solidity: function withdraw((bytes32,address,address,uint256) authorization, bytes signature) returns() +// Solidity: function withdraw((bytes32,(address,bytes),address,uint256) authorization, bytes signature) returns() func (_Assetholdereth *AssetholderethTransactor) Withdraw(opts *bind.TransactOpts, authorization AssetHolderWithdrawalAuth, signature []byte) (*types.Transaction, error) { return _Assetholdereth.contract.Transact(opts, "withdraw", authorization, signature) } -// Withdraw is a paid mutator transaction binding the contract method 0x4ed4283c. +// Withdraw is a paid mutator transaction binding the contract method 0xfca0f778. // -// Solidity: function withdraw((bytes32,address,address,uint256) authorization, bytes signature) returns() +// Solidity: function withdraw((bytes32,(address,bytes),address,uint256) authorization, bytes signature) returns() func (_Assetholdereth *AssetholderethSession) Withdraw(authorization AssetHolderWithdrawalAuth, signature []byte) (*types.Transaction, error) { return _Assetholdereth.Contract.Withdraw(&_Assetholdereth.TransactOpts, authorization, signature) } -// Withdraw is a paid mutator transaction binding the contract method 0x4ed4283c. +// Withdraw is a paid mutator transaction binding the contract method 0xfca0f778. // -// Solidity: function withdraw((bytes32,address,address,uint256) authorization, bytes signature) returns() +// Solidity: function withdraw((bytes32,(address,bytes),address,uint256) authorization, bytes signature) returns() func (_Assetholdereth *AssetholderethTransactorSession) Withdraw(authorization AssetHolderWithdrawalAuth, signature []byte) (*types.Transaction, error) { return _Assetholdereth.Contract.Withdraw(&_Assetholdereth.TransactOpts, authorization, signature) } diff --git a/bindings/assetholdereth/AssetHolderETHBinRuntime.go b/bindings/assetholdereth/AssetHolderETHBinRuntime.go index b92fcc1..c7ec69f 100644 --- a/bindings/assetholdereth/AssetHolderETHBinRuntime.go +++ b/bindings/assetholdereth/AssetHolderETHBinRuntime.go @@ -1,4 +1,4 @@ package assetholdereth // import "github.com/perun-network/perun-eth-backend/bindings/assetholdereth" // AssetHolderETHBinRuntime is the runtime part of the compiled bytecode used for deploying new contracts. -var AssetHolderETHBinRuntime = "6080604052600436106100555760003560e01c80631de26e161461005a5780634ed4283c1461006f57806353c2ed8e1461008f578063ae9ee18c146100cc578063d945af1d14610107578063fc79a66d14610147575b600080fd5b61006d610068366004610c01565b610167565b005b34801561007b57600080fd5b5061006d61008a366004610c23565b6101d7565b34801561009b57600080fd5b506002546100af906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100d857600080fd5b506100f96100e7366004610cae565b60006020819052908152604090205481565b6040519081526020016100c3565b34801561011357600080fd5b50610137610122366004610cae565b60016020526000908152604090205460ff1681565b60405190151581526020016100c3565b34801561015357600080fd5b5061006d610162366004610d0c565b6103ef565b61017182826106fe565b60008281526020819052604090205461018a9082610751565b600083815260208190526040902055817fcd2fe07293de5928c5df9505b65a8d6506f8668dfe81af09090920687edc48a9826040516101cb91815260200190565b60405180910390a25050565b823560009081526001602052604090205460ff166102325760405162461bcd60e51b815260206004820152601360248201527218da185b9b995b081b9bdd081cd95d1d1b1959606a1b60448201526064015b60405180910390fd5b61029a836040516020016102469190610d9b565b60408051601f198184030181526020601f860181900481028401810190925284835291908590859081908401838280828437600092019190915250610295925050506040870160208801610de7565b610764565b6102e65760405162461bcd60e51b815260206004820152601d60248201527f7369676e617475726520766572696669636174696f6e206661696c65640000006044820152606401610229565b600061030284356102fd6040870160208801610de7565b6107ed565b6000818152602081905260409020549091506060850135111561035c5760405162461bcd60e51b8152602060048201526012602482015271696e73756666696369656e742066756e647360701b6044820152606401610229565b600081815260208190526040902054610379906060860135610832565b60008281526020819052604090205561039384848461083e565b807fd0b6e7d0170f56c62f87de6a8a47a0ccf41c86ffb5084d399d8eb62e823f2a81606086018035906103c99060408901610de7565b604080519283526001600160a01b0390911660208301520160405180910390a250505050565b6002546001600160a01b031633146104575760405162461bcd60e51b815260206004820152602560248201527f63616e206f6e6c792062652063616c6c6564206279207468652061646a75646960448201526431b0ba37b960d91b6064820152608401610229565b8281146104b85760405162461bcd60e51b815260206004820152602960248201527f7061727469636970616e7473206c656e6774682073686f756c6420657175616c6044820152682062616c616e63657360b81b6064820152608401610229565b60008581526001602052604090205460ff16156105255760405162461bcd60e51b815260206004820152602560248201527f747279696e6720746f2073657420616c726561647920736574746c6564206368604482015264185b9b995b60da1b6064820152608401610229565b600085815260208190526040812080549082905590808567ffffffffffffffff81111561055457610554610e04565b60405190808252806020026020018201604052801561057d578160200160208202803683370190505b50905060005b868110156106415760006105b88a8a8a858181106105a3576105a3610e1a565b90506020020160208101906102fd9190610de7565b9050808383815181106105cd576105cd610e1a565b6020026020010181815250506105fe600080838152602001908152602001600020548661075190919063ffffffff16565b945061062b87878481811061061557610615610e1a565b905060200201358561075190919063ffffffff16565b935050808061063990610e46565b915050610583565b508183106106b15760005b868110156106af5785858281811061066657610666610e1a565b9050602002013560008084848151811061068257610682610e1a565b602002602001015181526020019081526020016000208190555080806106a790610e46565b91505061064c565b505b6000888152600160208190526040808320805460ff19169092179091555189917fef898d6cd3395b6dfe67a3c1923e5c726c1b154e979fb0a25a9c41d0093168b891a25050505050505050565b80341461074d5760405162461bcd60e51b815260206004820152601f60248201527f77726f6e6720616d6f756e74206f662045544820666f72206465706f736974006044820152606401610229565b5050565b600061075d8284610e5f565b9392505050565b6000806107c585805190602001206040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b905060006107d38286610890565b6001600160a01b0390811690851614925050509392505050565b600082826040516020016108149291909182526001600160a01b0316602082015260400190565b60405160208183030381529060405280519060200120905092915050565b600061075d8284610e77565b61084e6060840160408501610de7565b6001600160a01b03166108fc84606001359081150290604051600060405180830381858888f1935050505015801561088a573d6000803e3d6000fd5b50505050565b600080600061089f85856108b4565b915091506108ac81610922565b509392505050565b60008082516041036108ea5760208301516040840151606085015160001a6108de87828585610adb565b9450945050505061091b565b82516040036109135760208301516040840151610908868383610bc8565b93509350505061091b565b506000905060025b9250929050565b600081600481111561093657610936610e8e565b0361093e5750565b600181600481111561095257610952610e8e565b0361099f5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610229565b60028160048111156109b3576109b3610e8e565b03610a005760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610229565b6003816004811115610a1457610a14610e8e565b03610a6c5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610229565b6004816004811115610a8057610a80610e8e565b03610ad85760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610229565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610b125750600090506003610bbf565b8460ff16601b14158015610b2a57508460ff16601c14155b15610b3b5750600090506004610bbf565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610b8f573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610bb857600060019250925050610bbf565b9150600090505b94509492505050565b6000806001600160ff1b03831681610be560ff86901c601b610e5f565b9050610bf387828885610adb565b935093505050935093915050565b60008060408385031215610c1457600080fd5b50508035926020909101359150565b600080600083850360a0811215610c3957600080fd5b6080811215610c4757600080fd5b50839250608084013567ffffffffffffffff80821115610c6657600080fd5b818601915086601f830112610c7a57600080fd5b813581811115610c8957600080fd5b876020828501011115610c9b57600080fd5b6020830194508093505050509250925092565b600060208284031215610cc057600080fd5b5035919050565b60008083601f840112610cd957600080fd5b50813567ffffffffffffffff811115610cf157600080fd5b6020830191508360208260051b850101111561091b57600080fd5b600080600080600060608688031215610d2457600080fd5b85359450602086013567ffffffffffffffff80821115610d4357600080fd5b610d4f89838a01610cc7565b90965094506040880135915080821115610d6857600080fd5b50610d7588828901610cc7565b969995985093965092949392505050565b6001600160a01b0381168114610ad857600080fd5b81358152608081016020830135610db181610d86565b6001600160a01b039081166020840152604084013590610dd082610d86565b166040830152606092830135929091019190915290565b600060208284031215610df957600080fd5b813561075d81610d86565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201610e5857610e58610e30565b5060010190565b60008219821115610e7257610e72610e30565b500190565b600082821015610e8957610e89610e30565b500390565b634e487b7160e01b600052602160045260246000fdfea2646970667358221220e67f794b0375e592581f6c9457e01b34a1c4011a9c0093598bcd7f4a9bd29f6864736f6c634300080f0033" +var AssetHolderETHBinRuntime = "6080604052600436106100555760003560e01c80631de26e161461005a578063295482ce1461006f57806353c2ed8e1461008f578063ae9ee18c146100cc578063d945af1d14610107578063fca0f77814610147575b600080fd5b61006d610068366004610c14565b610167565b005b34801561007b57600080fd5b5061006d61008a366004610c7b565b6101d7565b34801561009b57600080fd5b506002546100af906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100d857600080fd5b506100f96100e7366004610cf5565b60006020819052908152604090205481565b6040519081526020016100c3565b34801561011357600080fd5b50610137610122366004610cf5565b60016020526000908152604090205460ff1681565b60405190151581526020016100c3565b34801561015357600080fd5b5061006d610162366004610d0e565b6104fb565b6101718282610711565b60008281526020819052604090205461018a9082610764565b600083815260208190526040902055817fcd2fe07293de5928c5df9505b65a8d6506f8668dfe81af09090920687edc48a9826040516101cb91815260200190565b60405180910390a25050565b6002546001600160a01b031633146102445760405162461bcd60e51b815260206004820152602560248201527f63616e206f6e6c792062652063616c6c6564206279207468652061646a75646960448201526431b0ba37b960d91b60648201526084015b60405180910390fd5b8281146102a55760405162461bcd60e51b815260206004820152602960248201527f7061727469636970616e7473206c656e6774682073686f756c6420657175616c6044820152682062616c616e63657360b81b606482015260840161023b565b60008581526001602052604090205460ff16156103125760405162461bcd60e51b815260206004820152602560248201527f747279696e6720746f2073657420616c726561647920736574746c6564206368604482015264185b9b995b60da1b606482015260840161023b565b600085815260208190526040812080549082905590808567ffffffffffffffff81111561034157610341610dad565b60405190808252806020026020018201604052801561036a578160200160208202803683370190505b50905060005b8681101561043e5760006103b58a8a8a8581811061039057610390610dc3565b90506020028101906103a29190610dd9565b6103b0906020810190610e0e565b610777565b9050808383815181106103ca576103ca610dc3565b6020026020010181815250506103fb600080838152602001908152602001600020548661076490919063ffffffff16565b945061042887878481811061041257610412610dc3565b905060200201358561076490919063ffffffff16565b935050808061043690610e41565b915050610370565b508183106104ae5760005b868110156104ac5785858281811061046357610463610dc3565b9050602002013560008084848151811061047f5761047f610dc3565b602002602001015181526020019081526020016000208190555080806104a490610e41565b915050610449565b505b6000888152600160208190526040808320805460ff19169092179091555189917fef898d6cd3395b6dfe67a3c1923e5c726c1b154e979fb0a25a9c41d0093168b891a25050505050505050565b823560009081526001602052604090205460ff166105515760405162461bcd60e51b815260206004820152601360248201527218da185b9b995b081b9bdd081cd95d1d1b1959606a1b604482015260640161023b565b6105c4836040516020016105659190610e6a565b60408051601f198184030181526020601f8601819004810284018101909252848352919085908590819084018382808284376000920191909152506105b1925050506020870187610dd9565b6105bf906020810190610e0e565b6107bc565b6106105760405162461bcd60e51b815260206004820152601d60248201527f7369676e617475726520766572696669636174696f6e206661696c6564000000604482015260640161023b565b600061062484356103a26020870187610dd9565b6000818152602081905260409020549091506060850135111561067e5760405162461bcd60e51b8152602060048201526012602482015271696e73756666696369656e742066756e647360701b604482015260640161023b565b60008181526020819052604090205461069b906060860135610845565b6000828152602081905260409020556106b5848484610851565b807fd0b6e7d0170f56c62f87de6a8a47a0ccf41c86ffb5084d399d8eb62e823f2a81606086018035906106eb9060408901610e0e565b604080519283526001600160a01b0390911660208301520160405180910390a250505050565b8034146107605760405162461bcd60e51b815260206004820152601f60248201527f77726f6e6720616d6f756e74206f662045544820666f72206465706f73697400604482015260640161023b565b5050565b60006107708284610f4d565b9392505050565b6000828260405160200161079e9291909182526001600160a01b0316602082015260400190565b60405160208183030381529060405280519060200120905092915050565b60008061081d85805190602001206040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b9050600061082b82866108a3565b6001600160a01b0390811690851614925050509392505050565b60006107708284610f65565b6108616060840160408501610e0e565b6001600160a01b03166108fc84606001359081150290604051600060405180830381858888f1935050505015801561089d573d6000803e3d6000fd5b50505050565b60008060006108b285856108c7565b915091506108bf81610935565b509392505050565b60008082516041036108fd5760208301516040840151606085015160001a6108f187828585610aee565b9450945050505061092e565b8251604003610926576020830151604084015161091b868383610bdb565b93509350505061092e565b506000905060025b9250929050565b600081600481111561094957610949610f7c565b036109515750565b600181600481111561096557610965610f7c565b036109b25760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161023b565b60028160048111156109c6576109c6610f7c565b03610a135760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161023b565b6003816004811115610a2757610a27610f7c565b03610a7f5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161023b565b6004816004811115610a9357610a93610f7c565b03610aeb5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b606482015260840161023b565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610b255750600090506003610bd2565b8460ff16601b14158015610b3d57508460ff16601c14155b15610b4e5750600090506004610bd2565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610ba2573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610bcb57600060019250925050610bd2565b9150600090505b94509492505050565b6000806001600160ff1b03831681610bf860ff86901c601b610f4d565b9050610c0687828885610aee565b935093505050935093915050565b60008060408385031215610c2757600080fd5b50508035926020909101359150565b60008083601f840112610c4857600080fd5b50813567ffffffffffffffff811115610c6057600080fd5b6020830191508360208260051b850101111561092e57600080fd5b600080600080600060608688031215610c9357600080fd5b85359450602086013567ffffffffffffffff80821115610cb257600080fd5b610cbe89838a01610c36565b90965094506040880135915080821115610cd757600080fd5b50610ce488828901610c36565b969995985093965092949392505050565b600060208284031215610d0757600080fd5b5035919050565b600080600060408486031215610d2357600080fd5b833567ffffffffffffffff80821115610d3b57600080fd5b9085019060808288031215610d4f57600080fd5b90935060208501359080821115610d6557600080fd5b818601915086601f830112610d7957600080fd5b813581811115610d8857600080fd5b876020828501011115610d9a57600080fd5b6020830194508093505050509250925092565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60008235603e19833603018112610def57600080fd5b9190910192915050565b6001600160a01b0381168114610aeb57600080fd5b600060208284031215610e2057600080fd5b813561077081610df9565b634e487b7160e01b600052601160045260246000fd5b600060018201610e5357610e53610e2b565b5060010190565b8035610e6581610df9565b919050565b602081528135602082015260006020830135603e19843603018112610e8e57600080fd5b6080604084015283018035610ea281610df9565b6001600160a01b031660a0840152602081013536829003601e19018112610ec857600080fd5b0160208101903567ffffffffffffffff811115610ee457600080fd5b803603821315610ef357600080fd5b604060c08501528060e08501526101008183828701376000818387010152610f1d60408701610e5a565b6001600160a01b03811660608701529250606095909501356080850152601f01601f191690920190920192915050565b60008219821115610f6057610f60610e2b565b500190565b600082821015610f7757610f77610e2b565b500390565b634e487b7160e01b600052602160045260246000fdfea2646970667358221220dea45cdf7eabfb0362894605f2b04ce28ac37ab4c50adf6c360fd904a7c797c364736f6c634300080f0033" diff --git a/bindings/peruntoken/PerunToken.go b/bindings/peruntoken/PerunToken.go index 8ebdfe0..8ab4868 100644 --- a/bindings/peruntoken/PerunToken.go +++ b/bindings/peruntoken/PerunToken.go @@ -26,6 +26,7 @@ var ( _ = common.Big1 _ = types.BloomLookup _ = event.NewSubscription + _ = abi.ConvertType ) // PeruntokenMetaData contains all meta data concerning the Peruntoken contract. @@ -156,11 +157,11 @@ func NewPeruntokenFilterer(address common.Address, filterer bind.ContractFiltere // bindPeruntoken binds a generic wrapper to an already deployed contract. func bindPeruntoken(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(PeruntokenABI)) + parsed, err := PeruntokenMetaData.GetAbi() if err != nil { return nil, err } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil } // Call invokes the (constant) contract method with params as input values and diff --git a/bindings/trivialapp/TrivialApp.go b/bindings/trivialapp/TrivialApp.go index 57b4a8a..70af383 100644 --- a/bindings/trivialapp/TrivialApp.go +++ b/bindings/trivialapp/TrivialApp.go @@ -26,34 +26,43 @@ var ( _ = common.Big1 _ = types.BloomLookup _ = event.NewSubscription + _ = abi.ConvertType ) // ChannelAllocation is an auto generated low-level Go binding around an user-defined struct. type ChannelAllocation struct { Assets []ChannelAsset + Backends []*big.Int Balances [][]*big.Int Locked []ChannelSubAlloc } // ChannelAsset is an auto generated low-level Go binding around an user-defined struct. type ChannelAsset struct { - ChainID *big.Int - Holder common.Address + ChainID *big.Int + EthHolder common.Address + CcHolder []byte } // ChannelParams is an auto generated low-level Go binding around an user-defined struct. type ChannelParams struct { ChallengeDuration *big.Int Nonce *big.Int - Participants []common.Address + Participants []ChannelParticipant App common.Address LedgerChannel bool VirtualChannel bool } +// ChannelParticipant is an auto generated low-level Go binding around an user-defined struct. +type ChannelParticipant struct { + EthAddress common.Address + CcAddress []byte +} + // ChannelState is an auto generated low-level Go binding around an user-defined struct. type ChannelState struct { - ChannelID [32]byte + ChannelID [][32]byte Version uint64 Outcome ChannelAllocation AppData []byte @@ -62,15 +71,15 @@ type ChannelState struct { // ChannelSubAlloc is an auto generated low-level Go binding around an user-defined struct. type ChannelSubAlloc struct { - ID [32]byte + ID [][32]byte Balances []*big.Int IndexMap []uint16 } // TrivialappMetaData contains all meta data concerning the Trivialapp contract. var TrivialappMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"challengeDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"participants\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"app\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"ledgerChannel\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"virtualChannel\",\"type\":\"bool\"}],\"internalType\":\"structChannel.Params\",\"name\":\"params\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"channelID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"}],\"internalType\":\"structChannel.Asset[]\",\"name\":\"assets\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"balances\",\"type\":\"uint256[][]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"ID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint16[]\",\"name\":\"indexMap\",\"type\":\"uint16[]\"}],\"internalType\":\"structChannel.SubAlloc[]\",\"name\":\"locked\",\"type\":\"tuple[]\"}],\"internalType\":\"structChannel.Allocation\",\"name\":\"outcome\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"appData\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"isFinal\",\"type\":\"bool\"}],\"internalType\":\"structChannel.State\",\"name\":\"from\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"channelID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"}],\"internalType\":\"structChannel.Asset[]\",\"name\":\"assets\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"balances\",\"type\":\"uint256[][]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"ID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint16[]\",\"name\":\"indexMap\",\"type\":\"uint16[]\"}],\"internalType\":\"structChannel.SubAlloc[]\",\"name\":\"locked\",\"type\":\"tuple[]\"}],\"internalType\":\"structChannel.Allocation\",\"name\":\"outcome\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"appData\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"isFinal\",\"type\":\"bool\"}],\"internalType\":\"structChannel.State\",\"name\":\"to\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"actorIdx\",\"type\":\"uint256\"}],\"name\":\"validTransition\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b5061011c806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c80636d7eba0d14602d575b600080fd5b603e60383660046057565b50505050565b005b600060a08284031215605157600080fd5b50919050565b60008060008060808587031215606c57600080fd5b843567ffffffffffffffff80821115608357600080fd5b9086019060c08289031215609657600080fd5b9094506020860135908082111560ab57600080fd5b60b5888389016040565b9450604087013591508082111560ca57600080fd5b5060d5878288016040565b94979396509394606001359350505056fea2646970667358221220b17a6a2d2be5ce04b000b481d81bcfd781fadfaa0cd797d14f2caed99a9c17e664736f6c634300080f0033", + ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"challengeDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"ethAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ccAddress\",\"type\":\"bytes\"}],\"internalType\":\"structChannel.Participant[]\",\"name\":\"participants\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"app\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"ledgerChannel\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"virtualChannel\",\"type\":\"bool\"}],\"internalType\":\"structChannel.Params\",\"name\":\"params\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"channelID\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"ethHolder\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ccHolder\",\"type\":\"bytes\"}],\"internalType\":\"structChannel.Asset[]\",\"name\":\"assets\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"backends\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"balances\",\"type\":\"uint256[][]\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"ID\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint16[]\",\"name\":\"indexMap\",\"type\":\"uint16[]\"}],\"internalType\":\"structChannel.SubAlloc[]\",\"name\":\"locked\",\"type\":\"tuple[]\"}],\"internalType\":\"structChannel.Allocation\",\"name\":\"outcome\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"appData\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"isFinal\",\"type\":\"bool\"}],\"internalType\":\"structChannel.State\",\"name\":\"from\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"channelID\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"ethHolder\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ccHolder\",\"type\":\"bytes\"}],\"internalType\":\"structChannel.Asset[]\",\"name\":\"assets\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"backends\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"balances\",\"type\":\"uint256[][]\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"ID\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint16[]\",\"name\":\"indexMap\",\"type\":\"uint16[]\"}],\"internalType\":\"structChannel.SubAlloc[]\",\"name\":\"locked\",\"type\":\"tuple[]\"}],\"internalType\":\"structChannel.Allocation\",\"name\":\"outcome\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"appData\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"isFinal\",\"type\":\"bool\"}],\"internalType\":\"structChannel.State\",\"name\":\"to\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"actorIdx\",\"type\":\"uint256\"}],\"name\":\"validTransition\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"}]", + Bin: "0x608060405234801561001057600080fd5b5061011c806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c806318dc6c0014602d575b600080fd5b603e60383660046057565b50505050565b005b600060a08284031215605157600080fd5b50919050565b60008060008060808587031215606c57600080fd5b843567ffffffffffffffff80821115608357600080fd5b9086019060c08289031215609657600080fd5b9094506020860135908082111560ab57600080fd5b60b5888389016040565b9450604087013591508082111560ca57600080fd5b5060d5878288016040565b94979396509394606001359350505056fea2646970667358221220e3a5ba7c9056e07ef923d220ac312c1d3ad685d3cad7ebb5a487bd290dfec78964736f6c634300080f0033", } // TrivialappABI is the input ABI used to generate the binding from. @@ -195,11 +204,11 @@ func NewTrivialappFilterer(address common.Address, filterer bind.ContractFiltere // bindTrivialapp binds a generic wrapper to an already deployed contract. func bindTrivialapp(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(TrivialappABI)) + parsed, err := TrivialappMetaData.GetAbi() if err != nil { return nil, err } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil } // Call invokes the (constant) contract method with params as input values and @@ -240,9 +249,9 @@ func (_Trivialapp *TrivialappTransactorRaw) Transact(opts *bind.TransactOpts, me return _Trivialapp.Contract.contract.Transact(opts, method, params...) } -// ValidTransition is a free data retrieval call binding the contract method 0x6d7eba0d. +// ValidTransition is a free data retrieval call binding the contract method 0x18dc6c00. // -// Solidity: function validTransition((uint256,uint256,address[],address,bool,bool) params, (bytes32,uint64,((uint256,address)[],uint256[][],(bytes32,uint256[],uint16[])[]),bytes,bool) from, (bytes32,uint64,((uint256,address)[],uint256[][],(bytes32,uint256[],uint16[])[]),bytes,bool) to, uint256 actorIdx) pure returns() +// Solidity: function validTransition((uint256,uint256,(address,bytes)[],address,bool,bool) params, (bytes32[],uint64,((uint256,address,bytes)[],uint256[],uint256[][],(bytes32[],uint256[],uint16[])[]),bytes,bool) from, (bytes32[],uint64,((uint256,address,bytes)[],uint256[],uint256[][],(bytes32[],uint256[],uint16[])[]),bytes,bool) to, uint256 actorIdx) pure returns() func (_Trivialapp *TrivialappCaller) ValidTransition(opts *bind.CallOpts, params ChannelParams, from ChannelState, to ChannelState, actorIdx *big.Int) error { var out []interface{} err := _Trivialapp.contract.Call(opts, &out, "validTransition", params, from, to, actorIdx) @@ -255,16 +264,16 @@ func (_Trivialapp *TrivialappCaller) ValidTransition(opts *bind.CallOpts, params } -// ValidTransition is a free data retrieval call binding the contract method 0x6d7eba0d. +// ValidTransition is a free data retrieval call binding the contract method 0x18dc6c00. // -// Solidity: function validTransition((uint256,uint256,address[],address,bool,bool) params, (bytes32,uint64,((uint256,address)[],uint256[][],(bytes32,uint256[],uint16[])[]),bytes,bool) from, (bytes32,uint64,((uint256,address)[],uint256[][],(bytes32,uint256[],uint16[])[]),bytes,bool) to, uint256 actorIdx) pure returns() +// Solidity: function validTransition((uint256,uint256,(address,bytes)[],address,bool,bool) params, (bytes32[],uint64,((uint256,address,bytes)[],uint256[],uint256[][],(bytes32[],uint256[],uint16[])[]),bytes,bool) from, (bytes32[],uint64,((uint256,address,bytes)[],uint256[],uint256[][],(bytes32[],uint256[],uint16[])[]),bytes,bool) to, uint256 actorIdx) pure returns() func (_Trivialapp *TrivialappSession) ValidTransition(params ChannelParams, from ChannelState, to ChannelState, actorIdx *big.Int) error { return _Trivialapp.Contract.ValidTransition(&_Trivialapp.CallOpts, params, from, to, actorIdx) } -// ValidTransition is a free data retrieval call binding the contract method 0x6d7eba0d. +// ValidTransition is a free data retrieval call binding the contract method 0x18dc6c00. // -// Solidity: function validTransition((uint256,uint256,address[],address,bool,bool) params, (bytes32,uint64,((uint256,address)[],uint256[][],(bytes32,uint256[],uint16[])[]),bytes,bool) from, (bytes32,uint64,((uint256,address)[],uint256[][],(bytes32,uint256[],uint16[])[]),bytes,bool) to, uint256 actorIdx) pure returns() +// Solidity: function validTransition((uint256,uint256,(address,bytes)[],address,bool,bool) params, (bytes32[],uint64,((uint256,address,bytes)[],uint256[],uint256[][],(bytes32[],uint256[],uint16[])[]),bytes,bool) from, (bytes32[],uint64,((uint256,address,bytes)[],uint256[],uint256[][],(bytes32[],uint256[],uint16[])[]),bytes,bool) to, uint256 actorIdx) pure returns() func (_Trivialapp *TrivialappCallerSession) ValidTransition(params ChannelParams, from ChannelState, to ChannelState, actorIdx *big.Int) error { return _Trivialapp.Contract.ValidTransition(&_Trivialapp.CallOpts, params, from, to, actorIdx) } diff --git a/bindings/trivialapp/TrivialAppBinRuntime.go b/bindings/trivialapp/TrivialAppBinRuntime.go index e444eb5..cf9f746 100644 --- a/bindings/trivialapp/TrivialAppBinRuntime.go +++ b/bindings/trivialapp/TrivialAppBinRuntime.go @@ -1,4 +1,4 @@ package trivialapp // import "github.com/perun-network/perun-eth-backend/bindings/trivialapp" // TrivialAppBinRuntime is the runtime part of the compiled bytecode used for deploying new contracts. -var TrivialAppBinRuntime = "6080604052348015600f57600080fd5b506004361060285760003560e01c80636d7eba0d14602d575b600080fd5b603e60383660046057565b50505050565b005b600060a08284031215605157600080fd5b50919050565b60008060008060808587031215606c57600080fd5b843567ffffffffffffffff80821115608357600080fd5b9086019060c08289031215609657600080fd5b9094506020860135908082111560ab57600080fd5b60b5888389016040565b9450604087013591508082111560ca57600080fd5b5060d5878288016040565b94979396509394606001359350505056fea2646970667358221220b17a6a2d2be5ce04b000b481d81bcfd781fadfaa0cd797d14f2caed99a9c17e664736f6c634300080f0033" +var TrivialAppBinRuntime = "6080604052348015600f57600080fd5b506004361060285760003560e01c806318dc6c0014602d575b600080fd5b603e60383660046057565b50505050565b005b600060a08284031215605157600080fd5b50919050565b60008060008060808587031215606c57600080fd5b843567ffffffffffffffff80821115608357600080fd5b9086019060c08289031215609657600080fd5b9094506020860135908082111560ab57600080fd5b60b5888389016040565b9450604087013591508082111560ca57600080fd5b5060d5878288016040565b94979396509394606001359350505056fea2646970667358221220e3a5ba7c9056e07ef923d220ac312c1d3ad685d3cad7ebb5a487bd290dfec78964736f6c634300080f0033" diff --git a/channel/adjudicator.go b/channel/adjudicator.go index fbac46f..96d7c31 100644 --- a/channel/adjudicator.go +++ b/channel/adjudicator.go @@ -114,12 +114,14 @@ func toEthSignedStates(subChannels []channel.SignedState) (ethSubChannels []adju State: ToEthState(x.State), Sigs: x.Sigs, } + log.Println("Subchannel", ethSubChannels[i].State.ChannelID, i) } return } func (a *Adjudicator) callConclude(ctx context.Context, req channel.AdjudicatorReq, subStates channel.StateMap) error { ethSubStates := toEthSubStates(req.Tx.State, subStates) + log.Println("Concluding channel", req.Params.ID, ethSubStates) conclude := func( opts *bind.TransactOpts, @@ -173,6 +175,7 @@ func (a *Adjudicator) call(ctx context.Context, req channel.AdjudicatorReq, fn a } _, err = a.ConfirmTransaction(ctx, tx, a.txSender) + log.Println("Transaction confirmed", err) if errors.Is(err, errTxTimedOut) { err = client.NewTxTimedoutError(txType.String(), tx.Hash().Hex(), err.Error()) } @@ -189,7 +192,7 @@ func ValidateAdjudicator(ctx context.Context, backend bind.ContractCaller, adjud // toEthSubStates generates a channel tree in depth-first order. func toEthSubStates(state *channel.State, subStates channel.StateMap) (ethSubStates []adjudicator.ChannelState) { for _, subAlloc := range state.Locked { - subState, ok := subStates[subAlloc.ID] + subState, ok := subStates[channel.IDKey(subAlloc.ID)] if !ok { log.Panic("sub-state not found") } diff --git a/channel/adjudicator_internal_test.go b/channel/adjudicator_internal_test.go index 1b3e895..881604c 100644 --- a/channel/adjudicator_internal_test.go +++ b/channel/adjudicator_internal_test.go @@ -38,13 +38,13 @@ func Test_toEthSubStates(t *testing.T) { { title: "nil map gives nil slice", setup: func() (state *channel.State, subStates channel.StateMap, expected []adjudicator.ChannelState) { - return channeltest.NewRandomState(rng), nil, nil + return channeltest.NewRandomState(rng, channeltest.WithBackend(1)), nil, nil }, }, { title: "fresh map gives nil slice", setup: func() (state *channel.State, subStates channel.StateMap, expected []adjudicator.ChannelState) { - return channeltest.NewRandomState(rng), nil, nil + return channeltest.NewRandomState(rng, channeltest.WithBackend(1)), nil, nil }, }, { @@ -84,7 +84,7 @@ func Test_toEthSubStates(t *testing.T) { func genStates(rng *rand.Rand, n int) (states []*channel.State) { states = make([]*channel.State, n) for i := range states { - states[i] = channeltest.NewRandomState(rng) + states[i] = channeltest.NewRandomState(rng, channeltest.WithBackend(1)) } return } diff --git a/channel/adjudicator_test.go b/channel/adjudicator_test.go index 60f1158..6f42ef7 100644 --- a/channel/adjudicator_test.go +++ b/channel/adjudicator_test.go @@ -16,6 +16,7 @@ package channel_test import ( "context" + "perun.network/go-perun/wallet" "testing" "time" @@ -33,7 +34,7 @@ import ( pkgtest "polycry.pt/poly-go/test" ) -const defaultTxTimeout = 2 * time.Second +const defaultTxTimeout = 8 * time.Second func testSignState(t *testing.T, accounts []*keystore.Account, state *channel.State) channel.Transaction { t.Helper() @@ -66,6 +67,7 @@ func TestSubscribeRegistered(t *testing.T) { rng, channeltest.WithChallengeDuration(uint64(100*time.Second)), channeltest.WithParts(s.Parts), + channeltest.WithBackend(1), channeltest.WithAssets(s.Asset), channeltest.WithIsFinal(false), channeltest.WithLedgerChannel(true), @@ -91,7 +93,7 @@ func TestSubscribeRegistered(t *testing.T) { tx := testSignState(t, s.Accs, state) req := channel.AdjudicatorReq{ Params: params, - Acc: s.Accs[0], + Acc: map[wallet.BackendID]wallet.Account{1: s.Accs[0]}, Idx: channel.Index(0), Tx: tx, } diff --git a/channel/backend.go b/channel/backend.go index 6e0f3e1..bdd468e 100644 --- a/channel/backend.go +++ b/channel/backend.go @@ -45,6 +45,7 @@ var ( abiUint256, _ = abi.NewType("uint256", "", nil) abiAddress, _ = abi.NewType("address", "", nil) abiBytes32, _ = abi.NewType("bytes32", "", nil) + abiBytes, _ = abi.NewType("bytes", "", nil) abiParams abi.Type abiState abi.Type abiProgress abi.Method @@ -177,8 +178,18 @@ func ToEthParams(p *channel.Params) adjudicator.ChannelParams { // ToEthState converts a channel.State to a ChannelState struct. func ToEthState(s *channel.State) adjudicator.ChannelState { + backends := make([]*big.Int, len(s.Allocation.Assets)) + channelIDs := make([]channel.ID, len(s.Allocation.Assets)) + for i := range s.Allocation.Assets { // we assume that for each asset there is an element in backends corresponding to the backendID the asset belongs to. + backends[i] = big.NewInt(int64(s.Allocation.Backends[i])) + channelIDs[i] = s.ID[s.Allocation.Backends[i]] + } locked := make([]adjudicator.ChannelSubAlloc, len(s.Locked)) for i, sub := range s.Locked { + subIDs := make([]channel.ID, len(backends)) + for j := range subIDs { + subIDs[j] = sub.ID[s.Allocation.Backends[j]] + } // Create index map. indexMap := make([]uint16, s.NumParts()) if len(sub.IndexMap) == 0 { @@ -191,10 +202,11 @@ func ToEthState(s *channel.State) adjudicator.ChannelState { } } - locked[i] = adjudicator.ChannelSubAlloc{ID: sub.ID, Balances: sub.Bals, IndexMap: indexMap} + locked[i] = adjudicator.ChannelSubAlloc{ID: subIDs, Balances: sub.Bals, IndexMap: indexMap} } outcome := adjudicator.ChannelAllocation{ - Assets: assetsToEthAssets(s.Allocation.Assets), + Assets: assetsToEthAssets(s.Allocation.Assets, s.Allocation.Backends), + Backends: backends, Balances: s.Balances, Locked: locked, } @@ -207,7 +219,7 @@ func ToEthState(s *channel.State) adjudicator.ChannelState { log.Panicf("error encoding app data: %v", err) } return adjudicator.ChannelState{ - ChannelID: s.ID, + ChannelID: channelIDs, Version: s.Version, Outcome: outcome, AppData: appData, @@ -230,28 +242,50 @@ func EncodeState(state *adjudicator.ChannelState) ([]byte, error) { } // pwToCommonAddresses converts an array of perun/ethwallet.Addresses to common.Addresses. -func pwToCommonAddresses(addr []map[int]wallet.Address) []common.Address { - cAddrs := make([]common.Address, len(addr)) +func pwToCommonAddresses(addr []map[wallet.BackendID]wallet.Address) []adjudicator.ChannelParticipant { + cAddrs := make([]adjudicator.ChannelParticipant, len(addr)) for i, part := range addr { - cAddrs[i] = ethwallet.AsEthAddr(part[1]) + for j, address := range part { + if address.BackendID() == 1 && j == 1 { + cAddrs[i].EthAddress = ethwallet.AsEthAddr(address) + cAddrs[i].CcAddress = make([]byte, 0) + } else { + addBytes, err := address.MarshalBinary() + if err != nil { + log.Panicf("error encoding unknown address: %v", err) + } + cAddrs[i].CcAddress = addBytes + } + } } return cAddrs } // FromEthState converts a ChannelState to a channel.State struct. func FromEthState(app channel.App, s *adjudicator.ChannelState) channel.State { + channelIDs := make(map[wallet.BackendID]channel.ID) + backends := make([]wallet.BackendID, len(s.Outcome.Backends)) + for i, b := range s.Outcome.Backends { + backends[i] = wallet.BackendID(b.Int64()) + channelIDs[backends[i]] = s.ChannelID[i] + } locked := make([]channel.SubAlloc, len(s.Outcome.Locked)) for i, sub := range s.Outcome.Locked { + subIDs := make(map[wallet.BackendID]channel.ID) + for j := range s.Outcome.Backends { + subIDs[backends[j]] = sub.ID[j] + } indexMap := makeIndexMap(sub.IndexMap) - locked[i] = *channel.NewSubAlloc(sub.ID, sub.Balances, indexMap) + locked[i] = *channel.NewSubAlloc(subIDs, sub.Balances, indexMap) } alloc := channel.Allocation{ - Assets: fromEthAssets(s.Outcome.Assets), + Assets: fromEthAssets(s.Outcome.Assets, backends), Balances: s.Outcome.Balances, + Backends: backends, Locked: locked, } // Check allocation dimensions - if len(alloc.Assets) != len(alloc.Balances) || len(s.Outcome.Balances) != len(alloc.Balances) { + if len(alloc.Assets) != len(alloc.Balances) || len(s.Outcome.Balances) != len(alloc.Balances) || len(alloc.Backends) != len(alloc.Assets) { log.Panic("invalid allocation dimensions") } @@ -261,7 +295,7 @@ func FromEthState(app channel.App, s *adjudicator.ChannelState) channel.State { } return channel.State{ - ID: s.ChannelID, + ID: channelIDs, Version: s.Version, Allocation: alloc, App: app, @@ -279,25 +313,47 @@ func makeIndexMap(m []uint16) []channel.Index { } // assetsToEthAssets converts an array of Assets to adjudicator.ChannelAsset. -func assetsToEthAssets(assets []channel.Asset) []adjudicator.ChannelAsset { +func assetsToEthAssets(assets []channel.Asset, bIDs []wallet.BackendID) []adjudicator.ChannelAsset { cAddrs := make([]adjudicator.ChannelAsset, len(assets)) for i, a := range assets { - asset, ok := a.(*Asset) - if !ok { - log.Panicf("wrong address type: %T", asset) - } - cAddrs[i] = adjudicator.ChannelAsset{ - ChainID: asset.ChainID.Int, - Holder: asset.EthAddress(), + // This means the Asset was defined in this backend. + if bIDs[i] == 1 { + asset, ok := a.(*Asset) + if !ok { + log.Panicf("wrong address type: %T", asset) + } + cAddrs[i] = adjudicator.ChannelAsset{ + ChainID: asset.ChainID.Int, + EthHolder: asset.EthAddress(), + CcHolder: make([]byte, 0), + } + } else { + asset, err := a.MarshalBinary() + if err != nil { + log.Panicf("error encoding asset: %v", err) + } + cAddrs[i] = adjudicator.ChannelAsset{ + ChainID: big.NewInt(0), + EthHolder: common.HexToAddress("0x0000000000000000000000000000000000000000"), + CcHolder: asset, + } } } return cAddrs } -func fromEthAssets(assets []adjudicator.ChannelAsset) []channel.Asset { +func fromEthAssets(assets []adjudicator.ChannelAsset, bIDs []wallet.BackendID) []channel.Asset { _assets := make([]channel.Asset, len(assets)) for i, a := range assets { - _assets[i] = NewAsset(a.ChainID, a.Holder) + if bIDs[i] == 1 { + _assets[i] = NewAsset(a.ChainID, a.EthHolder) + } else { + _assets[i] = &Asset{} + err := _assets[i].UnmarshalBinary(a.CcHolder) + if err != nil { + log.Panicf("error decoding asset: %v", err) + } + } } return _assets } diff --git a/channel/backend_test.go b/channel/backend_test.go index ae89986..d3493fa 100644 --- a/channel/backend_test.go +++ b/channel/backend_test.go @@ -132,8 +132,8 @@ func newChannelSetup(rng *rand.Rand) *test.Setup { params, state := test.NewRandomParamsAndState(rng, test.WithNumLocked(int(rng.Int31n(4)+1)), test.WithBackend(1)) params2, state2 := test.NewRandomParamsAndState(rng, test.WithIsFinal(!state.IsFinal), test.WithNumLocked(int(rng.Int31n(4)+1)), test.WithBackend(1)) - createAddr := func() map[int]perunwallet.Address { - return map[int]perunwallet.Address{1: wallettest.NewRandomAddress(rng)} + createAddr := func() map[perunwallet.BackendID]perunwallet.Address { + return map[perunwallet.BackendID]perunwallet.Address{1: wallettest.NewRandomAddress(rng)} } return &test.Setup{ diff --git a/channel/conclude.go b/channel/conclude.go index d4b6d50..fa5862d 100644 --- a/channel/conclude.go +++ b/channel/conclude.go @@ -17,6 +17,7 @@ package channel import ( "context" "fmt" + "perun.network/go-perun/wallet" "github.com/ethereum/go-ethereum" "github.com/ethereum/go-ethereum/core/types" @@ -73,7 +74,7 @@ func (a *Adjudicator) ensureConcluded(ctx context.Context, req channel.Adjudicat } // Wait for concluded event. - sub, events, subErr, err := a.createEventSub(ctx, req.Tx.ID, false) + sub, events, subErr, err := a.createEventSub(ctx, req.Tx.ID[1], false) if err != nil { return errors.WithMessage(err, "subscribing") } @@ -116,11 +117,12 @@ func (a *Adjudicator) checkConcludedState( events := make(chan *subscription.Event, adjEventBuffSize) subErr := make(chan error, 1) for id := range states { + cId := channel.FromIDKey(id) sub, err := subscription.Subscribe( ctx, a.ContractBackend, a.bound, - updateEventType(id), + updateEventType(cId[1]), startBlockOffset, a.txFinalityDepth, ) @@ -138,9 +140,10 @@ func (a *Adjudicator) checkConcludedState( for { select { case e := <-events: + fmt.Println("Event: ", e) if adjEvent, ok := e.Data.(*adjudicator.AdjudicatorChannelUpdate); ok && adjEvent.Phase == phaseConcluded { id := adjEvent.ChannelID - v := states[id].Version + v := states[channel.IDKey(channel.IDMap{1: id})].Version if adjEvent.Version != v { return errors.Errorf("wrong version: expected %v, got %v", v, adjEvent.Version) } @@ -167,7 +170,7 @@ func (a *Adjudicator) waitConcludedSecondary(ctx context.Context, req channel.Ad // `secondaryWaitBlocks + TxFinalityDepth` many blocks. if req.Tx.IsFinal && req.Secondary { // Create subscription. - sub, events, subErr, err := a.createEventSub(ctx, req.Tx.ID, false) + sub, events, subErr, err := a.createEventSub(ctx, req.Tx.ID[1], false) if err != nil { return false, errors.WithMessage(err, "subscribing") } @@ -182,7 +185,7 @@ func (a *Adjudicator) waitConcludedSecondary(ctx context.Context, req channel.Ad func (a *Adjudicator) conclude(ctx context.Context, req channel.AdjudicatorReq, subStates channel.StateMap) error { // If the on-chain state resulted from forced execution, we do not have a fully-signed state and cannot call concludeFinal. - forceExecuted, err := a.isForceExecuted(ctx, req.Params.ID()) + forceExecuted, err := a.isForceExecuted(ctx, req.Params.ID()[1]) if err != nil { return errors.WithMessage(err, "checking force execution") } @@ -200,8 +203,8 @@ func (a *Adjudicator) conclude(ctx context.Context, req channel.AdjudicatorReq, } // isConcluded returns whether a channel is already concluded. -func (a *Adjudicator) isConcluded(ctx context.Context, ch channel.ID) (bool, error) { - sub, events, subErr, err := a.createEventSub(ctx, ch, true) +func (a *Adjudicator) isConcluded(ctx context.Context, ch map[wallet.BackendID]channel.ID) (bool, error) { + sub, events, subErr, err := a.createEventSub(ctx, ch[1], true) if err != nil { return false, errors.WithMessage(err, "subscribing") } @@ -262,7 +265,7 @@ func (a *Adjudicator) waitConcludable(ctx context.Context, req channel.Adjudicat return nil } - sub, events, subErr, err := a.createEventSub(ctx, req.Tx.ID, true) + sub, events, subErr, err := a.createEventSub(ctx, req.Tx.ID[1], true) if err != nil { return errors.WithMessage(err, "subscribing") } diff --git a/channel/conclude_test.go b/channel/conclude_test.go index a6ed45f..afed400 100644 --- a/channel/conclude_test.go +++ b/channel/conclude_test.go @@ -50,6 +50,7 @@ func testConcludeFinal(t *testing.T, numParts int) { rng, channeltest.WithParts(s.Parts), channeltest.WithAssets(s.Asset), + channeltest.WithBackend(1), channeltest.WithIsFinal(true), channeltest.WithLedgerChannel(true), ) @@ -77,12 +78,12 @@ func testConcludeFinal(t *testing.T, numParts int) { go ct.StageN("register", numParts, func(t pkgtest.ConcT) { req := channel.AdjudicatorReq{ Params: params, - Acc: s.Accs[i], + Acc: map[wallet.BackendID]wallet.Account{1: s.Accs[i]}, Idx: channel.Index(i), Tx: tx, Secondary: (i != initiator), } - diff, err := test.NonceDiff(s.Accs[i].Address()[1], s.Adjs[i], func() error { + diff, err := test.NonceDiff(s.Accs[i].Address(), s.Adjs[i], func() error { return s.Adjs[i].Register(ctx, req, nil) }) require.NoError(t, err, "Withdrawing should succeed") @@ -105,7 +106,7 @@ func TestAdjudicator_ConcludeWithSubChannels(t *testing.T) { numParts = 2 maxCountSubChannels = 3 maxCountSubSubChannels = 3 - minFundingTXBlocksTimeout = 200 + minFundingTXBlocksTimeout = 600 minChallengeDuration = minFundingTXBlocksTimeout maxChallengeDuration = 3600 challengeDurationSpread = maxChallengeDuration - minChallengeDuration @@ -174,7 +175,7 @@ func TestAdjudicator_ConcludeWithSubChannels(t *testing.T) { func toSubChannelsRecursive(ch paramsAndState, m channelMap) (states []paramsAndState) { for _, x := range ch.state.Locked { - ch, ok := m[x.ID] + ch, ok := m[x.ID[1]] if !ok { panic("sub-state not found") } @@ -189,7 +190,7 @@ type channelMap map[channel.ID]paramsAndState func (m channelMap) Add(states ...paramsAndState) { for _, s := range states { - m[s.state.ID] = s + m[s.state.ID[1]] = s } } @@ -198,11 +199,12 @@ type paramsAndState struct { state *channel.State } -func makeRandomChannel(rng *rand.Rand, participants []map[int]wallet.Address, asset channel.Asset, challengeDuration uint64, ledger bool) paramsAndState { +func makeRandomChannel(rng *rand.Rand, participants []map[wallet.BackendID]wallet.Address, asset channel.Asset, challengeDuration uint64, ledger bool) paramsAndState { params, state := channeltest.NewRandomParamsAndState( rng, channeltest.WithParts(participants), channeltest.WithAssets(asset), + channeltest.WithBackend(1), channeltest.WithIsFinal(false), channeltest.WithNumLocked(0), channeltest.WithoutApp(), @@ -255,7 +257,7 @@ func register(ctx context.Context, adj *test.SimAdjudicator, accounts []*keystor req := channel.AdjudicatorReq{ Params: ch.params, - Acc: accounts[0], + Acc: map[wallet.BackendID]wallet.Account{1: accounts[0]}, Idx: 0, Tx: tx, Secondary: false, @@ -278,7 +280,7 @@ func withdraw(ctx context.Context, adj *test.SimAdjudicator, accounts []*keystor for i, a := range accounts { req := channel.AdjudicatorReq{ Params: c.params, - Acc: a, + Acc: map[wallet.BackendID]wallet.Account{1: a}, Idx: channel.Index(i), Tx: tx, Secondary: i != 0, diff --git a/channel/contractbackend_test.go b/channel/contractbackend_test.go index 6d81714..36e7933 100644 --- a/channel/contractbackend_test.go +++ b/channel/contractbackend_test.go @@ -41,36 +41,36 @@ func fromEthAddr(a common.Address) wallet.Address { func Test_calcFundingIDs(t *testing.T) { tests := []struct { name string - participants []map[int]wallet.Address - channelID [32]byte + participants []map[wallet.BackendID]wallet.Address + channelID map[wallet.BackendID][32]byte want [][32]byte }{ - {"Test nil array, empty channelID", nil, [32]byte{}, make([][32]byte, 0)}, - {"Test nil array, non-empty channelID", nil, [32]byte{1}, make([][32]byte, 0)}, - {"Test empty array, non-empty channelID", []map[int]wallet.Address{}, [32]byte{1}, make([][32]byte, 0)}, + {"Test nil array, empty channelID", nil, map[wallet.BackendID][32]byte{}, make([][32]byte, 0)}, + {"Test nil array, non-empty channelID", nil, map[wallet.BackendID][32]byte{1: {1}}, make([][32]byte, 0)}, + {"Test empty array, non-empty channelID", []map[wallet.BackendID]wallet.Address{}, map[wallet.BackendID][32]byte{1: {1}}, make([][32]byte, 0)}, // Tests based on actual data from contracts. { name: "Test non-empty array, empty channelID", - participants: []map[int]wallet.Address{{1: ðwallet.Address{}}}, + participants: []map[wallet.BackendID]wallet.Address{{1: ðwallet.Address{}}}, want: [][32]byte{{173, 50, 40, 182, 118, 247, 211, 205, 66, 132, 165, 68, 63, 23, 241, 150, 43, 54, 228, 145, 179, 10, 64, 178, 64, 88, 73, 229, 151, 186, 95, 181}}, }, { "Test non-empty array, non-empty channelID", - []map[int]wallet.Address{{1: ðwallet.Address{}}}, - [32]byte{1}, + []map[wallet.BackendID]wallet.Address{{1: ðwallet.Address{}}}, + map[wallet.BackendID][32]byte{1: {1}}, [][32]byte{{130, 172, 39, 157, 178, 106, 32, 109, 155, 165, 169, 76, 7, 255, 148, 10, 234, 75, 59, 253, 232, 130, 14, 201, 95, 78, 250, 10, 207, 208, 213, 188}}, }, { "Test non-empty array, non-empty channelID", - []map[int]wallet.Address{{1: fromEthAddr(common.BytesToAddress([]byte{}))}}, - [32]byte{1}, + []map[wallet.BackendID]wallet.Address{{1: fromEthAddr(common.BytesToAddress([]byte{}))}}, + map[wallet.BackendID][32]byte{1: {1}}, [][32]byte{{130, 172, 39, 157, 178, 106, 32, 109, 155, 165, 169, 76, 7, 255, 148, 10, 234, 75, 59, 253, 232, 130, 14, 201, 95, 78, 250, 10, 207, 208, 213, 188}}, }, } for _, _tt := range tests { tt := _tt t.Run(tt.name, func(t *testing.T) { - got := ethchannel.FundingIDs(tt.channelID, tt.participants...) + got := ethchannel.FundingIDs(tt.channelID[1], tt.participants...) assert.Equal(t, got, tt.want, "FundingIDs not as expected") }) } diff --git a/channel/funder.go b/channel/funder.go index 152a558..62909a9 100644 --- a/channel/funder.go +++ b/channel/funder.go @@ -158,7 +158,7 @@ func (f *Funder) Fund(ctx context.Context, request channel.FundingReq) error { // Fund each asset, saving the TX in `txs` and the errors in `errg`. assets := request.State.Assets - txs, errg := f.fundAssets(ctx, assets, channelID, request) + txs, errg := f.fundAssets(ctx, assets, channelID[1], request) // Wait for the TXs to be mined. for a, asset := range assets { @@ -539,7 +539,7 @@ func partIdx(partID [32]byte, fundingIDs [][32]byte) int { // FundingIDs returns a slice the same size as the number of passed participants // where each entry contains the hash Keccak256(channel id || participant address). -func FundingIDs(channelID channel.ID, participants ...map[int]perunwallet.Address) [][32]byte { +func FundingIDs(channelID channel.ID, participants ...map[perunwallet.BackendID]perunwallet.Address) [][32]byte { ids := make([][32]byte, len(participants)) for idx, pID := range participants { address, ok := pID[1].(*wallet.Address) diff --git a/channel/funder_test.go b/channel/funder_test.go index 31649c7..013e5a0 100644 --- a/channel/funder_test.go +++ b/channel/funder_test.go @@ -209,7 +209,7 @@ func testEgoisticParticipantFunding(t *testing.T) { t.Parallel() n := 2 rng := pkgtest.Prng(t, n) - EgoisticTxTimeout := 20 * time.Second + EgoisticTxTimeout := 30 * time.Second ctx, cancel := context.WithTimeout(context.Background(), EgoisticTxTimeout*time.Duration(n)) defer cancel() _, funders, params, alloc := newNFunders(ctx, t, rng, n) @@ -433,7 +433,7 @@ func newNFunders( rng *rand.Rand, n int, ) ( - parts []map[int]wallet.Address, + parts []map[wallet.BackendID]wallet.Address, funders []*ethchannel.Funder, params *channel.Params, allocation *channel.Allocation, @@ -471,11 +471,11 @@ func newNFunders( t.Logf("asset holder #2 address is %s", assetAddr2.Hex()) asset2 := ethchannel.NewAsset(chainID, assetAddr2) - parts = make([]map[int]wallet.Address, n) + parts = make([]map[wallet.BackendID]wallet.Address, n) funders = make([]*ethchannel.Funder, n) for i := range parts { acc := ksWallet.NewRandomAccount(rng).(*keystore.Account).Account - parts[i] = map[int]wallet.Address{1: ethwallet.AsWalletAddr(acc.Address)} + parts[i] = map[wallet.BackendID]wallet.Address{1: ethwallet.AsWalletAddr(acc.Address)} simBackend.FundAddress(ctx, ethwallet.AsEthAddr(parts[i][1])) err = fundERC20(ctx, cb, *tokenAcc, ethwallet.AsEthAddr(parts[i][1]), token, *asset2) @@ -507,10 +507,12 @@ func newNFunders( // fundERC20 funds `to` with ERC20 tokens from account `from`. func fundERC20(ctx context.Context, cb ethchannel.ContractBackend, from accounts.Account, to common.Address, token common.Address, asset ethchannel.Asset) error { + fmt.Println("Funding ERC20") contract, err := peruntoken.NewPeruntoken(token, cb) if err != nil { return errors.WithMessagef(err, "binding AssetHolderERC20 contract at: %v", asset) } + fmt.Println("Contract created") // Transfer. opts, err := cb.NewTransactor(ctx, txERC20GasLimit, from) if err != nil { @@ -542,7 +544,7 @@ func compareOnChainAlloc(ctx context.Context, params *channel.Params, balances c } func onChainAllocation(ctx context.Context, cb *ethchannel.ContractBackend, params *channel.Params, _assets []channel.Asset) (channel.Balances, error) { - partIDs := ethchannel.FundingIDs(params.ID(), params.Parts...) + partIDs := ethchannel.FundingIDs(params.ID()[1], params.Parts...) alloc := make(channel.Balances, len(_assets)) for k, asset := range _assets { diff --git a/channel/init_test.go b/channel/init_test.go index 3322f41..0ac2460 100644 --- a/channel/init_test.go +++ b/channel/init_test.go @@ -27,7 +27,7 @@ const ( TxFinalityDepthMin = 1 TxFinalityDepthMax = 10 - defaultTestTimeout = 10 * time.Second + defaultTestTimeout = 30 * time.Second blockInterval = 50 * time.Millisecond ) diff --git a/channel/register.go b/channel/register.go index 50470b1..036af44 100644 --- a/channel/register.go +++ b/channel/register.go @@ -16,6 +16,7 @@ package channel import ( "context" + "perun.network/go-perun/log" "github.com/pkg/errors" @@ -36,6 +37,7 @@ func (a *Adjudicator) Register(ctx context.Context, req channel.AdjudicatorReq, func (a *Adjudicator) registerFinal(ctx context.Context, req channel.AdjudicatorReq) error { // In the case of final states, we already call concludeFinal on the // adjudicator. Method ensureConcluded calls concludeFinal for final states. + log.Println("Registering final state", req) if err := a.ensureConcluded(ctx, req, nil); err != nil { return errors.WithMessage(err, "ensuring Concluded") } diff --git a/channel/register_test.go b/channel/register_test.go index ab1a702..446c7b9 100644 --- a/channel/register_test.go +++ b/channel/register_test.go @@ -17,6 +17,7 @@ package channel_test import ( "context" "fmt" + "perun.network/go-perun/wallet" "sync" "testing" "time" @@ -54,6 +55,7 @@ func registerMultiple(t *testing.T, numParts int, parallel bool) { params, state := channeltest.NewRandomParamsAndState( rng, channeltest.WithChallengeDuration(uint64(100*time.Second)), + channeltest.WithBackend(1), channeltest.WithParts(s.Parts), channeltest.WithAssets(s.Asset), channeltest.WithIsFinal(false), @@ -150,6 +152,7 @@ func TestRegister_FinalState(t *testing.T) { params, state := channeltest.NewRandomParamsAndState( rng, channeltest.WithChallengeDuration(uint64(100*time.Second)), + channeltest.WithBackend(1), channeltest.WithParts(s.Parts), channeltest.WithAssets(s.Asset), channeltest.WithIsFinal(true), @@ -173,7 +176,7 @@ func TestRegister_FinalState(t *testing.T) { tx := testSignState(t, s.Accs, state) req := channel.AdjudicatorReq{ Params: params, - Acc: s.Accs[0], + Acc: map[wallet.BackendID]wallet.Account{1: s.Accs[0]}, Idx: channel.Index(0), Tx: tx, } @@ -192,6 +195,7 @@ func TestRegister_CancelledContext(t *testing.T) { params, state := channeltest.NewRandomParamsAndState( rng, channeltest.WithChallengeDuration(uint64(100*time.Second)), + channeltest.WithBackend(1), channeltest.WithParts(s.Parts), channeltest.WithAssets(s.Asset), channeltest.WithIsFinal(false), @@ -216,7 +220,7 @@ func TestRegister_CancelledContext(t *testing.T) { tx := testSignState(t, s.Accs, state) req := channel.AdjudicatorReq{ Params: params, - Acc: s.Accs[0], + Acc: map[wallet.BackendID]wallet.Account{1: s.Accs[0]}, Idx: channel.Index(0), Tx: tx, } diff --git a/channel/reorg_test.go b/channel/reorg_test.go index 6db21c4..2cb84db 100644 --- a/channel/reorg_test.go +++ b/channel/reorg_test.go @@ -33,7 +33,7 @@ const sendTXsBlockLen = 2 // It checks the assumptions that we make about how go-ethereum handles // chain reorganizations. func TestSimBackend_Reorg(t *testing.T) { - ctx, cancel := context.WithTimeout(context.Background(), 20*time.Second) + ctx, cancel := context.WithTimeout(context.Background(), 40*time.Second) defer cancel() txFinalityDepth := uint64(1) diff --git a/channel/subscription.go b/channel/subscription.go index 480624d..96c8c70 100644 --- a/channel/subscription.go +++ b/channel/subscription.go @@ -18,6 +18,7 @@ import ( "context" "log" "math/big" + perunwallet "perun.network/go-perun/wallet" "github.com/ethereum/go-ethereum" "github.com/ethereum/go-ethereum/accounts/abi" @@ -33,14 +34,14 @@ import ( ) // Subscribe returns a new AdjudicatorSubscription to adjudicator events. -func (a *Adjudicator) Subscribe(ctx context.Context, chID channel.ID) (channel.AdjudicatorSubscription, error) { +func (a *Adjudicator) Subscribe(ctx context.Context, chID map[perunwallet.BackendID]channel.ID) (channel.AdjudicatorSubscription, error) { subErr := make(chan error, 1) events := make(chan *subscription.Event, adjEventBuffSize) eFact := func() *subscription.Event { return &subscription.Event{ Name: bindings.Events.AdjChannelUpdate, Data: new(adjudicator.AdjudicatorChannelUpdate), - Filter: [][]interface{}{{chID}}, + Filter: [][]interface{}{{chID[1]}}, } } sub, err := subscription.Subscribe(ctx, a.ContractBackend, a.bound, eFact, startBlockOffset, a.txFinalityDepth) @@ -77,6 +78,7 @@ evloop: for { select { case _next := <-events: + log.Println("Received event", _next.Data, _next.Log.TxHash) err := r.processNext(ctx, a, _next) if err != nil { r.err <- err @@ -251,11 +253,18 @@ type registerCallData struct { func (args *registerCallData) signedState(id channel.ID) (*adjudicator.AdjudicatorSignedState, bool) { ch := &args.Channel - if ch.State.ChannelID == id { + var idx int + // check which channelID we want to compare + for i, b := range ch.State.Outcome.Backends { + if b.Cmp(big.NewInt(1)) == 0 { + idx = i + } + } + if ch.State.ChannelID[idx] == id { return ch, true } for _, ch := range args.SubChannels { - if ch.State.ChannelID == id { + if ch.State.ChannelID[idx] == id { return &ch, true } } diff --git a/channel/test/adjudicator.go b/channel/test/adjudicator.go index 2e8884a..5fee8d1 100644 --- a/channel/test/adjudicator.go +++ b/channel/test/adjudicator.go @@ -17,6 +17,7 @@ package test import ( "context" "fmt" + "perun.network/go-perun/wallet" "time" "github.com/ethereum/go-ethereum/accounts" @@ -55,7 +56,7 @@ func NewSimAdjudicator(backend ethchannel.ContractBackend, contract common.Addre // Subscribe returns a RegisteredEvent subscription on the simulated // blockchain backend. -func (a *SimAdjudicator) Subscribe(ctx context.Context, chID channel.ID) (channel.AdjudicatorSubscription, error) { +func (a *SimAdjudicator) Subscribe(ctx context.Context, chID map[wallet.BackendID]channel.ID) (channel.AdjudicatorSubscription, error) { sub, err := a.Adjudicator.Subscribe(ctx, chID) if err != nil { return nil, err diff --git a/channel/test/fund.go b/channel/test/fund.go index 79cb35b..9172e17 100644 --- a/channel/test/fund.go +++ b/channel/test/fund.go @@ -26,7 +26,7 @@ import ( ) // waitTime is the time to wait before funding a channel when the funder is not egoistic. -const waitTime = 2 * time.Second +const waitTime = 4 * time.Second // FunderFinishTime is the returned type of FundAll which includes the process time of each funder. type FunderFinishTime struct { diff --git a/channel/test/setup.go b/channel/test/setup.go index 5d50a4d..bb9b63c 100644 --- a/channel/test/setup.go +++ b/channel/test/setup.go @@ -50,12 +50,12 @@ type ( // Setup holds a complete test setup for channel backend testing. Setup struct { SimSetup - Accs []*keystore.Account // on-chain funders and channel participant accounts - Parts []map[int]wallet.Address // channel participants - Recvs []map[int]*ethwallet.Address // on-chain receivers of withdrawn funds - Funders []*ethchannel.Funder // funders, bound to respective account - Adjs []*SimAdjudicator // adjudicator, withdrawal bound to respecive receivers - Asset *ethchannel.Asset // the asset + Accs []*keystore.Account // on-chain funders and channel participant accounts + Parts []map[wallet.BackendID]wallet.Address // channel participants + Recvs []map[wallet.BackendID]*ethwallet.Address // on-chain receivers of withdrawn funds + Funders []*ethchannel.Funder // funders, bound to respective account + Adjs []*SimAdjudicator // adjudicator, withdrawal bound to respecive receivers + Asset *ethchannel.Asset // the asset } ) @@ -101,8 +101,8 @@ func NewSetup(t *testing.T, rng *rand.Rand, n int, blockInterval time.Duration, s := &Setup{ SimSetup: *NewSimSetup(t, rng, txFinalityDepth, blockInterval), Accs: make([]*keystore.Account, n), - Parts: make([]map[int]wallet.Address, n), - Recvs: make([]map[int]*ethwallet.Address, n), + Parts: make([]map[wallet.BackendID]wallet.Address, n), + Recvs: make([]map[wallet.BackendID]*ethwallet.Address, n), Funders: make([]*ethchannel.Funder, n), Adjs: make([]*SimAdjudicator, n), } @@ -118,9 +118,9 @@ func NewSetup(t *testing.T, rng *rand.Rand, n int, blockInterval time.Duration, ksWallet := wallettest.RandomWallet().(*keystore.Wallet) for i := 0; i < n; i++ { s.Accs[i] = ksWallet.NewRandomAccount(rng).(*keystore.Account) - s.Parts[i] = s.Accs[i].Address() + s.Parts[i] = map[wallet.BackendID]wallet.Address{1: s.Accs[i].Address()} s.SimBackend.FundAddress(ctx, s.Accs[i].Account.Address) - s.Recvs[i] = map[int]*ethwallet.Address{1: ksWallet.NewRandomAccount(rng).Address()[1].(*ethwallet.Address)} + s.Recvs[i] = map[wallet.BackendID]*ethwallet.Address{1: ksWallet.NewRandomAccount(rng).Address().(*ethwallet.Address)} cb := ethchannel.NewContractBackend( s.SimBackend, ethchannel.MakeChainID(s.SimBackend.ChainID()), diff --git a/channel/withdraw.go b/channel/withdraw.go index 5aa4317..07c8aef 100644 --- a/channel/withdraw.go +++ b/channel/withdraw.go @@ -17,12 +17,13 @@ package channel import ( "context" "fmt" - "github.com/ethereum/go-ethereum/accounts/abi" "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/pkg/errors" "golang.org/x/sync/errgroup" + "math/big" "github.com/perun-network/perun-eth-backend/bindings" "github.com/perun-network/perun-eth-backend/bindings/assetholder" @@ -65,7 +66,7 @@ func (a *Adjudicator) ensureWithdrawn(ctx context.Context, req channel.Adjudicat g.Go(func() error { // Create subscription contract := bindAssetHolder(a.ContractBackend, asset, index) - fundingID := FundingIDs(req.Params.ID(), req.Params.Parts[req.Idx])[0] + fundingID := FundingIDs(req.Params.ID()[1], req.Params.Parts[req.Idx])[0] events := make(chan *subscription.Event, adjEventBuffSize) subErr := make(chan error, 1) sub, err := subscription.Subscribe(ctx, a.ContractBackend, contract.contract, withdrawnEventType(fundingID), startBlockOffset, a.txFinalityDepth) @@ -83,7 +84,7 @@ func (a *Adjudicator) ensureWithdrawn(ctx context.Context, req channel.Adjudicat return nil default: } - + log.Println("No withdrawn event found in the past, send transaction.", req.Tx.Sigs) // No withdrawn event found in the past, send transaction. if err := a.callAssetWithdraw(ctx, req, contract); err != nil { return errors.WithMessage(err, "withdrawing assets failed") @@ -163,40 +164,71 @@ func (a *Adjudicator) callAssetWithdraw(ctx context.Context, request channel.Adj } func (a *Adjudicator) newWithdrawalAuth(request channel.AdjudicatorReq, asset assetHolder) (assetholder.AssetHolderWithdrawalAuth, []byte, error) { - fid := FundingID(request.Tx.ID, request.Params.Parts[request.Idx][1]) + fid := FundingID(request.Tx.ID[1], request.Params.Parts[request.Idx][1]) bal, err := asset.Assetholder.Holdings(nil, fid) if err != nil { return assetholder.AssetHolderWithdrawalAuth{}, nil, fmt.Errorf("getting balance: %w", err) } auth := assetholder.AssetHolderWithdrawalAuth{ - ChannelID: request.Params.ID(), - Participant: wallet.AsEthAddr(request.Acc.Address()[1]), + ChannelID: request.Params.ID()[1], + Participant: wallet.AsChannelParticipant(wallet.AddressMapfromAccountMap(request.Acc)), Receiver: a.Receiver, Amount: bal, } + fmt.Println("auth", auth.Participant.EthAddress, auth.Receiver, auth.Amount, auth.ChannelID) + fmt.Println("Request: ", request) enc, err := encodeAssetHolderWithdrawalAuth(auth) if err != nil { return assetholder.AssetHolderWithdrawalAuth{}, nil, errors.WithMessage(err, "encoding withdrawal auth") } - sig, err := request.Acc.SignData(enc) + sig, err := request.Acc[1].SignData(enc) return auth, sig, errors.WithMessage(err, "sign data") } -func encodeAssetHolderWithdrawalAuth(auth assetholder.AssetHolderWithdrawalAuth) ([]byte, error) { - // encodeAssetHolderWithdrawalAuth encodes the AssetHolderWithdrawalAuth as with abi.encode() in the smart contracts. +func encodeAssetHolderWithdrawalAuth(a assetholder.AssetHolderWithdrawalAuth) ([]byte, error) { + + // Define the top-level ABI type for the Authorization struct. + authorizationType, err := abi.NewType("tuple", "tuple(bytes32 channelID, tuple(address ethAddress, bytes ccAddress) participant, address receiver, uint256 amount)", []abi.ArgumentMarshaling{ + {Name: "channelID", Type: "bytes32"}, + {Name: "participant", Type: "tuple", Components: []abi.ArgumentMarshaling{ + {Name: "ethAddress", Type: "address"}, + {Name: "ccAddress", Type: "bytes"}, + }}, + {Name: "receiver", Type: "address"}, + {Name: "amount", Type: "uint256"}, + }) + if err != nil { + return nil, err + } + + // Define the Arguments. args := abi.Arguments{ - {Type: abiBytes32}, - {Type: abiAddress}, - {Type: abiAddress}, - {Type: abiUint256}, + {Type: authorizationType}, } - enc, err := args.Pack( - auth.ChannelID, - auth.Participant, - auth.Receiver, - auth.Amount, + + // Pack the data for encoding. + return args.Pack( + struct { + ChannelID [32]byte + Participant struct { + EthAddress common.Address + CcAddress []byte + } + Receiver common.Address + Amount *big.Int + }{ + ChannelID: a.ChannelID, + Participant: struct { + EthAddress common.Address + CcAddress []byte + }{ + EthAddress: a.Participant.EthAddress, + CcAddress: a.Participant.CcAddress, + }, + Receiver: a.Receiver, + Amount: a.Amount, + }, ) - return enc, errors.WithStack(err) } diff --git a/channel/withdraw_test.go b/channel/withdraw_test.go index bd5d6d6..50ad047 100644 --- a/channel/withdraw_test.go +++ b/channel/withdraw_test.go @@ -17,6 +17,7 @@ package channel_test import ( "context" "fmt" + "perun.network/go-perun/wallet" "sync" "testing" "time" @@ -56,6 +57,7 @@ func withdrawMultipleConcurrentFinal(t *testing.T, numParts int, parallel bool) rng, channeltest.WithParts(s.Parts), channeltest.WithAssets(s.Asset), + channeltest.WithBackend(1), channeltest.WithIsFinal(false), channeltest.WithLedgerChannel(true), ) @@ -93,7 +95,7 @@ func withdrawMultipleConcurrentFinal(t *testing.T, numParts int, parallel bool) time.Sleep(sleepDuration) req := channel.AdjudicatorReq{ Params: params, - Acc: s.Accs[i], + Acc: map[wallet.BackendID]wallet.Account{1: s.Accs[i]}, Idx: channel.Index(i), Tx: tx, } @@ -107,7 +109,7 @@ func withdrawMultipleConcurrentFinal(t *testing.T, numParts int, parallel bool) for i := 0; i < numParts; i++ { req := channel.AdjudicatorReq{ Params: params, - Acc: s.Accs[i], + Acc: map[wallet.BackendID]wallet.Account{1: s.Accs[i]}, Idx: channel.Index(i), Tx: tx, } @@ -133,6 +135,7 @@ func testWithdrawZeroBalance(t *testing.T, n int) { // create valid state and params params, state := channeltest.NewRandomParamsAndState( rng, + channeltest.WithBackend(1), channeltest.WithParts(s.Parts), channeltest.WithAssets(s.Asset), channeltest.WithIsFinal(true), @@ -162,7 +165,7 @@ func testWithdrawZeroBalance(t *testing.T, n int) { // register req := channel.AdjudicatorReq{ Params: params, - Acc: s.Accs[0], + Acc: map[wallet.BackendID]wallet.Account{1: s.Accs[0]}, Tx: testSignState(t, s.Accs, state), Idx: 0, } @@ -172,10 +175,10 @@ func testWithdrawZeroBalance(t *testing.T, n int) { // withdraw for i, _adj := range s.Adjs { adj := _adj - req.Acc = s.Accs[i] + req.Acc = map[wallet.BackendID]wallet.Account{1: s.Accs[i]} req.Idx = channel.Index(i) // check that the nonce stays the same for zero balance withdrawals - diff, err := test.NonceDiff(s.Accs[i].Address()[1], adj, func() error { + diff, err := test.NonceDiff(s.Accs[i].Address(), adj, func() error { return adj.Withdraw(context.Background(), req, nil) }) require.NoError(t, err) @@ -195,6 +198,7 @@ func TestWithdraw(t *testing.T) { // create valid state and params params, state := channeltest.NewRandomParamsAndState( rng, + channeltest.WithBackend(1), channeltest.WithParts(s.Parts), channeltest.WithAssets(s.Asset), channeltest.WithIsFinal(false), @@ -208,7 +212,7 @@ func TestWithdraw(t *testing.T) { require.NoError(t, s.Funders[0].Fund(fundingCtx, *fundingReq), "funding should succeed") req := channel.AdjudicatorReq{ Params: params, - Acc: s.Accs[0], + Acc: map[wallet.BackendID]wallet.Account{1: s.Accs[0]}, Idx: channel.Index(0), } @@ -238,12 +242,12 @@ func TestWithdraw(t *testing.T) { t.Run("Withdrawal idempotence", func(t *testing.T) { for i := 0; i < 10; i++ { // get nonce - oldNonce, err := s.Adjs[0].PendingNonceAt(context.Background(), ethwallet.AsEthAddr(s.Accs[0].Address()[1])) + oldNonce, err := s.Adjs[0].PendingNonceAt(context.Background(), ethwallet.AsEthAddr(s.Accs[0].Address())) require.NoError(t, err) // withdraw testWithdraw(t, true) // get nonce - nonce, err := s.Adjs[0].PendingNonceAt(context.Background(), ethwallet.AsEthAddr(s.Accs[0].Address()[1])) + nonce, err := s.Adjs[0].PendingNonceAt(context.Background(), ethwallet.AsEthAddr(s.Accs[0].Address())) require.NoError(t, err) assert.Equal(t, oldNonce, nonce, "Nonce must not change in subsequent withdrawals") } @@ -259,6 +263,7 @@ func TestWithdrawNonFinal(t *testing.T) { params, state := channeltest.NewRandomParamsAndState( rng, channeltest.WithChallengeDuration(60), + channeltest.WithBackend(1), channeltest.WithParts(s.Parts), channeltest.WithAssets(s.Asset), channeltest.WithIsFinal(false), @@ -280,7 +285,7 @@ func TestWithdrawNonFinal(t *testing.T) { // register req := channel.AdjudicatorReq{ Params: params, - Acc: s.Accs[0], + Acc: map[wallet.BackendID]wallet.Account{1: s.Accs[0]}, Idx: 0, Tx: testSignState(t, s.Accs, state), } diff --git a/client/app_test.go b/client/app_test.go index 70bd3ae..422c5ed 100644 --- a/client/app_test.go +++ b/client/app_test.go @@ -54,6 +54,7 @@ func TestProgression(t *testing.T) { BaseExecConfig: clienttest.MakeBaseExecConfig( clientAddresses(roleSetups), backendSetup.Asset, + 1, [2]*big.Int{big.NewInt(99), big.NewInt(1)}, client.WithApp(app, channel.NewMockOp(channel.OpValid)), ), @@ -73,9 +74,9 @@ func deployMockApp(t *testing.T, s *test.Setup) wallet.Address { return ethwallet.AsWalletAddr(addr) } -func clientAddresses(roleSetups []clienttest.RoleSetup) (addresses [2]map[int]wire.Address) { +func clientAddresses(roleSetups []clienttest.RoleSetup) (addresses [2]map[wallet.BackendID]wire.Address) { for i := 0; i < len(roleSetups); i++ { - addresses[i] = roleSetups[i].Identity.Address() + addresses[i] = wire.AddressMapfromAccountMap(roleSetups[i].Identity) } return } diff --git a/client/payment_test.go b/client/payment_test.go index 4c6f150..84b5344 100644 --- a/client/payment_test.go +++ b/client/payment_test.go @@ -17,6 +17,7 @@ package client_test import ( "context" "math/big" + perunwallet "perun.network/go-perun/wallet" "sync" "testing" "time" @@ -63,8 +64,9 @@ func TestPaymentHappy(t *testing.T) { execConfig := &clienttest.AliceBobExecConfig{ BaseExecConfig: clienttest.MakeBaseExecConfig( - [2]map[int]wire.Address{setup[A].Identity.Address(), setup[B].Identity.Address()}, + [2]map[perunwallet.BackendID]wire.Address{wire.AddressMapfromAccountMap(setup[A].Identity), wire.AddressMapfromAccountMap(setup[B].Identity)}, s.Asset, + 1, [2]*big.Int{big.NewInt(100), big.NewInt(100)}, client.WithApp(chtest.NewRandomAppAndData(rng)), ), @@ -122,8 +124,9 @@ func TestPaymentDispute(t *testing.T) { execConfig := &clienttest.MalloryCarolExecConfig{ BaseExecConfig: clienttest.MakeBaseExecConfig( - [2]map[int]wire.Address{setup[A].Identity.Address(), setup[B].Identity.Address()}, + [2]map[perunwallet.BackendID]wire.Address{wire.AddressMapfromAccountMap(setup[A].Identity), wire.AddressMapfromAccountMap(setup[B].Identity)}, s.Asset, + 1, [2]*big.Int{big.NewInt(100), big.NewInt(1)}, client.WithoutApp(), ), diff --git a/client/subchannel_test.go b/client/subchannel_test.go index 5d7bc77..348b7fb 100644 --- a/client/subchannel_test.go +++ b/client/subchannel_test.go @@ -17,6 +17,7 @@ package client_test import ( "context" "math/big" + "perun.network/go-perun/wallet" "testing" ethchanneltest "github.com/perun-network/perun-eth-backend/channel/test" @@ -44,8 +45,9 @@ func TestSubChannelHappy(t *testing.T) { // Build configuration. baseCfg := clienttest.MakeBaseExecConfig( - [2]map[int]wire.Address{setups[A].Identity.Address(), setups[B].Identity.Address()}, + [2]map[wallet.BackendID]wire.Address{wire.AddressMapfromAccountMap(setups[A].Identity), wire.AddressMapfromAccountMap(setups[B].Identity)}, s.Asset, + 1, [2]*big.Int{big.NewInt(100), big.NewInt(100)}, client.WithoutApp(), ) @@ -97,8 +99,9 @@ func TestSubChannelDispute(t *testing.T) { roles[B].SetStages(stages) baseCfg := clienttest.MakeBaseExecConfig( - [2]map[int]wire.Address{setups[A].Identity.Address(), setups[B].Identity.Address()}, + [2]map[wallet.BackendID]wire.Address{wire.AddressMapfromAccountMap(setups[A].Identity), wire.AddressMapfromAccountMap(setups[B].Identity)}, s.Asset, + 1, [2]*big.Int{big.NewInt(100), big.NewInt(100)}, client.WithoutApp(), ) diff --git a/client/test/multiledger.go b/client/test/multiledger.go index f5cb8b6..a3581ac 100644 --- a/client/test/multiledger.go +++ b/client/test/multiledger.go @@ -132,22 +132,22 @@ func setupClient(t *testing.T, rng *rand.Rand, l1, l2 testLedger, bus wire.Bus) require := require.New(t) // Setup wallet and account. - w := wtest.RandomWallet().(*keystore.Wallet) - acc := w.NewRandomAccount(rng).(*keystore.Account) + w := map[wallet.BackendID]wtest.Wallet{1: wtest.RandomWallet().(*keystore.Wallet)} + acc := w[1].NewRandomAccount(rng).(*keystore.Account) // Setup contract backends. signer1 := l1.simSetup.SimBackend.Signer cb1 := ethchannel.NewContractBackend( l1.simSetup.CB, l1.AssetID().LedgerId.(ethchannel.ChainID), - keystore.NewTransactor(*w, signer1), + keystore.NewTransactor(*w[1].(*keystore.Wallet), signer1), l1.simSetup.CB.TxFinalityDepth(), ) signer2 := l2.simSetup.SimBackend.Signer cb2 := ethchannel.NewContractBackend( l2.simSetup.CB, l2.AssetID().LedgerId.(ethchannel.ChainID), - keystore.NewTransactor(*w, signer2), + keystore.NewTransactor(*w[1].(*keystore.Wallet), signer2), l2.simSetup.CB.TxFinalityDepth(), ) @@ -177,15 +177,15 @@ func setupClient(t *testing.T, rng *rand.Rand, l1, l2 testLedger, bus wire.Bus) watcher, err := local.NewWatcher(multiAdj) require.NoError(err) - walletAddr := acc.Address()[1].(*ethwallet.Address) + walletAddr := acc.Address().(*ethwallet.Address) wireAddr := ðwire.Address{Address: walletAddr} - + perunWallet := map[wallet.BackendID]wallet.Wallet{1: w[1]} c, err := client.New( - map[int]wire.Address{1: wireAddr}, + map[wallet.BackendID]wire.Address{1: wireAddr}, bus, multiFunder, multiAdj, - w, + perunWallet, watcher, ) require.NoError(err) @@ -194,11 +194,11 @@ func setupClient(t *testing.T, rng *rand.Rand, l1, l2 testLedger, bus wire.Bus) Client: c, Adjudicator1: adjL1, Adjudicator2: adjL2, - WireAddress: map[int]wire.Address{1: wireAddr}, - WalletAddress: map[int]wallet.Address{1: walletAddr}, + WireAddress: map[wallet.BackendID]wire.Address{1: wireAddr}, + WalletAddress: map[wallet.BackendID]wallet.Address{1: walletAddr}, Events: make(chan channel.AdjudicatorEvent), - BalanceReader1: l1.simSetup.SimBackend.NewBalanceReader(acc.Address()[1]), - BalanceReader2: l2.simSetup.SimBackend.NewBalanceReader(acc.Address()[1]), + BalanceReader1: l1.simSetup.SimBackend.NewBalanceReader(acc.Address()), + BalanceReader2: l2.simSetup.SimBackend.NewBalanceReader(acc.Address()), } } diff --git a/client/test/setup.go b/client/test/setup.go index 82080d1..a954646 100644 --- a/client/test/setup.go +++ b/client/test/setup.go @@ -16,6 +16,8 @@ package test import ( "math/rand" + "perun.network/go-perun/wallet" + wtest "perun.network/go-perun/wallet/test" "time" ethctest "github.com/perun-network/perun-eth-backend/channel/test" @@ -47,17 +49,17 @@ func MakeRoleSetups(rng *rand.Rand, s *ethctest.Setup, names []string) []clientt } setups[i] = clienttest.RoleSetup{ Name: names[i], - Identity: wiretest.NewRandomAccount(rng), + Identity: wiretest.NewRandomAccountMap(rng, 1), Bus: bus, Funder: s.Funders[i], Adjudicator: s.Adjs[i], Watcher: watcher, - Wallet: ethwtest.NewTmpWallet(), + Wallet: map[wallet.BackendID]wtest.Wallet{1: ethwtest.NewTmpWallet()}, Timeout: DefaultTimeout, // Scaled due to simbackend automining progressing faster than real time. ChallengeDuration: challengeDurationBlocks * uint64(time.Second/BlockInterval), Errors: make(chan error), - BalanceReader: s.SimBackend.NewBalanceReader(s.Accs[i].Address()[1]), + BalanceReader: s.SimBackend.NewBalanceReader(s.Accs[i].Address()), } } return setups diff --git a/go.mod b/go.mod index 74cceaa..4b84e69 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/sirupsen/logrus v1.8.1 github.com/stretchr/testify v1.7.0 golang.org/x/sync v0.0.0-20210220032951-036812b2e83c - perun.network/go-perun v0.11.1-0.20240828094952-28685ea1a4e8 + perun.network/go-perun v0.11.1-0.20240920121016-969c6a7cbaff polycry.pt/poly-go v0.0.0-20220301085937-fb9d71b45a37 ) diff --git a/go.sum b/go.sum index 2981a29..8f4d178 100644 --- a/go.sum +++ b/go.sum @@ -645,8 +645,8 @@ honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= -perun.network/go-perun v0.11.1-0.20240828094952-28685ea1a4e8 h1:tP8t4ku45zprLodQO5zN7vd9RBEeTCN3PdTP7fdlgb4= -perun.network/go-perun v0.11.1-0.20240828094952-28685ea1a4e8/go.mod h1:mkmgZ/EQ7EPpDprFkg5+0Cz+QEIJb4SezkDdEPyKtVI= +perun.network/go-perun v0.11.1-0.20240920121016-969c6a7cbaff h1:AKlcMT8q+BKZSZCxnwbXZerpoTGUASi119e3pnsg1AY= +perun.network/go-perun v0.11.1-0.20240920121016-969c6a7cbaff/go.mod h1:mkmgZ/EQ7EPpDprFkg5+0Cz+QEIJb4SezkDdEPyKtVI= polycry.pt/poly-go v0.0.0-20220301085937-fb9d71b45a37 h1:iA5GzEa/hHfVlQpimEjPV09NATwHXxSjWNB0VVodtew= polycry.pt/poly-go v0.0.0-20220301085937-fb9d71b45a37/go.mod h1:XUBrNtqgEhN3EEOP/5gh7IBd3xVHKidCjXDZfl9+kMU= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= diff --git a/subscription/eventsub_test.go b/subscription/eventsub_test.go index 1303e75..dacef40 100644 --- a/subscription/eventsub_test.go +++ b/subscription/eventsub_test.go @@ -71,6 +71,7 @@ func TestEventSub(t *testing.T) { tokenAddr, err := ethchannel.DeployPerunToken(ctx, cb, *account, []common.Address{account.Address}, channeltest.MaxBalance) require.NoError(t, err) token, err := peruntoken.NewPeruntoken(tokenAddr, cb) + log.Println("Token Address: ", tokenAddr, err) require.NoError(t, err) ct := pkgtest.NewConcurrent(t) @@ -81,14 +82,17 @@ func TestEventSub(t *testing.T) { if i == n/4 { close(waitSent) } - log.Debug("Sending ", i) + log.Println("Sending ", i) // Send the transaction. opts, err := cb.NewTransactor(ctx, txGasLimit, *account) + log.Println("Transactor: ", opts, err) require.NoError(t, err) tx, err := token.IncreaseAllowance(opts, account.Address, big.NewInt(1)) + log.Println("TX: ", tx, err) require.NoError(t, err) // Wait for the TX to be mined. _, err = cb.ConfirmTransaction(ctx, tx, *account) + log.Println("Confirm TX: ", err) require.NoError(t, err) } }) @@ -102,7 +106,9 @@ func TestEventSub(t *testing.T) { // Setup the event sub after some events have been sent. <-waitSent contract := bind.NewBoundContract(tokenAddr, bindings.ABI.PerunToken, cb, cb, cb) + log.Println("Contract: ", contract) sub, err := subscription.NewEventSub(ctx, cb, contract, eFact, 10000) + log.Println("Sub") require.NoError(t, err) go ct.Stage("sub", func(t pkgtest.ConcT) { defer close(sink) @@ -114,19 +120,21 @@ func TestEventSub(t *testing.T) { // Receive `n` unique events. for i := 0; i < n; i++ { e := <-sink - log.Debug("Read ", i) + log.Println("Read ", i) require.NotNil(t, e) // It is possible to receive the same event twice. if e.Log.TxHash == lastTx { i-- + log.Println("Duplicate ", i) } lastTx = e.Log.TxHash - + log.Println("TX Hash: ", lastTx) want := &peruntoken.PeruntokenApproval{ Owner: account.Address, Spender: account.Address, Value: big.NewInt(int64(i + 1)), } + log.Println("Want: ", want) require.Equal(t, want, e.Data) require.False(t, e.Log.Removed) } @@ -166,18 +174,18 @@ func TestEventSub_Filter(t *testing.T) { ct := pkgtest.NewConcurrent(t) // Send the transaction. - fundingID := channeltest.NewRandomChannelID(rng) + fundingID := channeltest.NewRandomChannelID(rng, channeltest.WithBackend(1)) opts, err := cb.NewTransactor(ctx, txGasLimit, *account) require.NoError(t, err) opts.Value = big.NewInt(1) - tx, err := ah.Deposit(opts, fundingID, big.NewInt(1)) + tx, err := ah.Deposit(opts, fundingID[1], big.NewInt(1)) require.NoError(t, err) // Wait for the TX to be mined. _, err = cb.ConfirmTransaction(ctx, tx, *account) require.NoError(t, err) // Create the filter. - Filter := []interface{}{fundingID} + Filter := []interface{}{fundingID[1]} // Setup the event sub. sink := make(chan *subscription.Event, 1) eFact := func() *subscription.Event { @@ -199,7 +207,7 @@ func TestEventSub_Filter(t *testing.T) { e := <-sink require.NotNil(t, e) want := &assetholder.AssetholderDeposited{ - FundingID: fundingID, + FundingID: fundingID[1], Amount: big.NewInt(int64(1)), } log.Debug("TX0 Hash: ", e.Log.TxHash) diff --git a/wallet/address.go b/wallet/address.go index 323381a..0eefa67 100644 --- a/wallet/address.go +++ b/wallet/address.go @@ -17,6 +17,7 @@ package wallet import ( "bytes" "fmt" + "github.com/perun-network/perun-eth-backend/bindings/assetholder" "github.com/ethereum/go-ethereum/common" @@ -34,7 +35,7 @@ var _ wallet.Address = (*Address)(nil) type Address common.Address // BackendID returns the official identifier for the eth-backend. -func (a *Address) BackendID() int { +func (a *Address) BackendID() wallet.BackendID { return 1 } @@ -101,8 +102,37 @@ func AsEthAddr(a wallet.Address) common.Address { return common.Address(*addrTyped) } +// AsChannelParticipant is a helper function to convert a map of address interfaces back into a channelParticipant +func AsChannelParticipant(a map[wallet.BackendID]wallet.Address) assetholder.ChannelParticipant { + _a := assetholder.ChannelParticipant{} + for i, address := range a { + if i == 1 { + addrTyped, ok := address.(*Address) + if !ok { + panic(fmt.Sprintf("wrong type: expected %T, got %T", &Address{}, a)) + } + _a.EthAddress = common.Address(*addrTyped) + } else { + addBytes, err := address.MarshalBinary() + if err != nil { + panic(fmt.Sprintf("error marshalling ethereum address: %v", err)) + } + _a.CcAddress = addBytes + } + } + return _a +} + // AsWalletAddr is a helper function to convert an ethereum address to an // address interface. func AsWalletAddr(addr common.Address) *Address { return (*Address)(&addr) } + +func AddressMapfromAccountMap(accs map[wallet.BackendID]wallet.Account) map[wallet.BackendID]wallet.Address { + addresses := make(map[wallet.BackendID]wallet.Address) + for id, a := range accs { + addresses[id] = a.Address() + } + return addresses +} diff --git a/wallet/hd/account.go b/wallet/hd/account.go index 5d16614..a2df903 100644 --- a/wallet/hd/account.go +++ b/wallet/hd/account.go @@ -30,8 +30,8 @@ type Account struct { } // Address returns the address of this account. -func (a *Account) Address() map[int]wallet.Address { - return map[int]wallet.Address{1: ethwallet.AsWalletAddr(a.Account.Address)} +func (a *Account) Address() wallet.Address { + return ethwallet.AsWalletAddr(a.Account.Address) } // SignData is used to sign data with this account. diff --git a/wallet/hd/transactor_test.go b/wallet/hd/transactor_test.go index 0c8db45..8378521 100644 --- a/wallet/hd/transactor_test.go +++ b/wallet/hd/transactor_test.go @@ -124,7 +124,7 @@ func newTransactorSetup(t *testing.T, prng *rand.Rand, hideSignHash bool, signer ChainID: chainID, TxType: txType, Tr: hd.NewTransactor(hdWallet.Wallet(), signer), - ValidAcc: accounts.Account{Address: wallet.AsEthAddr(validAcc.Address()[1])}, + ValidAcc: accounts.Account{Address: wallet.AsEthAddr(validAcc.Address())}, MissingAcc: accounts.Account{Address: common.HexToAddress(missingAddr)}, } } diff --git a/wallet/hd/wallet.go b/wallet/hd/wallet.go index 7b292f0..d9d1747 100644 --- a/wallet/hd/wallet.go +++ b/wallet/hd/wallet.go @@ -112,10 +112,10 @@ func (w *Wallet) newAccount() (*Account, error) { // Unlock checks if the wallet contains the account corresponding to the given address. // There is no concept of unlocking in software only hd wallet. -func (w *Wallet) Unlock(addr map[int]wallet.Address) (wallet.Account, error) { +func (w *Wallet) Unlock(addr wallet.Address) (wallet.Account, error) { w.mutex.Lock() defer w.mutex.Unlock() - ethAddr := addr[1] + ethAddr := addr acc := accounts.Account{Address: ethwallet.AsEthAddr(ethAddr)} if !w.wallet.Contains(acc) { return nil, errors.New("account not found in wallet") @@ -130,7 +130,7 @@ func (w *Wallet) Unlock(addr map[int]wallet.Address) (wallet.Account, error) { func (w *Wallet) LockAll() {} // IncrementUsage implements wallet.Wallet. It is a noop. -func (w *Wallet) IncrementUsage(a map[int]wallet.Address) {} +func (w *Wallet) IncrementUsage(a wallet.Address) {} // DecrementUsage implements wallet.Wallet. It is a noop. -func (w *Wallet) DecrementUsage(a map[int]wallet.Address) {} +func (w *Wallet) DecrementUsage(a wallet.Address) {} diff --git a/wallet/hd/wallet_test.go b/wallet/hd/wallet_test.go index 4df6fee..295a4a3 100644 --- a/wallet/hd/wallet_test.go +++ b/wallet/hd/wallet_test.go @@ -16,7 +16,6 @@ package hd_test import ( "math/rand" - "perun.network/go-perun/wallet" "testing" "github.com/ethereum/go-ethereum/accounts" @@ -83,7 +82,7 @@ func TestUnlock(t *testing.T) { setup, _, hdWallet := newSetup(t, pkgtest.Prng(t)) missingAddr := common.BytesToAddress(setup.AddressMarshalled) - _, err := hdWallet.Unlock(map[int]wallet.Address{1: ethwallet.AsWalletAddr(missingAddr)}) + _, err := hdWallet.Unlock(ethwallet.AsWalletAddr(missingAddr)) assert.Error(t, err, "should error on unlocking missing address") acc, err := hdWallet.Unlock(setup.AddressInWallet) @@ -99,7 +98,7 @@ func TestContains(t *testing.T) { missingAddr := common.BytesToAddress(setup.AddressMarshalled) assert.False(t, hdWallet.Contains(missingAddr), "should not contain address of the missing account") - assert.True(t, hdWallet.Contains(ethwallet.AsEthAddr(setup.AddressInWallet[1])), "should contain valid account") + assert.True(t, hdWallet.Contains(ethwallet.AsEthAddr(setup.AddressInWallet)), "should contain valid account") } func newSetup(t require.TestingT, prng *rand.Rand) (*test.Setup, accounts.Wallet, *hd.Wallet) { diff --git a/wallet/keystore/account.go b/wallet/keystore/account.go index ba64a39..41ec767 100644 --- a/wallet/keystore/account.go +++ b/wallet/keystore/account.go @@ -29,8 +29,8 @@ type Account struct { } // Address returns the ethereum address of this account. -func (a *Account) Address() map[int]wallet.Address { - return map[int]wallet.Address{1: (*ethwallet.Address)(&a.Account.Address)} +func (a *Account) Address() wallet.Address { + return (*ethwallet.Address)(&a.Account.Address) } // SignData is used to sign data with this account. diff --git a/wallet/keystore/transactor_test.go b/wallet/keystore/transactor_test.go index 304def7..16d1f92 100644 --- a/wallet/keystore/transactor_test.go +++ b/wallet/keystore/transactor_test.go @@ -87,7 +87,7 @@ func newTransactorSetup(t require.TestingT, prng *rand.Rand, signer types.Signer ChainID: chainID, TxType: txType, Tr: keystore.NewTransactor(*ksWallet, signer), - ValidAcc: accounts.Account{Address: wallet.AsEthAddr(acc.Address()[1])}, + ValidAcc: accounts.Account{Address: wallet.AsEthAddr(acc.Address())}, MissingAcc: accounts.Account{Address: common.HexToAddress(randomAddr)}, } } diff --git a/wallet/keystore/wallet.go b/wallet/keystore/wallet.go index 02f4ff2..15ad744 100644 --- a/wallet/keystore/wallet.go +++ b/wallet/keystore/wallet.go @@ -93,7 +93,7 @@ func (w *Wallet) NewRandomAccount(rnd *rand.Rand) wallet.Account { acc = ethAcc } - _, err = w.Unlock(map[int]wallet.Address{1: (*ethwallet.Address)(&address)}) // Unlock should never return an error. + _, err = w.Unlock((*ethwallet.Address)(&address)) // Unlock should never return an error. if err != nil { log.Panic(err) } @@ -102,11 +102,10 @@ func (w *Wallet) NewRandomAccount(rnd *rand.Rand) wallet.Account { // Unlock retrieves the account with the given address and unlocks it. If there // is no matching account or unlocking fails, returns an error. -func (w *Wallet) Unlock(addr map[int]wallet.Address) (wallet.Account, error) { +func (w *Wallet) Unlock(addr wallet.Address) (wallet.Account, error) { log.Debugf("Unlocking account %v", addr) - Addr := addr[1] // Hack: create ethereum account from ethereum address. - ethAddr, ok := Addr.(*ethwallet.Address) + ethAddr, ok := addr.(*ethwallet.Address) if !ok { return nil, fmt.Errorf("wrong type: expected %T, got %T", ðwallet.Address{}, addr) } @@ -139,11 +138,11 @@ func (w *Wallet) LockAll() { } // IncrementUsage currently does nothing. In the future, it will track the usage of keys. -func (w *Wallet) IncrementUsage(a map[int]wallet.Address) { +func (w *Wallet) IncrementUsage(a wallet.Address) { log.Trace("IncrementUsage ", a) } // DecrementUsage currently does nothing. In the future, it will track the usage of keys and release unused keys. -func (w *Wallet) DecrementUsage(a map[int]wallet.Address) { +func (w *Wallet) DecrementUsage(a wallet.Address) { log.Trace("DecrementUsage ", a) } diff --git a/wallet/keystore/wallet_test.go b/wallet/keystore/wallet_test.go index 4dd976b..1cb87dd 100644 --- a/wallet/keystore/wallet_test.go +++ b/wallet/keystore/wallet_test.go @@ -53,7 +53,7 @@ func TestWallet_Contains(t *testing.T) { "Expected wallet not to contain an empty account") acc := w.NewAccount() - assert.True(t, w.Contains(ethwallet.AsEthAddr(acc.Address()[1])), "Expected wallet to contain account") + assert.True(t, w.Contains(ethwallet.AsEthAddr(acc.Address())), "Expected wallet to contain account") } func TestSignatures(t *testing.T) { @@ -61,7 +61,7 @@ func TestSignatures(t *testing.T) { sign, err := acc.SignData(dataToSign) assert.NoError(t, err, "Sign with new account should succeed") assert.Equal(t, len(sign), ethwallet.SigLen, "Ethereum signature has wrong length") - valid, err := new(ethwallet.Backend).VerifySignature(dataToSign, sign, acc.Address()[1]) + valid, err := new(ethwallet.Backend).VerifySignature(dataToSign, sign, acc.Address()) assert.True(t, valid, "Verification should succeed") assert.NoError(t, err, "Verification should succeed") } diff --git a/wallet/simple/account.go b/wallet/simple/account.go index e908c48..f9c7f60 100644 --- a/wallet/simple/account.go +++ b/wallet/simple/account.go @@ -32,8 +32,8 @@ type Account struct { } // Address returns the Ethereum address of this account. -func (a *Account) Address() map[int]wallet.Address { - return map[int]wallet.Address{1: ethwallet.AsWalletAddr(a.Account.Address)} +func (a *Account) Address() wallet.Address { + return ethwallet.AsWalletAddr(a.Account.Address) } // SignData is used to sign data with this account. diff --git a/wallet/simple/transactor.go b/wallet/simple/transactor.go index 71d4f08..866b8a4 100644 --- a/wallet/simple/transactor.go +++ b/wallet/simple/transactor.go @@ -16,8 +16,6 @@ package simple import ( stderrors "errors" - "perun.network/go-perun/wallet" - "github.com/ethereum/go-ethereum/accounts" "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" @@ -46,7 +44,7 @@ func IsErrWrongAddrType(err error) bool { // NewTransactor returns a TransactOpts for the given account. It errors if the // account is not contained in the wallet of the transactor factory. func (t *Transactor) NewTransactor(account accounts.Account) (*bind.TransactOpts, error) { - walletAcc, err := t.Wallet.Unlock(map[int]wallet.Address{1: ethwallet.AsWalletAddr(account.Address)}) + walletAcc, err := t.Wallet.Unlock(ethwallet.AsWalletAddr(account.Address)) if err != nil { return nil, err } diff --git a/wallet/simple/transactor_test.go b/wallet/simple/transactor_test.go index 1101793..f197507 100644 --- a/wallet/simple/transactor_test.go +++ b/wallet/simple/transactor_test.go @@ -87,7 +87,7 @@ func newTransactorSetup(t require.TestingT, prng *rand.Rand, signer types.Signer ChainID: chainID, TxType: txType, Tr: simple.NewTransactor(simpleWallet, signer), - ValidAcc: accounts.Account{Address: wallet.AsEthAddr(validAcc.Address()[1])}, + ValidAcc: accounts.Account{Address: wallet.AsEthAddr(validAcc.Address())}, MissingAcc: accounts.Account{Address: common.HexToAddress(missingAddr)}, } } diff --git a/wallet/simple/wallet.go b/wallet/simple/wallet.go index 117f490..adc19d7 100644 --- a/wallet/simple/wallet.go +++ b/wallet/simple/wallet.go @@ -88,8 +88,8 @@ func (w *Wallet) NewRandomAccount(prng *rand.Rand) wallet.Account { // Unlock returns the account corresponding to the given address if the wallet // contains this account. -func (w *Wallet) Unlock(address map[int]wallet.Address) (wallet.Account, error) { - ethAddr := address[1] +func (w *Wallet) Unlock(address wallet.Address) (wallet.Account, error) { + ethAddr := address if _, ok := ethAddr.(*ethwallet.Address); !ok { return nil, errors.New("address must be ethwallet.Address") } @@ -106,7 +106,7 @@ func (w *Wallet) Unlock(address map[int]wallet.Address) (wallet.Account, error) func (w *Wallet) LockAll() {} // IncrementUsage is called whenever a new channel is created or restored. -func (w *Wallet) IncrementUsage(address map[int]wallet.Address) {} +func (w *Wallet) IncrementUsage(address wallet.Address) {} // DecrementUsage is called whenever a channel is settled. -func (w *Wallet) DecrementUsage(address map[int]wallet.Address) {} +func (w *Wallet) DecrementUsage(address wallet.Address) {} diff --git a/wallet/simple/wallet_test.go b/wallet/simple/wallet_test.go index 9663972..345935b 100644 --- a/wallet/simple/wallet_test.go +++ b/wallet/simple/wallet_test.go @@ -17,7 +17,6 @@ package simple_test import ( "crypto/ecdsa" "math/rand" - "perun.network/go-perun/wallet" "testing" "github.com/ethereum/go-ethereum/common" @@ -54,7 +53,7 @@ func TestUnlock(t *testing.T) { setup, simpleWallet := newSetup(t, pkgtest.Prng(t)) missingAddr := common.BytesToAddress(setup.AddressMarshalled) - _, err := simpleWallet.Unlock(map[int]wallet.Address{1: ethwallet.AsWalletAddr(missingAddr)}) + _, err := simpleWallet.Unlock(ethwallet.AsWalletAddr(missingAddr)) assert.Error(t, err, "should error on unlocking missing address") acc, err := simpleWallet.Unlock(setup.AddressInWallet) @@ -68,7 +67,7 @@ func TestWallet_Contains(t *testing.T) { missingAddr := common.BytesToAddress(setup.AddressMarshalled) assert.False(t, simpleWallet.Contains(missingAddr)) - assert.True(t, simpleWallet.Contains(ethwallet.AsEthAddr(setup.AddressInWallet[1]))) + assert.True(t, simpleWallet.Contains(ethwallet.AsEthAddr(setup.AddressInWallet))) } func TestSignatures(t *testing.T) { @@ -78,7 +77,7 @@ func TestSignatures(t *testing.T) { assert.NoError(t, err, "Sign with new account should succeed") assert.NotNil(t, sig) assert.Equal(t, len(sig), ethwallet.SigLen, "Ethereum signature has wrong length") - valid, err := new(ethwallet.Backend).VerifySignature(dataToSign, sig, acc.Address()[1]) + valid, err := new(ethwallet.Backend).VerifySignature(dataToSign, sig, acc.Address()) assert.True(t, valid, "Verification should succeed") assert.NoError(t, err, "Verification should succeed") } @@ -97,7 +96,7 @@ func newSetup(t require.TestingT, prng *rand.Rand) (*test.Setup, *simple.Wallet) randomKeyIndex := prng.Intn(numAccounts) addr := crypto.PubkeyToAddress(privateKeys[randomKeyIndex].PublicKey) - acc, err := simpleWallet.Unlock(map[int]wallet.Address{1: ethwallet.AsWalletAddr(addr)}) + acc, err := simpleWallet.Unlock(ethwallet.AsWalletAddr(addr)) require.NoError(t, err) require.NotNil(t, acc) diff --git a/wire/account.go b/wire/account.go index e07d033..65f71d2 100644 --- a/wire/account.go +++ b/wire/account.go @@ -31,8 +31,8 @@ func (acc *Account) Sign(_ []byte) ([]byte, error) { } // Address returns the account's address. -func (acc *Account) Address() map[int]wire.Address { - return map[int]wire.Address{1: acc.addr} +func (acc *Account) Address() wire.Address { + return acc.addr } // NewRandomAccount generates a new random account. From c17ca349e545553eadd9300b6f2dc467eced7441 Mon Sep 17 00:00:00 2001 From: Sophia Koehler Date: Wed, 25 Sep 2024 11:09:37 +0200 Subject: [PATCH 03/15] feat(asset): Change to multi.Asset implementation. chore: Update to latest go-perun version. Signed-off-by: Sophia Koehler --- bindings/adjudicator/Adjudicator.go | 2 +- bindings/adjudicator/AdjudicatorBinRuntime.go | 2 +- channel/adjudicator.go | 2 +- channel/asset.go | 34 +++++++++++++------ channel/asset_test.go | 4 +-- channel/backend.go | 4 +-- channel/contractbackend.go | 12 +++---- channel/funder.go | 4 +-- channel/funder_test.go | 4 +-- channel/test/randomizer.go | 8 ++--- channel/test/setup.go | 4 +-- channel/test/tokensetup.go | 2 +- client/test/multiledger.go | 4 +-- client/test/setup.go | 2 +- go.mod | 2 +- go.sum | 4 +-- subscription/eventsub_test.go | 4 +-- 17 files changed, 54 insertions(+), 44 deletions(-) diff --git a/bindings/adjudicator/Adjudicator.go b/bindings/adjudicator/Adjudicator.go index 7b870c5..238aefb 100644 --- a/bindings/adjudicator/Adjudicator.go +++ b/bindings/adjudicator/Adjudicator.go @@ -86,7 +86,7 @@ type ChannelSubAlloc struct { // AdjudicatorMetaData contains all meta data concerning the Adjudicator contract. var AdjudicatorMetaData = &bind.MetaData{ ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"channelID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"phase\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"timeout\",\"type\":\"uint64\"}],\"name\":\"ChannelUpdate\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"challengeDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"ethAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ccAddress\",\"type\":\"bytes\"}],\"internalType\":\"structChannel.Participant[]\",\"name\":\"participants\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"app\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"ledgerChannel\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"virtualChannel\",\"type\":\"bool\"}],\"internalType\":\"structChannel.Params\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"channelID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"challengeDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"ethAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ccAddress\",\"type\":\"bytes\"}],\"internalType\":\"structChannel.Participant[]\",\"name\":\"participants\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"app\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"ledgerChannel\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"virtualChannel\",\"type\":\"bool\"}],\"internalType\":\"structChannel.Params\",\"name\":\"params\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"channelID\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"ethHolder\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ccHolder\",\"type\":\"bytes\"}],\"internalType\":\"structChannel.Asset[]\",\"name\":\"assets\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"backends\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"balances\",\"type\":\"uint256[][]\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"ID\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint16[]\",\"name\":\"indexMap\",\"type\":\"uint16[]\"}],\"internalType\":\"structChannel.SubAlloc[]\",\"name\":\"locked\",\"type\":\"tuple[]\"}],\"internalType\":\"structChannel.Allocation\",\"name\":\"outcome\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"appData\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"isFinal\",\"type\":\"bool\"}],\"internalType\":\"structChannel.State\",\"name\":\"state\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"channelID\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"ethHolder\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ccHolder\",\"type\":\"bytes\"}],\"internalType\":\"structChannel.Asset[]\",\"name\":\"assets\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"backends\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"balances\",\"type\":\"uint256[][]\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"ID\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint16[]\",\"name\":\"indexMap\",\"type\":\"uint16[]\"}],\"internalType\":\"structChannel.SubAlloc[]\",\"name\":\"locked\",\"type\":\"tuple[]\"}],\"internalType\":\"structChannel.Allocation\",\"name\":\"outcome\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"appData\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"isFinal\",\"type\":\"bool\"}],\"internalType\":\"structChannel.State[]\",\"name\":\"subStates\",\"type\":\"tuple[]\"}],\"name\":\"conclude\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"challengeDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"ethAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ccAddress\",\"type\":\"bytes\"}],\"internalType\":\"structChannel.Participant[]\",\"name\":\"participants\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"app\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"ledgerChannel\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"virtualChannel\",\"type\":\"bool\"}],\"internalType\":\"structChannel.Params\",\"name\":\"params\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"channelID\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"ethHolder\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ccHolder\",\"type\":\"bytes\"}],\"internalType\":\"structChannel.Asset[]\",\"name\":\"assets\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"backends\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"balances\",\"type\":\"uint256[][]\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"ID\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint16[]\",\"name\":\"indexMap\",\"type\":\"uint16[]\"}],\"internalType\":\"structChannel.SubAlloc[]\",\"name\":\"locked\",\"type\":\"tuple[]\"}],\"internalType\":\"structChannel.Allocation\",\"name\":\"outcome\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"appData\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"isFinal\",\"type\":\"bool\"}],\"internalType\":\"structChannel.State\",\"name\":\"state\",\"type\":\"tuple\"},{\"internalType\":\"bytes[]\",\"name\":\"sigs\",\"type\":\"bytes[]\"}],\"name\":\"concludeFinal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"timeout\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"challengeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"phase\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"stateHash\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"hasApp\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"channelID\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"ethHolder\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ccHolder\",\"type\":\"bytes\"}],\"internalType\":\"structChannel.Asset[]\",\"name\":\"assets\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"backends\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"balances\",\"type\":\"uint256[][]\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"ID\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint16[]\",\"name\":\"indexMap\",\"type\":\"uint16[]\"}],\"internalType\":\"structChannel.SubAlloc[]\",\"name\":\"locked\",\"type\":\"tuple[]\"}],\"internalType\":\"structChannel.Allocation\",\"name\":\"outcome\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"appData\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"isFinal\",\"type\":\"bool\"}],\"internalType\":\"structChannel.State\",\"name\":\"state\",\"type\":\"tuple\"}],\"name\":\"hashState\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"challengeDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"ethAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ccAddress\",\"type\":\"bytes\"}],\"internalType\":\"structChannel.Participant[]\",\"name\":\"participants\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"app\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"ledgerChannel\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"virtualChannel\",\"type\":\"bool\"}],\"internalType\":\"structChannel.Params\",\"name\":\"params\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"channelID\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"ethHolder\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ccHolder\",\"type\":\"bytes\"}],\"internalType\":\"structChannel.Asset[]\",\"name\":\"assets\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"backends\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"balances\",\"type\":\"uint256[][]\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"ID\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint16[]\",\"name\":\"indexMap\",\"type\":\"uint16[]\"}],\"internalType\":\"structChannel.SubAlloc[]\",\"name\":\"locked\",\"type\":\"tuple[]\"}],\"internalType\":\"structChannel.Allocation\",\"name\":\"outcome\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"appData\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"isFinal\",\"type\":\"bool\"}],\"internalType\":\"structChannel.State\",\"name\":\"stateOld\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"channelID\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"ethHolder\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ccHolder\",\"type\":\"bytes\"}],\"internalType\":\"structChannel.Asset[]\",\"name\":\"assets\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"backends\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"balances\",\"type\":\"uint256[][]\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"ID\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint16[]\",\"name\":\"indexMap\",\"type\":\"uint16[]\"}],\"internalType\":\"structChannel.SubAlloc[]\",\"name\":\"locked\",\"type\":\"tuple[]\"}],\"internalType\":\"structChannel.Allocation\",\"name\":\"outcome\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"appData\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"isFinal\",\"type\":\"bool\"}],\"internalType\":\"structChannel.State\",\"name\":\"state\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"actorIdx\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"sig\",\"type\":\"bytes\"}],\"name\":\"progress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"challengeDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"ethAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ccAddress\",\"type\":\"bytes\"}],\"internalType\":\"structChannel.Participant[]\",\"name\":\"participants\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"app\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"ledgerChannel\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"virtualChannel\",\"type\":\"bool\"}],\"internalType\":\"structChannel.Params\",\"name\":\"params\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"channelID\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"ethHolder\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ccHolder\",\"type\":\"bytes\"}],\"internalType\":\"structChannel.Asset[]\",\"name\":\"assets\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"backends\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"balances\",\"type\":\"uint256[][]\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"ID\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint16[]\",\"name\":\"indexMap\",\"type\":\"uint16[]\"}],\"internalType\":\"structChannel.SubAlloc[]\",\"name\":\"locked\",\"type\":\"tuple[]\"}],\"internalType\":\"structChannel.Allocation\",\"name\":\"outcome\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"appData\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"isFinal\",\"type\":\"bool\"}],\"internalType\":\"structChannel.State\",\"name\":\"state\",\"type\":\"tuple\"},{\"internalType\":\"bytes[]\",\"name\":\"sigs\",\"type\":\"bytes[]\"}],\"internalType\":\"structAdjudicator.SignedState\",\"name\":\"channel\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"challengeDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"ethAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ccAddress\",\"type\":\"bytes\"}],\"internalType\":\"structChannel.Participant[]\",\"name\":\"participants\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"app\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"ledgerChannel\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"virtualChannel\",\"type\":\"bool\"}],\"internalType\":\"structChannel.Params\",\"name\":\"params\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"channelID\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"ethHolder\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ccHolder\",\"type\":\"bytes\"}],\"internalType\":\"structChannel.Asset[]\",\"name\":\"assets\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"backends\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"balances\",\"type\":\"uint256[][]\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"ID\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint16[]\",\"name\":\"indexMap\",\"type\":\"uint16[]\"}],\"internalType\":\"structChannel.SubAlloc[]\",\"name\":\"locked\",\"type\":\"tuple[]\"}],\"internalType\":\"structChannel.Allocation\",\"name\":\"outcome\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"appData\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"isFinal\",\"type\":\"bool\"}],\"internalType\":\"structChannel.State\",\"name\":\"state\",\"type\":\"tuple\"},{\"internalType\":\"bytes[]\",\"name\":\"sigs\",\"type\":\"bytes[]\"}],\"internalType\":\"structAdjudicator.SignedState[]\",\"name\":\"subChannels\",\"type\":\"tuple[]\"}],\"name\":\"register\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b50613785806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063848890001161005b578063848890001461014b578063c5457f0d1461016c578063db77bb271461017f578063e9bc418d1461019257600080fd5b806311be1997146100825780634176e7ae146101235780634c33077514610138575b600080fd5b6100dd6100903660046125fb565b6000602081905290815260409020805460018201546002909201546001600160401b0380831693600160401b8404821693600160801b81049092169260ff600160c01b9093048316921686565b604080516001600160401b0397881681529587166020870152939095169284019290925260ff166060830152608082015290151560a082015260c0015b60405180910390f35b610136610131366004612dc8565b6101a5565b005b610136610146366004612f3e565b610211565b61015e610159366004612fc5565b6103af565b60405190815260200161011a565b61013661017a366004613094565b6103c8565b61015e61018d366004613168565b6103f6565b6101366101a036600461319c565b610401565b82608001516101cf5760405162461bcd60e51b81526004016101c690613252565b60405180910390fd5b6101d983836106bc565b6101e282610747565b60006101f0838360006108f1565b508351604080860151519087015192935061020b9284610c94565b50505050565b82608001516102325760405162461bcd60e51b81526004016101c690613252565b6080820151151560011461027a5760405162461bcd60e51b815260206004820152600f60248201526e1cdd185d19481b9bdd08199a5b985b608a1b60448201526064016101c6565b60408201516060015151156102c45760405162461bcd60e51b815260206004820152601060248201526f686173207375622d6368616e6e656c7360801b60448201526064016101c6565b6102ce83836106bc565b6102d9838383610d88565b60008061032084600001516102fa8660000151876040015160200151610e7c565b6001600160401b03168151811061031357610313613276565b6020026020010151610f34565b91509150801561037857600260ff16826060015160ff16036103785760405162461bcd60e51b8152602060048201526011602482015270636f6e636c7564656420616c726561647960781b60448201526064016101c6565b61038485856002610fe3565b6103a884600001518560400151600001518760400151876040015160400151610c94565b5050505050565b60006103ba82611105565b805190602001209050919050565b8151608001516103ea5760405162461bcd60e51b81526004016101c690613252565b61020b8282600061112e565b60006103ba826112ba565b82516040840151602001516000916104449161041e908290610e7c565b6001600160401b03168151811061043757610437613276565b60200260200101516112cd565b606081015190915060ff166104a75780516001600160401b03164210156104a25760405162461bcd60e51b81526020600482015260126024820152711d1a5b595bdd5d081b9bdd081c185cdcd95960721b60448201526064016101c6565b61053b565b600160ff16816060015160ff16036105035780516001600160401b031642106104a25760405162461bcd60e51b815260206004820152600e60248201526d1d1a5b595bdd5d081c185cdcd95960921b60448201526064016101c6565b60405162461bcd60e51b815260206004820152600d60248201526c696e76616c696420706861736560981b60448201526064016101c6565b60608601516001600160a01b03166105855760405162461bcd60e51b815260206004820152600d60248201526c06d75737420686176652061707609c1b60448201526064016101c6565b85604001515183106105d15760405162461bcd60e51b81526020600482015260156024820152746163746f72496478206f7574206f662072616e676560581b60448201526064016101c6565b6105db86856106bc565b6105e4856103af565b8160800151146106285760405162461bcd60e51b815260206004820152600f60248201526e77726f6e67206f6c6420737461746560881b60448201526064016101c6565b61065c61063485611105565b838860400151868151811061064b5761064b613276565b602002602001015160000151611352565b61069c5760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964207369676e617475726560781b60448201526064016101c6565b6106a8868686866113db565b6106b486856001610fe3565b505050505050565b60006106d48260000151836040015160200151610e7c565b6001600160401b031690506106e8836103f6565b82518051839081106106fc576106fc613276565b6020026020010151146107425760405162461bcd60e51b815260206004820152600e60248201526d696e76616c696420706172616d7360901b60448201526064016101c6565b505050565b600061075f8260000151836040015160200151610e7c565b905060006107858360000151836001600160401b03168151811061043757610437613276565b9050610790836103af565b8160800151146107d25760405162461bcd60e51b815260206004820152600d60248201526c696e76616c696420737461746560981b60448201526064016101c6565b600260ff16816060015160ff16036108205760405162461bcd60e51b8152602060048201526011602482015270185b1c9958591e4818dbdb98db1d591959607a1b60448201526064016101c6565b606081015160ff1615801561083657508060a001515b156108635760208101518151610857916001600160401b039091169061150f565b6001600160401b031681525b80516001600160401b03164210156108b65760405162461bcd60e51b81526020600482015260166024820152751d1a5b595bdd5d081b9bdd081c185cdcd959081e595d60521b60448201526064016101c6565b60025b60ff1660608201528251805161074291906001600160401b0385169081106108e3576108e3613276565b60200260200101518261156a565b606060006108fe8561165c565b60408501515180516001600160401b0381111561091d5761091d612614565b60405190808252806020026020018201604052801561095057816020015b606081526020019060019003908161093b5790505b50925060005b8151811015610a89576000876040015160400151828151811061097b5761097b613276565b6020026020010151905080516001600160401b0381111561099e5761099e612614565b6040519080825280602002602001820160405280156109c7578160200160208202803683370190505b508583815181106109da576109da613276565b602002602001018190525060005b8151811015610a74578860400151604001518381518110610a0b57610a0b613276565b60200260200101518181518110610a2457610a24613276565b6020026020010151868481518110610a3e57610a3e613276565b60200260200101518281518110610a5757610a57613276565b602090810291909101015280610a6c816132b8565b9150506109e8565b50508080610a81906132b8565b915050610956565b5060408601516060015184925060005b8151811015610c89576000828281518110610ab657610ab6613276565b602002602001015190506000888680610ace906132b8565b975081518110610ae057610ae0613276565b60200260200101519050610afc826000015182600001516116fd565b610b405760405162461bcd60e51b81526020600482015260156024820152741a5b9d985b1a59081cdd5898da185b9b995b081a59605a1b60448201526064016101c6565b6060610b4d828b896108f1565b604085015190985090915060005b8751811015610c715760005b8251811015610c5e576000848381518110610b8457610b84613276565b60200260200101518281518110610b9d57610b9d613276565b602002602001015190506000848381518110610bbb57610bbb613276565b60200260200101519050610c0e828e8681518110610bdb57610bdb613276565b60200260200101518361ffff1681518110610bf857610bf8613276565b602002602001015161177b90919063ffffffff16565b8d8581518110610c2057610c20613276565b60200260200101518261ffff1681518110610c3d57610c3d613276565b60200260200101818152505050508080610c56906132b8565b915050610b67565b5080610c69816132b8565b915050610b5b565b50505050508080610c81906132b8565b915050610a99565b505050935093915050565b60005b83518110156103a8576000848281518110610cb457610cb4613276565b6020026020010151905046816000015103610d755760208101516001600160a01b031615610d755780602001516001600160a01b031663295482ce878481518110610d0157610d01613276565b602002602001015186868681518110610d1c57610d1c613276565b60200260200101516040518463ffffffff1660e01b8152600401610d42939291906133cb565b600060405180830381600087803b158015610d5c57600080fd5b505af1158015610d70573d6000803e3d6000fd5b505050505b5080610d80816132b8565b915050610c97565b6000610d9383611105565b9050815184604001515114610dea5760405162461bcd60e51b815260206004820152601a60248201527f7369676e617475726573206c656e677468206d69736d6174636800000000000060448201526064016101c6565b60005b82518110156103a857610e2a82848381518110610e0c57610e0c613276565b60200260200101518760400151848151811061064b5761064b613276565b610e6a5760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964207369676e617475726560781b60448201526064016101c6565b80610e74816132b8565b915050610ded565b60008151835114610ec85760405162461bcd60e51b8152602060048201526016602482015275082e4e4c2f240d8cadccee8d0e640dad2e6dac2e8c6d60531b60448201526064016101c6565b81600081518110610edb57610edb613276565b6020026020010151600103610ef257506000610f2e565b60018251118015610f1d575081600181518110610f1157610f11613276565b60200260200101516001145b15610f2a57506001610f2e565b5060005b92915050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091525060009081526020818152604091829020825160c08101845281546001600160401b038082168352600160401b8204811694830194909452600160801b810490931693810193909352600160c01b90910460ff908116606084015260018201546080840181905260029092015416151560a0830152909190151590565b6000610ffb8360000151846040015160200151610e7c565b6001600160401b031690506000806110228560000151848151811061031357610313613276565b87516001600160401b0390811660208481019190915288015116604083015260608801516001600160a01b0316151560a0830152909250905083600281111561106d5761106d61328c565b60ff16606083015261107e856103af565b608080840191909152850151156110a0576001600160401b03421682526110de565b8015806110b45750606082015160ff166001145b156110de5760208201516110d2906001600160401b0342169061150f565b6001600160401b031682525b6106b4856000015184815181106110f7576110f7613276565b60200260200101518361156a565b606081604051602001611118919061363d565b6040516020818303038152906040529050919050565b602083015160400151805160609183916111478761178e565b6111548260400151611997565b93506000826060015190508651815111156111a95760405162461bcd60e51b81526020600482015260156024820152741cdd5890da185b9b995b1cc81d1bdbc81cda1bdc9d605a1b60448201526064016101c6565b60005b81518110156112ae57600088866111c2816132b8565b9750815181106111d4576111d4613276565b602002602001015190506000808484815181106111f3576111f3613276565b6020026020010151836020015191509150611216826000015182600001516116fd565b61125b5760405162461bcd60e51b81526020600482015260166024820152751a5b9d985b1a59081cdd588b58da185b9b995b081a5960521b60448201526064016101c6565b6060611268848d8b61112e565b604084015151909a5090915061127f908890611a8d565b61128d836020015182611b38565b6112978a82611c28565b5050505080806112a6906132b8565b9150506111ac565b50505050935093915050565b60608160405160200161111891906136ae565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101829052908061130984610f34565b915091508061134b5760405162461bcd60e51b815260206004820152600e60248201526d1b9bdd081c9959da5cdd195c995960921b60448201526064016101c6565b5092915050565b6000806113b385805190602001206040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b905060006113c18286611c92565b6001600160a01b0390811690851614925050509392505050565b60208301516113eb9060016136c1565b6001600160401b031682602001516001600160401b0316146114485760405162461bcd60e51b81526020600482015260166024820152751d995c9cda5bdb881b5d5cdd081a5b98dc995b595b9d60521b60448201526064016101c6565b60808301511561148a5760405162461bcd60e51b815260206004820152600d60248201526c185b1c9958591e48199a5b985b609a1b60448201526064016101c6565b6114a283604001518360400151866040015151611cb6565b60608401516040516206371b60ea1b81526001600160a01b038216906318dc6c00906114d89088908890889088906004016136ec565b60006040518083038186803b1580156114f057600080fd5b505afa158015611504573d6000803e3d6000fd5b505050505050505050565b60006001600160401b03831661152583856136c1565b9150816001600160401b03161015610f2e5760405162461bcd60e51b81526020600482015260086024820152676f766572666c6f7760c01b60448201526064016101c6565b600082815260208181526040918290208351815485840151868601516060808901516001600160401b039586166fffffffffffffffffffffffffffffffff199095168517600160401b948716949094029390931768ffffffffffffffffff60801b1916600160801b9590921694850260ff60c01b191691909117600160c01b60ff9093169283021785556080880151600186015560a08801516002909501805460ff1916951515959095179094558551928352938201939093529283019190915283917f895ef5a5fc3efd313a300b006d6ce97ff0670dfe04f6eea90417edf924fa786b910160405180910390a25050565b60006116748260000151836040015160200151610e7c565b9050600061169a8360000151836001600160401b03168151811061043757610437613276565b90506116a5836103af565b8160800151146116e75760405162461bcd60e51b815260206004820152600d60248201526c696e76616c696420737461746560981b60448201526064016101c6565b606081015160ff166002146107425760026108b9565b6000815183511461171057506000610f2e565b60005b83518110156117715782818151811061172e5761172e613276565b602002602001015184828151811061174857611748613276565b60200260200101511461175f576000915050610f2e565b80611769816132b8565b915050611713565b5060019392505050565b60006117878284613737565b9392505050565b8051602082015161179f82826106bc565b6117ae82828560400151610d88565b8160a001511561184b5760608201516001600160a01b0316156118055760405162461bcd60e51b815260206004820152600f60248201526e063616e6e6f7420686176652061707608c1b60448201526064016101c6565b604081015160600151511561184b5760405162461bcd60e51b815260206004820152600c60248201526b199d5b991cc81b1bd8dad95960a21b60448201526064016101c6565b60008061186c83600001516102fa8560000151866040015160200151610e7c565b91509150801561198b5761187f836103af565b826080015103611890575050505050565b82602001516001600160401b031682604001516001600160401b0316106118eb5760405162461bcd60e51b815260206004820152600f60248201526e34b73b30b634b2103b32b939b4b7b760891b60448201526064016101c6565b606082015160ff16156119325760405162461bcd60e51b815260206004820152600f60248201526e696e636f727265637420706861736560881b60448201526064016101c6565b81516001600160401b0316421061198b5760405162461bcd60e51b815260206004820152601960248201527f72656675746174696f6e2074696d656f7574207061737365640000000000000060448201526064016101c6565b6103a884846000610fe3565b606081516001600160401b038111156119b2576119b2612614565b6040519080825280602002602001820160405280156119db578160200160208202803683370190505b50905060005b8251811015611a875760008382815181106119fe576119fe613276565b6020026020010151905060005b8151811015611a7257611a43828281518110611a2957611a29613276565b6020026020010151858581518110610bf857610bf8613276565b848481518110611a5557611a55613276565b602090810291909101015280611a6a816132b8565b915050611a0b565b50508080611a7f906132b8565b9150506119e1565b50919050565b8051825114611ade5760405162461bcd60e51b815260206004820152601760248201527f41737365745b5d3a20756e657175616c206c656e67746800000000000000000060448201526064016101c6565b60005b825181101561074257611b26838281518110611aff57611aff613276565b6020026020010151838381518110611b1957611b19613276565b6020026020010151611fa6565b80611b30816132b8565b915050611ae1565b8051825114611b895760405162461bcd60e51b815260206004820152601960248201527f75696e743235365b5d3a20756e657175616c206c656e6774680000000000000060448201526064016101c6565b60005b825181101561074257818181518110611ba757611ba7613276565b6020026020010151838281518110611bc157611bc1613276565b602002602001015114611c165760405162461bcd60e51b815260206004820152601760248201527f75696e743235365b5d3a20756e657175616c206974656d00000000000000000060448201526064016101c6565b80611c20816132b8565b915050611b8c565b60005b825181101561074257611c63828281518110611c4957611c49613276565b6020026020010151848381518110610bf857610bf8613276565b838281518110611c7557611c75613276565b602090810291909101015280611c8a816132b8565b915050611c2b565b6000806000611ca185856120a2565b91509150611cae81612110565b509392505050565b81604001515183604001515114611d0f5760405162461bcd60e51b815260206004820152601860248201527f62616c616e636573206c656e677468206d69736d61746368000000000000000060448201526064016101c6565b81515183515114611d5b5760405162461bcd60e51b81526020600482015260166024820152750c2e6e6cae8e640d8cadccee8d040dad2e6dac2e8c6d60531b60448201526064016101c6565b611d6d836060015183606001516122c9565b60005b82515181101561020b57611db184600001518281518110611d9357611d93613276565b602002602001015184600001518381518110611b1957611b19613276565b6000808386604001518481518110611dcb57611dcb613276565b60200260200101515114611e215760405162461bcd60e51b815260206004820152601c60248201527f6f6c642062616c616e636573206c656e677468206d69736d617463680000000060448201526064016101c6565b8385604001518481518110611e3857611e38613276565b60200260200101515114611e8e5760405162461bcd60e51b815260206004820152601c60248201527f6e65772062616c616e636573206c656e677468206d69736d617463680000000060448201526064016101c6565b60005b84811015611f4157611ee287604001518581518110611eb257611eb2613276565b60200260200101518281518110611ecb57611ecb613276565b60200260200101518461177b90919063ffffffff16565b9250611f2d86604001518581518110611efd57611efd613276565b60200260200101518281518110611f1657611f16613276565b60200260200101518361177b90919063ffffffff16565b915080611f39816132b8565b915050611e91565b50808214611f915760405162461bcd60e51b815260206004820152601860248201527f73756d206f662062616c616e636573206d69736d61746368000000000000000060448201526064016101c6565b50508080611f9e906132b8565b915050611d70565b8051825114611fe95760405162461bcd60e51b815260206004820152600f60248201526e1d5b995c5d585b0818da185a5b9251608a1b60448201526064016101c6565b80602001516001600160a01b031682602001516001600160a01b0316146120465760405162461bcd60e51b81526020600482015260116024820152703ab732b8bab0b61032ba342437b63232b960791b60448201526064016101c6565b8060400151805190602001208260400151805190602001201461209e5760405162461bcd60e51b815260206004820152601060248201526f3ab732b8bab0b61031b1a437b63232b960811b60448201526064016101c6565b5050565b60008082516041036120d85760208301516040840151606085015160001a6120cc87828585612374565b94509450505050612109565b825160400361210157602083015160408401516120f6868383612461565b935093505050612109565b506000905060025b9250929050565b60008160048111156121245761212461328c565b0361212c5750565b60018160048111156121405761214061328c565b0361218d5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016101c6565b60028160048111156121a1576121a161328c565b036121ee5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016101c6565b60038160048111156122025761220261328c565b0361225a5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016101c6565b600481600481111561226e5761226e61328c565b036122c65760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016101c6565b50565b805182511461231a5760405162461bcd60e51b815260206004820152601a60248201527f537562416c6c6f635b5d3a20756e657175616c206c656e67746800000000000060448201526064016101c6565b60005b82518110156107425761236283828151811061233b5761233b613276565b602002602001015183838151811061235557612355613276565b602002602001015161249a565b8061236c816132b8565b91505061231d565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156123ab5750600090506003612458565b8460ff16601b141580156123c357508460ff16601c14155b156123d45750600090506004612458565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612428573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661245157600060019250925050612458565b9150600090505b94509492505050565b6000806001600160ff1b0383168161247e60ff86901c601b613737565b905061248c87828885612374565b935093505050935093915050565b815181516124a891906116fd565b6124eb5760405162461bcd60e51b815260206004820152601460248201527314dd58905b1b1bd8ce881d5b995c5d585b08125160621b60448201526064016101c6565b6124fd82602001518260200151611b38565b61209e82604001518260400151805182511461255b5760405162461bcd60e51b815260206004820152601860248201527f75696e7431365b5d3a20756e657175616c206c656e677468000000000000000060448201526064016101c6565b60005b82518110156107425781818151811061257957612579613276565b602002602001015161ffff1683828151811061259757612597613276565b602002602001015161ffff16146125e95760405162461bcd60e51b815260206004820152601660248201527575696e7431365b5d3a20756e657175616c206974656d60501b60448201526064016101c6565b806125f3816132b8565b91505061255e565b60006020828403121561260d57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b038111828210171561264c5761264c612614565b60405290565b604080519081016001600160401b038111828210171561264c5761264c612614565b604051606081016001600160401b038111828210171561264c5761264c612614565b604051608081016001600160401b038111828210171561264c5761264c612614565b60405160a081016001600160401b038111828210171561264c5761264c612614565b604051601f8201601f191681016001600160401b038111828210171561270257612702612614565b604052919050565b60006001600160401b0382111561272357612723612614565b5060051b60200190565b80356001600160a01b038116811461274457600080fd5b919050565b600082601f83011261275a57600080fd5b81356001600160401b0381111561277357612773612614565b612786601f8201601f19166020016126da565b81815284602083860101111561279b57600080fd5b816020850160208301376000918101602001919091529392505050565b8035801515811461274457600080fd5b600060c082840312156127da57600080fd5b6127e261262a565b905081358152602080830135818301526040808401356001600160401b038082111561280d57600080fd5b818601915086601f83011261282157600080fd5b813561283461282f8261270a565b6126da565b81815260059190911b8301850190858101908983111561285357600080fd5b8685015b838110156128cd5780358581111561286f5760008081fd5b8601808c03601f19018813156128855760008081fd5b61288d612652565b6128988a830161272d565b815288820135878111156128ac5760008081fd5b6128ba8e8c83860101612749565b828c015250845250918701918701612857565b508086890152505050505050506128e66060830161272d565b60608201526128f7608083016127b8565b608082015261290860a083016127b8565b60a082015292915050565b600082601f83011261292457600080fd5b8135602061293461282f8361270a565b82815260059290921b8401810191818101908684111561295357600080fd5b8286015b8481101561296e5780358352918301918301612957565b509695505050505050565b80356001600160401b038116811461274457600080fd5b600082601f8301126129a157600080fd5b813560206129b161282f8361270a565b82815260059290921b840181019181810190868411156129d057600080fd5b8286015b8481101561296e5780356001600160401b03808211156129f45760008081fd5b908801906060828b03601f1901811315612a0e5760008081fd5b612a16612674565b8784013581526040612a2981860161272d565b828a0152918401359183831115612a405760008081fd5b612a4e8d8a85880101612749565b9082015286525050509183019183016129d4565b600082601f830112612a7357600080fd5b81356020612a8361282f8361270a565b82815260059290921b84018101918181019086841115612aa257600080fd5b8286015b8481101561296e5780356001600160401b03811115612ac55760008081fd5b612ad38986838b0101612913565b845250918301918301612aa6565b600082601f830112612af257600080fd5b81356020612b0261282f8361270a565b828152600592831b8501820192828201919087851115612b2157600080fd5b8387015b85811015612c4e5780356001600160401b0380821115612b455760008081fd5b908901906060828c03601f1901811315612b5f5760008081fd5b612b67612674565b8884013583811115612b795760008081fd5b612b878e8b83880101612913565b82525060408085013584811115612b9e5760008081fd5b612bac8f8c83890101612913565b838c015250918401359183831115612bc45760008081fd5b82850194508d603f860112612bdb57600093508384fd5b898501359350612bed61282f8561270a565b84815293871b85018101938a810193508e851115612c0b5760008081fd5b948101945b84861015612c3a57853561ffff81168114612c2b5760008081fd5b8452948a0194928a0192612c10565b908201528752505050928401928401612b25565b5090979650505050505050565b600060808284031215612c6d57600080fd5b612c75612696565b905081356001600160401b0380821115612c8e57600080fd5b612c9a85838601612990565b83526020840135915080821115612cb057600080fd5b612cbc85838601612913565b60208401526040840135915080821115612cd557600080fd5b612ce185838601612a62565b60408401526060840135915080821115612cfa57600080fd5b50612d0784828501612ae1565b60608301525092915050565b600060a08284031215612d2557600080fd5b612d2d6126b8565b905081356001600160401b0380821115612d4657600080fd5b612d5285838601612913565b8352612d6060208501612979565b60208401526040840135915080821115612d7957600080fd5b612d8585838601612c5b565b60408401526060840135915080821115612d9e57600080fd5b50612dab84828501612749565b606083015250612dbd608083016127b8565b608082015292915050565b600080600060608486031215612ddd57600080fd5b83356001600160401b0380821115612df457600080fd5b612e00878388016127c8565b9450602091508186013581811115612e1757600080fd5b612e2388828901612d13565b945050604086013581811115612e3857600080fd5b8601601f81018813612e4957600080fd5b8035612e5761282f8261270a565b81815260059190911b8201840190848101908a831115612e7657600080fd5b8584015b83811015612eae57803586811115612e925760008081fd5b612ea08d8983890101612d13565b845250918601918601612e7a565b508096505050505050509250925092565b600082601f830112612ed057600080fd5b81356020612ee061282f8361270a565b82815260059290921b84018101918181019086841115612eff57600080fd5b8286015b8481101561296e5780356001600160401b03811115612f225760008081fd5b612f308986838b0101612749565b845250918301918301612f03565b600080600060608486031215612f5357600080fd5b83356001600160401b0380821115612f6a57600080fd5b612f76878388016127c8565b94506020860135915080821115612f8c57600080fd5b612f9887838801612d13565b93506040860135915080821115612fae57600080fd5b50612fbb86828701612ebf565b9150509250925092565b600060208284031215612fd757600080fd5b81356001600160401b03811115612fed57600080fd5b612ff984828501612d13565b949350505050565b60006060828403121561301357600080fd5b61301b612674565b905081356001600160401b038082111561303457600080fd5b613040858386016127c8565b8352602084013591508082111561305657600080fd5b61306285838601612d13565b6020840152604084013591508082111561307b57600080fd5b5061308884828501612ebf565b60408301525092915050565b600080604083850312156130a757600080fd5b82356001600160401b03808211156130be57600080fd5b6130ca86838701613001565b93506020915081850135818111156130e157600080fd5b8501601f810187136130f257600080fd5b803561310061282f8261270a565b81815260059190911b8201840190848101908983111561311f57600080fd5b8584015b838110156131575780358681111561313b5760008081fd5b6131498c8983890101613001565b845250918601918601613123565b508096505050505050509250929050565b60006020828403121561317a57600080fd5b81356001600160401b0381111561319057600080fd5b612ff9848285016127c8565b600080600080600060a086880312156131b457600080fd5b85356001600160401b03808211156131cb57600080fd5b6131d789838a016127c8565b965060208801359150808211156131ed57600080fd5b6131f989838a01612d13565b9550604088013591508082111561320f57600080fd5b61321b89838a01612d13565b945060608801359350608088013591508082111561323857600080fd5b5061324588828901612749565b9150509295509295909350565b6020808252600a90820152693737ba103632b233b2b960b11b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016132ca576132ca6132a2565b5060010190565b6000815180845260005b818110156132f7576020818501810151868301820152016132db565b81811115613309576000602083870101525b50601f01601f19169290920160200192915050565b600081518084526020808501808196508360051b8101915082860160005b85811015613383578284038952815180516001600160a01b03168552850151604086860181905261336f818701836132d1565b9a87019a955050509084019060010161333c565b5091979650505050505050565b600081518084526020808501945080840160005b838110156133c0578151875295820195908201906001016133a4565b509495945050505050565b8381526060602082015260006133e4606083018561331e565b82810360408401526133f68185613390565b9695505050505050565b600081518084526020808501808196508360051b8101915082860160005b85811015613383578284038952613436848351613390565b9885019893509084019060010161341e565b600081518084526020808501808196508360051b810191508286016000805b868110156134fc578385038a5282516060815181885261348982890182613390565b91505087820151878203898901526134a18282613390565b604093840151898203948a01949094528351808252938a0193869350908a0191505b808310156134e757835161ffff1682529289019260019290920191908901906134c3565b509b88019b9650505091850191600101613467565b509298975050505050505050565b6000815160a0845261351f60a0850182613390565b905060206001600160401b03818501511681860152604080850151868403828801526080840181516080865281815180845260a08801915060a08160051b8901019350868301925060005b818110156135bd57888503609f19018352835180518652888101516001600160a01b03168987015287015160608887018190526135a9818801836132d1565b96505050928701929187019160010161356a565b5050505083820151858203858701526135d68282613390565b9450505081810151848403838601526135ef8482613400565b9350506060810151915050828203606084015261360c8282613448565b925050506060830151848203606086015261362782826132d1565b9150506080830151611cae608086018215159052565b602081526000611787602083018461350a565b80518252602081015160208301526000604082015160c0604085015261367960c085018261331e565b6060848101516001600160a01b03169086015260808085015115159086015260a0938401511515949093019390935250919050565b6020815260006117876020830184613650565b60006001600160401b038083168185168083038211156136e3576136e36132a2565b01949350505050565b6080815260006136ff6080830187613650565b8281036020840152613711818761350a565b90508281036040840152613725818661350a565b91505082606083015295945050505050565b6000821982111561374a5761374a6132a2565b50019056fea26469706673582212205530585eb54cf40e9a0fd5c6f2665357bbbc73417b63654a5f743cee7efd06a964736f6c634300080f0033", + Bin: "0x608060405234801561001057600080fd5b5061377d806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063848890001161005b578063848890001461014b578063c5457f0d1461016c578063db77bb271461017f578063e9bc418d1461019257600080fd5b806311be1997146100825780634176e7ae146101235780634c33077514610138575b600080fd5b6100dd6100903660046125f3565b6000602081905290815260409020805460018201546002909201546001600160401b0380831693600160401b8404821693600160801b81049092169260ff600160c01b9093048316921686565b604080516001600160401b0397881681529587166020870152939095169284019290925260ff166060830152608082015290151560a082015260c0015b60405180910390f35b610136610131366004612dc0565b6101a5565b005b610136610146366004612f36565b610211565b61015e610159366004612fbd565b6103af565b60405190815260200161011a565b61013661017a36600461308c565b6103c8565b61015e61018d366004613160565b6103f6565b6101366101a0366004613194565b610401565b82608001516101cf5760405162461bcd60e51b81526004016101c69061324a565b60405180910390fd5b6101d983836106bc565b6101e28261073e565b60006101f0838360006108ed565b508351604080860151519087015192935061020b9284610c90565b50505050565b82608001516102325760405162461bcd60e51b81526004016101c69061324a565b6080820151151560011461027a5760405162461bcd60e51b815260206004820152600f60248201526e1cdd185d19481b9bdd08199a5b985b608a1b60448201526064016101c6565b60408201516060015151156102c45760405162461bcd60e51b815260206004820152601060248201526f686173207375622d6368616e6e656c7360801b60448201526064016101c6565b6102ce83836106bc565b6102d9838383610d84565b60008061032084600001516102fa8660000151876040015160200151610e78565b6001600160401b0316815181106103135761031361326e565b6020026020010151610f30565b91509150801561037857600260ff16826060015160ff16036103785760405162461bcd60e51b8152602060048201526011602482015270636f6e636c7564656420616c726561647960781b60448201526064016101c6565b61038485856002610fdf565b6103a884600001518560400151600001518760400151876040015160400151610c90565b5050505050565b60006103ba82611101565b805190602001209050919050565b8151608001516103ea5760405162461bcd60e51b81526004016101c69061324a565b61020b8282600061112a565b60006103ba826112b6565b82516040840151602001516000916104449161041e908290610e78565b6001600160401b0316815181106104375761043761326e565b60200260200101516112c9565b606081015190915060ff166104a75780516001600160401b03164210156104a25760405162461bcd60e51b81526020600482015260126024820152711d1a5b595bdd5d081b9bdd081c185cdcd95960721b60448201526064016101c6565b61053b565b600160ff16816060015160ff16036105035780516001600160401b031642106104a25760405162461bcd60e51b815260206004820152600e60248201526d1d1a5b595bdd5d081c185cdcd95960921b60448201526064016101c6565b60405162461bcd60e51b815260206004820152600d60248201526c696e76616c696420706861736560981b60448201526064016101c6565b60608601516001600160a01b03166105855760405162461bcd60e51b815260206004820152600d60248201526c06d75737420686176652061707609c1b60448201526064016101c6565b85604001515183106105d15760405162461bcd60e51b81526020600482015260156024820152746163746f72496478206f7574206f662072616e676560581b60448201526064016101c6565b6105db86856106bc565b6105e4856103af565b8160800151146106285760405162461bcd60e51b815260206004820152600f60248201526e77726f6e67206f6c6420737461746560881b60448201526064016101c6565b61065c61063485611101565b838860400151868151811061064b5761064b61326e565b60200260200101516000015161134e565b61069c5760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964207369676e617475726560781b60448201526064016101c6565b6106a8868686866113d7565b6106b486856001610fdf565b505050505050565b6106c5826103f6565b81516040830151602001516106db908290610e78565b6001600160401b0316815181106106f4576106f461326e565b60200260200101511461073a5760405162461bcd60e51b815260206004820152600e60248201526d696e76616c696420706172616d7360901b60448201526064016101c6565b5050565b60006107568260000151836040015160200151610e78565b9050600061077c8360000151836001600160401b0316815181106104375761043761326e565b9050610787836103af565b8160800151146107c95760405162461bcd60e51b815260206004820152600d60248201526c696e76616c696420737461746560981b60448201526064016101c6565b600260ff16816060015160ff16036108175760405162461bcd60e51b8152602060048201526011602482015270185b1c9958591e4818dbdb98db1d591959607a1b60448201526064016101c6565b606081015160ff1615801561082d57508060a001515b1561085a576020810151815161084e916001600160401b039091169061150b565b6001600160401b031681525b80516001600160401b03164210156108ad5760405162461bcd60e51b81526020600482015260166024820152751d1a5b595bdd5d081b9bdd081c185cdcd959081e595d60521b60448201526064016101c6565b60025b60ff166060820152825180516108e891906001600160401b0385169081106108da576108da61326e565b602002602001015182611566565b505050565b606060006108fa85611658565b60408501515180516001600160401b038111156109195761091961260c565b60405190808252806020026020018201604052801561094c57816020015b60608152602001906001900390816109375790505b50925060005b8151811015610a8557600087604001516040015182815181106109775761097761326e565b6020026020010151905080516001600160401b0381111561099a5761099a61260c565b6040519080825280602002602001820160405280156109c3578160200160208202803683370190505b508583815181106109d6576109d661326e565b602002602001018190525060005b8151811015610a70578860400151604001518381518110610a0757610a0761326e565b60200260200101518181518110610a2057610a2061326e565b6020026020010151868481518110610a3a57610a3a61326e565b60200260200101518281518110610a5357610a5361326e565b602090810291909101015280610a68816132b0565b9150506109e4565b50508080610a7d906132b0565b915050610952565b5060408601516060015184925060005b8151811015610c85576000828281518110610ab257610ab261326e565b602002602001015190506000888680610aca906132b0565b975081518110610adc57610adc61326e565b60200260200101519050610af8826000015182600001516116f9565b610b3c5760405162461bcd60e51b81526020600482015260156024820152741a5b9d985b1a59081cdd5898da185b9b995b081a59605a1b60448201526064016101c6565b6060610b49828b896108ed565b604085015190985090915060005b8751811015610c6d5760005b8251811015610c5a576000848381518110610b8057610b8061326e565b60200260200101518281518110610b9957610b9961326e565b602002602001015190506000848381518110610bb757610bb761326e565b60200260200101519050610c0a828e8681518110610bd757610bd761326e565b60200260200101518361ffff1681518110610bf457610bf461326e565b602002602001015161177790919063ffffffff16565b8d8581518110610c1c57610c1c61326e565b60200260200101518261ffff1681518110610c3957610c3961326e565b60200260200101818152505050508080610c52906132b0565b915050610b63565b5080610c65816132b0565b915050610b57565b50505050508080610c7d906132b0565b915050610a95565b505050935093915050565b60005b83518110156103a8576000848281518110610cb057610cb061326e565b6020026020010151905046816000015103610d715760208101516001600160a01b031615610d715780602001516001600160a01b031663295482ce878481518110610cfd57610cfd61326e565b602002602001015186868681518110610d1857610d1861326e565b60200260200101516040518463ffffffff1660e01b8152600401610d3e939291906133c3565b600060405180830381600087803b158015610d5857600080fd5b505af1158015610d6c573d6000803e3d6000fd5b505050505b5080610d7c816132b0565b915050610c93565b6000610d8f83611101565b9050815184604001515114610de65760405162461bcd60e51b815260206004820152601a60248201527f7369676e617475726573206c656e677468206d69736d6174636800000000000060448201526064016101c6565b60005b82518110156103a857610e2682848381518110610e0857610e0861326e565b60200260200101518760400151848151811061064b5761064b61326e565b610e665760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964207369676e617475726560781b60448201526064016101c6565b80610e70816132b0565b915050610de9565b60008151835114610ec45760405162461bcd60e51b8152602060048201526016602482015275082e4e4c2f240d8cadccee8d0e640dad2e6dac2e8c6d60531b60448201526064016101c6565b81600081518110610ed757610ed761326e565b6020026020010151600103610eee57506000610f2a565b60018251118015610f19575081600181518110610f0d57610f0d61326e565b60200260200101516001145b15610f2657506001610f2a565b5060005b92915050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091525060009081526020818152604091829020825160c08101845281546001600160401b038082168352600160401b8204811694830194909452600160801b810490931693810193909352600160c01b90910460ff908116606084015260018201546080840181905260029092015416151560a0830152909190151590565b6000610ff78360000151846040015160200151610e78565b6001600160401b0316905060008061101e856000015184815181106103135761031361326e565b87516001600160401b0390811660208481019190915288015116604083015260608801516001600160a01b0316151560a0830152909250905083600281111561106957611069613284565b60ff16606083015261107a856103af565b6080808401919091528501511561109c576001600160401b03421682526110da565b8015806110b05750606082015160ff166001145b156110da5760208201516110ce906001600160401b0342169061150b565b6001600160401b031682525b6106b4856000015184815181106110f3576110f361326e565b602002602001015183611566565b6060816040516020016111149190613635565b6040516020818303038152906040529050919050565b602083015160400151805160609183916111438761178a565b6111508260400151611993565b93506000826060015190508651815111156111a55760405162461bcd60e51b81526020600482015260156024820152741cdd5890da185b9b995b1cc81d1bdbc81cda1bdc9d605a1b60448201526064016101c6565b60005b81518110156112aa57600088866111be816132b0565b9750815181106111d0576111d061326e565b602002602001015190506000808484815181106111ef576111ef61326e565b6020026020010151836020015191509150611212826000015182600001516116f9565b6112575760405162461bcd60e51b81526020600482015260166024820152751a5b9d985b1a59081cdd588b58da185b9b995b081a5960521b60448201526064016101c6565b6060611264848d8b61112a565b604084015151909a5090915061127b908890611a89565b611289836020015182611b34565b6112938a82611c24565b5050505080806112a2906132b0565b9150506111a8565b50505050935093915050565b60608160405160200161111491906136a6565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101829052908061130584610f30565b91509150806113475760405162461bcd60e51b815260206004820152600e60248201526d1b9bdd081c9959da5cdd195c995960921b60448201526064016101c6565b5092915050565b6000806113af85805190602001206040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b905060006113bd8286611c8e565b6001600160a01b0390811690851614925050509392505050565b60208301516113e79060016136b9565b6001600160401b031682602001516001600160401b0316146114445760405162461bcd60e51b81526020600482015260166024820152751d995c9cda5bdb881b5d5cdd081a5b98dc995b595b9d60521b60448201526064016101c6565b6080830151156114865760405162461bcd60e51b815260206004820152600d60248201526c185b1c9958591e48199a5b985b609a1b60448201526064016101c6565b61149e83604001518360400151866040015151611cb2565b60608401516040516206371b60ea1b81526001600160a01b038216906318dc6c00906114d49088908890889088906004016136e4565b60006040518083038186803b1580156114ec57600080fd5b505afa158015611500573d6000803e3d6000fd5b505050505050505050565b60006001600160401b03831661152183856136b9565b9150816001600160401b03161015610f2a5760405162461bcd60e51b81526020600482015260086024820152676f766572666c6f7760c01b60448201526064016101c6565b600082815260208181526040918290208351815485840151868601516060808901516001600160401b039586166fffffffffffffffffffffffffffffffff199095168517600160401b948716949094029390931768ffffffffffffffffff60801b1916600160801b9590921694850260ff60c01b191691909117600160c01b60ff9093169283021785556080880151600186015560a08801516002909501805460ff1916951515959095179094558551928352938201939093529283019190915283917f895ef5a5fc3efd313a300b006d6ce97ff0670dfe04f6eea90417edf924fa786b910160405180910390a25050565b60006116708260000151836040015160200151610e78565b905060006116968360000151836001600160401b0316815181106104375761043761326e565b90506116a1836103af565b8160800151146116e35760405162461bcd60e51b815260206004820152600d60248201526c696e76616c696420737461746560981b60448201526064016101c6565b606081015160ff166002146108e85760026108b0565b6000815183511461170c57506000610f2a565b60005b835181101561176d5782818151811061172a5761172a61326e565b60200260200101518482815181106117445761174461326e565b60200260200101511461175b576000915050610f2a565b80611765816132b0565b91505061170f565b5060019392505050565b6000611783828461372f565b9392505050565b8051602082015161179b82826106bc565b6117aa82828560400151610d84565b8160a00151156118475760608201516001600160a01b0316156118015760405162461bcd60e51b815260206004820152600f60248201526e063616e6e6f7420686176652061707608c1b60448201526064016101c6565b60408101516060015151156118475760405162461bcd60e51b815260206004820152600c60248201526b199d5b991cc81b1bd8dad95960a21b60448201526064016101c6565b60008061186883600001516102fa8560000151866040015160200151610e78565b9150915080156119875761187b836103af565b82608001510361188c575050505050565b82602001516001600160401b031682604001516001600160401b0316106118e75760405162461bcd60e51b815260206004820152600f60248201526e34b73b30b634b2103b32b939b4b7b760891b60448201526064016101c6565b606082015160ff161561192e5760405162461bcd60e51b815260206004820152600f60248201526e696e636f727265637420706861736560881b60448201526064016101c6565b81516001600160401b031642106119875760405162461bcd60e51b815260206004820152601960248201527f72656675746174696f6e2074696d656f7574207061737365640000000000000060448201526064016101c6565b6103a884846000610fdf565b606081516001600160401b038111156119ae576119ae61260c565b6040519080825280602002602001820160405280156119d7578160200160208202803683370190505b50905060005b8251811015611a835760008382815181106119fa576119fa61326e565b6020026020010151905060005b8151811015611a6e57611a3f828281518110611a2557611a2561326e565b6020026020010151858581518110610bf457610bf461326e565b848481518110611a5157611a5161326e565b602090810291909101015280611a66816132b0565b915050611a07565b50508080611a7b906132b0565b9150506119dd565b50919050565b8051825114611ada5760405162461bcd60e51b815260206004820152601760248201527f41737365745b5d3a20756e657175616c206c656e67746800000000000000000060448201526064016101c6565b60005b82518110156108e857611b22838281518110611afb57611afb61326e565b6020026020010151838381518110611b1557611b1561326e565b6020026020010151611fa2565b80611b2c816132b0565b915050611add565b8051825114611b855760405162461bcd60e51b815260206004820152601960248201527f75696e743235365b5d3a20756e657175616c206c656e6774680000000000000060448201526064016101c6565b60005b82518110156108e857818181518110611ba357611ba361326e565b6020026020010151838281518110611bbd57611bbd61326e565b602002602001015114611c125760405162461bcd60e51b815260206004820152601760248201527f75696e743235365b5d3a20756e657175616c206974656d00000000000000000060448201526064016101c6565b80611c1c816132b0565b915050611b88565b60005b82518110156108e857611c5f828281518110611c4557611c4561326e565b6020026020010151848381518110610bf457610bf461326e565b838281518110611c7157611c7161326e565b602090810291909101015280611c86816132b0565b915050611c27565b6000806000611c9d858561209a565b91509150611caa81612108565b509392505050565b81604001515183604001515114611d0b5760405162461bcd60e51b815260206004820152601860248201527f62616c616e636573206c656e677468206d69736d61746368000000000000000060448201526064016101c6565b81515183515114611d575760405162461bcd60e51b81526020600482015260166024820152750c2e6e6cae8e640d8cadccee8d040dad2e6dac2e8c6d60531b60448201526064016101c6565b611d69836060015183606001516122c1565b60005b82515181101561020b57611dad84600001518281518110611d8f57611d8f61326e565b602002602001015184600001518381518110611b1557611b1561326e565b6000808386604001518481518110611dc757611dc761326e565b60200260200101515114611e1d5760405162461bcd60e51b815260206004820152601c60248201527f6f6c642062616c616e636573206c656e677468206d69736d617463680000000060448201526064016101c6565b8385604001518481518110611e3457611e3461326e565b60200260200101515114611e8a5760405162461bcd60e51b815260206004820152601c60248201527f6e65772062616c616e636573206c656e677468206d69736d617463680000000060448201526064016101c6565b60005b84811015611f3d57611ede87604001518581518110611eae57611eae61326e565b60200260200101518281518110611ec757611ec761326e565b60200260200101518461177790919063ffffffff16565b9250611f2986604001518581518110611ef957611ef961326e565b60200260200101518281518110611f1257611f1261326e565b60200260200101518361177790919063ffffffff16565b915080611f35816132b0565b915050611e8d565b50808214611f8d5760405162461bcd60e51b815260206004820152601860248201527f73756d206f662062616c616e636573206d69736d61746368000000000000000060448201526064016101c6565b50508080611f9a906132b0565b915050611d6c565b8051825114611fe55760405162461bcd60e51b815260206004820152600f60248201526e1d5b995c5d585b0818da185a5b9251608a1b60448201526064016101c6565b80602001516001600160a01b031682602001516001600160a01b0316146120425760405162461bcd60e51b81526020600482015260116024820152703ab732b8bab0b61032ba342437b63232b960791b60448201526064016101c6565b8060400151805190602001208260400151805190602001201461073a5760405162461bcd60e51b815260206004820152601060248201526f3ab732b8bab0b61031b1a437b63232b960811b60448201526064016101c6565b60008082516041036120d05760208301516040840151606085015160001a6120c48782858561236c565b94509450505050612101565b82516040036120f957602083015160408401516120ee868383612459565b935093505050612101565b506000905060025b9250929050565b600081600481111561211c5761211c613284565b036121245750565b600181600481111561213857612138613284565b036121855760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016101c6565b600281600481111561219957612199613284565b036121e65760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016101c6565b60038160048111156121fa576121fa613284565b036122525760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016101c6565b600481600481111561226657612266613284565b036122be5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016101c6565b50565b80518251146123125760405162461bcd60e51b815260206004820152601a60248201527f537562416c6c6f635b5d3a20756e657175616c206c656e67746800000000000060448201526064016101c6565b60005b82518110156108e85761235a8382815181106123335761233361326e565b602002602001015183838151811061234d5761234d61326e565b6020026020010151612492565b80612364816132b0565b915050612315565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156123a35750600090506003612450565b8460ff16601b141580156123bb57508460ff16601c14155b156123cc5750600090506004612450565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612420573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661244957600060019250925050612450565b9150600090505b94509492505050565b6000806001600160ff1b0383168161247660ff86901c601b61372f565b90506124848782888561236c565b935093505050935093915050565b815181516124a091906116f9565b6124e35760405162461bcd60e51b815260206004820152601460248201527314dd58905b1b1bd8ce881d5b995c5d585b08125160621b60448201526064016101c6565b6124f582602001518260200151611b34565b61073a8260400151826040015180518251146125535760405162461bcd60e51b815260206004820152601860248201527f75696e7431365b5d3a20756e657175616c206c656e677468000000000000000060448201526064016101c6565b60005b82518110156108e8578181815181106125715761257161326e565b602002602001015161ffff1683828151811061258f5761258f61326e565b602002602001015161ffff16146125e15760405162461bcd60e51b815260206004820152601660248201527575696e7431365b5d3a20756e657175616c206974656d60501b60448201526064016101c6565b806125eb816132b0565b915050612556565b60006020828403121561260557600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b03811182821017156126445761264461260c565b60405290565b604080519081016001600160401b03811182821017156126445761264461260c565b604051606081016001600160401b03811182821017156126445761264461260c565b604051608081016001600160401b03811182821017156126445761264461260c565b60405160a081016001600160401b03811182821017156126445761264461260c565b604051601f8201601f191681016001600160401b03811182821017156126fa576126fa61260c565b604052919050565b60006001600160401b0382111561271b5761271b61260c565b5060051b60200190565b80356001600160a01b038116811461273c57600080fd5b919050565b600082601f83011261275257600080fd5b81356001600160401b0381111561276b5761276b61260c565b61277e601f8201601f19166020016126d2565b81815284602083860101111561279357600080fd5b816020850160208301376000918101602001919091529392505050565b8035801515811461273c57600080fd5b600060c082840312156127d257600080fd5b6127da612622565b905081358152602080830135818301526040808401356001600160401b038082111561280557600080fd5b818601915086601f83011261281957600080fd5b813561282c61282782612702565b6126d2565b81815260059190911b8301850190858101908983111561284b57600080fd5b8685015b838110156128c5578035858111156128675760008081fd5b8601808c03601f190188131561287d5760008081fd5b61288561264a565b6128908a8301612725565b815288820135878111156128a45760008081fd5b6128b28e8c83860101612741565b828c01525084525091870191870161284f565b508086890152505050505050506128de60608301612725565b60608201526128ef608083016127b0565b608082015261290060a083016127b0565b60a082015292915050565b600082601f83011261291c57600080fd5b8135602061292c61282783612702565b82815260059290921b8401810191818101908684111561294b57600080fd5b8286015b84811015612966578035835291830191830161294f565b509695505050505050565b80356001600160401b038116811461273c57600080fd5b600082601f83011261299957600080fd5b813560206129a961282783612702565b82815260059290921b840181019181810190868411156129c857600080fd5b8286015b848110156129665780356001600160401b03808211156129ec5760008081fd5b908801906060828b03601f1901811315612a065760008081fd5b612a0e61266c565b8784013581526040612a21818601612725565b828a0152918401359183831115612a385760008081fd5b612a468d8a85880101612741565b9082015286525050509183019183016129cc565b600082601f830112612a6b57600080fd5b81356020612a7b61282783612702565b82815260059290921b84018101918181019086841115612a9a57600080fd5b8286015b848110156129665780356001600160401b03811115612abd5760008081fd5b612acb8986838b010161290b565b845250918301918301612a9e565b600082601f830112612aea57600080fd5b81356020612afa61282783612702565b828152600592831b8501820192828201919087851115612b1957600080fd5b8387015b85811015612c465780356001600160401b0380821115612b3d5760008081fd5b908901906060828c03601f1901811315612b575760008081fd5b612b5f61266c565b8884013583811115612b715760008081fd5b612b7f8e8b8388010161290b565b82525060408085013584811115612b965760008081fd5b612ba48f8c8389010161290b565b838c015250918401359183831115612bbc5760008081fd5b82850194508d603f860112612bd357600093508384fd5b898501359350612be561282785612702565b84815293871b85018101938a810193508e851115612c035760008081fd5b948101945b84861015612c3257853561ffff81168114612c235760008081fd5b8452948a0194928a0192612c08565b908201528752505050928401928401612b1d565b5090979650505050505050565b600060808284031215612c6557600080fd5b612c6d61268e565b905081356001600160401b0380821115612c8657600080fd5b612c9285838601612988565b83526020840135915080821115612ca857600080fd5b612cb48583860161290b565b60208401526040840135915080821115612ccd57600080fd5b612cd985838601612a5a565b60408401526060840135915080821115612cf257600080fd5b50612cff84828501612ad9565b60608301525092915050565b600060a08284031215612d1d57600080fd5b612d256126b0565b905081356001600160401b0380821115612d3e57600080fd5b612d4a8583860161290b565b8352612d5860208501612971565b60208401526040840135915080821115612d7157600080fd5b612d7d85838601612c53565b60408401526060840135915080821115612d9657600080fd5b50612da384828501612741565b606083015250612db5608083016127b0565b608082015292915050565b600080600060608486031215612dd557600080fd5b83356001600160401b0380821115612dec57600080fd5b612df8878388016127c0565b9450602091508186013581811115612e0f57600080fd5b612e1b88828901612d0b565b945050604086013581811115612e3057600080fd5b8601601f81018813612e4157600080fd5b8035612e4f61282782612702565b81815260059190911b8201840190848101908a831115612e6e57600080fd5b8584015b83811015612ea657803586811115612e8a5760008081fd5b612e988d8983890101612d0b565b845250918601918601612e72565b508096505050505050509250925092565b600082601f830112612ec857600080fd5b81356020612ed861282783612702565b82815260059290921b84018101918181019086841115612ef757600080fd5b8286015b848110156129665780356001600160401b03811115612f1a5760008081fd5b612f288986838b0101612741565b845250918301918301612efb565b600080600060608486031215612f4b57600080fd5b83356001600160401b0380821115612f6257600080fd5b612f6e878388016127c0565b94506020860135915080821115612f8457600080fd5b612f9087838801612d0b565b93506040860135915080821115612fa657600080fd5b50612fb386828701612eb7565b9150509250925092565b600060208284031215612fcf57600080fd5b81356001600160401b03811115612fe557600080fd5b612ff184828501612d0b565b949350505050565b60006060828403121561300b57600080fd5b61301361266c565b905081356001600160401b038082111561302c57600080fd5b613038858386016127c0565b8352602084013591508082111561304e57600080fd5b61305a85838601612d0b565b6020840152604084013591508082111561307357600080fd5b5061308084828501612eb7565b60408301525092915050565b6000806040838503121561309f57600080fd5b82356001600160401b03808211156130b657600080fd5b6130c286838701612ff9565b93506020915081850135818111156130d957600080fd5b8501601f810187136130ea57600080fd5b80356130f861282782612702565b81815260059190911b8201840190848101908983111561311757600080fd5b8584015b8381101561314f578035868111156131335760008081fd5b6131418c8983890101612ff9565b84525091860191860161311b565b508096505050505050509250929050565b60006020828403121561317257600080fd5b81356001600160401b0381111561318857600080fd5b612ff1848285016127c0565b600080600080600060a086880312156131ac57600080fd5b85356001600160401b03808211156131c357600080fd5b6131cf89838a016127c0565b965060208801359150808211156131e557600080fd5b6131f189838a01612d0b565b9550604088013591508082111561320757600080fd5b61321389838a01612d0b565b945060608801359350608088013591508082111561323057600080fd5b5061323d88828901612741565b9150509295509295909350565b6020808252600a90820152693737ba103632b233b2b960b11b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016132c2576132c261329a565b5060010190565b6000815180845260005b818110156132ef576020818501810151868301820152016132d3565b81811115613301576000602083870101525b50601f01601f19169290920160200192915050565b600081518084526020808501808196508360051b8101915082860160005b8581101561337b578284038952815180516001600160a01b031685528501516040868601819052613367818701836132c9565b9a87019a9550505090840190600101613334565b5091979650505050505050565b600081518084526020808501945080840160005b838110156133b85781518752958201959082019060010161339c565b509495945050505050565b8381526060602082015260006133dc6060830185613316565b82810360408401526133ee8185613388565b9695505050505050565b600081518084526020808501808196508360051b8101915082860160005b8581101561337b57828403895261342e848351613388565b98850198935090840190600101613416565b600081518084526020808501808196508360051b810191508286016000805b868110156134f4578385038a5282516060815181885261348182890182613388565b91505087820151878203898901526134998282613388565b604093840151898203948a01949094528351808252938a0193869350908a0191505b808310156134df57835161ffff1682529289019260019290920191908901906134bb565b509b88019b965050509185019160010161345f565b509298975050505050505050565b6000815160a0845261351760a0850182613388565b905060206001600160401b03818501511681860152604080850151868403828801526080840181516080865281815180845260a08801915060a08160051b8901019350868301925060005b818110156135b557888503609f19018352835180518652888101516001600160a01b03168987015287015160608887018190526135a1818801836132c9565b965050509287019291870191600101613562565b5050505083820151858203858701526135ce8282613388565b9450505081810151848403838601526135e784826133f8565b935050606081015191505082820360608401526136048282613440565b925050506060830151848203606086015261361f82826132c9565b9150506080830151611caa608086018215159052565b6020815260006117836020830184613502565b80518252602081015160208301526000604082015160c0604085015261367160c0850182613316565b6060848101516001600160a01b03169086015260808085015115159086015260a0938401511515949093019390935250919050565b6020815260006117836020830184613648565b60006001600160401b038083168185168083038211156136db576136db61329a565b01949350505050565b6080815260006136f76080830187613648565b82810360208401526137098187613502565b9050828103604084015261371d8186613502565b91505082606083015295945050505050565b600082198211156137425761374261329a565b50019056fea264697066735822122072360af3f9d09ecb59a6118cb64bf57b459adba73f8383bf751eb5dd123f158c64736f6c634300080f0033", } // AdjudicatorABI is the input ABI used to generate the binding from. diff --git a/bindings/adjudicator/AdjudicatorBinRuntime.go b/bindings/adjudicator/AdjudicatorBinRuntime.go index e4f3493..d7676b8 100644 --- a/bindings/adjudicator/AdjudicatorBinRuntime.go +++ b/bindings/adjudicator/AdjudicatorBinRuntime.go @@ -1,4 +1,4 @@ package adjudicator // import "github.com/perun-network/perun-eth-backend/bindings/adjudicator" // AdjudicatorBinRuntime is the runtime part of the compiled bytecode used for deploying new contracts. -var AdjudicatorBinRuntime = "608060405234801561001057600080fd5b506004361061007d5760003560e01c8063848890001161005b578063848890001461014b578063c5457f0d1461016c578063db77bb271461017f578063e9bc418d1461019257600080fd5b806311be1997146100825780634176e7ae146101235780634c33077514610138575b600080fd5b6100dd6100903660046125fb565b6000602081905290815260409020805460018201546002909201546001600160401b0380831693600160401b8404821693600160801b81049092169260ff600160c01b9093048316921686565b604080516001600160401b0397881681529587166020870152939095169284019290925260ff166060830152608082015290151560a082015260c0015b60405180910390f35b610136610131366004612dc8565b6101a5565b005b610136610146366004612f3e565b610211565b61015e610159366004612fc5565b6103af565b60405190815260200161011a565b61013661017a366004613094565b6103c8565b61015e61018d366004613168565b6103f6565b6101366101a036600461319c565b610401565b82608001516101cf5760405162461bcd60e51b81526004016101c690613252565b60405180910390fd5b6101d983836106bc565b6101e282610747565b60006101f0838360006108f1565b508351604080860151519087015192935061020b9284610c94565b50505050565b82608001516102325760405162461bcd60e51b81526004016101c690613252565b6080820151151560011461027a5760405162461bcd60e51b815260206004820152600f60248201526e1cdd185d19481b9bdd08199a5b985b608a1b60448201526064016101c6565b60408201516060015151156102c45760405162461bcd60e51b815260206004820152601060248201526f686173207375622d6368616e6e656c7360801b60448201526064016101c6565b6102ce83836106bc565b6102d9838383610d88565b60008061032084600001516102fa8660000151876040015160200151610e7c565b6001600160401b03168151811061031357610313613276565b6020026020010151610f34565b91509150801561037857600260ff16826060015160ff16036103785760405162461bcd60e51b8152602060048201526011602482015270636f6e636c7564656420616c726561647960781b60448201526064016101c6565b61038485856002610fe3565b6103a884600001518560400151600001518760400151876040015160400151610c94565b5050505050565b60006103ba82611105565b805190602001209050919050565b8151608001516103ea5760405162461bcd60e51b81526004016101c690613252565b61020b8282600061112e565b60006103ba826112ba565b82516040840151602001516000916104449161041e908290610e7c565b6001600160401b03168151811061043757610437613276565b60200260200101516112cd565b606081015190915060ff166104a75780516001600160401b03164210156104a25760405162461bcd60e51b81526020600482015260126024820152711d1a5b595bdd5d081b9bdd081c185cdcd95960721b60448201526064016101c6565b61053b565b600160ff16816060015160ff16036105035780516001600160401b031642106104a25760405162461bcd60e51b815260206004820152600e60248201526d1d1a5b595bdd5d081c185cdcd95960921b60448201526064016101c6565b60405162461bcd60e51b815260206004820152600d60248201526c696e76616c696420706861736560981b60448201526064016101c6565b60608601516001600160a01b03166105855760405162461bcd60e51b815260206004820152600d60248201526c06d75737420686176652061707609c1b60448201526064016101c6565b85604001515183106105d15760405162461bcd60e51b81526020600482015260156024820152746163746f72496478206f7574206f662072616e676560581b60448201526064016101c6565b6105db86856106bc565b6105e4856103af565b8160800151146106285760405162461bcd60e51b815260206004820152600f60248201526e77726f6e67206f6c6420737461746560881b60448201526064016101c6565b61065c61063485611105565b838860400151868151811061064b5761064b613276565b602002602001015160000151611352565b61069c5760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964207369676e617475726560781b60448201526064016101c6565b6106a8868686866113db565b6106b486856001610fe3565b505050505050565b60006106d48260000151836040015160200151610e7c565b6001600160401b031690506106e8836103f6565b82518051839081106106fc576106fc613276565b6020026020010151146107425760405162461bcd60e51b815260206004820152600e60248201526d696e76616c696420706172616d7360901b60448201526064016101c6565b505050565b600061075f8260000151836040015160200151610e7c565b905060006107858360000151836001600160401b03168151811061043757610437613276565b9050610790836103af565b8160800151146107d25760405162461bcd60e51b815260206004820152600d60248201526c696e76616c696420737461746560981b60448201526064016101c6565b600260ff16816060015160ff16036108205760405162461bcd60e51b8152602060048201526011602482015270185b1c9958591e4818dbdb98db1d591959607a1b60448201526064016101c6565b606081015160ff1615801561083657508060a001515b156108635760208101518151610857916001600160401b039091169061150f565b6001600160401b031681525b80516001600160401b03164210156108b65760405162461bcd60e51b81526020600482015260166024820152751d1a5b595bdd5d081b9bdd081c185cdcd959081e595d60521b60448201526064016101c6565b60025b60ff1660608201528251805161074291906001600160401b0385169081106108e3576108e3613276565b60200260200101518261156a565b606060006108fe8561165c565b60408501515180516001600160401b0381111561091d5761091d612614565b60405190808252806020026020018201604052801561095057816020015b606081526020019060019003908161093b5790505b50925060005b8151811015610a89576000876040015160400151828151811061097b5761097b613276565b6020026020010151905080516001600160401b0381111561099e5761099e612614565b6040519080825280602002602001820160405280156109c7578160200160208202803683370190505b508583815181106109da576109da613276565b602002602001018190525060005b8151811015610a74578860400151604001518381518110610a0b57610a0b613276565b60200260200101518181518110610a2457610a24613276565b6020026020010151868481518110610a3e57610a3e613276565b60200260200101518281518110610a5757610a57613276565b602090810291909101015280610a6c816132b8565b9150506109e8565b50508080610a81906132b8565b915050610956565b5060408601516060015184925060005b8151811015610c89576000828281518110610ab657610ab6613276565b602002602001015190506000888680610ace906132b8565b975081518110610ae057610ae0613276565b60200260200101519050610afc826000015182600001516116fd565b610b405760405162461bcd60e51b81526020600482015260156024820152741a5b9d985b1a59081cdd5898da185b9b995b081a59605a1b60448201526064016101c6565b6060610b4d828b896108f1565b604085015190985090915060005b8751811015610c715760005b8251811015610c5e576000848381518110610b8457610b84613276565b60200260200101518281518110610b9d57610b9d613276565b602002602001015190506000848381518110610bbb57610bbb613276565b60200260200101519050610c0e828e8681518110610bdb57610bdb613276565b60200260200101518361ffff1681518110610bf857610bf8613276565b602002602001015161177b90919063ffffffff16565b8d8581518110610c2057610c20613276565b60200260200101518261ffff1681518110610c3d57610c3d613276565b60200260200101818152505050508080610c56906132b8565b915050610b67565b5080610c69816132b8565b915050610b5b565b50505050508080610c81906132b8565b915050610a99565b505050935093915050565b60005b83518110156103a8576000848281518110610cb457610cb4613276565b6020026020010151905046816000015103610d755760208101516001600160a01b031615610d755780602001516001600160a01b031663295482ce878481518110610d0157610d01613276565b602002602001015186868681518110610d1c57610d1c613276565b60200260200101516040518463ffffffff1660e01b8152600401610d42939291906133cb565b600060405180830381600087803b158015610d5c57600080fd5b505af1158015610d70573d6000803e3d6000fd5b505050505b5080610d80816132b8565b915050610c97565b6000610d9383611105565b9050815184604001515114610dea5760405162461bcd60e51b815260206004820152601a60248201527f7369676e617475726573206c656e677468206d69736d6174636800000000000060448201526064016101c6565b60005b82518110156103a857610e2a82848381518110610e0c57610e0c613276565b60200260200101518760400151848151811061064b5761064b613276565b610e6a5760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964207369676e617475726560781b60448201526064016101c6565b80610e74816132b8565b915050610ded565b60008151835114610ec85760405162461bcd60e51b8152602060048201526016602482015275082e4e4c2f240d8cadccee8d0e640dad2e6dac2e8c6d60531b60448201526064016101c6565b81600081518110610edb57610edb613276565b6020026020010151600103610ef257506000610f2e565b60018251118015610f1d575081600181518110610f1157610f11613276565b60200260200101516001145b15610f2a57506001610f2e565b5060005b92915050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091525060009081526020818152604091829020825160c08101845281546001600160401b038082168352600160401b8204811694830194909452600160801b810490931693810193909352600160c01b90910460ff908116606084015260018201546080840181905260029092015416151560a0830152909190151590565b6000610ffb8360000151846040015160200151610e7c565b6001600160401b031690506000806110228560000151848151811061031357610313613276565b87516001600160401b0390811660208481019190915288015116604083015260608801516001600160a01b0316151560a0830152909250905083600281111561106d5761106d61328c565b60ff16606083015261107e856103af565b608080840191909152850151156110a0576001600160401b03421682526110de565b8015806110b45750606082015160ff166001145b156110de5760208201516110d2906001600160401b0342169061150f565b6001600160401b031682525b6106b4856000015184815181106110f7576110f7613276565b60200260200101518361156a565b606081604051602001611118919061363d565b6040516020818303038152906040529050919050565b602083015160400151805160609183916111478761178e565b6111548260400151611997565b93506000826060015190508651815111156111a95760405162461bcd60e51b81526020600482015260156024820152741cdd5890da185b9b995b1cc81d1bdbc81cda1bdc9d605a1b60448201526064016101c6565b60005b81518110156112ae57600088866111c2816132b8565b9750815181106111d4576111d4613276565b602002602001015190506000808484815181106111f3576111f3613276565b6020026020010151836020015191509150611216826000015182600001516116fd565b61125b5760405162461bcd60e51b81526020600482015260166024820152751a5b9d985b1a59081cdd588b58da185b9b995b081a5960521b60448201526064016101c6565b6060611268848d8b61112e565b604084015151909a5090915061127f908890611a8d565b61128d836020015182611b38565b6112978a82611c28565b5050505080806112a6906132b8565b9150506111ac565b50505050935093915050565b60608160405160200161111891906136ae565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101829052908061130984610f34565b915091508061134b5760405162461bcd60e51b815260206004820152600e60248201526d1b9bdd081c9959da5cdd195c995960921b60448201526064016101c6565b5092915050565b6000806113b385805190602001206040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b905060006113c18286611c92565b6001600160a01b0390811690851614925050509392505050565b60208301516113eb9060016136c1565b6001600160401b031682602001516001600160401b0316146114485760405162461bcd60e51b81526020600482015260166024820152751d995c9cda5bdb881b5d5cdd081a5b98dc995b595b9d60521b60448201526064016101c6565b60808301511561148a5760405162461bcd60e51b815260206004820152600d60248201526c185b1c9958591e48199a5b985b609a1b60448201526064016101c6565b6114a283604001518360400151866040015151611cb6565b60608401516040516206371b60ea1b81526001600160a01b038216906318dc6c00906114d89088908890889088906004016136ec565b60006040518083038186803b1580156114f057600080fd5b505afa158015611504573d6000803e3d6000fd5b505050505050505050565b60006001600160401b03831661152583856136c1565b9150816001600160401b03161015610f2e5760405162461bcd60e51b81526020600482015260086024820152676f766572666c6f7760c01b60448201526064016101c6565b600082815260208181526040918290208351815485840151868601516060808901516001600160401b039586166fffffffffffffffffffffffffffffffff199095168517600160401b948716949094029390931768ffffffffffffffffff60801b1916600160801b9590921694850260ff60c01b191691909117600160c01b60ff9093169283021785556080880151600186015560a08801516002909501805460ff1916951515959095179094558551928352938201939093529283019190915283917f895ef5a5fc3efd313a300b006d6ce97ff0670dfe04f6eea90417edf924fa786b910160405180910390a25050565b60006116748260000151836040015160200151610e7c565b9050600061169a8360000151836001600160401b03168151811061043757610437613276565b90506116a5836103af565b8160800151146116e75760405162461bcd60e51b815260206004820152600d60248201526c696e76616c696420737461746560981b60448201526064016101c6565b606081015160ff166002146107425760026108b9565b6000815183511461171057506000610f2e565b60005b83518110156117715782818151811061172e5761172e613276565b602002602001015184828151811061174857611748613276565b60200260200101511461175f576000915050610f2e565b80611769816132b8565b915050611713565b5060019392505050565b60006117878284613737565b9392505050565b8051602082015161179f82826106bc565b6117ae82828560400151610d88565b8160a001511561184b5760608201516001600160a01b0316156118055760405162461bcd60e51b815260206004820152600f60248201526e063616e6e6f7420686176652061707608c1b60448201526064016101c6565b604081015160600151511561184b5760405162461bcd60e51b815260206004820152600c60248201526b199d5b991cc81b1bd8dad95960a21b60448201526064016101c6565b60008061186c83600001516102fa8560000151866040015160200151610e7c565b91509150801561198b5761187f836103af565b826080015103611890575050505050565b82602001516001600160401b031682604001516001600160401b0316106118eb5760405162461bcd60e51b815260206004820152600f60248201526e34b73b30b634b2103b32b939b4b7b760891b60448201526064016101c6565b606082015160ff16156119325760405162461bcd60e51b815260206004820152600f60248201526e696e636f727265637420706861736560881b60448201526064016101c6565b81516001600160401b0316421061198b5760405162461bcd60e51b815260206004820152601960248201527f72656675746174696f6e2074696d656f7574207061737365640000000000000060448201526064016101c6565b6103a884846000610fe3565b606081516001600160401b038111156119b2576119b2612614565b6040519080825280602002602001820160405280156119db578160200160208202803683370190505b50905060005b8251811015611a875760008382815181106119fe576119fe613276565b6020026020010151905060005b8151811015611a7257611a43828281518110611a2957611a29613276565b6020026020010151858581518110610bf857610bf8613276565b848481518110611a5557611a55613276565b602090810291909101015280611a6a816132b8565b915050611a0b565b50508080611a7f906132b8565b9150506119e1565b50919050565b8051825114611ade5760405162461bcd60e51b815260206004820152601760248201527f41737365745b5d3a20756e657175616c206c656e67746800000000000000000060448201526064016101c6565b60005b825181101561074257611b26838281518110611aff57611aff613276565b6020026020010151838381518110611b1957611b19613276565b6020026020010151611fa6565b80611b30816132b8565b915050611ae1565b8051825114611b895760405162461bcd60e51b815260206004820152601960248201527f75696e743235365b5d3a20756e657175616c206c656e6774680000000000000060448201526064016101c6565b60005b825181101561074257818181518110611ba757611ba7613276565b6020026020010151838281518110611bc157611bc1613276565b602002602001015114611c165760405162461bcd60e51b815260206004820152601760248201527f75696e743235365b5d3a20756e657175616c206974656d00000000000000000060448201526064016101c6565b80611c20816132b8565b915050611b8c565b60005b825181101561074257611c63828281518110611c4957611c49613276565b6020026020010151848381518110610bf857610bf8613276565b838281518110611c7557611c75613276565b602090810291909101015280611c8a816132b8565b915050611c2b565b6000806000611ca185856120a2565b91509150611cae81612110565b509392505050565b81604001515183604001515114611d0f5760405162461bcd60e51b815260206004820152601860248201527f62616c616e636573206c656e677468206d69736d61746368000000000000000060448201526064016101c6565b81515183515114611d5b5760405162461bcd60e51b81526020600482015260166024820152750c2e6e6cae8e640d8cadccee8d040dad2e6dac2e8c6d60531b60448201526064016101c6565b611d6d836060015183606001516122c9565b60005b82515181101561020b57611db184600001518281518110611d9357611d93613276565b602002602001015184600001518381518110611b1957611b19613276565b6000808386604001518481518110611dcb57611dcb613276565b60200260200101515114611e215760405162461bcd60e51b815260206004820152601c60248201527f6f6c642062616c616e636573206c656e677468206d69736d617463680000000060448201526064016101c6565b8385604001518481518110611e3857611e38613276565b60200260200101515114611e8e5760405162461bcd60e51b815260206004820152601c60248201527f6e65772062616c616e636573206c656e677468206d69736d617463680000000060448201526064016101c6565b60005b84811015611f4157611ee287604001518581518110611eb257611eb2613276565b60200260200101518281518110611ecb57611ecb613276565b60200260200101518461177b90919063ffffffff16565b9250611f2d86604001518581518110611efd57611efd613276565b60200260200101518281518110611f1657611f16613276565b60200260200101518361177b90919063ffffffff16565b915080611f39816132b8565b915050611e91565b50808214611f915760405162461bcd60e51b815260206004820152601860248201527f73756d206f662062616c616e636573206d69736d61746368000000000000000060448201526064016101c6565b50508080611f9e906132b8565b915050611d70565b8051825114611fe95760405162461bcd60e51b815260206004820152600f60248201526e1d5b995c5d585b0818da185a5b9251608a1b60448201526064016101c6565b80602001516001600160a01b031682602001516001600160a01b0316146120465760405162461bcd60e51b81526020600482015260116024820152703ab732b8bab0b61032ba342437b63232b960791b60448201526064016101c6565b8060400151805190602001208260400151805190602001201461209e5760405162461bcd60e51b815260206004820152601060248201526f3ab732b8bab0b61031b1a437b63232b960811b60448201526064016101c6565b5050565b60008082516041036120d85760208301516040840151606085015160001a6120cc87828585612374565b94509450505050612109565b825160400361210157602083015160408401516120f6868383612461565b935093505050612109565b506000905060025b9250929050565b60008160048111156121245761212461328c565b0361212c5750565b60018160048111156121405761214061328c565b0361218d5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016101c6565b60028160048111156121a1576121a161328c565b036121ee5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016101c6565b60038160048111156122025761220261328c565b0361225a5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016101c6565b600481600481111561226e5761226e61328c565b036122c65760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016101c6565b50565b805182511461231a5760405162461bcd60e51b815260206004820152601a60248201527f537562416c6c6f635b5d3a20756e657175616c206c656e67746800000000000060448201526064016101c6565b60005b82518110156107425761236283828151811061233b5761233b613276565b602002602001015183838151811061235557612355613276565b602002602001015161249a565b8061236c816132b8565b91505061231d565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156123ab5750600090506003612458565b8460ff16601b141580156123c357508460ff16601c14155b156123d45750600090506004612458565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612428573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661245157600060019250925050612458565b9150600090505b94509492505050565b6000806001600160ff1b0383168161247e60ff86901c601b613737565b905061248c87828885612374565b935093505050935093915050565b815181516124a891906116fd565b6124eb5760405162461bcd60e51b815260206004820152601460248201527314dd58905b1b1bd8ce881d5b995c5d585b08125160621b60448201526064016101c6565b6124fd82602001518260200151611b38565b61209e82604001518260400151805182511461255b5760405162461bcd60e51b815260206004820152601860248201527f75696e7431365b5d3a20756e657175616c206c656e677468000000000000000060448201526064016101c6565b60005b82518110156107425781818151811061257957612579613276565b602002602001015161ffff1683828151811061259757612597613276565b602002602001015161ffff16146125e95760405162461bcd60e51b815260206004820152601660248201527575696e7431365b5d3a20756e657175616c206974656d60501b60448201526064016101c6565b806125f3816132b8565b91505061255e565b60006020828403121561260d57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b038111828210171561264c5761264c612614565b60405290565b604080519081016001600160401b038111828210171561264c5761264c612614565b604051606081016001600160401b038111828210171561264c5761264c612614565b604051608081016001600160401b038111828210171561264c5761264c612614565b60405160a081016001600160401b038111828210171561264c5761264c612614565b604051601f8201601f191681016001600160401b038111828210171561270257612702612614565b604052919050565b60006001600160401b0382111561272357612723612614565b5060051b60200190565b80356001600160a01b038116811461274457600080fd5b919050565b600082601f83011261275a57600080fd5b81356001600160401b0381111561277357612773612614565b612786601f8201601f19166020016126da565b81815284602083860101111561279b57600080fd5b816020850160208301376000918101602001919091529392505050565b8035801515811461274457600080fd5b600060c082840312156127da57600080fd5b6127e261262a565b905081358152602080830135818301526040808401356001600160401b038082111561280d57600080fd5b818601915086601f83011261282157600080fd5b813561283461282f8261270a565b6126da565b81815260059190911b8301850190858101908983111561285357600080fd5b8685015b838110156128cd5780358581111561286f5760008081fd5b8601808c03601f19018813156128855760008081fd5b61288d612652565b6128988a830161272d565b815288820135878111156128ac5760008081fd5b6128ba8e8c83860101612749565b828c015250845250918701918701612857565b508086890152505050505050506128e66060830161272d565b60608201526128f7608083016127b8565b608082015261290860a083016127b8565b60a082015292915050565b600082601f83011261292457600080fd5b8135602061293461282f8361270a565b82815260059290921b8401810191818101908684111561295357600080fd5b8286015b8481101561296e5780358352918301918301612957565b509695505050505050565b80356001600160401b038116811461274457600080fd5b600082601f8301126129a157600080fd5b813560206129b161282f8361270a565b82815260059290921b840181019181810190868411156129d057600080fd5b8286015b8481101561296e5780356001600160401b03808211156129f45760008081fd5b908801906060828b03601f1901811315612a0e5760008081fd5b612a16612674565b8784013581526040612a2981860161272d565b828a0152918401359183831115612a405760008081fd5b612a4e8d8a85880101612749565b9082015286525050509183019183016129d4565b600082601f830112612a7357600080fd5b81356020612a8361282f8361270a565b82815260059290921b84018101918181019086841115612aa257600080fd5b8286015b8481101561296e5780356001600160401b03811115612ac55760008081fd5b612ad38986838b0101612913565b845250918301918301612aa6565b600082601f830112612af257600080fd5b81356020612b0261282f8361270a565b828152600592831b8501820192828201919087851115612b2157600080fd5b8387015b85811015612c4e5780356001600160401b0380821115612b455760008081fd5b908901906060828c03601f1901811315612b5f5760008081fd5b612b67612674565b8884013583811115612b795760008081fd5b612b878e8b83880101612913565b82525060408085013584811115612b9e5760008081fd5b612bac8f8c83890101612913565b838c015250918401359183831115612bc45760008081fd5b82850194508d603f860112612bdb57600093508384fd5b898501359350612bed61282f8561270a565b84815293871b85018101938a810193508e851115612c0b5760008081fd5b948101945b84861015612c3a57853561ffff81168114612c2b5760008081fd5b8452948a0194928a0192612c10565b908201528752505050928401928401612b25565b5090979650505050505050565b600060808284031215612c6d57600080fd5b612c75612696565b905081356001600160401b0380821115612c8e57600080fd5b612c9a85838601612990565b83526020840135915080821115612cb057600080fd5b612cbc85838601612913565b60208401526040840135915080821115612cd557600080fd5b612ce185838601612a62565b60408401526060840135915080821115612cfa57600080fd5b50612d0784828501612ae1565b60608301525092915050565b600060a08284031215612d2557600080fd5b612d2d6126b8565b905081356001600160401b0380821115612d4657600080fd5b612d5285838601612913565b8352612d6060208501612979565b60208401526040840135915080821115612d7957600080fd5b612d8585838601612c5b565b60408401526060840135915080821115612d9e57600080fd5b50612dab84828501612749565b606083015250612dbd608083016127b8565b608082015292915050565b600080600060608486031215612ddd57600080fd5b83356001600160401b0380821115612df457600080fd5b612e00878388016127c8565b9450602091508186013581811115612e1757600080fd5b612e2388828901612d13565b945050604086013581811115612e3857600080fd5b8601601f81018813612e4957600080fd5b8035612e5761282f8261270a565b81815260059190911b8201840190848101908a831115612e7657600080fd5b8584015b83811015612eae57803586811115612e925760008081fd5b612ea08d8983890101612d13565b845250918601918601612e7a565b508096505050505050509250925092565b600082601f830112612ed057600080fd5b81356020612ee061282f8361270a565b82815260059290921b84018101918181019086841115612eff57600080fd5b8286015b8481101561296e5780356001600160401b03811115612f225760008081fd5b612f308986838b0101612749565b845250918301918301612f03565b600080600060608486031215612f5357600080fd5b83356001600160401b0380821115612f6a57600080fd5b612f76878388016127c8565b94506020860135915080821115612f8c57600080fd5b612f9887838801612d13565b93506040860135915080821115612fae57600080fd5b50612fbb86828701612ebf565b9150509250925092565b600060208284031215612fd757600080fd5b81356001600160401b03811115612fed57600080fd5b612ff984828501612d13565b949350505050565b60006060828403121561301357600080fd5b61301b612674565b905081356001600160401b038082111561303457600080fd5b613040858386016127c8565b8352602084013591508082111561305657600080fd5b61306285838601612d13565b6020840152604084013591508082111561307b57600080fd5b5061308884828501612ebf565b60408301525092915050565b600080604083850312156130a757600080fd5b82356001600160401b03808211156130be57600080fd5b6130ca86838701613001565b93506020915081850135818111156130e157600080fd5b8501601f810187136130f257600080fd5b803561310061282f8261270a565b81815260059190911b8201840190848101908983111561311f57600080fd5b8584015b838110156131575780358681111561313b5760008081fd5b6131498c8983890101613001565b845250918601918601613123565b508096505050505050509250929050565b60006020828403121561317a57600080fd5b81356001600160401b0381111561319057600080fd5b612ff9848285016127c8565b600080600080600060a086880312156131b457600080fd5b85356001600160401b03808211156131cb57600080fd5b6131d789838a016127c8565b965060208801359150808211156131ed57600080fd5b6131f989838a01612d13565b9550604088013591508082111561320f57600080fd5b61321b89838a01612d13565b945060608801359350608088013591508082111561323857600080fd5b5061324588828901612749565b9150509295509295909350565b6020808252600a90820152693737ba103632b233b2b960b11b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016132ca576132ca6132a2565b5060010190565b6000815180845260005b818110156132f7576020818501810151868301820152016132db565b81811115613309576000602083870101525b50601f01601f19169290920160200192915050565b600081518084526020808501808196508360051b8101915082860160005b85811015613383578284038952815180516001600160a01b03168552850151604086860181905261336f818701836132d1565b9a87019a955050509084019060010161333c565b5091979650505050505050565b600081518084526020808501945080840160005b838110156133c0578151875295820195908201906001016133a4565b509495945050505050565b8381526060602082015260006133e4606083018561331e565b82810360408401526133f68185613390565b9695505050505050565b600081518084526020808501808196508360051b8101915082860160005b85811015613383578284038952613436848351613390565b9885019893509084019060010161341e565b600081518084526020808501808196508360051b810191508286016000805b868110156134fc578385038a5282516060815181885261348982890182613390565b91505087820151878203898901526134a18282613390565b604093840151898203948a01949094528351808252938a0193869350908a0191505b808310156134e757835161ffff1682529289019260019290920191908901906134c3565b509b88019b9650505091850191600101613467565b509298975050505050505050565b6000815160a0845261351f60a0850182613390565b905060206001600160401b03818501511681860152604080850151868403828801526080840181516080865281815180845260a08801915060a08160051b8901019350868301925060005b818110156135bd57888503609f19018352835180518652888101516001600160a01b03168987015287015160608887018190526135a9818801836132d1565b96505050928701929187019160010161356a565b5050505083820151858203858701526135d68282613390565b9450505081810151848403838601526135ef8482613400565b9350506060810151915050828203606084015261360c8282613448565b925050506060830151848203606086015261362782826132d1565b9150506080830151611cae608086018215159052565b602081526000611787602083018461350a565b80518252602081015160208301526000604082015160c0604085015261367960c085018261331e565b6060848101516001600160a01b03169086015260808085015115159086015260a0938401511515949093019390935250919050565b6020815260006117876020830184613650565b60006001600160401b038083168185168083038211156136e3576136e36132a2565b01949350505050565b6080815260006136ff6080830187613650565b8281036020840152613711818761350a565b90508281036040840152613725818661350a565b91505082606083015295945050505050565b6000821982111561374a5761374a6132a2565b50019056fea26469706673582212205530585eb54cf40e9a0fd5c6f2665357bbbc73417b63654a5f743cee7efd06a964736f6c634300080f0033" +var AdjudicatorBinRuntime = "608060405234801561001057600080fd5b506004361061007d5760003560e01c8063848890001161005b578063848890001461014b578063c5457f0d1461016c578063db77bb271461017f578063e9bc418d1461019257600080fd5b806311be1997146100825780634176e7ae146101235780634c33077514610138575b600080fd5b6100dd6100903660046125f3565b6000602081905290815260409020805460018201546002909201546001600160401b0380831693600160401b8404821693600160801b81049092169260ff600160c01b9093048316921686565b604080516001600160401b0397881681529587166020870152939095169284019290925260ff166060830152608082015290151560a082015260c0015b60405180910390f35b610136610131366004612dc0565b6101a5565b005b610136610146366004612f36565b610211565b61015e610159366004612fbd565b6103af565b60405190815260200161011a565b61013661017a36600461308c565b6103c8565b61015e61018d366004613160565b6103f6565b6101366101a0366004613194565b610401565b82608001516101cf5760405162461bcd60e51b81526004016101c69061324a565b60405180910390fd5b6101d983836106bc565b6101e28261073e565b60006101f0838360006108ed565b508351604080860151519087015192935061020b9284610c90565b50505050565b82608001516102325760405162461bcd60e51b81526004016101c69061324a565b6080820151151560011461027a5760405162461bcd60e51b815260206004820152600f60248201526e1cdd185d19481b9bdd08199a5b985b608a1b60448201526064016101c6565b60408201516060015151156102c45760405162461bcd60e51b815260206004820152601060248201526f686173207375622d6368616e6e656c7360801b60448201526064016101c6565b6102ce83836106bc565b6102d9838383610d84565b60008061032084600001516102fa8660000151876040015160200151610e78565b6001600160401b0316815181106103135761031361326e565b6020026020010151610f30565b91509150801561037857600260ff16826060015160ff16036103785760405162461bcd60e51b8152602060048201526011602482015270636f6e636c7564656420616c726561647960781b60448201526064016101c6565b61038485856002610fdf565b6103a884600001518560400151600001518760400151876040015160400151610c90565b5050505050565b60006103ba82611101565b805190602001209050919050565b8151608001516103ea5760405162461bcd60e51b81526004016101c69061324a565b61020b8282600061112a565b60006103ba826112b6565b82516040840151602001516000916104449161041e908290610e78565b6001600160401b0316815181106104375761043761326e565b60200260200101516112c9565b606081015190915060ff166104a75780516001600160401b03164210156104a25760405162461bcd60e51b81526020600482015260126024820152711d1a5b595bdd5d081b9bdd081c185cdcd95960721b60448201526064016101c6565b61053b565b600160ff16816060015160ff16036105035780516001600160401b031642106104a25760405162461bcd60e51b815260206004820152600e60248201526d1d1a5b595bdd5d081c185cdcd95960921b60448201526064016101c6565b60405162461bcd60e51b815260206004820152600d60248201526c696e76616c696420706861736560981b60448201526064016101c6565b60608601516001600160a01b03166105855760405162461bcd60e51b815260206004820152600d60248201526c06d75737420686176652061707609c1b60448201526064016101c6565b85604001515183106105d15760405162461bcd60e51b81526020600482015260156024820152746163746f72496478206f7574206f662072616e676560581b60448201526064016101c6565b6105db86856106bc565b6105e4856103af565b8160800151146106285760405162461bcd60e51b815260206004820152600f60248201526e77726f6e67206f6c6420737461746560881b60448201526064016101c6565b61065c61063485611101565b838860400151868151811061064b5761064b61326e565b60200260200101516000015161134e565b61069c5760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964207369676e617475726560781b60448201526064016101c6565b6106a8868686866113d7565b6106b486856001610fdf565b505050505050565b6106c5826103f6565b81516040830151602001516106db908290610e78565b6001600160401b0316815181106106f4576106f461326e565b60200260200101511461073a5760405162461bcd60e51b815260206004820152600e60248201526d696e76616c696420706172616d7360901b60448201526064016101c6565b5050565b60006107568260000151836040015160200151610e78565b9050600061077c8360000151836001600160401b0316815181106104375761043761326e565b9050610787836103af565b8160800151146107c95760405162461bcd60e51b815260206004820152600d60248201526c696e76616c696420737461746560981b60448201526064016101c6565b600260ff16816060015160ff16036108175760405162461bcd60e51b8152602060048201526011602482015270185b1c9958591e4818dbdb98db1d591959607a1b60448201526064016101c6565b606081015160ff1615801561082d57508060a001515b1561085a576020810151815161084e916001600160401b039091169061150b565b6001600160401b031681525b80516001600160401b03164210156108ad5760405162461bcd60e51b81526020600482015260166024820152751d1a5b595bdd5d081b9bdd081c185cdcd959081e595d60521b60448201526064016101c6565b60025b60ff166060820152825180516108e891906001600160401b0385169081106108da576108da61326e565b602002602001015182611566565b505050565b606060006108fa85611658565b60408501515180516001600160401b038111156109195761091961260c565b60405190808252806020026020018201604052801561094c57816020015b60608152602001906001900390816109375790505b50925060005b8151811015610a8557600087604001516040015182815181106109775761097761326e565b6020026020010151905080516001600160401b0381111561099a5761099a61260c565b6040519080825280602002602001820160405280156109c3578160200160208202803683370190505b508583815181106109d6576109d661326e565b602002602001018190525060005b8151811015610a70578860400151604001518381518110610a0757610a0761326e565b60200260200101518181518110610a2057610a2061326e565b6020026020010151868481518110610a3a57610a3a61326e565b60200260200101518281518110610a5357610a5361326e565b602090810291909101015280610a68816132b0565b9150506109e4565b50508080610a7d906132b0565b915050610952565b5060408601516060015184925060005b8151811015610c85576000828281518110610ab257610ab261326e565b602002602001015190506000888680610aca906132b0565b975081518110610adc57610adc61326e565b60200260200101519050610af8826000015182600001516116f9565b610b3c5760405162461bcd60e51b81526020600482015260156024820152741a5b9d985b1a59081cdd5898da185b9b995b081a59605a1b60448201526064016101c6565b6060610b49828b896108ed565b604085015190985090915060005b8751811015610c6d5760005b8251811015610c5a576000848381518110610b8057610b8061326e565b60200260200101518281518110610b9957610b9961326e565b602002602001015190506000848381518110610bb757610bb761326e565b60200260200101519050610c0a828e8681518110610bd757610bd761326e565b60200260200101518361ffff1681518110610bf457610bf461326e565b602002602001015161177790919063ffffffff16565b8d8581518110610c1c57610c1c61326e565b60200260200101518261ffff1681518110610c3957610c3961326e565b60200260200101818152505050508080610c52906132b0565b915050610b63565b5080610c65816132b0565b915050610b57565b50505050508080610c7d906132b0565b915050610a95565b505050935093915050565b60005b83518110156103a8576000848281518110610cb057610cb061326e565b6020026020010151905046816000015103610d715760208101516001600160a01b031615610d715780602001516001600160a01b031663295482ce878481518110610cfd57610cfd61326e565b602002602001015186868681518110610d1857610d1861326e565b60200260200101516040518463ffffffff1660e01b8152600401610d3e939291906133c3565b600060405180830381600087803b158015610d5857600080fd5b505af1158015610d6c573d6000803e3d6000fd5b505050505b5080610d7c816132b0565b915050610c93565b6000610d8f83611101565b9050815184604001515114610de65760405162461bcd60e51b815260206004820152601a60248201527f7369676e617475726573206c656e677468206d69736d6174636800000000000060448201526064016101c6565b60005b82518110156103a857610e2682848381518110610e0857610e0861326e565b60200260200101518760400151848151811061064b5761064b61326e565b610e665760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964207369676e617475726560781b60448201526064016101c6565b80610e70816132b0565b915050610de9565b60008151835114610ec45760405162461bcd60e51b8152602060048201526016602482015275082e4e4c2f240d8cadccee8d0e640dad2e6dac2e8c6d60531b60448201526064016101c6565b81600081518110610ed757610ed761326e565b6020026020010151600103610eee57506000610f2a565b60018251118015610f19575081600181518110610f0d57610f0d61326e565b60200260200101516001145b15610f2657506001610f2a565b5060005b92915050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091525060009081526020818152604091829020825160c08101845281546001600160401b038082168352600160401b8204811694830194909452600160801b810490931693810193909352600160c01b90910460ff908116606084015260018201546080840181905260029092015416151560a0830152909190151590565b6000610ff78360000151846040015160200151610e78565b6001600160401b0316905060008061101e856000015184815181106103135761031361326e565b87516001600160401b0390811660208481019190915288015116604083015260608801516001600160a01b0316151560a0830152909250905083600281111561106957611069613284565b60ff16606083015261107a856103af565b6080808401919091528501511561109c576001600160401b03421682526110da565b8015806110b05750606082015160ff166001145b156110da5760208201516110ce906001600160401b0342169061150b565b6001600160401b031682525b6106b4856000015184815181106110f3576110f361326e565b602002602001015183611566565b6060816040516020016111149190613635565b6040516020818303038152906040529050919050565b602083015160400151805160609183916111438761178a565b6111508260400151611993565b93506000826060015190508651815111156111a55760405162461bcd60e51b81526020600482015260156024820152741cdd5890da185b9b995b1cc81d1bdbc81cda1bdc9d605a1b60448201526064016101c6565b60005b81518110156112aa57600088866111be816132b0565b9750815181106111d0576111d061326e565b602002602001015190506000808484815181106111ef576111ef61326e565b6020026020010151836020015191509150611212826000015182600001516116f9565b6112575760405162461bcd60e51b81526020600482015260166024820152751a5b9d985b1a59081cdd588b58da185b9b995b081a5960521b60448201526064016101c6565b6060611264848d8b61112a565b604084015151909a5090915061127b908890611a89565b611289836020015182611b34565b6112938a82611c24565b5050505080806112a2906132b0565b9150506111a8565b50505050935093915050565b60608160405160200161111491906136a6565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101829052908061130584610f30565b91509150806113475760405162461bcd60e51b815260206004820152600e60248201526d1b9bdd081c9959da5cdd195c995960921b60448201526064016101c6565b5092915050565b6000806113af85805190602001206040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b905060006113bd8286611c8e565b6001600160a01b0390811690851614925050509392505050565b60208301516113e79060016136b9565b6001600160401b031682602001516001600160401b0316146114445760405162461bcd60e51b81526020600482015260166024820152751d995c9cda5bdb881b5d5cdd081a5b98dc995b595b9d60521b60448201526064016101c6565b6080830151156114865760405162461bcd60e51b815260206004820152600d60248201526c185b1c9958591e48199a5b985b609a1b60448201526064016101c6565b61149e83604001518360400151866040015151611cb2565b60608401516040516206371b60ea1b81526001600160a01b038216906318dc6c00906114d49088908890889088906004016136e4565b60006040518083038186803b1580156114ec57600080fd5b505afa158015611500573d6000803e3d6000fd5b505050505050505050565b60006001600160401b03831661152183856136b9565b9150816001600160401b03161015610f2a5760405162461bcd60e51b81526020600482015260086024820152676f766572666c6f7760c01b60448201526064016101c6565b600082815260208181526040918290208351815485840151868601516060808901516001600160401b039586166fffffffffffffffffffffffffffffffff199095168517600160401b948716949094029390931768ffffffffffffffffff60801b1916600160801b9590921694850260ff60c01b191691909117600160c01b60ff9093169283021785556080880151600186015560a08801516002909501805460ff1916951515959095179094558551928352938201939093529283019190915283917f895ef5a5fc3efd313a300b006d6ce97ff0670dfe04f6eea90417edf924fa786b910160405180910390a25050565b60006116708260000151836040015160200151610e78565b905060006116968360000151836001600160401b0316815181106104375761043761326e565b90506116a1836103af565b8160800151146116e35760405162461bcd60e51b815260206004820152600d60248201526c696e76616c696420737461746560981b60448201526064016101c6565b606081015160ff166002146108e85760026108b0565b6000815183511461170c57506000610f2a565b60005b835181101561176d5782818151811061172a5761172a61326e565b60200260200101518482815181106117445761174461326e565b60200260200101511461175b576000915050610f2a565b80611765816132b0565b91505061170f565b5060019392505050565b6000611783828461372f565b9392505050565b8051602082015161179b82826106bc565b6117aa82828560400151610d84565b8160a00151156118475760608201516001600160a01b0316156118015760405162461bcd60e51b815260206004820152600f60248201526e063616e6e6f7420686176652061707608c1b60448201526064016101c6565b60408101516060015151156118475760405162461bcd60e51b815260206004820152600c60248201526b199d5b991cc81b1bd8dad95960a21b60448201526064016101c6565b60008061186883600001516102fa8560000151866040015160200151610e78565b9150915080156119875761187b836103af565b82608001510361188c575050505050565b82602001516001600160401b031682604001516001600160401b0316106118e75760405162461bcd60e51b815260206004820152600f60248201526e34b73b30b634b2103b32b939b4b7b760891b60448201526064016101c6565b606082015160ff161561192e5760405162461bcd60e51b815260206004820152600f60248201526e696e636f727265637420706861736560881b60448201526064016101c6565b81516001600160401b031642106119875760405162461bcd60e51b815260206004820152601960248201527f72656675746174696f6e2074696d656f7574207061737365640000000000000060448201526064016101c6565b6103a884846000610fdf565b606081516001600160401b038111156119ae576119ae61260c565b6040519080825280602002602001820160405280156119d7578160200160208202803683370190505b50905060005b8251811015611a835760008382815181106119fa576119fa61326e565b6020026020010151905060005b8151811015611a6e57611a3f828281518110611a2557611a2561326e565b6020026020010151858581518110610bf457610bf461326e565b848481518110611a5157611a5161326e565b602090810291909101015280611a66816132b0565b915050611a07565b50508080611a7b906132b0565b9150506119dd565b50919050565b8051825114611ada5760405162461bcd60e51b815260206004820152601760248201527f41737365745b5d3a20756e657175616c206c656e67746800000000000000000060448201526064016101c6565b60005b82518110156108e857611b22838281518110611afb57611afb61326e565b6020026020010151838381518110611b1557611b1561326e565b6020026020010151611fa2565b80611b2c816132b0565b915050611add565b8051825114611b855760405162461bcd60e51b815260206004820152601960248201527f75696e743235365b5d3a20756e657175616c206c656e6774680000000000000060448201526064016101c6565b60005b82518110156108e857818181518110611ba357611ba361326e565b6020026020010151838281518110611bbd57611bbd61326e565b602002602001015114611c125760405162461bcd60e51b815260206004820152601760248201527f75696e743235365b5d3a20756e657175616c206974656d00000000000000000060448201526064016101c6565b80611c1c816132b0565b915050611b88565b60005b82518110156108e857611c5f828281518110611c4557611c4561326e565b6020026020010151848381518110610bf457610bf461326e565b838281518110611c7157611c7161326e565b602090810291909101015280611c86816132b0565b915050611c27565b6000806000611c9d858561209a565b91509150611caa81612108565b509392505050565b81604001515183604001515114611d0b5760405162461bcd60e51b815260206004820152601860248201527f62616c616e636573206c656e677468206d69736d61746368000000000000000060448201526064016101c6565b81515183515114611d575760405162461bcd60e51b81526020600482015260166024820152750c2e6e6cae8e640d8cadccee8d040dad2e6dac2e8c6d60531b60448201526064016101c6565b611d69836060015183606001516122c1565b60005b82515181101561020b57611dad84600001518281518110611d8f57611d8f61326e565b602002602001015184600001518381518110611b1557611b1561326e565b6000808386604001518481518110611dc757611dc761326e565b60200260200101515114611e1d5760405162461bcd60e51b815260206004820152601c60248201527f6f6c642062616c616e636573206c656e677468206d69736d617463680000000060448201526064016101c6565b8385604001518481518110611e3457611e3461326e565b60200260200101515114611e8a5760405162461bcd60e51b815260206004820152601c60248201527f6e65772062616c616e636573206c656e677468206d69736d617463680000000060448201526064016101c6565b60005b84811015611f3d57611ede87604001518581518110611eae57611eae61326e565b60200260200101518281518110611ec757611ec761326e565b60200260200101518461177790919063ffffffff16565b9250611f2986604001518581518110611ef957611ef961326e565b60200260200101518281518110611f1257611f1261326e565b60200260200101518361177790919063ffffffff16565b915080611f35816132b0565b915050611e8d565b50808214611f8d5760405162461bcd60e51b815260206004820152601860248201527f73756d206f662062616c616e636573206d69736d61746368000000000000000060448201526064016101c6565b50508080611f9a906132b0565b915050611d6c565b8051825114611fe55760405162461bcd60e51b815260206004820152600f60248201526e1d5b995c5d585b0818da185a5b9251608a1b60448201526064016101c6565b80602001516001600160a01b031682602001516001600160a01b0316146120425760405162461bcd60e51b81526020600482015260116024820152703ab732b8bab0b61032ba342437b63232b960791b60448201526064016101c6565b8060400151805190602001208260400151805190602001201461073a5760405162461bcd60e51b815260206004820152601060248201526f3ab732b8bab0b61031b1a437b63232b960811b60448201526064016101c6565b60008082516041036120d05760208301516040840151606085015160001a6120c48782858561236c565b94509450505050612101565b82516040036120f957602083015160408401516120ee868383612459565b935093505050612101565b506000905060025b9250929050565b600081600481111561211c5761211c613284565b036121245750565b600181600481111561213857612138613284565b036121855760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016101c6565b600281600481111561219957612199613284565b036121e65760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016101c6565b60038160048111156121fa576121fa613284565b036122525760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016101c6565b600481600481111561226657612266613284565b036122be5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016101c6565b50565b80518251146123125760405162461bcd60e51b815260206004820152601a60248201527f537562416c6c6f635b5d3a20756e657175616c206c656e67746800000000000060448201526064016101c6565b60005b82518110156108e85761235a8382815181106123335761233361326e565b602002602001015183838151811061234d5761234d61326e565b6020026020010151612492565b80612364816132b0565b915050612315565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156123a35750600090506003612450565b8460ff16601b141580156123bb57508460ff16601c14155b156123cc5750600090506004612450565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612420573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661244957600060019250925050612450565b9150600090505b94509492505050565b6000806001600160ff1b0383168161247660ff86901c601b61372f565b90506124848782888561236c565b935093505050935093915050565b815181516124a091906116f9565b6124e35760405162461bcd60e51b815260206004820152601460248201527314dd58905b1b1bd8ce881d5b995c5d585b08125160621b60448201526064016101c6565b6124f582602001518260200151611b34565b61073a8260400151826040015180518251146125535760405162461bcd60e51b815260206004820152601860248201527f75696e7431365b5d3a20756e657175616c206c656e677468000000000000000060448201526064016101c6565b60005b82518110156108e8578181815181106125715761257161326e565b602002602001015161ffff1683828151811061258f5761258f61326e565b602002602001015161ffff16146125e15760405162461bcd60e51b815260206004820152601660248201527575696e7431365b5d3a20756e657175616c206974656d60501b60448201526064016101c6565b806125eb816132b0565b915050612556565b60006020828403121561260557600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b03811182821017156126445761264461260c565b60405290565b604080519081016001600160401b03811182821017156126445761264461260c565b604051606081016001600160401b03811182821017156126445761264461260c565b604051608081016001600160401b03811182821017156126445761264461260c565b60405160a081016001600160401b03811182821017156126445761264461260c565b604051601f8201601f191681016001600160401b03811182821017156126fa576126fa61260c565b604052919050565b60006001600160401b0382111561271b5761271b61260c565b5060051b60200190565b80356001600160a01b038116811461273c57600080fd5b919050565b600082601f83011261275257600080fd5b81356001600160401b0381111561276b5761276b61260c565b61277e601f8201601f19166020016126d2565b81815284602083860101111561279357600080fd5b816020850160208301376000918101602001919091529392505050565b8035801515811461273c57600080fd5b600060c082840312156127d257600080fd5b6127da612622565b905081358152602080830135818301526040808401356001600160401b038082111561280557600080fd5b818601915086601f83011261281957600080fd5b813561282c61282782612702565b6126d2565b81815260059190911b8301850190858101908983111561284b57600080fd5b8685015b838110156128c5578035858111156128675760008081fd5b8601808c03601f190188131561287d5760008081fd5b61288561264a565b6128908a8301612725565b815288820135878111156128a45760008081fd5b6128b28e8c83860101612741565b828c01525084525091870191870161284f565b508086890152505050505050506128de60608301612725565b60608201526128ef608083016127b0565b608082015261290060a083016127b0565b60a082015292915050565b600082601f83011261291c57600080fd5b8135602061292c61282783612702565b82815260059290921b8401810191818101908684111561294b57600080fd5b8286015b84811015612966578035835291830191830161294f565b509695505050505050565b80356001600160401b038116811461273c57600080fd5b600082601f83011261299957600080fd5b813560206129a961282783612702565b82815260059290921b840181019181810190868411156129c857600080fd5b8286015b848110156129665780356001600160401b03808211156129ec5760008081fd5b908801906060828b03601f1901811315612a065760008081fd5b612a0e61266c565b8784013581526040612a21818601612725565b828a0152918401359183831115612a385760008081fd5b612a468d8a85880101612741565b9082015286525050509183019183016129cc565b600082601f830112612a6b57600080fd5b81356020612a7b61282783612702565b82815260059290921b84018101918181019086841115612a9a57600080fd5b8286015b848110156129665780356001600160401b03811115612abd5760008081fd5b612acb8986838b010161290b565b845250918301918301612a9e565b600082601f830112612aea57600080fd5b81356020612afa61282783612702565b828152600592831b8501820192828201919087851115612b1957600080fd5b8387015b85811015612c465780356001600160401b0380821115612b3d5760008081fd5b908901906060828c03601f1901811315612b575760008081fd5b612b5f61266c565b8884013583811115612b715760008081fd5b612b7f8e8b8388010161290b565b82525060408085013584811115612b965760008081fd5b612ba48f8c8389010161290b565b838c015250918401359183831115612bbc5760008081fd5b82850194508d603f860112612bd357600093508384fd5b898501359350612be561282785612702565b84815293871b85018101938a810193508e851115612c035760008081fd5b948101945b84861015612c3257853561ffff81168114612c235760008081fd5b8452948a0194928a0192612c08565b908201528752505050928401928401612b1d565b5090979650505050505050565b600060808284031215612c6557600080fd5b612c6d61268e565b905081356001600160401b0380821115612c8657600080fd5b612c9285838601612988565b83526020840135915080821115612ca857600080fd5b612cb48583860161290b565b60208401526040840135915080821115612ccd57600080fd5b612cd985838601612a5a565b60408401526060840135915080821115612cf257600080fd5b50612cff84828501612ad9565b60608301525092915050565b600060a08284031215612d1d57600080fd5b612d256126b0565b905081356001600160401b0380821115612d3e57600080fd5b612d4a8583860161290b565b8352612d5860208501612971565b60208401526040840135915080821115612d7157600080fd5b612d7d85838601612c53565b60408401526060840135915080821115612d9657600080fd5b50612da384828501612741565b606083015250612db5608083016127b0565b608082015292915050565b600080600060608486031215612dd557600080fd5b83356001600160401b0380821115612dec57600080fd5b612df8878388016127c0565b9450602091508186013581811115612e0f57600080fd5b612e1b88828901612d0b565b945050604086013581811115612e3057600080fd5b8601601f81018813612e4157600080fd5b8035612e4f61282782612702565b81815260059190911b8201840190848101908a831115612e6e57600080fd5b8584015b83811015612ea657803586811115612e8a5760008081fd5b612e988d8983890101612d0b565b845250918601918601612e72565b508096505050505050509250925092565b600082601f830112612ec857600080fd5b81356020612ed861282783612702565b82815260059290921b84018101918181019086841115612ef757600080fd5b8286015b848110156129665780356001600160401b03811115612f1a5760008081fd5b612f288986838b0101612741565b845250918301918301612efb565b600080600060608486031215612f4b57600080fd5b83356001600160401b0380821115612f6257600080fd5b612f6e878388016127c0565b94506020860135915080821115612f8457600080fd5b612f9087838801612d0b565b93506040860135915080821115612fa657600080fd5b50612fb386828701612eb7565b9150509250925092565b600060208284031215612fcf57600080fd5b81356001600160401b03811115612fe557600080fd5b612ff184828501612d0b565b949350505050565b60006060828403121561300b57600080fd5b61301361266c565b905081356001600160401b038082111561302c57600080fd5b613038858386016127c0565b8352602084013591508082111561304e57600080fd5b61305a85838601612d0b565b6020840152604084013591508082111561307357600080fd5b5061308084828501612eb7565b60408301525092915050565b6000806040838503121561309f57600080fd5b82356001600160401b03808211156130b657600080fd5b6130c286838701612ff9565b93506020915081850135818111156130d957600080fd5b8501601f810187136130ea57600080fd5b80356130f861282782612702565b81815260059190911b8201840190848101908983111561311757600080fd5b8584015b8381101561314f578035868111156131335760008081fd5b6131418c8983890101612ff9565b84525091860191860161311b565b508096505050505050509250929050565b60006020828403121561317257600080fd5b81356001600160401b0381111561318857600080fd5b612ff1848285016127c0565b600080600080600060a086880312156131ac57600080fd5b85356001600160401b03808211156131c357600080fd5b6131cf89838a016127c0565b965060208801359150808211156131e557600080fd5b6131f189838a01612d0b565b9550604088013591508082111561320757600080fd5b61321389838a01612d0b565b945060608801359350608088013591508082111561323057600080fd5b5061323d88828901612741565b9150509295509295909350565b6020808252600a90820152693737ba103632b233b2b960b11b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016132c2576132c261329a565b5060010190565b6000815180845260005b818110156132ef576020818501810151868301820152016132d3565b81811115613301576000602083870101525b50601f01601f19169290920160200192915050565b600081518084526020808501808196508360051b8101915082860160005b8581101561337b578284038952815180516001600160a01b031685528501516040868601819052613367818701836132c9565b9a87019a9550505090840190600101613334565b5091979650505050505050565b600081518084526020808501945080840160005b838110156133b85781518752958201959082019060010161339c565b509495945050505050565b8381526060602082015260006133dc6060830185613316565b82810360408401526133ee8185613388565b9695505050505050565b600081518084526020808501808196508360051b8101915082860160005b8581101561337b57828403895261342e848351613388565b98850198935090840190600101613416565b600081518084526020808501808196508360051b810191508286016000805b868110156134f4578385038a5282516060815181885261348182890182613388565b91505087820151878203898901526134998282613388565b604093840151898203948a01949094528351808252938a0193869350908a0191505b808310156134df57835161ffff1682529289019260019290920191908901906134bb565b509b88019b965050509185019160010161345f565b509298975050505050505050565b6000815160a0845261351760a0850182613388565b905060206001600160401b03818501511681860152604080850151868403828801526080840181516080865281815180845260a08801915060a08160051b8901019350868301925060005b818110156135b557888503609f19018352835180518652888101516001600160a01b03168987015287015160608887018190526135a1818801836132c9565b965050509287019291870191600101613562565b5050505083820151858203858701526135ce8282613388565b9450505081810151848403838601526135e784826133f8565b935050606081015191505082820360608401526136048282613440565b925050506060830151848203606086015261361f82826132c9565b9150506080830151611caa608086018215159052565b6020815260006117836020830184613502565b80518252602081015160208301526000604082015160c0604085015261367160c0850182613316565b6060848101516001600160a01b03169086015260808085015115159086015260a0938401511515949093019390935250919050565b6020815260006117836020830184613648565b60006001600160401b038083168185168083038211156136db576136db61329a565b01949350505050565b6080815260006136f76080830187613648565b82810360208401526137098187613502565b9050828103604084015261371d8186613502565b91505082606083015295945050505050565b600082198211156137425761374261329a565b50019056fea264697066735822122072360af3f9d09ecb59a6118cb64bf57b459adba73f8383bf751eb5dd123f158c64736f6c634300080f0033" diff --git a/channel/adjudicator.go b/channel/adjudicator.go index 96d7c31..36a0ed2 100644 --- a/channel/adjudicator.go +++ b/channel/adjudicator.go @@ -42,7 +42,7 @@ var _ channel.Adjudicator = (*Adjudicator)(nil) type Adjudicator struct { ContractBackend // chainID specifies the chain the funder is living on. - chainID ChainID + chainID AssetID contract *adjudicator.Adjudicator bound *bind.BoundContract // The address to which we send all funds. diff --git a/channel/asset.go b/channel/asset.go index b4ea8b6..0e770db 100644 --- a/channel/asset.go +++ b/channel/asset.go @@ -41,6 +41,12 @@ type ChainID struct { *big.Int } +// AssetID identifies an asset on a specific chain. +type AssetID struct { + BackendID uint32 + LedgerId ChainID +} + // MakeChainID makes a ChainID for the given id. func MakeChainID(id *big.Int) ChainID { if id.Sign() < 0 { @@ -49,6 +55,14 @@ func MakeChainID(id *big.Int) ChainID { return ChainID{id} } +// MakeAssetID makes a AssetID for the given id. +func MakeAssetID(id *big.Int) AssetID { + if id.Sign() < 0 { + panic("must not be smaller than zero") + } + return AssetID{BackendID: 1, LedgerId: MakeChainID(id)} +} + // UnmarshalBinary unmarshals the chainID from its binary representation. func (id *ChainID) UnmarshalBinary(data []byte) error { id.Int = new(big.Int).SetBytes(data) @@ -71,7 +85,7 @@ func (id ChainID) MapKey() multi.LedgerIDMapKey { type ( // Asset is an Ethereum asset. Asset struct { - ChainID ChainID + ChainID AssetID AssetHolder wallet.Address } @@ -80,7 +94,7 @@ type ( ) func (a Asset) AssetID() multi.AssetID { - return multi.AssetID{BackendID: 1, LedgerId: a.ChainID} + return multi.AssetID{BackendID: 1, LedgerId: a.LedgerID()} } // MapKey returns the asset's map key representation. @@ -96,7 +110,7 @@ func (a Asset) MapKey() AssetMapKey { // MarshalBinary marshals the asset into its binary representation. func (a Asset) MarshalBinary() ([]byte, error) { var buf bytes.Buffer - err := perunio.Encode(&buf, a.ChainID, &a.AssetHolder) + err := perunio.Encode(&buf, a.ChainID.LedgerId, a.ChainID.BackendID, &a.AssetHolder) if err != nil { return nil, err } @@ -106,18 +120,18 @@ func (a Asset) MarshalBinary() ([]byte, error) { // UnmarshalBinary unmarshals the asset from its binary representation. func (a *Asset) UnmarshalBinary(data []byte) error { buf := bytes.NewBuffer(data) - return perunio.Decode(buf, &a.ChainID, &a.AssetHolder) + return perunio.Decode(buf, &a.ChainID.LedgerId, &a.ChainID.BackendID, &a.AssetHolder) } // LedgerID returns the ledger ID the asset lives on. func (a Asset) LedgerID() multi.LedgerID { - return &a.ChainID + return &a.ChainID.LedgerId } // NewAsset creates a new asset from an chainID and the AssetHolder address. func NewAsset(chainID *big.Int, assetHolder common.Address) *Asset { - id := MakeChainID(chainID) - return &Asset{id, *wallet.AsWalletAddr(assetHolder)} + id := MakeAssetID(chainID) + return &Asset{ChainID: id, AssetHolder: *wallet.AsWalletAddr(assetHolder)} } // EthAddress returns the Ethereum address of the asset. @@ -131,14 +145,14 @@ func (a Asset) Equal(b channel.Asset) bool { if !ok { return false } - return a.ChainID.MapKey() == ethAsset.ChainID.MapKey() && a.EthAddress() == ethAsset.EthAddress() + return a.ChainID.LedgerId.MapKey() == ethAsset.ChainID.LedgerId.MapKey() && a.EthAddress() == ethAsset.EthAddress() } // filterAssets filters the assets for the given chainID. -func filterAssets(assets []channel.Asset, chainID ChainID) []channel.Asset { +func filterAssets(assets []channel.Asset, chainID AssetID) []channel.Asset { var filtered []channel.Asset for _, asset := range assets { - if a := asset.(*Asset); a.ChainID.MapKey() == chainID.MapKey() { //nolint:forcetypeassert // We would have to panic anyways. + if a := asset.(*Asset); a.ChainID.LedgerId.MapKey() == chainID.LedgerId.MapKey() { //nolint:forcetypeassert // We would have to panic anyways. filtered = append(filtered, a) } } diff --git a/channel/asset_test.go b/channel/asset_test.go index 6c4843f..2233bc4 100644 --- a/channel/asset_test.go +++ b/channel/asset_test.go @@ -129,9 +129,7 @@ func Test_Asset_GenericMarshaler(t *testing.T) { func TestMarshalling(t *testing.T) { rng := pkgtest.Prng(t) assetIn := ethchannel.Asset{ - ChainID: ethchannel.ChainID{ - big.NewInt(rng.Int63()), - }, + ChainID: ethchannel.MakeAssetID(big.NewInt(rng.Int63())), AssetHolder: ethwallettest.NewRandomAddress(rng), } bytes, err := assetIn.MarshalBinary() diff --git a/channel/backend.go b/channel/backend.go index bdd468e..b444c4f 100644 --- a/channel/backend.go +++ b/channel/backend.go @@ -42,10 +42,8 @@ var ( // compile time check that we implement the channel backend interface. _ channel.Backend = new(Backend) // Definition of ABI datatypes. - abiUint256, _ = abi.NewType("uint256", "", nil) abiAddress, _ = abi.NewType("address", "", nil) abiBytes32, _ = abi.NewType("bytes32", "", nil) - abiBytes, _ = abi.NewType("bytes", "", nil) abiParams abi.Type abiState abi.Type abiProgress abi.Method @@ -323,7 +321,7 @@ func assetsToEthAssets(assets []channel.Asset, bIDs []wallet.BackendID) []adjudi log.Panicf("wrong address type: %T", asset) } cAddrs[i] = adjudicator.ChannelAsset{ - ChainID: asset.ChainID.Int, + ChainID: asset.ChainID.LedgerId.Int, EthHolder: asset.EthAddress(), CcHolder: make([]byte, 0), } diff --git a/channel/contractbackend.go b/channel/contractbackend.go index 761e734..9d4f99d 100644 --- a/channel/contractbackend.go +++ b/channel/contractbackend.go @@ -45,7 +45,7 @@ var errTxTimedOut = errors.New("") var ( // SharedExpectedNonces is a map of each expected next nonce of all clients. - SharedExpectedNonces map[ChainID]map[common.Address]uint64 + SharedExpectedNonces map[AssetID]map[common.Address]uint64 // SharedExpectedNoncesMutex is a mutex to protect the shared expected nonces map. SharedExpectedNoncesMutex = &sync.Mutex{} ) @@ -70,16 +70,16 @@ type ContractBackend struct { tr Transactor expectedNextNonce map[common.Address]uint64 txFinalityDepth uint64 - chainID ChainID + chainID AssetID } // NewContractBackend creates a new ContractBackend with the given parameters. // txFinalityDepth defines in how many consecutive blocks a TX has to be // included to be considered final. Must be at least 1. -func NewContractBackend(cf ContractInterface, chainID ChainID, tr Transactor, txFinalityDepth uint64) ContractBackend { +func NewContractBackend(cf ContractInterface, chainID AssetID, tr Transactor, txFinalityDepth uint64) ContractBackend { // Check if the shared maps are initialized, if not, initialize them. if SharedExpectedNonces == nil { - SharedExpectedNonces = make(map[ChainID]map[common.Address]uint64) + SharedExpectedNonces = make(map[AssetID]map[common.Address]uint64) } // Check if the specific chainID entry exists in the shared maps, if not, create it. @@ -95,8 +95,8 @@ func NewContractBackend(cf ContractInterface, chainID ChainID, tr Transactor, tx } } -// ChainID returns the chain identifier of the contract backend. -func (c *ContractBackend) ChainID() ChainID { +// AssetID returns the chain identifier of the contract backend. +func (c *ContractBackend) ChainID() AssetID { return c.chainID } diff --git a/channel/funder.go b/channel/funder.go index 62909a9..17ed417 100644 --- a/channel/funder.go +++ b/channel/funder.go @@ -388,7 +388,7 @@ func (f *Funder) waitForFundingConfirmation(ctx context.Context, request channel if !ok { return fmt.Errorf("wrong type: expected *Asset, got %T", a) } - if ethAsset.ChainID.MapKey() != f.chainID.MapKey() { + if ethAsset.LedgerID().MapKey() != f.chainID.LedgerId.MapKey() { return nil } @@ -453,7 +453,7 @@ func (f *Funder) WaitForOthersFundingConfirmation(ctx context.Context, request c if !ok { return fmt.Errorf("wrong type: expected *Asset, got %T", a) } - if ethAsset.ChainID.MapKey() != f.chainID.MapKey() { + if ethAsset.LedgerID().MapKey() != f.chainID.LedgerId.MapKey() { return nil } diff --git a/channel/funder_test.go b/channel/funder_test.go index 013e5a0..6a5b048 100644 --- a/channel/funder_test.go +++ b/channel/funder_test.go @@ -83,7 +83,7 @@ func newFunderSetup(rng *rand.Rand) ( ksWallet := wallettest.RandomWallet().(*keystore.Wallet) cb := ethchannel.NewContractBackend( simBackend, - ethchannel.MakeChainID(simBackend.ChainID()), + ethchannel.MakeAssetID(simBackend.ChainID()), keystore.NewTransactor(*ksWallet, simBackend.Signer), TxFinalityDepth, ) @@ -452,7 +452,7 @@ func newNFunders( simBackend.FundAddress(ctx, tokenAcc.Address) cb := ethchannel.NewContractBackend( simBackend, - ethchannel.MakeChainID(chainID), + ethchannel.MakeAssetID(chainID), keystore.NewTransactor(*ksWallet, simBackend.Signer), TxFinalityDepth, ) diff --git a/channel/test/randomizer.go b/channel/test/randomizer.go index 7b782d0..b976ff0 100644 --- a/channel/test/randomizer.go +++ b/channel/test/randomizer.go @@ -35,12 +35,12 @@ func (randomizer) NewRandomAsset(rng *rand.Rand) channel.Asset { func NewRandomAsset(rng *rand.Rand) *ethchannel.Asset { chainID := NewRandomChainID(rng) asset := ethwtest.NewRandomAddress(rng) - return ethchannel.NewAsset(chainID.Int, common.Address(asset)) + return ethchannel.NewAsset(chainID.LedgerId.Int, common.Address(asset)) } -// NewRandomChainID returns a new random ChainID. -func NewRandomChainID(rng *rand.Rand) ethchannel.ChainID { +// NewRandomChainID returns a new random AssetID. +func NewRandomChainID(rng *rand.Rand) ethchannel.AssetID { r := rng.Uint64() id := new(big.Int).SetUint64(r) - return ethchannel.MakeChainID(id) + return ethchannel.MakeAssetID(id) } diff --git a/channel/test/setup.go b/channel/test/setup.go index bb9b63c..1806cf2 100644 --- a/channel/test/setup.go +++ b/channel/test/setup.go @@ -78,7 +78,7 @@ func NewSimSetup(t *testing.T, rng *rand.Rand, txFinalityDepth uint64, blockInte signer := types.LatestSigner(params.AllEthashProtocolChanges) contractBackend := ethchannel.NewContractBackend( simBackend, - ethchannel.MakeChainID(simBackend.ChainID()), + ethchannel.MakeAssetID(simBackend.ChainID()), keystore.NewTransactor(*ksWallet, signer), txFinalityDepth, ) @@ -123,7 +123,7 @@ func NewSetup(t *testing.T, rng *rand.Rand, n int, blockInterval time.Duration, s.Recvs[i] = map[wallet.BackendID]*ethwallet.Address{1: ksWallet.NewRandomAccount(rng).Address().(*ethwallet.Address)} cb := ethchannel.NewContractBackend( s.SimBackend, - ethchannel.MakeChainID(s.SimBackend.ChainID()), + ethchannel.MakeAssetID(s.SimBackend.ChainID()), keystore.NewTransactor(*ksWallet, s.SimBackend.Signer), txFinalityDepth, ) diff --git a/channel/test/tokensetup.go b/channel/test/tokensetup.go index cb2cc9a..414b23a 100644 --- a/channel/test/tokensetup.go +++ b/channel/test/tokensetup.go @@ -71,7 +71,7 @@ func NewTokenSetup(ctx context.Context, t *testing.T, rng *rand.Rand, txFinality sb.FundAddress(ctx, acc2.Address) cb := ethchannel.NewContractBackend( sb, - ethchannel.MakeChainID(sb.ChainID()), + ethchannel.MakeAssetID(sb.ChainID()), keystore.NewTransactor(*ksWallet, sb.Signer), txFinalityDepth, ) diff --git a/client/test/multiledger.go b/client/test/multiledger.go index a3581ac..dd4fb90 100644 --- a/client/test/multiledger.go +++ b/client/test/multiledger.go @@ -139,14 +139,14 @@ func setupClient(t *testing.T, rng *rand.Rand, l1, l2 testLedger, bus wire.Bus) signer1 := l1.simSetup.SimBackend.Signer cb1 := ethchannel.NewContractBackend( l1.simSetup.CB, - l1.AssetID().LedgerId.(ethchannel.ChainID), + ethchannel.MakeAssetID(l1.simSetup.SimBackend.ChainID()), keystore.NewTransactor(*w[1].(*keystore.Wallet), signer1), l1.simSetup.CB.TxFinalityDepth(), ) signer2 := l2.simSetup.SimBackend.Signer cb2 := ethchannel.NewContractBackend( l2.simSetup.CB, - l2.AssetID().LedgerId.(ethchannel.ChainID), + ethchannel.MakeAssetID(l2.simSetup.SimBackend.ChainID()), keystore.NewTransactor(*w[1].(*keystore.Wallet), signer2), l2.simSetup.CB.TxFinalityDepth(), ) diff --git a/client/test/setup.go b/client/test/setup.go index a954646..e2e4883 100644 --- a/client/test/setup.go +++ b/client/test/setup.go @@ -31,7 +31,7 @@ import ( const ( // DefaultTimeout is the default timeout for client tests. - DefaultTimeout = 20 * time.Second + DefaultTimeout = 30 * time.Second // BlockInterval is the default block interval for the simulated chain. BlockInterval = 200 * time.Millisecond // challenge duration in blocks that is used by MakeRoleSetups. diff --git a/go.mod b/go.mod index 4b84e69..8193023 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/sirupsen/logrus v1.8.1 github.com/stretchr/testify v1.7.0 golang.org/x/sync v0.0.0-20210220032951-036812b2e83c - perun.network/go-perun v0.11.1-0.20240920121016-969c6a7cbaff + perun.network/go-perun v0.11.1-0.20240925090359-10c9b28f4e59 polycry.pt/poly-go v0.0.0-20220301085937-fb9d71b45a37 ) diff --git a/go.sum b/go.sum index 8f4d178..0d67bb2 100644 --- a/go.sum +++ b/go.sum @@ -645,8 +645,8 @@ honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= -perun.network/go-perun v0.11.1-0.20240920121016-969c6a7cbaff h1:AKlcMT8q+BKZSZCxnwbXZerpoTGUASi119e3pnsg1AY= -perun.network/go-perun v0.11.1-0.20240920121016-969c6a7cbaff/go.mod h1:mkmgZ/EQ7EPpDprFkg5+0Cz+QEIJb4SezkDdEPyKtVI= +perun.network/go-perun v0.11.1-0.20240925090359-10c9b28f4e59 h1:m3bqNzy02+EPK7edveFre+C96yHMW69QlBa9HDKIKRI= +perun.network/go-perun v0.11.1-0.20240925090359-10c9b28f4e59/go.mod h1:mkmgZ/EQ7EPpDprFkg5+0Cz+QEIJb4SezkDdEPyKtVI= polycry.pt/poly-go v0.0.0-20220301085937-fb9d71b45a37 h1:iA5GzEa/hHfVlQpimEjPV09NATwHXxSjWNB0VVodtew= polycry.pt/poly-go v0.0.0-20220301085937-fb9d71b45a37/go.mod h1:XUBrNtqgEhN3EEOP/5gh7IBd3xVHKidCjXDZfl9+kMU= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= diff --git a/subscription/eventsub_test.go b/subscription/eventsub_test.go index dacef40..4aa7a96 100644 --- a/subscription/eventsub_test.go +++ b/subscription/eventsub_test.go @@ -62,7 +62,7 @@ func TestEventSub(t *testing.T) { sb.FundAddress(ctx, account.Address) cb := ethchannel.NewContractBackend( sb, - ethchannel.MakeChainID(sb.ChainID()), + ethchannel.MakeAssetID(sb.ChainID()), keystore.NewTransactor(*ksWallet, sb.Signer), txFinalityDepth, ) @@ -159,7 +159,7 @@ func TestEventSub_Filter(t *testing.T) { sb.FundAddress(ctx, account.Address) cb := ethchannel.NewContractBackend( sb, - ethchannel.MakeChainID(sb.ChainID()), + ethchannel.MakeAssetID(sb.ChainID()), keystore.NewTransactor(*ksWallet, sb.Signer), txFinalityDepth, ) From 5b4c56d187b80b07391ea0265e0ee56e09e29d40 Mon Sep 17 00:00:00 2001 From: Sophia Koehler Date: Wed, 2 Oct 2024 14:54:27 +0200 Subject: [PATCH 04/15] feat(asset): Change to multi.Asset implementation. chore: Update to latest go-perun version. Signed-off-by: Sophia Koehler --- channel/asset.go | 5 +++++ channel/backend.go | 2 +- go.mod | 2 +- go.sum | 4 ++-- 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/channel/asset.go b/channel/asset.go index 0e770db..15305bf 100644 --- a/channel/asset.go +++ b/channel/asset.go @@ -148,6 +148,11 @@ func (a Asset) Equal(b channel.Asset) bool { return a.ChainID.LedgerId.MapKey() == ethAsset.ChainID.LedgerId.MapKey() && a.EthAddress() == ethAsset.EthAddress() } +// Address returns the address of the asset. +func (a Asset) Address() string { + return a.AssetHolder.String() +} + // filterAssets filters the assets for the given chainID. func filterAssets(assets []channel.Asset, chainID AssetID) []channel.Asset { var filtered []channel.Asset diff --git a/channel/backend.go b/channel/backend.go index b444c4f..6342e30 100644 --- a/channel/backend.go +++ b/channel/backend.go @@ -331,7 +331,7 @@ func assetsToEthAssets(assets []channel.Asset, bIDs []wallet.BackendID) []adjudi log.Panicf("error encoding asset: %v", err) } cAddrs[i] = adjudicator.ChannelAsset{ - ChainID: big.NewInt(0), + ChainID: big.NewInt(2), EthHolder: common.HexToAddress("0x0000000000000000000000000000000000000000"), CcHolder: asset, } diff --git a/go.mod b/go.mod index 8193023..e6a68ac 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/sirupsen/logrus v1.8.1 github.com/stretchr/testify v1.7.0 golang.org/x/sync v0.0.0-20210220032951-036812b2e83c - perun.network/go-perun v0.11.1-0.20240925090359-10c9b28f4e59 + perun.network/go-perun v0.11.1-0.20241001124918-3c1e2619e407 polycry.pt/poly-go v0.0.0-20220301085937-fb9d71b45a37 ) diff --git a/go.sum b/go.sum index 0d67bb2..288eb61 100644 --- a/go.sum +++ b/go.sum @@ -645,8 +645,8 @@ honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= -perun.network/go-perun v0.11.1-0.20240925090359-10c9b28f4e59 h1:m3bqNzy02+EPK7edveFre+C96yHMW69QlBa9HDKIKRI= -perun.network/go-perun v0.11.1-0.20240925090359-10c9b28f4e59/go.mod h1:mkmgZ/EQ7EPpDprFkg5+0Cz+QEIJb4SezkDdEPyKtVI= +perun.network/go-perun v0.11.1-0.20241001124918-3c1e2619e407 h1:byhT6T/XEOFjQpqGshEX867MyGbv+gX6d2+uWkOZwUY= +perun.network/go-perun v0.11.1-0.20241001124918-3c1e2619e407/go.mod h1:mkmgZ/EQ7EPpDprFkg5+0Cz+QEIJb4SezkDdEPyKtVI= polycry.pt/poly-go v0.0.0-20220301085937-fb9d71b45a37 h1:iA5GzEa/hHfVlQpimEjPV09NATwHXxSjWNB0VVodtew= polycry.pt/poly-go v0.0.0-20220301085937-fb9d71b45a37/go.mod h1:XUBrNtqgEhN3EEOP/5gh7IBd3xVHKidCjXDZfl9+kMU= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= From 97e70cc57ce650cdb1727e0769556871b03af7c7 Mon Sep 17 00:00:00 2001 From: Sophia Koehler Date: Tue, 15 Oct 2024 10:27:15 +0200 Subject: [PATCH 05/15] feat(all): Adjust to mutli.AssetID implementation & specify backendID in tests chore: Update to latest go-perun version Signed-off-by: Sophia Koehler --- channel/withdraw.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/channel/withdraw.go b/channel/withdraw.go index 07c8aef..6bfabac 100644 --- a/channel/withdraw.go +++ b/channel/withdraw.go @@ -176,8 +176,6 @@ func (a *Adjudicator) newWithdrawalAuth(request channel.AdjudicatorReq, asset as Receiver: a.Receiver, Amount: bal, } - fmt.Println("auth", auth.Participant.EthAddress, auth.Receiver, auth.Amount, auth.ChannelID) - fmt.Println("Request: ", request) enc, err := encodeAssetHolderWithdrawalAuth(auth) if err != nil { return assetholder.AssetHolderWithdrawalAuth{}, nil, errors.WithMessage(err, "encoding withdrawal auth") From 0e693199d05229bcdfa8b7e3674aecc829815f09 Mon Sep 17 00:00:00 2001 From: Sophia Koehler Date: Tue, 15 Oct 2024 10:27:38 +0200 Subject: [PATCH 06/15] feat(asset): Change to multi.Asset implementation. chore: Update to latest go-perun version. Signed-off-by: Sophia Koehler --- channel/adjudicator.go | 6 ++-- channel/asset.go | 45 +++++++++++++++++------------- channel/asset_test.go | 7 ++--- channel/backend.go | 4 +-- channel/backend_test.go | 10 +++---- channel/contractbackend.go | 11 ++++---- channel/funder.go | 4 +-- channel/funder_test.go | 12 ++++---- channel/subscription.go | 1 - channel/test/init.go | 4 +-- channel/test/randomizer.go | 4 +-- channel/test/setup.go | 8 +++--- channel/test/tokensetup.go | 4 +-- client/payment_test.go | 2 +- client/subchannel_test.go | 2 +- client/test/multiledger.go | 8 +++--- go.mod | 2 +- go.sum | 4 +-- subscription/eventsub_test.go | 8 +++--- wallet/keystore/transactor_test.go | 4 +-- wallet/keystore/wallet_test.go | 2 +- wallet/test/init.go | 2 +- 22 files changed, 79 insertions(+), 75 deletions(-) diff --git a/channel/adjudicator.go b/channel/adjudicator.go index 36a0ed2..646920c 100644 --- a/channel/adjudicator.go +++ b/channel/adjudicator.go @@ -17,6 +17,7 @@ package channel import ( "context" "math/big" + "perun.network/go-perun/channel/multi" "github.com/ethereum/go-ethereum/accounts" "github.com/ethereum/go-ethereum/accounts/abi/bind" @@ -42,7 +43,7 @@ var _ channel.Adjudicator = (*Adjudicator)(nil) type Adjudicator struct { ContractBackend // chainID specifies the chain the funder is living on. - chainID AssetID + chainID multi.AssetID contract *adjudicator.Adjudicator bound *bind.BoundContract // The address to which we send all funds. @@ -114,14 +115,12 @@ func toEthSignedStates(subChannels []channel.SignedState) (ethSubChannels []adju State: ToEthState(x.State), Sigs: x.Sigs, } - log.Println("Subchannel", ethSubChannels[i].State.ChannelID, i) } return } func (a *Adjudicator) callConclude(ctx context.Context, req channel.AdjudicatorReq, subStates channel.StateMap) error { ethSubStates := toEthSubStates(req.Tx.State, subStates) - log.Println("Concluding channel", req.Params.ID, ethSubStates) conclude := func( opts *bind.TransactOpts, @@ -175,7 +174,6 @@ func (a *Adjudicator) call(ctx context.Context, req channel.AdjudicatorReq, fn a } _, err = a.ConfirmTransaction(ctx, tx, a.txSender) - log.Println("Transaction confirmed", err) if errors.Is(err, errTxTimedOut) { err = client.NewTxTimedoutError(txType.String(), tx.Hash().Hex(), err.Error()) } diff --git a/channel/asset.go b/channel/asset.go index 15305bf..51e2266 100644 --- a/channel/asset.go +++ b/channel/asset.go @@ -41,12 +41,6 @@ type ChainID struct { *big.Int } -// AssetID identifies an asset on a specific chain. -type AssetID struct { - BackendID uint32 - LedgerId ChainID -} - // MakeChainID makes a ChainID for the given id. func MakeChainID(id *big.Int) ChainID { if id.Sign() < 0 { @@ -56,11 +50,11 @@ func MakeChainID(id *big.Int) ChainID { } // MakeAssetID makes a AssetID for the given id. -func MakeAssetID(id *big.Int) AssetID { +func MakeAssetID(id *big.Int) multi.AssetID { if id.Sign() < 0 { panic("must not be smaller than zero") } - return AssetID{BackendID: 1, LedgerId: MakeChainID(id)} + return AssetID{backendID: 1, LedgerID: MakeChainID(id)} } // UnmarshalBinary unmarshals the chainID from its binary representation. @@ -72,7 +66,7 @@ func (id *ChainID) UnmarshalBinary(data []byte) error { // MarshalBinary marshals the chainID into its binary representation. func (id ChainID) MarshalBinary() (data []byte, err error) { if id.Sign() == -1 { - return nil, errors.New("cannot marshal negative ChainID") + return nil, errors.New("cannot marshal negative AssetID") } return id.Bytes(), nil } @@ -85,16 +79,29 @@ func (id ChainID) MapKey() multi.LedgerIDMapKey { type ( // Asset is an Ethereum asset. Asset struct { - ChainID AssetID + assetID AssetID AssetHolder wallet.Address } + AssetID struct { + backendID uint32 + LedgerID ChainID + } + // AssetMapKey is the map key representation of an asset. AssetMapKey string ) +func (id AssetID) BackendID() uint32 { + return id.backendID +} + +func (id AssetID) LedgerId() multi.LedgerID { + return &id.LedgerID +} + func (a Asset) AssetID() multi.AssetID { - return multi.AssetID{BackendID: 1, LedgerId: a.LedgerID()} + return a.assetID } // MapKey returns the asset's map key representation. @@ -110,7 +117,7 @@ func (a Asset) MapKey() AssetMapKey { // MarshalBinary marshals the asset into its binary representation. func (a Asset) MarshalBinary() ([]byte, error) { var buf bytes.Buffer - err := perunio.Encode(&buf, a.ChainID.LedgerId, a.ChainID.BackendID, &a.AssetHolder) + err := perunio.Encode(&buf, a.assetID.LedgerID, a.assetID.backendID, &a.AssetHolder) if err != nil { return nil, err } @@ -120,18 +127,18 @@ func (a Asset) MarshalBinary() ([]byte, error) { // UnmarshalBinary unmarshals the asset from its binary representation. func (a *Asset) UnmarshalBinary(data []byte) error { buf := bytes.NewBuffer(data) - return perunio.Decode(buf, &a.ChainID.LedgerId, &a.ChainID.BackendID, &a.AssetHolder) + return perunio.Decode(buf, &a.assetID.LedgerID, &a.assetID.backendID, &a.AssetHolder) } // LedgerID returns the ledger ID the asset lives on. func (a Asset) LedgerID() multi.LedgerID { - return &a.ChainID.LedgerId + return a.AssetID().LedgerId() } // NewAsset creates a new asset from an chainID and the AssetHolder address. func NewAsset(chainID *big.Int, assetHolder common.Address) *Asset { - id := MakeAssetID(chainID) - return &Asset{ChainID: id, AssetHolder: *wallet.AsWalletAddr(assetHolder)} + id := MakeAssetID(chainID).(AssetID) + return &Asset{assetID: id, AssetHolder: *wallet.AsWalletAddr(assetHolder)} } // EthAddress returns the Ethereum address of the asset. @@ -145,7 +152,7 @@ func (a Asset) Equal(b channel.Asset) bool { if !ok { return false } - return a.ChainID.LedgerId.MapKey() == ethAsset.ChainID.LedgerId.MapKey() && a.EthAddress() == ethAsset.EthAddress() + return a.assetID.LedgerID.MapKey() == ethAsset.assetID.LedgerID.MapKey() && a.EthAddress() == ethAsset.EthAddress() } // Address returns the address of the asset. @@ -154,10 +161,10 @@ func (a Asset) Address() string { } // filterAssets filters the assets for the given chainID. -func filterAssets(assets []channel.Asset, chainID AssetID) []channel.Asset { +func filterAssets(assets []channel.Asset, chainID multi.AssetID) []channel.Asset { var filtered []channel.Asset for _, asset := range assets { - if a := asset.(*Asset); a.ChainID.LedgerId.MapKey() == chainID.LedgerId.MapKey() { //nolint:forcetypeassert // We would have to panic anyways. + if a := asset.(*Asset); a.assetID.LedgerID.MapKey() == chainID.LedgerId().MapKey() { //nolint:forcetypeassert // We would have to panic anyways. filtered = append(filtered, a) } } diff --git a/channel/asset_test.go b/channel/asset_test.go index 2233bc4..76b4f39 100644 --- a/channel/asset_test.go +++ b/channel/asset_test.go @@ -128,15 +128,12 @@ func Test_Asset_GenericMarshaler(t *testing.T) { func TestMarshalling(t *testing.T) { rng := pkgtest.Prng(t) - assetIn := ethchannel.Asset{ - ChainID: ethchannel.MakeAssetID(big.NewInt(rng.Int63())), - AssetHolder: ethwallettest.NewRandomAddress(rng), - } + assetIn := ethchannel.NewAsset(big.NewInt(rng.Int63()), common.Address(ethwallettest.NewRandomAddress(rng))) bytes, err := assetIn.MarshalBinary() require.NoError(t, err) var assetOut ethchannel.Asset err = assetOut.UnmarshalBinary(bytes) require.NoError(t, err) - require.Equal(t, assetIn, assetOut) + require.True(t, assetIn.Equal(&assetOut)) } diff --git a/channel/backend.go b/channel/backend.go index 6342e30..037e4c3 100644 --- a/channel/backend.go +++ b/channel/backend.go @@ -318,10 +318,10 @@ func assetsToEthAssets(assets []channel.Asset, bIDs []wallet.BackendID) []adjudi if bIDs[i] == 1 { asset, ok := a.(*Asset) if !ok { - log.Panicf("wrong address type: %T", asset) + log.Panicf("wrong address type: %T", a) } cAddrs[i] = adjudicator.ChannelAsset{ - ChainID: asset.ChainID.LedgerId.Int, + ChainID: asset.assetID.LedgerID.Int, EthHolder: asset.EthAddress(), CcHolder: make([]byte, 0), } diff --git a/channel/backend_test.go b/channel/backend_test.go index d3493fa..83a7d16 100644 --- a/channel/backend_test.go +++ b/channel/backend_test.go @@ -42,7 +42,7 @@ func TestState_ToAndFromEth(t *testing.T) { rng := pkgtest.Prng(t) for i := 0; i < 100; i++ { - state := test.NewRandomState(rng) + state := test.NewRandomState(rng, test.WithBackend(1)) testToAndFromEthState(t, state) } }) @@ -51,7 +51,7 @@ func TestState_ToAndFromEth(t *testing.T) { rng := pkgtest.Prng(t) for i := 0; i < 100; i++ { - state := test.NewRandomState(rng, test.WithNumLocked(int(rng.Int31n(10)))) + state := test.NewRandomState(rng, test.WithBackend(1), test.WithNumLocked(int(rng.Int31n(10)))) testToAndFromEthState(t, state) } }) @@ -107,7 +107,7 @@ func testCalcID(t *testing.T, rng *rand.Rand, contr *adjudicator.Adjudicator, op func testHashState(t *testing.T, rng *rand.Rand, contr *adjudicator.Adjudicator, opts *bind.CallOpts) { t.Helper() for i := 0; i < 100; i++ { - state := test.NewRandomState(rng) + state := test.NewRandomState(rng, test.WithBackend(1)) ethState := channel.ToEthState(state) ethHash, err := contr.HashState(opts, ethState) require.NoError(t, err) @@ -133,7 +133,7 @@ func newChannelSetup(rng *rand.Rand) *test.Setup { params2, state2 := test.NewRandomParamsAndState(rng, test.WithIsFinal(!state.IsFinal), test.WithNumLocked(int(rng.Int31n(4)+1)), test.WithBackend(1)) createAddr := func() map[perunwallet.BackendID]perunwallet.Address { - return map[perunwallet.BackendID]perunwallet.Address{1: wallettest.NewRandomAddress(rng)} + return map[perunwallet.BackendID]perunwallet.Address{1: wallettest.NewRandomAddress(rng, 1)} } return &test.Setup{ @@ -141,7 +141,7 @@ func newChannelSetup(rng *rand.Rand) *test.Setup { Params2: params2, State: state, State2: state2, - Account: wallettest.NewRandomAccount(rng), + Account: wallettest.NewRandomAccount(rng, 1), RandomAddress: createAddr, } } diff --git a/channel/contractbackend.go b/channel/contractbackend.go index 9d4f99d..c7fd530 100644 --- a/channel/contractbackend.go +++ b/channel/contractbackend.go @@ -17,6 +17,7 @@ package channel import ( "context" "math/big" + "perun.network/go-perun/channel/multi" "sync" "github.com/ethereum/go-ethereum" @@ -45,7 +46,7 @@ var errTxTimedOut = errors.New("") var ( // SharedExpectedNonces is a map of each expected next nonce of all clients. - SharedExpectedNonces map[AssetID]map[common.Address]uint64 + SharedExpectedNonces map[multi.AssetID]map[common.Address]uint64 // SharedExpectedNoncesMutex is a mutex to protect the shared expected nonces map. SharedExpectedNoncesMutex = &sync.Mutex{} ) @@ -70,16 +71,16 @@ type ContractBackend struct { tr Transactor expectedNextNonce map[common.Address]uint64 txFinalityDepth uint64 - chainID AssetID + chainID multi.AssetID } // NewContractBackend creates a new ContractBackend with the given parameters. // txFinalityDepth defines in how many consecutive blocks a TX has to be // included to be considered final. Must be at least 1. -func NewContractBackend(cf ContractInterface, chainID AssetID, tr Transactor, txFinalityDepth uint64) ContractBackend { +func NewContractBackend(cf ContractInterface, chainID multi.AssetID, tr Transactor, txFinalityDepth uint64) ContractBackend { // Check if the shared maps are initialized, if not, initialize them. if SharedExpectedNonces == nil { - SharedExpectedNonces = make(map[AssetID]map[common.Address]uint64) + SharedExpectedNonces = make(map[multi.AssetID]map[common.Address]uint64) } // Check if the specific chainID entry exists in the shared maps, if not, create it. @@ -96,7 +97,7 @@ func NewContractBackend(cf ContractInterface, chainID AssetID, tr Transactor, tx } // AssetID returns the chain identifier of the contract backend. -func (c *ContractBackend) ChainID() AssetID { +func (c *ContractBackend) ChainID() multi.AssetID { return c.chainID } diff --git a/channel/funder.go b/channel/funder.go index 17ed417..1a8a906 100644 --- a/channel/funder.go +++ b/channel/funder.go @@ -388,7 +388,7 @@ func (f *Funder) waitForFundingConfirmation(ctx context.Context, request channel if !ok { return fmt.Errorf("wrong type: expected *Asset, got %T", a) } - if ethAsset.LedgerID().MapKey() != f.chainID.LedgerId.MapKey() { + if ethAsset.LedgerID().MapKey() != f.chainID.LedgerId().MapKey() { return nil } @@ -453,7 +453,7 @@ func (f *Funder) WaitForOthersFundingConfirmation(ctx context.Context, request c if !ok { return fmt.Errorf("wrong type: expected *Asset, got %T", a) } - if ethAsset.LedgerID().MapKey() != f.chainID.LedgerId.MapKey() { + if ethAsset.LedgerID().MapKey() != f.chainID.LedgerId().MapKey() { return nil } diff --git a/channel/funder_test.go b/channel/funder_test.go index 6a5b048..22b3827 100644 --- a/channel/funder_test.go +++ b/channel/funder_test.go @@ -80,10 +80,10 @@ func newFunderSetup(rng *rand.Rand) ( ) { n := 2 simBackend := test.NewSimulatedBackend() - ksWallet := wallettest.RandomWallet().(*keystore.Wallet) + ksWallet := wallettest.RandomWallet(1).(*keystore.Wallet) cb := ethchannel.NewContractBackend( simBackend, - ethchannel.MakeAssetID(simBackend.ChainID()), + ethchannel.MakeAssetID(ethchannel.MakeChainID(simBackend.ChainID()).Int), keystore.NewTransactor(*ksWallet, simBackend.Signer), TxFinalityDepth, ) @@ -94,12 +94,12 @@ func newFunderSetup(rng *rand.Rand) ( for i := 0; i < n; i++ { assets[i] = *test.NewRandomAsset(rng) - accs[i] = accounts.Account{Address: ethwallet.AsEthAddr(wallettest.NewRandomAddress(rng))} + accs[i] = accounts.Account{Address: ethwallet.AsEthAddr(wallettest.NewRandomAddress(rng, 1))} } // Use an ETH depositor with random addresses at index 0. depositors[0] = ethchannel.NewETHDepositor(txETHGasLimit) // Use an ERC20 depositor with random addresses at index 1. - token := wallettest.NewRandomAddress(rng) + token := wallettest.NewRandomAddress(rng, 1) depositors[1] = ethchannel.NewERC20Depositor(ethwallet.AsEthAddr(token), txERC20GasLimit) return funder, assets, depositors, accs } @@ -444,7 +444,7 @@ func newNFunders( // Start the auto-mining of blocks. simBackend.StartMining(blockInterval) t.Cleanup(simBackend.StopMining) - ksWallet := wallettest.RandomWallet().(*keystore.Wallet) + ksWallet := wallettest.RandomWallet(1).(*keystore.Wallet) deployAccount := &ksWallet.NewRandomAccount(rng).(*keystore.Account).Account simBackend.FundAddress(ctx, deployAccount.Address) @@ -493,10 +493,12 @@ func newNFunders( rng, channeltest.WithParts(parts), channeltest.WithChallengeDuration(uint64(n)*40000), + channeltest.WithBackend(1), ) allocation = channeltest.NewRandomAllocation( rng, channeltest.WithNumParts(n), + channeltest.WithBackend(1), channeltest.WithAssets( ethchannel.NewAsset(chainID, assetAddr1), ethchannel.NewAsset(chainID, assetAddr2), diff --git a/channel/subscription.go b/channel/subscription.go index 96c8c70..1d66b53 100644 --- a/channel/subscription.go +++ b/channel/subscription.go @@ -78,7 +78,6 @@ evloop: for { select { case _next := <-events: - log.Println("Received event", _next.Data, _next.Log.TxHash) err := r.processNext(ctx, a, _next) if err != nil { r.err <- err diff --git a/channel/test/init.go b/channel/test/init.go index e816bcd..92d54b0 100644 --- a/channel/test/init.go +++ b/channel/test/init.go @@ -23,8 +23,8 @@ import ( ) func init() { - test.SetRandomizer(new(randomizer)) + test.SetRandomizer(new(randomizer), 1) test.SetNewRandomAppID(func(r *rand.Rand) pchannel.AppID { return channel.NewRandomAppID(r) - }) + }, 1) } diff --git a/channel/test/randomizer.go b/channel/test/randomizer.go index b976ff0..cecb066 100644 --- a/channel/test/randomizer.go +++ b/channel/test/randomizer.go @@ -35,12 +35,12 @@ func (randomizer) NewRandomAsset(rng *rand.Rand) channel.Asset { func NewRandomAsset(rng *rand.Rand) *ethchannel.Asset { chainID := NewRandomChainID(rng) asset := ethwtest.NewRandomAddress(rng) - return ethchannel.NewAsset(chainID.LedgerId.Int, common.Address(asset)) + return ethchannel.NewAsset(chainID.LedgerID.Int, common.Address(asset)) } // NewRandomChainID returns a new random AssetID. func NewRandomChainID(rng *rand.Rand) ethchannel.AssetID { r := rng.Uint64() id := new(big.Int).SetUint64(r) - return ethchannel.MakeAssetID(id) + return ethchannel.MakeAssetID(id).(ethchannel.AssetID) } diff --git a/channel/test/setup.go b/channel/test/setup.go index 1806cf2..b84d724 100644 --- a/channel/test/setup.go +++ b/channel/test/setup.go @@ -64,7 +64,7 @@ type ( func NewSimSetup(t *testing.T, rng *rand.Rand, txFinalityDepth uint64, blockInterval time.Duration, opts ...SimBackendOpt) *SimSetup { t.Helper() simBackend := NewSimulatedBackend(opts...) - ksWallet := wallettest.RandomWallet().(*keystore.Wallet) + ksWallet := wallettest.RandomWallet(1).(*keystore.Wallet) txAccount := ksWallet.NewRandomAccount(rng).(*keystore.Account) ctx, cancel := context.WithTimeout(context.Background(), defaultSetupTimeout) defer cancel() @@ -78,7 +78,7 @@ func NewSimSetup(t *testing.T, rng *rand.Rand, txFinalityDepth uint64, blockInte signer := types.LatestSigner(params.AllEthashProtocolChanges) contractBackend := ethchannel.NewContractBackend( simBackend, - ethchannel.MakeAssetID(simBackend.ChainID()), + ethchannel.MakeAssetID(ethchannel.MakeChainID(simBackend.ChainID()).Int), keystore.NewTransactor(*ksWallet, signer), txFinalityDepth, ) @@ -115,7 +115,7 @@ func NewSetup(t *testing.T, rng *rand.Rand, n int, blockInterval time.Duration, require.NoError(t, err) s.Asset = ethchannel.NewAsset(s.SimBackend.ChainID(), assetHolder) - ksWallet := wallettest.RandomWallet().(*keystore.Wallet) + ksWallet := wallettest.RandomWallet(1).(*keystore.Wallet) for i := 0; i < n; i++ { s.Accs[i] = ksWallet.NewRandomAccount(rng).(*keystore.Account) s.Parts[i] = map[wallet.BackendID]wallet.Address{1: s.Accs[i].Address()} @@ -123,7 +123,7 @@ func NewSetup(t *testing.T, rng *rand.Rand, n int, blockInterval time.Duration, s.Recvs[i] = map[wallet.BackendID]*ethwallet.Address{1: ksWallet.NewRandomAccount(rng).Address().(*ethwallet.Address)} cb := ethchannel.NewContractBackend( s.SimBackend, - ethchannel.MakeAssetID(s.SimBackend.ChainID()), + ethchannel.MakeAssetID(ethchannel.MakeChainID(s.SimBackend.ChainID()).Int), keystore.NewTransactor(*ksWallet, s.SimBackend.Signer), txFinalityDepth, ) diff --git a/channel/test/tokensetup.go b/channel/test/tokensetup.go index 414b23a..5001e2e 100644 --- a/channel/test/tokensetup.go +++ b/channel/test/tokensetup.go @@ -64,14 +64,14 @@ func NewTokenSetup(ctx context.Context, t *testing.T, rng *rand.Rand, txFinality t.Helper() // Simulated chain setup. sb := NewSimulatedBackend() - ksWallet := wallettest.RandomWallet().(*keystore.Wallet) + ksWallet := wallettest.RandomWallet(1).(*keystore.Wallet) acc1 := &ksWallet.NewRandomAccount(rng).(*keystore.Account).Account sb.FundAddress(ctx, acc1.Address) acc2 := &ksWallet.NewRandomAccount(rng).(*keystore.Account).Account sb.FundAddress(ctx, acc2.Address) cb := ethchannel.NewContractBackend( sb, - ethchannel.MakeAssetID(sb.ChainID()), + ethchannel.MakeAssetID(ethchannel.MakeChainID(sb.ChainID()).Int), keystore.NewTransactor(*ksWallet, sb.Signer), txFinalityDepth, ) diff --git a/client/payment_test.go b/client/payment_test.go index 84b5344..fc860cc 100644 --- a/client/payment_test.go +++ b/client/payment_test.go @@ -68,7 +68,7 @@ func TestPaymentHappy(t *testing.T) { s.Asset, 1, [2]*big.Int{big.NewInt(100), big.NewInt(100)}, - client.WithApp(chtest.NewRandomAppAndData(rng)), + client.WithApp(chtest.NewRandomAppAndData(rng, chtest.WithBackend(1))), ), NumPayments: [2]int{2, 2}, TxAmounts: [2]*big.Int{big.NewInt(5), big.NewInt(3)}, diff --git a/client/subchannel_test.go b/client/subchannel_test.go index 348b7fb..98107bd 100644 --- a/client/subchannel_test.go +++ b/client/subchannel_test.go @@ -74,7 +74,7 @@ func TestSubChannelHappy(t *testing.T) { subChannelFunds, subSubChannelFunds, client.WithApp( - chtest.NewRandomAppAndData(rng, chtest.WithAppRandomizer(new(payment.Randomizer))), + chtest.NewRandomAppAndData(rng, chtest.WithAppRandomizer(new(payment.Randomizer)), chtest.WithBackend(1)), ), txAmount, ) diff --git a/client/test/multiledger.go b/client/test/multiledger.go index dd4fb90..231155c 100644 --- a/client/test/multiledger.go +++ b/client/test/multiledger.go @@ -101,7 +101,7 @@ type testLedger struct { } func (l testLedger) AssetID() multi.AssetID { - return multi.AssetID{1, ethchannel.MakeChainID(l.simSetup.SimBackend.ChainID())} + return ethchannel.MakeAssetID(ethchannel.MakeChainID(l.simSetup.SimBackend.ChainID()).Int) } func setupLedger(ctx context.Context, t *testing.T, rng *rand.Rand, chainID *big.Int) testLedger { @@ -132,21 +132,21 @@ func setupClient(t *testing.T, rng *rand.Rand, l1, l2 testLedger, bus wire.Bus) require := require.New(t) // Setup wallet and account. - w := map[wallet.BackendID]wtest.Wallet{1: wtest.RandomWallet().(*keystore.Wallet)} + w := map[wallet.BackendID]wtest.Wallet{1: wtest.RandomWallet(1).(*keystore.Wallet)} acc := w[1].NewRandomAccount(rng).(*keystore.Account) // Setup contract backends. signer1 := l1.simSetup.SimBackend.Signer cb1 := ethchannel.NewContractBackend( l1.simSetup.CB, - ethchannel.MakeAssetID(l1.simSetup.SimBackend.ChainID()), + ethchannel.MakeAssetID(ethchannel.MakeChainID(l1.simSetup.SimBackend.ChainID()).Int), keystore.NewTransactor(*w[1].(*keystore.Wallet), signer1), l1.simSetup.CB.TxFinalityDepth(), ) signer2 := l2.simSetup.SimBackend.Signer cb2 := ethchannel.NewContractBackend( l2.simSetup.CB, - ethchannel.MakeAssetID(l2.simSetup.SimBackend.ChainID()), + ethchannel.MakeAssetID(ethchannel.MakeChainID(l2.simSetup.SimBackend.ChainID()).Int), keystore.NewTransactor(*w[1].(*keystore.Wallet), signer2), l2.simSetup.CB.TxFinalityDepth(), ) diff --git a/go.mod b/go.mod index e6a68ac..ee2f088 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/sirupsen/logrus v1.8.1 github.com/stretchr/testify v1.7.0 golang.org/x/sync v0.0.0-20210220032951-036812b2e83c - perun.network/go-perun v0.11.1-0.20241001124918-3c1e2619e407 + perun.network/go-perun v0.11.1-0.20241015075355-a695d14ac4c9 polycry.pt/poly-go v0.0.0-20220301085937-fb9d71b45a37 ) diff --git a/go.sum b/go.sum index 288eb61..6899c76 100644 --- a/go.sum +++ b/go.sum @@ -645,8 +645,8 @@ honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= -perun.network/go-perun v0.11.1-0.20241001124918-3c1e2619e407 h1:byhT6T/XEOFjQpqGshEX867MyGbv+gX6d2+uWkOZwUY= -perun.network/go-perun v0.11.1-0.20241001124918-3c1e2619e407/go.mod h1:mkmgZ/EQ7EPpDprFkg5+0Cz+QEIJb4SezkDdEPyKtVI= +perun.network/go-perun v0.11.1-0.20241015075355-a695d14ac4c9 h1:852BwaqvOr2cxiB5ZdFQgnwZvYlH0iWXiic3sh/QhYM= +perun.network/go-perun v0.11.1-0.20241015075355-a695d14ac4c9/go.mod h1:mkmgZ/EQ7EPpDprFkg5+0Cz+QEIJb4SezkDdEPyKtVI= polycry.pt/poly-go v0.0.0-20220301085937-fb9d71b45a37 h1:iA5GzEa/hHfVlQpimEjPV09NATwHXxSjWNB0VVodtew= polycry.pt/poly-go v0.0.0-20220301085937-fb9d71b45a37/go.mod h1:XUBrNtqgEhN3EEOP/5gh7IBd3xVHKidCjXDZfl9+kMU= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= diff --git a/subscription/eventsub_test.go b/subscription/eventsub_test.go index 4aa7a96..9f9de60 100644 --- a/subscription/eventsub_test.go +++ b/subscription/eventsub_test.go @@ -57,12 +57,12 @@ func TestEventSub(t *testing.T) { // Simulated chain setup. sb := test.NewSimulatedBackend() - ksWallet := wallettest.RandomWallet().(*keystore.Wallet) + ksWallet := wallettest.RandomWallet(1).(*keystore.Wallet) account := &ksWallet.NewRandomAccount(rng).(*keystore.Account).Account sb.FundAddress(ctx, account.Address) cb := ethchannel.NewContractBackend( sb, - ethchannel.MakeAssetID(sb.ChainID()), + ethchannel.MakeAssetID(ethchannel.MakeChainID(sb.ChainID()).Int), keystore.NewTransactor(*ksWallet, sb.Signer), txFinalityDepth, ) @@ -154,12 +154,12 @@ func TestEventSub_Filter(t *testing.T) { // Simulated chain setup. sb := test.NewSimulatedBackend() - ksWallet := wallettest.RandomWallet().(*keystore.Wallet) + ksWallet := wallettest.RandomWallet(1).(*keystore.Wallet) account := &ksWallet.NewRandomAccount(rng).(*keystore.Account).Account sb.FundAddress(ctx, account.Address) cb := ethchannel.NewContractBackend( sb, - ethchannel.MakeAssetID(sb.ChainID()), + ethchannel.MakeAssetID(ethchannel.MakeChainID(sb.ChainID()).Int), keystore.NewTransactor(*ksWallet, sb.Signer), txFinalityDepth, ) diff --git a/wallet/keystore/transactor_test.go b/wallet/keystore/transactor_test.go index 16d1f92..f313d37 100644 --- a/wallet/keystore/transactor_test.go +++ b/wallet/keystore/transactor_test.go @@ -79,9 +79,9 @@ func TestTransactor(t *testing.T) { } func newTransactorSetup(t require.TestingT, prng *rand.Rand, signer types.Signer, chainID int64, txType test.TxType) test.TransactorSetup { - ksWallet, ok := wallettest.RandomWallet().(*keystore.Wallet) + ksWallet, ok := wallettest.RandomWallet(1).(*keystore.Wallet) require.Truef(t, ok, "random wallet in wallettest should be a keystore wallet") - acc := wallettest.NewRandomAccount(prng) + acc := wallettest.NewRandomAccount(prng, 1) return test.TransactorSetup{ Signer: signer, ChainID: chainID, diff --git a/wallet/keystore/wallet_test.go b/wallet/keystore/wallet_test.go index 1cb87dd..8c7ca3c 100644 --- a/wallet/keystore/wallet_test.go +++ b/wallet/keystore/wallet_test.go @@ -49,7 +49,7 @@ func TestWallet_Contains(t *testing.T) { rng := pkgtest.Prng(t) w := ethwallettest.NewTmpWallet() - assert.False(t, w.Contains(ethwallet.AsEthAddr(test.NewRandomAddress(rng))), + assert.False(t, w.Contains(ethwallet.AsEthAddr(test.NewRandomAddress(rng, 1))), "Expected wallet not to contain an empty account") acc := w.NewAccount() diff --git a/wallet/test/init.go b/wallet/test/init.go index 481462e..b34d479 100644 --- a/wallet/test/init.go +++ b/wallet/test/init.go @@ -24,7 +24,7 @@ var ks *keystore.KeyStore func init() { rnd := newRandomizer() ks = rnd.wallet.Ks - test.SetRandomizer(rnd) + test.SetRandomizer(rnd, 1) } // Keystore returns the currently set keystore for tests. From d1b472f2de85dc9175261b012f389a95f48032b5 Mon Sep 17 00:00:00 2001 From: Sophia Koehler Date: Tue, 29 Oct 2024 11:25:43 +0100 Subject: [PATCH 07/15] chore(go.mod): Update go-perun version fix(all): adjust Address() return type to []byte, add backendID argument for sign calls fix(backend.go): handle ccAddresses in participant conversion fix(conclude.go): Use own StateMap implementation to handle subscriptions to only eth channelIDs fix(funder.go): Sort out Assets that do not fit EthAsset before funding Signed-off-by: Sophia Koehler --- channel/adjudicator_test.go | 2 +- channel/asset.go | 7 ++++--- channel/backend.go | 25 ++++++++++++++----------- channel/conclude.go | 26 ++++++++++++++++++++++---- channel/funder.go | 22 +++++++++++++--------- go.mod | 2 +- go.sum | 4 ++-- 7 files changed, 57 insertions(+), 31 deletions(-) diff --git a/channel/adjudicator_test.go b/channel/adjudicator_test.go index 6f42ef7..e386808 100644 --- a/channel/adjudicator_test.go +++ b/channel/adjudicator_test.go @@ -46,7 +46,7 @@ func testSignState(t *testing.T, accounts []*keystore.Account, state *channel.St func signState(accounts []*keystore.Account, state *channel.State) (channel.Transaction, error) { sigs := make([][]byte, len(accounts)) for i := range accounts { - sig, err := channel.Sign(accounts[i], state) + sig, err := channel.Sign(accounts[i], state, 1) if err != nil { return channel.Transaction{}, errors.WithMessagef(err, "signing with account %d", i) } diff --git a/channel/asset.go b/channel/asset.go index 51e2266..78a9afe 100644 --- a/channel/asset.go +++ b/channel/asset.go @@ -156,15 +156,16 @@ func (a Asset) Equal(b channel.Asset) bool { } // Address returns the address of the asset. -func (a Asset) Address() string { - return a.AssetHolder.String() +func (a Asset) Address() []byte { + data, _ := a.AssetHolder.MarshalBinary() + return data } // filterAssets filters the assets for the given chainID. func filterAssets(assets []channel.Asset, chainID multi.AssetID) []channel.Asset { var filtered []channel.Asset for _, asset := range assets { - if a := asset.(*Asset); a.assetID.LedgerID.MapKey() == chainID.LedgerId().MapKey() { //nolint:forcetypeassert // We would have to panic anyways. + if a, ok := asset.(*Asset); ok && a.assetID.LedgerID.MapKey() == chainID.LedgerId().MapKey() { //nolint:forcetypeassert // We would have to panic anyways. filtered = append(filtered, a) } } diff --git a/channel/backend.go b/channel/backend.go index 037e4c3..cd2a5cc 100644 --- a/channel/backend.go +++ b/channel/backend.go @@ -243,17 +243,20 @@ func EncodeState(state *adjudicator.ChannelState) ([]byte, error) { func pwToCommonAddresses(addr []map[wallet.BackendID]wallet.Address) []adjudicator.ChannelParticipant { cAddrs := make([]adjudicator.ChannelParticipant, len(addr)) for i, part := range addr { - for j, address := range part { - if address.BackendID() == 1 && j == 1 { - cAddrs[i].EthAddress = ethwallet.AsEthAddr(address) - cAddrs[i].CcAddress = make([]byte, 0) - } else { - addBytes, err := address.MarshalBinary() - if err != nil { - log.Panicf("error encoding unknown address: %v", err) - } - cAddrs[i].CcAddress = addBytes + ethAddr, ok := part[1] + if !ok { + log.Panic("eth address not found") + } + cAddrs[i].EthAddress = ethwallet.AsEthAddr(ethAddr) + ccAddr, ok := part[2] + if ok { + addBytes, err := ccAddr.MarshalBinary() + if err != nil { + log.Panicf("error encoding unknown address: %v", err) } + cAddrs[i].CcAddress = addBytes + } else { + cAddrs[i].CcAddress = make([]byte, 32) } } return cAddrs @@ -323,7 +326,7 @@ func assetsToEthAssets(assets []channel.Asset, bIDs []wallet.BackendID) []adjudi cAddrs[i] = adjudicator.ChannelAsset{ ChainID: asset.assetID.LedgerID.Int, EthHolder: asset.EthAddress(), - CcHolder: make([]byte, 0), + CcHolder: make([]byte, 32), } } else { asset, err := a.MarshalBinary() diff --git a/channel/conclude.go b/channel/conclude.go index fa5862d..356e548 100644 --- a/channel/conclude.go +++ b/channel/conclude.go @@ -37,6 +37,25 @@ const ( adjHeaderBuffSize = 10 ) +// StateMap represents a channel state tree. +type StateMap map[channel.ID]*channel.State + +// MakeStateMap creates a new StateMap object. +func MakeStateMap() StateMap { + return make(map[channel.ID]*channel.State) +} + +// Add adds the given states to the state map. +func (m StateMap) Add(states ...*channel.State) { + for _, s := range states { + for key, id := range s.ID { + if key == 1 { + m[id] = s + } + } + } +} + // ensureConcluded ensures that conclude or concludeFinal (for non-final and // final states, resp.) is called on the adjudicator. // - a subscription on Concluded events is established @@ -107,7 +126,7 @@ func (a *Adjudicator) checkConcludedState( req channel.AdjudicatorReq, subStates channel.StateMap, ) error { - states := channel.MakeStateMap() + states := MakeStateMap() states.Add(req.Tx.State) for _, v := range subStates { states.Add(v) @@ -117,12 +136,11 @@ func (a *Adjudicator) checkConcludedState( events := make(chan *subscription.Event, adjEventBuffSize) subErr := make(chan error, 1) for id := range states { - cId := channel.FromIDKey(id) sub, err := subscription.Subscribe( ctx, a.ContractBackend, a.bound, - updateEventType(cId[1]), + updateEventType(id), startBlockOffset, a.txFinalityDepth, ) @@ -143,7 +161,7 @@ func (a *Adjudicator) checkConcludedState( fmt.Println("Event: ", e) if adjEvent, ok := e.Data.(*adjudicator.AdjudicatorChannelUpdate); ok && adjEvent.Phase == phaseConcluded { id := adjEvent.ChannelID - v := states[channel.IDKey(channel.IDMap{1: id})].Version + v := states[id].Version if adjEvent.Version != v { return errors.Errorf("wrong version: expected %v, got %v", v, adjEvent.Version) } diff --git a/channel/funder.go b/channel/funder.go index 1a8a906..c3aa8a1 100644 --- a/channel/funder.go +++ b/channel/funder.go @@ -156,18 +156,22 @@ func (f *Funder) Fund(ctx context.Context, request channel.FundingReq) error { cancel() // Cancel the context if we return before the block timeout. }() + // Extract only ethereum Assets to fund + var ethAssets []*Asset + for _, asset := range request.State.Assets { + ethAsset, ok := asset.(*Asset) + if ok { + ethAssets = append(ethAssets, ethAsset) + } + } + // Fund each asset, saving the TX in `txs` and the errors in `errg`. - assets := request.State.Assets - txs, errg := f.fundAssets(ctx, assets, channelID[1], request) + txs, errg := f.fundAssets(ctx, ethAssets, channelID[1], request) // Wait for the TXs to be mined. - for a, asset := range assets { + for a, asset := range ethAssets { for i, tx := range txs[a] { - assetTyped, ok := asset.(*Asset) - if !ok { - return fmt.Errorf("wrong type: expected %T, got %T", &Asset{}, asset) - } - acc := f.accounts[assetTyped.MapKey()] + acc := f.accounts[asset.MapKey()] if _, err := f.ConfirmTransaction(ctx, tx, acc); err != nil { if errors.Is(err, errTxTimedOut) { err = client.NewTxTimedoutError(Fund.String(), tx.Hash().Hex(), err.Error()) @@ -217,7 +221,7 @@ func (f *Funder) fundingTimeoutContext(ctx context.Context, req channel.FundingR // fundAssets funds each asset of the funding agreement in the `req`. // Sends the transactions and returns them. Wait on the returned gatherer // to ensure that all `funding` events were received. -func (f *Funder) fundAssets(ctx context.Context, assets []channel.Asset, channelID channel.ID, req channel.FundingReq) ([]types.Transactions, *perror.Gatherer) { +func (f *Funder) fundAssets(ctx context.Context, assets []*Asset, channelID channel.ID, req channel.FundingReq) ([]types.Transactions, *perror.Gatherer) { txs := make([]types.Transactions, len(assets)) errg := perror.NewGatherer() fundingIDs := FundingIDs(channelID, req.Params.Parts...) diff --git a/go.mod b/go.mod index ee2f088..f912f1c 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/sirupsen/logrus v1.8.1 github.com/stretchr/testify v1.7.0 golang.org/x/sync v0.0.0-20210220032951-036812b2e83c - perun.network/go-perun v0.11.1-0.20241015075355-a695d14ac4c9 + perun.network/go-perun v0.11.1-0.20241029100904-8589eb8c5b36 polycry.pt/poly-go v0.0.0-20220301085937-fb9d71b45a37 ) diff --git a/go.sum b/go.sum index 6899c76..d131e9e 100644 --- a/go.sum +++ b/go.sum @@ -645,8 +645,8 @@ honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= -perun.network/go-perun v0.11.1-0.20241015075355-a695d14ac4c9 h1:852BwaqvOr2cxiB5ZdFQgnwZvYlH0iWXiic3sh/QhYM= -perun.network/go-perun v0.11.1-0.20241015075355-a695d14ac4c9/go.mod h1:mkmgZ/EQ7EPpDprFkg5+0Cz+QEIJb4SezkDdEPyKtVI= +perun.network/go-perun v0.11.1-0.20241029100904-8589eb8c5b36 h1:mNWPyRVE9F69EcAQlpkEmj2Rlzc0fVlIFsiNBbD30Dw= +perun.network/go-perun v0.11.1-0.20241029100904-8589eb8c5b36/go.mod h1:mkmgZ/EQ7EPpDprFkg5+0Cz+QEIJb4SezkDdEPyKtVI= polycry.pt/poly-go v0.0.0-20220301085937-fb9d71b45a37 h1:iA5GzEa/hHfVlQpimEjPV09NATwHXxSjWNB0VVodtew= polycry.pt/poly-go v0.0.0-20220301085937-fb9d71b45a37/go.mod h1:XUBrNtqgEhN3EEOP/5gh7IBd3xVHKidCjXDZfl9+kMU= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= From 759a94362d0376d41d641791fe674c9dc9082bba Mon Sep 17 00:00:00 2001 From: Sophia Koehler Date: Wed, 6 Nov 2024 11:19:20 +0100 Subject: [PATCH 08/15] fix(adjudicator.go, test, contractbackend.go): Use chainID.MapKey as key in shared nonce map chore: Update dependency, remove logging Signed-off-by: Sophia Koehler --- channel/adjudicator.go | 3 +-- channel/asset.go | 4 ++-- channel/conclude.go | 1 - channel/contractbackend.go | 18 ++++++++++-------- channel/funder.go | 7 +++---- channel/funder_test.go | 4 ++-- channel/test/setup.go | 4 ++-- channel/test/tokensetup.go | 2 +- client/test/multiledger.go | 4 ++-- go.mod | 2 +- go.sum | 4 ++-- subscription/eventsub_test.go | 4 ++-- 12 files changed, 28 insertions(+), 29 deletions(-) diff --git a/channel/adjudicator.go b/channel/adjudicator.go index 646920c..9e8d772 100644 --- a/channel/adjudicator.go +++ b/channel/adjudicator.go @@ -17,7 +17,6 @@ package channel import ( "context" "math/big" - "perun.network/go-perun/channel/multi" "github.com/ethereum/go-ethereum/accounts" "github.com/ethereum/go-ethereum/accounts/abi/bind" @@ -43,7 +42,7 @@ var _ channel.Adjudicator = (*Adjudicator)(nil) type Adjudicator struct { ContractBackend // chainID specifies the chain the funder is living on. - chainID multi.AssetID + chainID ChainID contract *adjudicator.Adjudicator bound *bind.BoundContract // The address to which we send all funds. diff --git a/channel/asset.go b/channel/asset.go index 78a9afe..a797cad 100644 --- a/channel/asset.go +++ b/channel/asset.go @@ -162,10 +162,10 @@ func (a Asset) Address() []byte { } // filterAssets filters the assets for the given chainID. -func filterAssets(assets []channel.Asset, chainID multi.AssetID) []channel.Asset { +func filterAssets(assets []channel.Asset, chainID ChainID) []channel.Asset { var filtered []channel.Asset for _, asset := range assets { - if a, ok := asset.(*Asset); ok && a.assetID.LedgerID.MapKey() == chainID.LedgerId().MapKey() { //nolint:forcetypeassert // We would have to panic anyways. + if a, ok := asset.(*Asset); ok && a.assetID.LedgerID.MapKey() == chainID.MapKey() { //nolint:forcetypeassert // We would have to panic anyways. filtered = append(filtered, a) } } diff --git a/channel/conclude.go b/channel/conclude.go index 356e548..21fc891 100644 --- a/channel/conclude.go +++ b/channel/conclude.go @@ -158,7 +158,6 @@ func (a *Adjudicator) checkConcludedState( for { select { case e := <-events: - fmt.Println("Event: ", e) if adjEvent, ok := e.Data.(*adjudicator.AdjudicatorChannelUpdate); ok && adjEvent.Phase == phaseConcluded { id := adjEvent.ChannelID v := states[id].Version diff --git a/channel/contractbackend.go b/channel/contractbackend.go index c7fd530..0481d48 100644 --- a/channel/contractbackend.go +++ b/channel/contractbackend.go @@ -46,7 +46,7 @@ var errTxTimedOut = errors.New("") var ( // SharedExpectedNonces is a map of each expected next nonce of all clients. - SharedExpectedNonces map[multi.AssetID]map[common.Address]uint64 + SharedExpectedNonces map[multi.LedgerIDMapKey]map[common.Address]uint64 // SharedExpectedNoncesMutex is a mutex to protect the shared expected nonces map. SharedExpectedNoncesMutex = &sync.Mutex{} ) @@ -71,33 +71,35 @@ type ContractBackend struct { tr Transactor expectedNextNonce map[common.Address]uint64 txFinalityDepth uint64 - chainID multi.AssetID + chainID ChainID } // NewContractBackend creates a new ContractBackend with the given parameters. // txFinalityDepth defines in how many consecutive blocks a TX has to be // included to be considered final. Must be at least 1. -func NewContractBackend(cf ContractInterface, chainID multi.AssetID, tr Transactor, txFinalityDepth uint64) ContractBackend { +func NewContractBackend(cf ContractInterface, chainID ChainID, tr Transactor, txFinalityDepth uint64) ContractBackend { + SharedExpectedNoncesMutex.Lock() + defer SharedExpectedNoncesMutex.Unlock() // Check if the shared maps are initialized, if not, initialize them. if SharedExpectedNonces == nil { - SharedExpectedNonces = make(map[multi.AssetID]map[common.Address]uint64) + SharedExpectedNonces = make(map[multi.LedgerIDMapKey]map[common.Address]uint64) } // Check if the specific chainID entry exists in the shared maps, if not, create it. - if _, exists := SharedExpectedNonces[chainID]; !exists { - SharedExpectedNonces[chainID] = make(map[common.Address]uint64) + if _, exists := SharedExpectedNonces[chainID.MapKey()]; !exists { + SharedExpectedNonces[chainID.MapKey()] = make(map[common.Address]uint64) } return ContractBackend{ ContractInterface: cf, tr: tr, - expectedNextNonce: SharedExpectedNonces[chainID], + expectedNextNonce: SharedExpectedNonces[chainID.MapKey()], txFinalityDepth: txFinalityDepth, chainID: chainID, } } // AssetID returns the chain identifier of the contract backend. -func (c *ContractBackend) ChainID() multi.AssetID { +func (c *ContractBackend) ChainID() ChainID { return c.chainID } diff --git a/channel/funder.go b/channel/funder.go index c3aa8a1..833cb4a 100644 --- a/channel/funder.go +++ b/channel/funder.go @@ -270,7 +270,7 @@ func (f *Funder) fundAssets(ctx context.Context, assets []*Asset, channelID chan // Send the funding TX. tx, err := f.sendFundingTx(ctx, asset, req, contract, fundingIDs[req.Idx]) if err != nil { - f.log.WithField("asset", asset).WithError(err).Error("Could not fund asset") + f.log.WithField("asset", asset).WithError(err).Errorf("Could not fund asset %v", req.Params.Parts[req.Idx]) errg.Add(errors.WithMessage(err, "funding asset")) continue } @@ -320,7 +320,6 @@ func (f *Funder) deposit(ctx context.Context, bal *big.Int, asset Asset, funding if !ok { return nil, errors.Errorf("could not find account for asset #%d", asset) } - return depositor.Deposit(ctx, *NewDepositReq(bal, f.ContractBackend, asset, acc, fundingID)) } @@ -392,7 +391,7 @@ func (f *Funder) waitForFundingConfirmation(ctx context.Context, request channel if !ok { return fmt.Errorf("wrong type: expected *Asset, got %T", a) } - if ethAsset.LedgerID().MapKey() != f.chainID.LedgerId().MapKey() { + if ethAsset.LedgerID().MapKey() != f.chainID.MapKey() { return nil } @@ -457,7 +456,7 @@ func (f *Funder) WaitForOthersFundingConfirmation(ctx context.Context, request c if !ok { return fmt.Errorf("wrong type: expected *Asset, got %T", a) } - if ethAsset.LedgerID().MapKey() != f.chainID.LedgerId().MapKey() { + if ethAsset.LedgerID().MapKey() != f.chainID.MapKey() { return nil } diff --git a/channel/funder_test.go b/channel/funder_test.go index 22b3827..4b6614e 100644 --- a/channel/funder_test.go +++ b/channel/funder_test.go @@ -83,7 +83,7 @@ func newFunderSetup(rng *rand.Rand) ( ksWallet := wallettest.RandomWallet(1).(*keystore.Wallet) cb := ethchannel.NewContractBackend( simBackend, - ethchannel.MakeAssetID(ethchannel.MakeChainID(simBackend.ChainID()).Int), + ethchannel.MakeChainID(simBackend.ChainID()), keystore.NewTransactor(*ksWallet, simBackend.Signer), TxFinalityDepth, ) @@ -452,7 +452,7 @@ func newNFunders( simBackend.FundAddress(ctx, tokenAcc.Address) cb := ethchannel.NewContractBackend( simBackend, - ethchannel.MakeAssetID(chainID), + ethchannel.MakeChainID(chainID), keystore.NewTransactor(*ksWallet, simBackend.Signer), TxFinalityDepth, ) diff --git a/channel/test/setup.go b/channel/test/setup.go index b84d724..61d198c 100644 --- a/channel/test/setup.go +++ b/channel/test/setup.go @@ -78,7 +78,7 @@ func NewSimSetup(t *testing.T, rng *rand.Rand, txFinalityDepth uint64, blockInte signer := types.LatestSigner(params.AllEthashProtocolChanges) contractBackend := ethchannel.NewContractBackend( simBackend, - ethchannel.MakeAssetID(ethchannel.MakeChainID(simBackend.ChainID()).Int), + ethchannel.MakeChainID(simBackend.ChainID()), keystore.NewTransactor(*ksWallet, signer), txFinalityDepth, ) @@ -123,7 +123,7 @@ func NewSetup(t *testing.T, rng *rand.Rand, n int, blockInterval time.Duration, s.Recvs[i] = map[wallet.BackendID]*ethwallet.Address{1: ksWallet.NewRandomAccount(rng).Address().(*ethwallet.Address)} cb := ethchannel.NewContractBackend( s.SimBackend, - ethchannel.MakeAssetID(ethchannel.MakeChainID(s.SimBackend.ChainID()).Int), + ethchannel.MakeChainID(s.SimBackend.ChainID()), keystore.NewTransactor(*ksWallet, s.SimBackend.Signer), txFinalityDepth, ) diff --git a/channel/test/tokensetup.go b/channel/test/tokensetup.go index 5001e2e..aa9d7ca 100644 --- a/channel/test/tokensetup.go +++ b/channel/test/tokensetup.go @@ -71,7 +71,7 @@ func NewTokenSetup(ctx context.Context, t *testing.T, rng *rand.Rand, txFinality sb.FundAddress(ctx, acc2.Address) cb := ethchannel.NewContractBackend( sb, - ethchannel.MakeAssetID(ethchannel.MakeChainID(sb.ChainID()).Int), + ethchannel.MakeChainID(sb.ChainID()), keystore.NewTransactor(*ksWallet, sb.Signer), txFinalityDepth, ) diff --git a/client/test/multiledger.go b/client/test/multiledger.go index 231155c..7ddb428 100644 --- a/client/test/multiledger.go +++ b/client/test/multiledger.go @@ -139,14 +139,14 @@ func setupClient(t *testing.T, rng *rand.Rand, l1, l2 testLedger, bus wire.Bus) signer1 := l1.simSetup.SimBackend.Signer cb1 := ethchannel.NewContractBackend( l1.simSetup.CB, - ethchannel.MakeAssetID(ethchannel.MakeChainID(l1.simSetup.SimBackend.ChainID()).Int), + ethchannel.MakeChainID(l1.simSetup.SimBackend.ChainID()), keystore.NewTransactor(*w[1].(*keystore.Wallet), signer1), l1.simSetup.CB.TxFinalityDepth(), ) signer2 := l2.simSetup.SimBackend.Signer cb2 := ethchannel.NewContractBackend( l2.simSetup.CB, - ethchannel.MakeAssetID(ethchannel.MakeChainID(l2.simSetup.SimBackend.ChainID()).Int), + ethchannel.MakeChainID(l2.simSetup.SimBackend.ChainID()), keystore.NewTransactor(*w[1].(*keystore.Wallet), signer2), l2.simSetup.CB.TxFinalityDepth(), ) diff --git a/go.mod b/go.mod index f912f1c..ba81d74 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/sirupsen/logrus v1.8.1 github.com/stretchr/testify v1.7.0 golang.org/x/sync v0.0.0-20210220032951-036812b2e83c - perun.network/go-perun v0.11.1-0.20241029100904-8589eb8c5b36 + perun.network/go-perun v0.11.1-0.20241106101254-39095c144884 polycry.pt/poly-go v0.0.0-20220301085937-fb9d71b45a37 ) diff --git a/go.sum b/go.sum index d131e9e..b630447 100644 --- a/go.sum +++ b/go.sum @@ -645,8 +645,8 @@ honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= -perun.network/go-perun v0.11.1-0.20241029100904-8589eb8c5b36 h1:mNWPyRVE9F69EcAQlpkEmj2Rlzc0fVlIFsiNBbD30Dw= -perun.network/go-perun v0.11.1-0.20241029100904-8589eb8c5b36/go.mod h1:mkmgZ/EQ7EPpDprFkg5+0Cz+QEIJb4SezkDdEPyKtVI= +perun.network/go-perun v0.11.1-0.20241106101254-39095c144884 h1:BhqP2zp//z0+r+JMM+WFCC8UxV8otSItDgWe7PIQpIk= +perun.network/go-perun v0.11.1-0.20241106101254-39095c144884/go.mod h1:mkmgZ/EQ7EPpDprFkg5+0Cz+QEIJb4SezkDdEPyKtVI= polycry.pt/poly-go v0.0.0-20220301085937-fb9d71b45a37 h1:iA5GzEa/hHfVlQpimEjPV09NATwHXxSjWNB0VVodtew= polycry.pt/poly-go v0.0.0-20220301085937-fb9d71b45a37/go.mod h1:XUBrNtqgEhN3EEOP/5gh7IBd3xVHKidCjXDZfl9+kMU= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= diff --git a/subscription/eventsub_test.go b/subscription/eventsub_test.go index 9f9de60..d87767f 100644 --- a/subscription/eventsub_test.go +++ b/subscription/eventsub_test.go @@ -62,7 +62,7 @@ func TestEventSub(t *testing.T) { sb.FundAddress(ctx, account.Address) cb := ethchannel.NewContractBackend( sb, - ethchannel.MakeAssetID(ethchannel.MakeChainID(sb.ChainID()).Int), + ethchannel.MakeChainID(sb.ChainID()), keystore.NewTransactor(*ksWallet, sb.Signer), txFinalityDepth, ) @@ -159,7 +159,7 @@ func TestEventSub_Filter(t *testing.T) { sb.FundAddress(ctx, account.Address) cb := ethchannel.NewContractBackend( sb, - ethchannel.MakeAssetID(ethchannel.MakeChainID(sb.ChainID()).Int), + ethchannel.MakeChainID(sb.ChainID()), keystore.NewTransactor(*ksWallet, sb.Signer), txFinalityDepth, ) From bf6b0a19b4499139d8fa2df721fce3d3bbd71bec Mon Sep 17 00:00:00 2001 From: Sophia Koehler Date: Wed, 4 Dec 2024 16:13:26 +0100 Subject: [PATCH 09/15] feat(bindings): Add latest compiled contract Signed-off-by: Sophia Koehler --- bindings/adjudicator/Adjudicator.go | 2 +- bindings/adjudicator/AdjudicatorBinRuntime.go | 2 +- bindings/assetholdererc20/AssetHolderERC20.go | 2 +- bindings/assetholdererc20/AssetHolderERC20BinRuntime.go | 2 +- bindings/assetholdereth/AssetHolderETH.go | 2 +- bindings/assetholdereth/AssetHolderETHBinRuntime.go | 2 +- bindings/generate.sh | 2 +- bindings/peruntoken/PerunToken.go | 2 +- bindings/peruntoken/PerunTokenBinRuntime.go | 2 +- bindings/trivialapp/TrivialApp.go | 2 +- bindings/trivialapp/TrivialAppBinRuntime.go | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/bindings/adjudicator/Adjudicator.go b/bindings/adjudicator/Adjudicator.go index 238aefb..ee944dc 100644 --- a/bindings/adjudicator/Adjudicator.go +++ b/bindings/adjudicator/Adjudicator.go @@ -86,7 +86,7 @@ type ChannelSubAlloc struct { // AdjudicatorMetaData contains all meta data concerning the Adjudicator contract. var AdjudicatorMetaData = &bind.MetaData{ ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"channelID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"phase\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"timeout\",\"type\":\"uint64\"}],\"name\":\"ChannelUpdate\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"challengeDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"ethAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ccAddress\",\"type\":\"bytes\"}],\"internalType\":\"structChannel.Participant[]\",\"name\":\"participants\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"app\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"ledgerChannel\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"virtualChannel\",\"type\":\"bool\"}],\"internalType\":\"structChannel.Params\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"channelID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"challengeDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"ethAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ccAddress\",\"type\":\"bytes\"}],\"internalType\":\"structChannel.Participant[]\",\"name\":\"participants\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"app\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"ledgerChannel\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"virtualChannel\",\"type\":\"bool\"}],\"internalType\":\"structChannel.Params\",\"name\":\"params\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"channelID\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"ethHolder\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ccHolder\",\"type\":\"bytes\"}],\"internalType\":\"structChannel.Asset[]\",\"name\":\"assets\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"backends\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"balances\",\"type\":\"uint256[][]\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"ID\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint16[]\",\"name\":\"indexMap\",\"type\":\"uint16[]\"}],\"internalType\":\"structChannel.SubAlloc[]\",\"name\":\"locked\",\"type\":\"tuple[]\"}],\"internalType\":\"structChannel.Allocation\",\"name\":\"outcome\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"appData\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"isFinal\",\"type\":\"bool\"}],\"internalType\":\"structChannel.State\",\"name\":\"state\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"channelID\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"ethHolder\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ccHolder\",\"type\":\"bytes\"}],\"internalType\":\"structChannel.Asset[]\",\"name\":\"assets\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"backends\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"balances\",\"type\":\"uint256[][]\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"ID\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint16[]\",\"name\":\"indexMap\",\"type\":\"uint16[]\"}],\"internalType\":\"structChannel.SubAlloc[]\",\"name\":\"locked\",\"type\":\"tuple[]\"}],\"internalType\":\"structChannel.Allocation\",\"name\":\"outcome\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"appData\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"isFinal\",\"type\":\"bool\"}],\"internalType\":\"structChannel.State[]\",\"name\":\"subStates\",\"type\":\"tuple[]\"}],\"name\":\"conclude\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"challengeDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"ethAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ccAddress\",\"type\":\"bytes\"}],\"internalType\":\"structChannel.Participant[]\",\"name\":\"participants\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"app\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"ledgerChannel\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"virtualChannel\",\"type\":\"bool\"}],\"internalType\":\"structChannel.Params\",\"name\":\"params\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"channelID\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"ethHolder\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ccHolder\",\"type\":\"bytes\"}],\"internalType\":\"structChannel.Asset[]\",\"name\":\"assets\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"backends\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"balances\",\"type\":\"uint256[][]\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"ID\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint16[]\",\"name\":\"indexMap\",\"type\":\"uint16[]\"}],\"internalType\":\"structChannel.SubAlloc[]\",\"name\":\"locked\",\"type\":\"tuple[]\"}],\"internalType\":\"structChannel.Allocation\",\"name\":\"outcome\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"appData\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"isFinal\",\"type\":\"bool\"}],\"internalType\":\"structChannel.State\",\"name\":\"state\",\"type\":\"tuple\"},{\"internalType\":\"bytes[]\",\"name\":\"sigs\",\"type\":\"bytes[]\"}],\"name\":\"concludeFinal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"timeout\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"challengeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"phase\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"stateHash\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"hasApp\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"channelID\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"ethHolder\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ccHolder\",\"type\":\"bytes\"}],\"internalType\":\"structChannel.Asset[]\",\"name\":\"assets\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"backends\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"balances\",\"type\":\"uint256[][]\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"ID\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint16[]\",\"name\":\"indexMap\",\"type\":\"uint16[]\"}],\"internalType\":\"structChannel.SubAlloc[]\",\"name\":\"locked\",\"type\":\"tuple[]\"}],\"internalType\":\"structChannel.Allocation\",\"name\":\"outcome\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"appData\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"isFinal\",\"type\":\"bool\"}],\"internalType\":\"structChannel.State\",\"name\":\"state\",\"type\":\"tuple\"}],\"name\":\"hashState\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"challengeDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"ethAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ccAddress\",\"type\":\"bytes\"}],\"internalType\":\"structChannel.Participant[]\",\"name\":\"participants\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"app\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"ledgerChannel\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"virtualChannel\",\"type\":\"bool\"}],\"internalType\":\"structChannel.Params\",\"name\":\"params\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"channelID\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"ethHolder\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ccHolder\",\"type\":\"bytes\"}],\"internalType\":\"structChannel.Asset[]\",\"name\":\"assets\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"backends\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"balances\",\"type\":\"uint256[][]\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"ID\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint16[]\",\"name\":\"indexMap\",\"type\":\"uint16[]\"}],\"internalType\":\"structChannel.SubAlloc[]\",\"name\":\"locked\",\"type\":\"tuple[]\"}],\"internalType\":\"structChannel.Allocation\",\"name\":\"outcome\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"appData\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"isFinal\",\"type\":\"bool\"}],\"internalType\":\"structChannel.State\",\"name\":\"stateOld\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"channelID\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"ethHolder\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ccHolder\",\"type\":\"bytes\"}],\"internalType\":\"structChannel.Asset[]\",\"name\":\"assets\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"backends\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"balances\",\"type\":\"uint256[][]\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"ID\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint16[]\",\"name\":\"indexMap\",\"type\":\"uint16[]\"}],\"internalType\":\"structChannel.SubAlloc[]\",\"name\":\"locked\",\"type\":\"tuple[]\"}],\"internalType\":\"structChannel.Allocation\",\"name\":\"outcome\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"appData\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"isFinal\",\"type\":\"bool\"}],\"internalType\":\"structChannel.State\",\"name\":\"state\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"actorIdx\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"sig\",\"type\":\"bytes\"}],\"name\":\"progress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"challengeDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"ethAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ccAddress\",\"type\":\"bytes\"}],\"internalType\":\"structChannel.Participant[]\",\"name\":\"participants\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"app\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"ledgerChannel\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"virtualChannel\",\"type\":\"bool\"}],\"internalType\":\"structChannel.Params\",\"name\":\"params\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"channelID\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"ethHolder\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ccHolder\",\"type\":\"bytes\"}],\"internalType\":\"structChannel.Asset[]\",\"name\":\"assets\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"backends\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"balances\",\"type\":\"uint256[][]\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"ID\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint16[]\",\"name\":\"indexMap\",\"type\":\"uint16[]\"}],\"internalType\":\"structChannel.SubAlloc[]\",\"name\":\"locked\",\"type\":\"tuple[]\"}],\"internalType\":\"structChannel.Allocation\",\"name\":\"outcome\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"appData\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"isFinal\",\"type\":\"bool\"}],\"internalType\":\"structChannel.State\",\"name\":\"state\",\"type\":\"tuple\"},{\"internalType\":\"bytes[]\",\"name\":\"sigs\",\"type\":\"bytes[]\"}],\"internalType\":\"structAdjudicator.SignedState\",\"name\":\"channel\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"challengeDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"ethAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ccAddress\",\"type\":\"bytes\"}],\"internalType\":\"structChannel.Participant[]\",\"name\":\"participants\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"app\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"ledgerChannel\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"virtualChannel\",\"type\":\"bool\"}],\"internalType\":\"structChannel.Params\",\"name\":\"params\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"channelID\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"ethHolder\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ccHolder\",\"type\":\"bytes\"}],\"internalType\":\"structChannel.Asset[]\",\"name\":\"assets\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"backends\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"balances\",\"type\":\"uint256[][]\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"ID\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint16[]\",\"name\":\"indexMap\",\"type\":\"uint16[]\"}],\"internalType\":\"structChannel.SubAlloc[]\",\"name\":\"locked\",\"type\":\"tuple[]\"}],\"internalType\":\"structChannel.Allocation\",\"name\":\"outcome\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"appData\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"isFinal\",\"type\":\"bool\"}],\"internalType\":\"structChannel.State\",\"name\":\"state\",\"type\":\"tuple\"},{\"internalType\":\"bytes[]\",\"name\":\"sigs\",\"type\":\"bytes[]\"}],\"internalType\":\"structAdjudicator.SignedState[]\",\"name\":\"subChannels\",\"type\":\"tuple[]\"}],\"name\":\"register\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b5061377d806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063848890001161005b578063848890001461014b578063c5457f0d1461016c578063db77bb271461017f578063e9bc418d1461019257600080fd5b806311be1997146100825780634176e7ae146101235780634c33077514610138575b600080fd5b6100dd6100903660046125f3565b6000602081905290815260409020805460018201546002909201546001600160401b0380831693600160401b8404821693600160801b81049092169260ff600160c01b9093048316921686565b604080516001600160401b0397881681529587166020870152939095169284019290925260ff166060830152608082015290151560a082015260c0015b60405180910390f35b610136610131366004612dc0565b6101a5565b005b610136610146366004612f36565b610211565b61015e610159366004612fbd565b6103af565b60405190815260200161011a565b61013661017a36600461308c565b6103c8565b61015e61018d366004613160565b6103f6565b6101366101a0366004613194565b610401565b82608001516101cf5760405162461bcd60e51b81526004016101c69061324a565b60405180910390fd5b6101d983836106bc565b6101e28261073e565b60006101f0838360006108ed565b508351604080860151519087015192935061020b9284610c90565b50505050565b82608001516102325760405162461bcd60e51b81526004016101c69061324a565b6080820151151560011461027a5760405162461bcd60e51b815260206004820152600f60248201526e1cdd185d19481b9bdd08199a5b985b608a1b60448201526064016101c6565b60408201516060015151156102c45760405162461bcd60e51b815260206004820152601060248201526f686173207375622d6368616e6e656c7360801b60448201526064016101c6565b6102ce83836106bc565b6102d9838383610d84565b60008061032084600001516102fa8660000151876040015160200151610e78565b6001600160401b0316815181106103135761031361326e565b6020026020010151610f30565b91509150801561037857600260ff16826060015160ff16036103785760405162461bcd60e51b8152602060048201526011602482015270636f6e636c7564656420616c726561647960781b60448201526064016101c6565b61038485856002610fdf565b6103a884600001518560400151600001518760400151876040015160400151610c90565b5050505050565b60006103ba82611101565b805190602001209050919050565b8151608001516103ea5760405162461bcd60e51b81526004016101c69061324a565b61020b8282600061112a565b60006103ba826112b6565b82516040840151602001516000916104449161041e908290610e78565b6001600160401b0316815181106104375761043761326e565b60200260200101516112c9565b606081015190915060ff166104a75780516001600160401b03164210156104a25760405162461bcd60e51b81526020600482015260126024820152711d1a5b595bdd5d081b9bdd081c185cdcd95960721b60448201526064016101c6565b61053b565b600160ff16816060015160ff16036105035780516001600160401b031642106104a25760405162461bcd60e51b815260206004820152600e60248201526d1d1a5b595bdd5d081c185cdcd95960921b60448201526064016101c6565b60405162461bcd60e51b815260206004820152600d60248201526c696e76616c696420706861736560981b60448201526064016101c6565b60608601516001600160a01b03166105855760405162461bcd60e51b815260206004820152600d60248201526c06d75737420686176652061707609c1b60448201526064016101c6565b85604001515183106105d15760405162461bcd60e51b81526020600482015260156024820152746163746f72496478206f7574206f662072616e676560581b60448201526064016101c6565b6105db86856106bc565b6105e4856103af565b8160800151146106285760405162461bcd60e51b815260206004820152600f60248201526e77726f6e67206f6c6420737461746560881b60448201526064016101c6565b61065c61063485611101565b838860400151868151811061064b5761064b61326e565b60200260200101516000015161134e565b61069c5760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964207369676e617475726560781b60448201526064016101c6565b6106a8868686866113d7565b6106b486856001610fdf565b505050505050565b6106c5826103f6565b81516040830151602001516106db908290610e78565b6001600160401b0316815181106106f4576106f461326e565b60200260200101511461073a5760405162461bcd60e51b815260206004820152600e60248201526d696e76616c696420706172616d7360901b60448201526064016101c6565b5050565b60006107568260000151836040015160200151610e78565b9050600061077c8360000151836001600160401b0316815181106104375761043761326e565b9050610787836103af565b8160800151146107c95760405162461bcd60e51b815260206004820152600d60248201526c696e76616c696420737461746560981b60448201526064016101c6565b600260ff16816060015160ff16036108175760405162461bcd60e51b8152602060048201526011602482015270185b1c9958591e4818dbdb98db1d591959607a1b60448201526064016101c6565b606081015160ff1615801561082d57508060a001515b1561085a576020810151815161084e916001600160401b039091169061150b565b6001600160401b031681525b80516001600160401b03164210156108ad5760405162461bcd60e51b81526020600482015260166024820152751d1a5b595bdd5d081b9bdd081c185cdcd959081e595d60521b60448201526064016101c6565b60025b60ff166060820152825180516108e891906001600160401b0385169081106108da576108da61326e565b602002602001015182611566565b505050565b606060006108fa85611658565b60408501515180516001600160401b038111156109195761091961260c565b60405190808252806020026020018201604052801561094c57816020015b60608152602001906001900390816109375790505b50925060005b8151811015610a8557600087604001516040015182815181106109775761097761326e565b6020026020010151905080516001600160401b0381111561099a5761099a61260c565b6040519080825280602002602001820160405280156109c3578160200160208202803683370190505b508583815181106109d6576109d661326e565b602002602001018190525060005b8151811015610a70578860400151604001518381518110610a0757610a0761326e565b60200260200101518181518110610a2057610a2061326e565b6020026020010151868481518110610a3a57610a3a61326e565b60200260200101518281518110610a5357610a5361326e565b602090810291909101015280610a68816132b0565b9150506109e4565b50508080610a7d906132b0565b915050610952565b5060408601516060015184925060005b8151811015610c85576000828281518110610ab257610ab261326e565b602002602001015190506000888680610aca906132b0565b975081518110610adc57610adc61326e565b60200260200101519050610af8826000015182600001516116f9565b610b3c5760405162461bcd60e51b81526020600482015260156024820152741a5b9d985b1a59081cdd5898da185b9b995b081a59605a1b60448201526064016101c6565b6060610b49828b896108ed565b604085015190985090915060005b8751811015610c6d5760005b8251811015610c5a576000848381518110610b8057610b8061326e565b60200260200101518281518110610b9957610b9961326e565b602002602001015190506000848381518110610bb757610bb761326e565b60200260200101519050610c0a828e8681518110610bd757610bd761326e565b60200260200101518361ffff1681518110610bf457610bf461326e565b602002602001015161177790919063ffffffff16565b8d8581518110610c1c57610c1c61326e565b60200260200101518261ffff1681518110610c3957610c3961326e565b60200260200101818152505050508080610c52906132b0565b915050610b63565b5080610c65816132b0565b915050610b57565b50505050508080610c7d906132b0565b915050610a95565b505050935093915050565b60005b83518110156103a8576000848281518110610cb057610cb061326e565b6020026020010151905046816000015103610d715760208101516001600160a01b031615610d715780602001516001600160a01b031663295482ce878481518110610cfd57610cfd61326e565b602002602001015186868681518110610d1857610d1861326e565b60200260200101516040518463ffffffff1660e01b8152600401610d3e939291906133c3565b600060405180830381600087803b158015610d5857600080fd5b505af1158015610d6c573d6000803e3d6000fd5b505050505b5080610d7c816132b0565b915050610c93565b6000610d8f83611101565b9050815184604001515114610de65760405162461bcd60e51b815260206004820152601a60248201527f7369676e617475726573206c656e677468206d69736d6174636800000000000060448201526064016101c6565b60005b82518110156103a857610e2682848381518110610e0857610e0861326e565b60200260200101518760400151848151811061064b5761064b61326e565b610e665760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964207369676e617475726560781b60448201526064016101c6565b80610e70816132b0565b915050610de9565b60008151835114610ec45760405162461bcd60e51b8152602060048201526016602482015275082e4e4c2f240d8cadccee8d0e640dad2e6dac2e8c6d60531b60448201526064016101c6565b81600081518110610ed757610ed761326e565b6020026020010151600103610eee57506000610f2a565b60018251118015610f19575081600181518110610f0d57610f0d61326e565b60200260200101516001145b15610f2657506001610f2a565b5060005b92915050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091525060009081526020818152604091829020825160c08101845281546001600160401b038082168352600160401b8204811694830194909452600160801b810490931693810193909352600160c01b90910460ff908116606084015260018201546080840181905260029092015416151560a0830152909190151590565b6000610ff78360000151846040015160200151610e78565b6001600160401b0316905060008061101e856000015184815181106103135761031361326e565b87516001600160401b0390811660208481019190915288015116604083015260608801516001600160a01b0316151560a0830152909250905083600281111561106957611069613284565b60ff16606083015261107a856103af565b6080808401919091528501511561109c576001600160401b03421682526110da565b8015806110b05750606082015160ff166001145b156110da5760208201516110ce906001600160401b0342169061150b565b6001600160401b031682525b6106b4856000015184815181106110f3576110f361326e565b602002602001015183611566565b6060816040516020016111149190613635565b6040516020818303038152906040529050919050565b602083015160400151805160609183916111438761178a565b6111508260400151611993565b93506000826060015190508651815111156111a55760405162461bcd60e51b81526020600482015260156024820152741cdd5890da185b9b995b1cc81d1bdbc81cda1bdc9d605a1b60448201526064016101c6565b60005b81518110156112aa57600088866111be816132b0565b9750815181106111d0576111d061326e565b602002602001015190506000808484815181106111ef576111ef61326e565b6020026020010151836020015191509150611212826000015182600001516116f9565b6112575760405162461bcd60e51b81526020600482015260166024820152751a5b9d985b1a59081cdd588b58da185b9b995b081a5960521b60448201526064016101c6565b6060611264848d8b61112a565b604084015151909a5090915061127b908890611a89565b611289836020015182611b34565b6112938a82611c24565b5050505080806112a2906132b0565b9150506111a8565b50505050935093915050565b60608160405160200161111491906136a6565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101829052908061130584610f30565b91509150806113475760405162461bcd60e51b815260206004820152600e60248201526d1b9bdd081c9959da5cdd195c995960921b60448201526064016101c6565b5092915050565b6000806113af85805190602001206040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b905060006113bd8286611c8e565b6001600160a01b0390811690851614925050509392505050565b60208301516113e79060016136b9565b6001600160401b031682602001516001600160401b0316146114445760405162461bcd60e51b81526020600482015260166024820152751d995c9cda5bdb881b5d5cdd081a5b98dc995b595b9d60521b60448201526064016101c6565b6080830151156114865760405162461bcd60e51b815260206004820152600d60248201526c185b1c9958591e48199a5b985b609a1b60448201526064016101c6565b61149e83604001518360400151866040015151611cb2565b60608401516040516206371b60ea1b81526001600160a01b038216906318dc6c00906114d49088908890889088906004016136e4565b60006040518083038186803b1580156114ec57600080fd5b505afa158015611500573d6000803e3d6000fd5b505050505050505050565b60006001600160401b03831661152183856136b9565b9150816001600160401b03161015610f2a5760405162461bcd60e51b81526020600482015260086024820152676f766572666c6f7760c01b60448201526064016101c6565b600082815260208181526040918290208351815485840151868601516060808901516001600160401b039586166fffffffffffffffffffffffffffffffff199095168517600160401b948716949094029390931768ffffffffffffffffff60801b1916600160801b9590921694850260ff60c01b191691909117600160c01b60ff9093169283021785556080880151600186015560a08801516002909501805460ff1916951515959095179094558551928352938201939093529283019190915283917f895ef5a5fc3efd313a300b006d6ce97ff0670dfe04f6eea90417edf924fa786b910160405180910390a25050565b60006116708260000151836040015160200151610e78565b905060006116968360000151836001600160401b0316815181106104375761043761326e565b90506116a1836103af565b8160800151146116e35760405162461bcd60e51b815260206004820152600d60248201526c696e76616c696420737461746560981b60448201526064016101c6565b606081015160ff166002146108e85760026108b0565b6000815183511461170c57506000610f2a565b60005b835181101561176d5782818151811061172a5761172a61326e565b60200260200101518482815181106117445761174461326e565b60200260200101511461175b576000915050610f2a565b80611765816132b0565b91505061170f565b5060019392505050565b6000611783828461372f565b9392505050565b8051602082015161179b82826106bc565b6117aa82828560400151610d84565b8160a00151156118475760608201516001600160a01b0316156118015760405162461bcd60e51b815260206004820152600f60248201526e063616e6e6f7420686176652061707608c1b60448201526064016101c6565b60408101516060015151156118475760405162461bcd60e51b815260206004820152600c60248201526b199d5b991cc81b1bd8dad95960a21b60448201526064016101c6565b60008061186883600001516102fa8560000151866040015160200151610e78565b9150915080156119875761187b836103af565b82608001510361188c575050505050565b82602001516001600160401b031682604001516001600160401b0316106118e75760405162461bcd60e51b815260206004820152600f60248201526e34b73b30b634b2103b32b939b4b7b760891b60448201526064016101c6565b606082015160ff161561192e5760405162461bcd60e51b815260206004820152600f60248201526e696e636f727265637420706861736560881b60448201526064016101c6565b81516001600160401b031642106119875760405162461bcd60e51b815260206004820152601960248201527f72656675746174696f6e2074696d656f7574207061737365640000000000000060448201526064016101c6565b6103a884846000610fdf565b606081516001600160401b038111156119ae576119ae61260c565b6040519080825280602002602001820160405280156119d7578160200160208202803683370190505b50905060005b8251811015611a835760008382815181106119fa576119fa61326e565b6020026020010151905060005b8151811015611a6e57611a3f828281518110611a2557611a2561326e565b6020026020010151858581518110610bf457610bf461326e565b848481518110611a5157611a5161326e565b602090810291909101015280611a66816132b0565b915050611a07565b50508080611a7b906132b0565b9150506119dd565b50919050565b8051825114611ada5760405162461bcd60e51b815260206004820152601760248201527f41737365745b5d3a20756e657175616c206c656e67746800000000000000000060448201526064016101c6565b60005b82518110156108e857611b22838281518110611afb57611afb61326e565b6020026020010151838381518110611b1557611b1561326e565b6020026020010151611fa2565b80611b2c816132b0565b915050611add565b8051825114611b855760405162461bcd60e51b815260206004820152601960248201527f75696e743235365b5d3a20756e657175616c206c656e6774680000000000000060448201526064016101c6565b60005b82518110156108e857818181518110611ba357611ba361326e565b6020026020010151838281518110611bbd57611bbd61326e565b602002602001015114611c125760405162461bcd60e51b815260206004820152601760248201527f75696e743235365b5d3a20756e657175616c206974656d00000000000000000060448201526064016101c6565b80611c1c816132b0565b915050611b88565b60005b82518110156108e857611c5f828281518110611c4557611c4561326e565b6020026020010151848381518110610bf457610bf461326e565b838281518110611c7157611c7161326e565b602090810291909101015280611c86816132b0565b915050611c27565b6000806000611c9d858561209a565b91509150611caa81612108565b509392505050565b81604001515183604001515114611d0b5760405162461bcd60e51b815260206004820152601860248201527f62616c616e636573206c656e677468206d69736d61746368000000000000000060448201526064016101c6565b81515183515114611d575760405162461bcd60e51b81526020600482015260166024820152750c2e6e6cae8e640d8cadccee8d040dad2e6dac2e8c6d60531b60448201526064016101c6565b611d69836060015183606001516122c1565b60005b82515181101561020b57611dad84600001518281518110611d8f57611d8f61326e565b602002602001015184600001518381518110611b1557611b1561326e565b6000808386604001518481518110611dc757611dc761326e565b60200260200101515114611e1d5760405162461bcd60e51b815260206004820152601c60248201527f6f6c642062616c616e636573206c656e677468206d69736d617463680000000060448201526064016101c6565b8385604001518481518110611e3457611e3461326e565b60200260200101515114611e8a5760405162461bcd60e51b815260206004820152601c60248201527f6e65772062616c616e636573206c656e677468206d69736d617463680000000060448201526064016101c6565b60005b84811015611f3d57611ede87604001518581518110611eae57611eae61326e565b60200260200101518281518110611ec757611ec761326e565b60200260200101518461177790919063ffffffff16565b9250611f2986604001518581518110611ef957611ef961326e565b60200260200101518281518110611f1257611f1261326e565b60200260200101518361177790919063ffffffff16565b915080611f35816132b0565b915050611e8d565b50808214611f8d5760405162461bcd60e51b815260206004820152601860248201527f73756d206f662062616c616e636573206d69736d61746368000000000000000060448201526064016101c6565b50508080611f9a906132b0565b915050611d6c565b8051825114611fe55760405162461bcd60e51b815260206004820152600f60248201526e1d5b995c5d585b0818da185a5b9251608a1b60448201526064016101c6565b80602001516001600160a01b031682602001516001600160a01b0316146120425760405162461bcd60e51b81526020600482015260116024820152703ab732b8bab0b61032ba342437b63232b960791b60448201526064016101c6565b8060400151805190602001208260400151805190602001201461073a5760405162461bcd60e51b815260206004820152601060248201526f3ab732b8bab0b61031b1a437b63232b960811b60448201526064016101c6565b60008082516041036120d05760208301516040840151606085015160001a6120c48782858561236c565b94509450505050612101565b82516040036120f957602083015160408401516120ee868383612459565b935093505050612101565b506000905060025b9250929050565b600081600481111561211c5761211c613284565b036121245750565b600181600481111561213857612138613284565b036121855760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016101c6565b600281600481111561219957612199613284565b036121e65760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016101c6565b60038160048111156121fa576121fa613284565b036122525760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016101c6565b600481600481111561226657612266613284565b036122be5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016101c6565b50565b80518251146123125760405162461bcd60e51b815260206004820152601a60248201527f537562416c6c6f635b5d3a20756e657175616c206c656e67746800000000000060448201526064016101c6565b60005b82518110156108e85761235a8382815181106123335761233361326e565b602002602001015183838151811061234d5761234d61326e565b6020026020010151612492565b80612364816132b0565b915050612315565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156123a35750600090506003612450565b8460ff16601b141580156123bb57508460ff16601c14155b156123cc5750600090506004612450565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612420573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661244957600060019250925050612450565b9150600090505b94509492505050565b6000806001600160ff1b0383168161247660ff86901c601b61372f565b90506124848782888561236c565b935093505050935093915050565b815181516124a091906116f9565b6124e35760405162461bcd60e51b815260206004820152601460248201527314dd58905b1b1bd8ce881d5b995c5d585b08125160621b60448201526064016101c6565b6124f582602001518260200151611b34565b61073a8260400151826040015180518251146125535760405162461bcd60e51b815260206004820152601860248201527f75696e7431365b5d3a20756e657175616c206c656e677468000000000000000060448201526064016101c6565b60005b82518110156108e8578181815181106125715761257161326e565b602002602001015161ffff1683828151811061258f5761258f61326e565b602002602001015161ffff16146125e15760405162461bcd60e51b815260206004820152601660248201527575696e7431365b5d3a20756e657175616c206974656d60501b60448201526064016101c6565b806125eb816132b0565b915050612556565b60006020828403121561260557600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b03811182821017156126445761264461260c565b60405290565b604080519081016001600160401b03811182821017156126445761264461260c565b604051606081016001600160401b03811182821017156126445761264461260c565b604051608081016001600160401b03811182821017156126445761264461260c565b60405160a081016001600160401b03811182821017156126445761264461260c565b604051601f8201601f191681016001600160401b03811182821017156126fa576126fa61260c565b604052919050565b60006001600160401b0382111561271b5761271b61260c565b5060051b60200190565b80356001600160a01b038116811461273c57600080fd5b919050565b600082601f83011261275257600080fd5b81356001600160401b0381111561276b5761276b61260c565b61277e601f8201601f19166020016126d2565b81815284602083860101111561279357600080fd5b816020850160208301376000918101602001919091529392505050565b8035801515811461273c57600080fd5b600060c082840312156127d257600080fd5b6127da612622565b905081358152602080830135818301526040808401356001600160401b038082111561280557600080fd5b818601915086601f83011261281957600080fd5b813561282c61282782612702565b6126d2565b81815260059190911b8301850190858101908983111561284b57600080fd5b8685015b838110156128c5578035858111156128675760008081fd5b8601808c03601f190188131561287d5760008081fd5b61288561264a565b6128908a8301612725565b815288820135878111156128a45760008081fd5b6128b28e8c83860101612741565b828c01525084525091870191870161284f565b508086890152505050505050506128de60608301612725565b60608201526128ef608083016127b0565b608082015261290060a083016127b0565b60a082015292915050565b600082601f83011261291c57600080fd5b8135602061292c61282783612702565b82815260059290921b8401810191818101908684111561294b57600080fd5b8286015b84811015612966578035835291830191830161294f565b509695505050505050565b80356001600160401b038116811461273c57600080fd5b600082601f83011261299957600080fd5b813560206129a961282783612702565b82815260059290921b840181019181810190868411156129c857600080fd5b8286015b848110156129665780356001600160401b03808211156129ec5760008081fd5b908801906060828b03601f1901811315612a065760008081fd5b612a0e61266c565b8784013581526040612a21818601612725565b828a0152918401359183831115612a385760008081fd5b612a468d8a85880101612741565b9082015286525050509183019183016129cc565b600082601f830112612a6b57600080fd5b81356020612a7b61282783612702565b82815260059290921b84018101918181019086841115612a9a57600080fd5b8286015b848110156129665780356001600160401b03811115612abd5760008081fd5b612acb8986838b010161290b565b845250918301918301612a9e565b600082601f830112612aea57600080fd5b81356020612afa61282783612702565b828152600592831b8501820192828201919087851115612b1957600080fd5b8387015b85811015612c465780356001600160401b0380821115612b3d5760008081fd5b908901906060828c03601f1901811315612b575760008081fd5b612b5f61266c565b8884013583811115612b715760008081fd5b612b7f8e8b8388010161290b565b82525060408085013584811115612b965760008081fd5b612ba48f8c8389010161290b565b838c015250918401359183831115612bbc5760008081fd5b82850194508d603f860112612bd357600093508384fd5b898501359350612be561282785612702565b84815293871b85018101938a810193508e851115612c035760008081fd5b948101945b84861015612c3257853561ffff81168114612c235760008081fd5b8452948a0194928a0192612c08565b908201528752505050928401928401612b1d565b5090979650505050505050565b600060808284031215612c6557600080fd5b612c6d61268e565b905081356001600160401b0380821115612c8657600080fd5b612c9285838601612988565b83526020840135915080821115612ca857600080fd5b612cb48583860161290b565b60208401526040840135915080821115612ccd57600080fd5b612cd985838601612a5a565b60408401526060840135915080821115612cf257600080fd5b50612cff84828501612ad9565b60608301525092915050565b600060a08284031215612d1d57600080fd5b612d256126b0565b905081356001600160401b0380821115612d3e57600080fd5b612d4a8583860161290b565b8352612d5860208501612971565b60208401526040840135915080821115612d7157600080fd5b612d7d85838601612c53565b60408401526060840135915080821115612d9657600080fd5b50612da384828501612741565b606083015250612db5608083016127b0565b608082015292915050565b600080600060608486031215612dd557600080fd5b83356001600160401b0380821115612dec57600080fd5b612df8878388016127c0565b9450602091508186013581811115612e0f57600080fd5b612e1b88828901612d0b565b945050604086013581811115612e3057600080fd5b8601601f81018813612e4157600080fd5b8035612e4f61282782612702565b81815260059190911b8201840190848101908a831115612e6e57600080fd5b8584015b83811015612ea657803586811115612e8a5760008081fd5b612e988d8983890101612d0b565b845250918601918601612e72565b508096505050505050509250925092565b600082601f830112612ec857600080fd5b81356020612ed861282783612702565b82815260059290921b84018101918181019086841115612ef757600080fd5b8286015b848110156129665780356001600160401b03811115612f1a5760008081fd5b612f288986838b0101612741565b845250918301918301612efb565b600080600060608486031215612f4b57600080fd5b83356001600160401b0380821115612f6257600080fd5b612f6e878388016127c0565b94506020860135915080821115612f8457600080fd5b612f9087838801612d0b565b93506040860135915080821115612fa657600080fd5b50612fb386828701612eb7565b9150509250925092565b600060208284031215612fcf57600080fd5b81356001600160401b03811115612fe557600080fd5b612ff184828501612d0b565b949350505050565b60006060828403121561300b57600080fd5b61301361266c565b905081356001600160401b038082111561302c57600080fd5b613038858386016127c0565b8352602084013591508082111561304e57600080fd5b61305a85838601612d0b565b6020840152604084013591508082111561307357600080fd5b5061308084828501612eb7565b60408301525092915050565b6000806040838503121561309f57600080fd5b82356001600160401b03808211156130b657600080fd5b6130c286838701612ff9565b93506020915081850135818111156130d957600080fd5b8501601f810187136130ea57600080fd5b80356130f861282782612702565b81815260059190911b8201840190848101908983111561311757600080fd5b8584015b8381101561314f578035868111156131335760008081fd5b6131418c8983890101612ff9565b84525091860191860161311b565b508096505050505050509250929050565b60006020828403121561317257600080fd5b81356001600160401b0381111561318857600080fd5b612ff1848285016127c0565b600080600080600060a086880312156131ac57600080fd5b85356001600160401b03808211156131c357600080fd5b6131cf89838a016127c0565b965060208801359150808211156131e557600080fd5b6131f189838a01612d0b565b9550604088013591508082111561320757600080fd5b61321389838a01612d0b565b945060608801359350608088013591508082111561323057600080fd5b5061323d88828901612741565b9150509295509295909350565b6020808252600a90820152693737ba103632b233b2b960b11b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016132c2576132c261329a565b5060010190565b6000815180845260005b818110156132ef576020818501810151868301820152016132d3565b81811115613301576000602083870101525b50601f01601f19169290920160200192915050565b600081518084526020808501808196508360051b8101915082860160005b8581101561337b578284038952815180516001600160a01b031685528501516040868601819052613367818701836132c9565b9a87019a9550505090840190600101613334565b5091979650505050505050565b600081518084526020808501945080840160005b838110156133b85781518752958201959082019060010161339c565b509495945050505050565b8381526060602082015260006133dc6060830185613316565b82810360408401526133ee8185613388565b9695505050505050565b600081518084526020808501808196508360051b8101915082860160005b8581101561337b57828403895261342e848351613388565b98850198935090840190600101613416565b600081518084526020808501808196508360051b810191508286016000805b868110156134f4578385038a5282516060815181885261348182890182613388565b91505087820151878203898901526134998282613388565b604093840151898203948a01949094528351808252938a0193869350908a0191505b808310156134df57835161ffff1682529289019260019290920191908901906134bb565b509b88019b965050509185019160010161345f565b509298975050505050505050565b6000815160a0845261351760a0850182613388565b905060206001600160401b03818501511681860152604080850151868403828801526080840181516080865281815180845260a08801915060a08160051b8901019350868301925060005b818110156135b557888503609f19018352835180518652888101516001600160a01b03168987015287015160608887018190526135a1818801836132c9565b965050509287019291870191600101613562565b5050505083820151858203858701526135ce8282613388565b9450505081810151848403838601526135e784826133f8565b935050606081015191505082820360608401526136048282613440565b925050506060830151848203606086015261361f82826132c9565b9150506080830151611caa608086018215159052565b6020815260006117836020830184613502565b80518252602081015160208301526000604082015160c0604085015261367160c0850182613316565b6060848101516001600160a01b03169086015260808085015115159086015260a0938401511515949093019390935250919050565b6020815260006117836020830184613648565b60006001600160401b038083168185168083038211156136db576136db61329a565b01949350505050565b6080815260006136f76080830187613648565b82810360208401526137098187613502565b9050828103604084015261371d8186613502565b91505082606083015295945050505050565b600082198211156137425761374261329a565b50019056fea264697066735822122072360af3f9d09ecb59a6118cb64bf57b459adba73f8383bf751eb5dd123f158c64736f6c634300080f0033", + Bin: "0x608060405234801561001057600080fd5b50613829806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063848890001161005b578063848890001461014b578063c5457f0d1461016c578063db77bb271461017f578063e9bc418d1461019257600080fd5b806311be1997146100825780634176e7ae146101235780634c33077514610138575b600080fd5b6100dd6100903660046126a2565b6000602081905290815260409020805460018201546002909201546001600160401b0380831693600160401b8404821693600160801b81049092169260ff600160c01b9093048316921686565b604080516001600160401b0397881681529587166020870152939095169284019290925260ff166060830152608082015290151560a082015260c0015b60405180910390f35b610136610131366004612e6f565b6101a5565b005b610136610146366004612fe5565b610211565b61015e61015936600461306c565b6103c8565b60405190815260200161011a565b61013661017a36600461313b565b6103e1565b61015e61018d36600461320f565b61040f565b6101366101a0366004613243565b61041a565b82608001516101cf5760405162461bcd60e51b81526004016101c6906132f9565b60405180910390fd5b6101d983836106dc565b6101e28261075e565b60006101f0838360006109a3565b508351604080860151519087015192935061020b9284610d35565b50505050565b82608001516102325760405162461bcd60e51b81526004016101c6906132f9565b6080820151151560011461027a5760405162461bcd60e51b815260206004820152600f60248201526e1cdd185d19481b9bdd08199a5b985b608a1b60448201526064016101c6565b60408201516060015151156102c45760405162461bcd60e51b815260206004820152601060248201526f686173207375622d6368616e6e656c7360801b60448201526064016101c6565b6102ce83836106dc565b6102d9838383610e27565b60008061033684600001516102fa8660000151876040015160200151610f19565b6001600160401b0316815181106103135761031361331d565b602002602001015160009081526020819052604090206001810154909190151590565b915091508015610391578154600119600160c01b90910460ff16016103915760405162461bcd60e51b8152602060048201526011602482015270636f6e636c7564656420616c726561647960781b60448201526064016101c6565b61039d85856002610fd1565b6103c184600001518560400151600001518760400151876040015160400151610d35565b5050505050565b60006103d3826111da565b805190602001209050919050565b8151608001516104035760405162461bcd60e51b81526004016101c6906132f9565b61020b82826000611203565b60006103d38261138d565b825160408401516020015160009161045d91610437908290610f19565b6001600160401b0316815181106104505761045061331d565b60200260200101516113a0565b8054909150600160c01b900460ff166104c45780546001600160401b03164210156104bf5760405162461bcd60e51b81526020600482015260126024820152711d1a5b595bdd5d081b9bdd081c185cdcd95960721b60448201526064016101c6565b61055b565b8054600019600160c01b90910460ff16016105235780546001600160401b031642106104bf5760405162461bcd60e51b815260206004820152600e60248201526d1d1a5b595bdd5d081c185cdcd95960921b60448201526064016101c6565b60405162461bcd60e51b815260206004820152600d60248201526c696e76616c696420706861736560981b60448201526064016101c6565b60608601516001600160a01b03166105a55760405162461bcd60e51b815260206004820152600d60248201526c06d75737420686176652061707609c1b60448201526064016101c6565b85604001515183106105f15760405162461bcd60e51b81526020600482015260156024820152746163746f72496478206f7574206f662072616e676560581b60448201526064016101c6565b6105fb86856106dc565b610604856103c8565b8160010154146106485760405162461bcd60e51b815260206004820152600f60248201526e77726f6e67206f6c6420737461746560881b60448201526064016101c6565b61067c610654856111da565b838860400151868151811061066b5761066b61331d565b6020026020010151600001516113f9565b6106bc5760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964207369676e617475726560781b60448201526064016101c6565b6106c886868686611482565b6106d486856001610fd1565b505050505050565b6106e58261040f565b81516040830151602001516106fb908290610f19565b6001600160401b0316815181106107145761071461331d565b60200260200101511461075a5760405162461bcd60e51b815260206004820152600e60248201526d696e76616c696420706172616d7360901b60448201526064016101c6565b5050565b60006107768260000151836040015160200151610f19565b9050600061079c8360000151836001600160401b0316815181106104505761045061331d565b90506107a7836103c8565b8160010154146107e95760405162461bcd60e51b815260206004820152600d60248201526c696e76616c696420737461746560981b60448201526064016101c6565b8054600119600160c01b90910460ff160161083a5760405162461bcd60e51b8152602060048201526011602482015270185b1c9958591e4818dbdb98db1d591959607a1b60448201526064016101c6565b8054600160c01b900460ff161580156108575750600281015460ff165b1561089757805461087a906001600160401b03600160401b82048116911661335f565b815467ffffffffffffffff19166001600160401b03919091161781555b80546001600160401b03164210156108ea5760405162461bcd60e51b81526020600482015260166024820152751d1a5b595bdd5d081b9bdd081c185cdcd959081e595d60521b60448201526064016101c6565b60025b815460ff91909116600160c01b0260ff60c01b199091161781558251805161099e91906001600160401b0385169081106109295761092961331d565b6020908102919091018101516040805160c08101825285546001600160401b038082168352600160401b8204811695830195909552600160801b810490941691810191909152600160c01b90920460ff908116606084015260018501546080840152600285015416151560a0830152906115cd565b505050565b606060006109b0856116bf565b60408501515180516001600160401b038111156109cf576109cf6126bb565b604051908082528060200260200182016040528015610a0257816020015b60608152602001906001900390816109ed5790505b50925060005b8151811015610b375760008760400151604001518281518110610a2d57610a2d61331d565b6020026020010151905080516001600160401b03811115610a5057610a506126bb565b604051908082528060200260200182016040528015610a79578160200160208202803683370190505b50858381518110610a8c57610a8c61331d565b602002602001018190525060005b8151811015610b24578860400151604001518381518110610abd57610abd61331d565b60200260200101518181518110610ad657610ad661331d565b6020026020010151868481518110610af057610af061331d565b60200260200101518281518110610b0957610b0961331d565b6020908102919091010152610b1d8161338a565b9050610a9a565b505080610b309061338a565b9050610a08565b5060408601516060015184925060005b8151811015610d2a576000828281518110610b6457610b6461331d565b602002602001015190506000888680610b7c9061338a565b975081518110610b8e57610b8e61331d565b60200260200101519050610baa82600001518260000151611765565b610bee5760405162461bcd60e51b81526020600482015260156024820152741a5b9d985b1a59081cdd5898da185b9b995b081a59605a1b60448201526064016101c6565b6060610bfb828b896109a3565b604085015190985090915060005b8751811015610d145760005b8251811015610d03576000848381518110610c3257610c3261331d565b60200260200101518281518110610c4b57610c4b61331d565b602002602001015190506000848381518110610c6957610c6961331d565b60200260200101519050818d8581518110610c8657610c8661331d565b60200260200101518261ffff1681518110610ca357610ca361331d565b6020026020010151610cb591906133a3565b8d8581518110610cc757610cc761331d565b60200260200101518261ffff1681518110610ce457610ce461331d565b602002602001018181525050505080610cfc9061338a565b9050610c15565b50610d0d8161338a565b9050610c09565b505050505080610d239061338a565b9050610b47565b505050935093915050565b60005b83518110156103c1576000848281518110610d5557610d5561331d565b6020026020010151905046816000015103610e165760208101516001600160a01b031615610e165780602001516001600160a01b031663295482ce878481518110610da257610da261331d565b602002602001015186868681518110610dbd57610dbd61331d565b60200260200101516040518463ffffffff1660e01b8152600401610de3939291906134ab565b600060405180830381600087803b158015610dfd57600080fd5b505af1158015610e11573d6000803e3d6000fd5b505050505b50610e208161338a565b9050610d38565b6000610e32836111da565b9050815184604001515114610e895760405162461bcd60e51b815260206004820152601a60248201527f7369676e617475726573206c656e677468206d69736d6174636800000000000060448201526064016101c6565b60005b82518110156103c157610ec982848381518110610eab57610eab61331d565b60200260200101518760400151848151811061066b5761066b61331d565b610f095760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964207369676e617475726560781b60448201526064016101c6565b610f128161338a565b9050610e8c565b60008151835114610f655760405162461bcd60e51b8152602060048201526016602482015275082e4e4c2f240d8cadccee8d0e640dad2e6dac2e8c6d60531b60448201526064016101c6565b81600081518110610f7857610f7861331d565b6020026020010151600103610f8f57506000610fcb565b60018251118015610fba575081600181518110610fae57610fae61331d565b60200260200101516001145b15610fc757506001610fcb565b5060005b92915050565b6000610fe98360000151846040015160200151610f19565b6001600160401b03169050600080611010856000015184815181106103135761031361331d565b8751825460208901516001600160401b03908116600160801b0267ffffffffffffffff60801b1991909316600160401b021677ffffffffffffffffffffffffffffffff00000000000000001990911617178255909250905061107e86606001516001600160a01b0316151590565b6002838101805460ff19169215159290921790915584908111156110a4576110a4613333565b825460ff91909116600160c01b0260ff60c01b199091161782556110c7856103c8565b60018301556080850151156110f557815467ffffffffffffffff1916426001600160401b031617825561114c565b80158061110e5750815460ff600160c01b909104166001145b1561114c57815461112f90600160401b90046001600160401b03164261335f565b825467ffffffffffffffff19166001600160401b03919091161782555b6106d4856000015184815181106111655761116561331d565b6020908102919091018101516040805160c08101825286546001600160401b038082168352600160401b8204811695830195909552600160801b810490941691810191909152600160c01b90920460ff908116606084015260018601546080840152600286015416151560a0830152906115cd565b6060816040516020016111ed919061371d565b6040516020818303038152906040529050919050565b6020830151604001518051606091839161121c876117e1565b6112298260400151611a4a565b935060008260600151905086518151111561127e5760405162461bcd60e51b81526020600482015260156024820152741cdd5890da185b9b995b1cc81d1bdbc81cda1bdc9d605a1b60448201526064016101c6565b60005b815181101561138157600088866112978161338a565b9750815181106112a9576112a961331d565b602002602001015190506000808484815181106112c8576112c861331d565b60200260200101518360200151915091506112eb82600001518260000151611765565b6113305760405162461bcd60e51b81526020600482015260166024820152751a5b9d985b1a59081cdd588b58da185b9b995b081a5960521b60448201526064016101c6565b606061133d848d8b611203565b604084015151909a50909150611354908890611b45565b611362836020015182611bee565b61136c8a82611cdc565b505050508061137a9061338a565b9050611281565b50505050935093915050565b6060816040516020016111ed9190613795565b600081815260208190526040902060018101541515806113f35760405162461bcd60e51b815260206004820152600e60248201526d1b9bdd081c9959da5cdd195c995960921b60448201526064016101c6565b50919050565b60008061145a85805190602001206040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b905060006114688286611d53565b6001600160a01b0390811690851614925050509392505050565b602083015161149290600161335f565b6001600160401b031682602001516001600160401b0316146114f65760405162461bcd60e51b815260206004820152601d60248201527f76657273696f6e206d75737420696e6372656d656e74206279206f6e6500000060448201526064016101c6565b6080830151156115485760405162461bcd60e51b815260206004820181905260248201527f63616e6e6f742070726f67726573732066726f6d2066696e616c20737461746560448201526064016101c6565b61156083604001518360400151866040015151611d77565b60608401516040516206371b60ea1b81526001600160a01b038216906318dc6c00906115969088908890889088906004016137a8565b60006040518083038186803b1580156115ae57600080fd5b505afa1580156115c2573d6000803e3d6000fd5b505050505050505050565b600082815260208181526040918290208351815485840151868601516060808901516001600160401b039586166fffffffffffffffffffffffffffffffff199095168517600160401b948716949094029390931768ffffffffffffffffff60801b1916600160801b9590921694850260ff60c01b191691909117600160c01b60ff9093169283021785556080880151600186015560a08801516002909501805460ff1916951515959095179094558551928352938201939093529283019190915283917f895ef5a5fc3efd313a300b006d6ce97ff0670dfe04f6eea90417edf924fa786b910160405180910390a25050565b60006116d78260000151836040015160200151610f19565b905060006116fd8360000151836001600160401b0316815181106104505761045061331d565b9050611708836103c8565b81600101541461174a5760405162461bcd60e51b815260206004820152600d60248201526c696e76616c696420737461746560981b60448201526064016101c6565b805460ff600160c01b9091041660021461099e5760026108ed565b6000815183511461177857506000610fcb565b60005b83518110156117d7578281815181106117965761179661331d565b60200260200101518482815181106117b0576117b061331d565b6020026020010151146117c7576000915050610fcb565b6117d08161338a565b905061177b565b5060019392505050565b805160208201516117f282826106dc565b61180182828560400151610e27565b8160a001511561189e5760608201516001600160a01b0316156118585760405162461bcd60e51b815260206004820152600f60248201526e063616e6e6f7420686176652061707608c1b60448201526064016101c6565b604081015160600151511561189e5760405162461bcd60e51b815260206004820152600c60248201526b199d5b991cc81b1bd8dad95960a21b60448201526064016101c6565b6000806118bf83600001516102fa8560000151866040015160200151610f19565b6040805160c08101825283546001600160401b038082168352600160401b820481166020840152600160801b8204169282019290925260ff600160c01b909204821660608201526001840154608082015260029093015416151560a083015290925090508015611a3e57611932836103c8565b826080015103611943575050505050565b82602001516001600160401b031682604001516001600160401b03161061199e5760405162461bcd60e51b815260206004820152600f60248201526e34b73b30b634b2103b32b939b4b7b760891b60448201526064016101c6565b606082015160ff16156119e55760405162461bcd60e51b815260206004820152600f60248201526e696e636f727265637420706861736560881b60448201526064016101c6565b81516001600160401b03164210611a3e5760405162461bcd60e51b815260206004820152601960248201527f72656675746174696f6e2074696d656f7574207061737365640000000000000060448201526064016101c6565b6103c184846000610fd1565b606081516001600160401b03811115611a6557611a656126bb565b604051908082528060200260200182016040528015611a8e578160200160208202803683370190505b50905060005b82518110156113f3576000838281518110611ab157611ab161331d565b6020026020010151905060005b8151811015611b3257818181518110611ad957611ad961331d565b6020026020010151848481518110611af357611af361331d565b6020026020010151611b0591906133a3565b848481518110611b1757611b1761331d565b6020908102919091010152611b2b8161338a565b9050611abe565b505080611b3e9061338a565b9050611a94565b8051825114611b965760405162461bcd60e51b815260206004820152601760248201527f41737365745b5d3a20756e657175616c206c656e67746800000000000000000060448201526064016101c6565b60005b825181101561099e57611bde838281518110611bb757611bb761331d565b6020026020010151838381518110611bd157611bd161331d565b6020026020010151612055565b611be78161338a565b9050611b99565b8051825114611c3f5760405162461bcd60e51b815260206004820152601960248201527f75696e743235365b5d3a20756e657175616c206c656e6774680000000000000060448201526064016101c6565b60005b825181101561099e57818181518110611c5d57611c5d61331d565b6020026020010151838281518110611c7757611c7761331d565b602002602001015114611ccc5760405162461bcd60e51b815260206004820152601760248201527f75696e743235365b5d3a20756e657175616c206974656d00000000000000000060448201526064016101c6565b611cd58161338a565b9050611c42565b60005b825181101561099e57818181518110611cfa57611cfa61331d565b6020026020010151838281518110611d1457611d1461331d565b6020026020010151611d2691906133a3565b838281518110611d3857611d3861331d565b6020908102919091010152611d4c8161338a565b9050611cdf565b6000806000611d62858561214d565b91509150611d6f816121bb565b509392505050565b81604001515183604001515114611dd05760405162461bcd60e51b815260206004820152601860248201527f62616c616e636573206c656e677468206d69736d61746368000000000000000060448201526064016101c6565b81515183515114611e1c5760405162461bcd60e51b81526020600482015260166024820152750c2e6e6cae8e640d8cadccee8d040dad2e6dac2e8c6d60531b60448201526064016101c6565b611e2e83606001518360600151612374565b60005b82515181101561020b57611e7284600001518281518110611e5457611e5461331d565b602002602001015184600001518381518110611bd157611bd161331d565b6000808386604001518481518110611e8c57611e8c61331d565b60200260200101515114611ee25760405162461bcd60e51b815260206004820152601c60248201527f6f6c642062616c616e636573206c656e677468206d69736d617463680000000060448201526064016101c6565b8385604001518481518110611ef957611ef961331d565b60200260200101515114611f4f5760405162461bcd60e51b815260206004820152601c60248201527f6e65772062616c616e636573206c656e677468206d69736d617463680000000060448201526064016101c6565b60005b84811015611ff25786604001518481518110611f7057611f7061331d565b60200260200101518181518110611f8957611f8961331d565b602002602001015183611f9c91906133a3565b925085604001518481518110611fb457611fb461331d565b60200260200101518181518110611fcd57611fcd61331d565b602002602001015182611fe091906133a3565b9150611feb8161338a565b9050611f52565b508082146120425760405162461bcd60e51b815260206004820152601860248201527f73756d206f662062616c616e636573206d69736d61746368000000000000000060448201526064016101c6565b50508061204e9061338a565b9050611e31565b80518251146120985760405162461bcd60e51b815260206004820152600f60248201526e1d5b995c5d585b0818da185a5b9251608a1b60448201526064016101c6565b80602001516001600160a01b031682602001516001600160a01b0316146120f55760405162461bcd60e51b81526020600482015260116024820152703ab732b8bab0b61032ba342437b63232b960791b60448201526064016101c6565b8060400151805190602001208260400151805190602001201461075a5760405162461bcd60e51b815260206004820152601060248201526f3ab732b8bab0b61031b1a437b63232b960811b60448201526064016101c6565b60008082516041036121835760208301516040840151606085015160001a6121778782858561241d565b945094505050506121b4565b82516040036121ac57602083015160408401516121a186838361250a565b9350935050506121b4565b506000905060025b9250929050565b60008160048111156121cf576121cf613333565b036121d75750565b60018160048111156121eb576121eb613333565b036122385760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016101c6565b600281600481111561224c5761224c613333565b036122995760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016101c6565b60038160048111156122ad576122ad613333565b036123055760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016101c6565b600481600481111561231957612319613333565b036123715760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016101c6565b50565b80518251146123c55760405162461bcd60e51b815260206004820152601a60248201527f537562416c6c6f635b5d3a20756e657175616c206c656e67746800000000000060448201526064016101c6565b60005b825181101561099e5761240d8382815181106123e6576123e661331d565b60200260200101518383815181106124005761240061331d565b6020026020010151612543565b6124168161338a565b90506123c8565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156124545750600090506003612501565b8460ff16601b1415801561246c57508460ff16601c14155b1561247d5750600090506004612501565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156124d1573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166124fa57600060019250925050612501565b9150600090505b94509492505050565b6000806001600160ff1b0383168161252760ff86901c601b6133a3565b90506125358782888561241d565b935093505050935093915050565b815181516125519190611765565b6125945760405162461bcd60e51b815260206004820152601460248201527314dd58905b1b1bd8ce881d5b995c5d585b08125160621b60448201526064016101c6565b6125a682602001518260200151611bee565b61075a8260400151826040015180518251146126045760405162461bcd60e51b815260206004820152601860248201527f75696e7431365b5d3a20756e657175616c206c656e677468000000000000000060448201526064016101c6565b60005b825181101561099e578181815181106126225761262261331d565b602002602001015161ffff168382815181106126405761264061331d565b602002602001015161ffff16146126925760405162461bcd60e51b815260206004820152601660248201527575696e7431365b5d3a20756e657175616c206974656d60501b60448201526064016101c6565b61269b8161338a565b9050612607565b6000602082840312156126b457600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b03811182821017156126f3576126f36126bb565b60405290565b604080519081016001600160401b03811182821017156126f3576126f36126bb565b604051606081016001600160401b03811182821017156126f3576126f36126bb565b604051608081016001600160401b03811182821017156126f3576126f36126bb565b60405160a081016001600160401b03811182821017156126f3576126f36126bb565b604051601f8201601f191681016001600160401b03811182821017156127a9576127a96126bb565b604052919050565b60006001600160401b038211156127ca576127ca6126bb565b5060051b60200190565b80356001600160a01b03811681146127eb57600080fd5b919050565b600082601f83011261280157600080fd5b81356001600160401b0381111561281a5761281a6126bb565b61282d601f8201601f1916602001612781565b81815284602083860101111561284257600080fd5b816020850160208301376000918101602001919091529392505050565b803580151581146127eb57600080fd5b600060c0828403121561288157600080fd5b6128896126d1565b905081358152602080830135818301526040808401356001600160401b03808211156128b457600080fd5b818601915086601f8301126128c857600080fd5b81356128db6128d6826127b1565b612781565b81815260059190911b830185019085810190898311156128fa57600080fd5b8685015b83811015612974578035858111156129165760008081fd5b8601808c03601f190188131561292c5760008081fd5b6129346126f9565b61293f8a83016127d4565b815288820135878111156129535760008081fd5b6129618e8c838601016127f0565b828c0152508452509187019187016128fe565b5080868901525050505050505061298d606083016127d4565b606082015261299e6080830161285f565b60808201526129af60a0830161285f565b60a082015292915050565b600082601f8301126129cb57600080fd5b813560206129db6128d6836127b1565b82815260059290921b840181019181810190868411156129fa57600080fd5b8286015b84811015612a1557803583529183019183016129fe565b509695505050505050565b80356001600160401b03811681146127eb57600080fd5b600082601f830112612a4857600080fd5b81356020612a586128d6836127b1565b82815260059290921b84018101918181019086841115612a7757600080fd5b8286015b84811015612a155780356001600160401b0380821115612a9b5760008081fd5b908801906060828b03601f1901811315612ab55760008081fd5b612abd61271b565b8784013581526040612ad08186016127d4565b828a0152918401359183831115612ae75760008081fd5b612af58d8a858801016127f0565b908201528652505050918301918301612a7b565b600082601f830112612b1a57600080fd5b81356020612b2a6128d6836127b1565b82815260059290921b84018101918181019086841115612b4957600080fd5b8286015b84811015612a155780356001600160401b03811115612b6c5760008081fd5b612b7a8986838b01016129ba565b845250918301918301612b4d565b600082601f830112612b9957600080fd5b81356020612ba96128d6836127b1565b828152600592831b8501820192828201919087851115612bc857600080fd5b8387015b85811015612cf55780356001600160401b0380821115612bec5760008081fd5b908901906060828c03601f1901811315612c065760008081fd5b612c0e61271b565b8884013583811115612c205760008081fd5b612c2e8e8b838801016129ba565b82525060408085013584811115612c455760008081fd5b612c538f8c838901016129ba565b838c015250918401359183831115612c6b5760008081fd5b82850194508d603f860112612c8257600093508384fd5b898501359350612c946128d6856127b1565b84815293871b85018101938a810193508e851115612cb25760008081fd5b948101945b84861015612ce157853561ffff81168114612cd25760008081fd5b8452948a0194928a0192612cb7565b908201528752505050928401928401612bcc565b5090979650505050505050565b600060808284031215612d1457600080fd5b612d1c61273d565b905081356001600160401b0380821115612d3557600080fd5b612d4185838601612a37565b83526020840135915080821115612d5757600080fd5b612d63858386016129ba565b60208401526040840135915080821115612d7c57600080fd5b612d8885838601612b09565b60408401526060840135915080821115612da157600080fd5b50612dae84828501612b88565b60608301525092915050565b600060a08284031215612dcc57600080fd5b612dd461275f565b905081356001600160401b0380821115612ded57600080fd5b612df9858386016129ba565b8352612e0760208501612a20565b60208401526040840135915080821115612e2057600080fd5b612e2c85838601612d02565b60408401526060840135915080821115612e4557600080fd5b50612e52848285016127f0565b606083015250612e646080830161285f565b608082015292915050565b600080600060608486031215612e8457600080fd5b83356001600160401b0380821115612e9b57600080fd5b612ea78783880161286f565b9450602091508186013581811115612ebe57600080fd5b612eca88828901612dba565b945050604086013581811115612edf57600080fd5b8601601f81018813612ef057600080fd5b8035612efe6128d6826127b1565b81815260059190911b8201840190848101908a831115612f1d57600080fd5b8584015b83811015612f5557803586811115612f395760008081fd5b612f478d8983890101612dba565b845250918601918601612f21565b508096505050505050509250925092565b600082601f830112612f7757600080fd5b81356020612f876128d6836127b1565b82815260059290921b84018101918181019086841115612fa657600080fd5b8286015b84811015612a155780356001600160401b03811115612fc95760008081fd5b612fd78986838b01016127f0565b845250918301918301612faa565b600080600060608486031215612ffa57600080fd5b83356001600160401b038082111561301157600080fd5b61301d8783880161286f565b9450602086013591508082111561303357600080fd5b61303f87838801612dba565b9350604086013591508082111561305557600080fd5b5061306286828701612f66565b9150509250925092565b60006020828403121561307e57600080fd5b81356001600160401b0381111561309457600080fd5b6130a084828501612dba565b949350505050565b6000606082840312156130ba57600080fd5b6130c261271b565b905081356001600160401b03808211156130db57600080fd5b6130e78583860161286f565b835260208401359150808211156130fd57600080fd5b61310985838601612dba565b6020840152604084013591508082111561312257600080fd5b5061312f84828501612f66565b60408301525092915050565b6000806040838503121561314e57600080fd5b82356001600160401b038082111561316557600080fd5b613171868387016130a8565b935060209150818501358181111561318857600080fd5b8501601f8101871361319957600080fd5b80356131a76128d6826127b1565b81815260059190911b820184019084810190898311156131c657600080fd5b8584015b838110156131fe578035868111156131e25760008081fd5b6131f08c89838901016130a8565b8452509186019186016131ca565b508096505050505050509250929050565b60006020828403121561322157600080fd5b81356001600160401b0381111561323757600080fd5b6130a08482850161286f565b600080600080600060a0868803121561325b57600080fd5b85356001600160401b038082111561327257600080fd5b61327e89838a0161286f565b9650602088013591508082111561329457600080fd5b6132a089838a01612dba565b955060408801359150808211156132b657600080fd5b6132c289838a01612dba565b94506060880135935060808801359150808211156132df57600080fd5b506132ec888289016127f0565b9150509295509295909350565b6020808252600a90820152693737ba103632b233b2b960b11b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001600160401b0380831681851680830382111561338157613381613349565b01949350505050565b60006001820161339c5761339c613349565b5060010190565b600082198211156133b6576133b6613349565b500190565b6000815180845260005b818110156133e1576020818501810151868301820152016133c5565b818111156133f3576000602083870101525b50601f01601f19169290920160200192915050565b600082825180855260208086019550808260051b84010181860160005b84811015612cf557858303601f19018952815180516001600160a01b03168452840151604085850181905261345c818601836133bb565b9a86019a9450505090830190600101613425565b600081518084526020808501945080840160005b838110156134a057815187529582019590820190600101613484565b509495945050505050565b8381526060602082015260006134c46060830185613408565b82810360408401526134d68185613470565b9695505050505050565b600082825180855260208086019550808260051b84010181860160005b84811015612cf557601f19868403018952613519838351613470565b988401989250908301906001016134fd565b6000815180845260208085019450848260051b86018286016000805b868110156135dc578484038a5282516060815181875261356982880182613470565b91505087820151868203898801526135818282613470565b604093840151888203948901949094528351808252938a0193869350908a0191505b808310156135c757835161ffff1682529289019260019290920191908901906135a3565b509b88019b9550505091850191600101613547565b509198975050505050505050565b6000815160a084526135ff60a0850182613470565b905060206001600160401b03818501511681860152604080850151868403828801526080840181516080865281815180845260a08801915060a08160051b8901019350868301925060005b8181101561369d57888503609f19018352835180518652888101516001600160a01b0316898701528701516060888701819052613689818801836133bb565b96505050928701929187019160010161364a565b5050505083820151858203858701526136b68282613470565b9450505081810151848403838601526136cf84826134e0565b935050606081015191505082820360608401526136ec828261352b565b925050506060830151848203606086015261370782826133bb565b9150506080830151611d6f608086018215159052565b60208152600061373060208301846135ea565b9392505050565b80518252602081015160208301526000604082015160c0604085015261376060c0850182613408565b6060848101516001600160a01b03169086015260808085015115159086015260a0938401511515949093019390935250919050565b6020815260006137306020830184613737565b6080815260006137bb6080830187613737565b82810360208401526137cd81876135ea565b905082810360408401526137e181866135ea565b9150508260608301529594505050505056fea264697066735822122052627efb39c6a47ee5e7cde2b7c020ad00d9fa957333abaa2e58f37941774f3364736f6c634300080f0033", } // AdjudicatorABI is the input ABI used to generate the binding from. diff --git a/bindings/adjudicator/AdjudicatorBinRuntime.go b/bindings/adjudicator/AdjudicatorBinRuntime.go index d7676b8..cfd85fd 100644 --- a/bindings/adjudicator/AdjudicatorBinRuntime.go +++ b/bindings/adjudicator/AdjudicatorBinRuntime.go @@ -1,4 +1,4 @@ package adjudicator // import "github.com/perun-network/perun-eth-backend/bindings/adjudicator" // AdjudicatorBinRuntime is the runtime part of the compiled bytecode used for deploying new contracts. -var AdjudicatorBinRuntime = "608060405234801561001057600080fd5b506004361061007d5760003560e01c8063848890001161005b578063848890001461014b578063c5457f0d1461016c578063db77bb271461017f578063e9bc418d1461019257600080fd5b806311be1997146100825780634176e7ae146101235780634c33077514610138575b600080fd5b6100dd6100903660046125f3565b6000602081905290815260409020805460018201546002909201546001600160401b0380831693600160401b8404821693600160801b81049092169260ff600160c01b9093048316921686565b604080516001600160401b0397881681529587166020870152939095169284019290925260ff166060830152608082015290151560a082015260c0015b60405180910390f35b610136610131366004612dc0565b6101a5565b005b610136610146366004612f36565b610211565b61015e610159366004612fbd565b6103af565b60405190815260200161011a565b61013661017a36600461308c565b6103c8565b61015e61018d366004613160565b6103f6565b6101366101a0366004613194565b610401565b82608001516101cf5760405162461bcd60e51b81526004016101c69061324a565b60405180910390fd5b6101d983836106bc565b6101e28261073e565b60006101f0838360006108ed565b508351604080860151519087015192935061020b9284610c90565b50505050565b82608001516102325760405162461bcd60e51b81526004016101c69061324a565b6080820151151560011461027a5760405162461bcd60e51b815260206004820152600f60248201526e1cdd185d19481b9bdd08199a5b985b608a1b60448201526064016101c6565b60408201516060015151156102c45760405162461bcd60e51b815260206004820152601060248201526f686173207375622d6368616e6e656c7360801b60448201526064016101c6565b6102ce83836106bc565b6102d9838383610d84565b60008061032084600001516102fa8660000151876040015160200151610e78565b6001600160401b0316815181106103135761031361326e565b6020026020010151610f30565b91509150801561037857600260ff16826060015160ff16036103785760405162461bcd60e51b8152602060048201526011602482015270636f6e636c7564656420616c726561647960781b60448201526064016101c6565b61038485856002610fdf565b6103a884600001518560400151600001518760400151876040015160400151610c90565b5050505050565b60006103ba82611101565b805190602001209050919050565b8151608001516103ea5760405162461bcd60e51b81526004016101c69061324a565b61020b8282600061112a565b60006103ba826112b6565b82516040840151602001516000916104449161041e908290610e78565b6001600160401b0316815181106104375761043761326e565b60200260200101516112c9565b606081015190915060ff166104a75780516001600160401b03164210156104a25760405162461bcd60e51b81526020600482015260126024820152711d1a5b595bdd5d081b9bdd081c185cdcd95960721b60448201526064016101c6565b61053b565b600160ff16816060015160ff16036105035780516001600160401b031642106104a25760405162461bcd60e51b815260206004820152600e60248201526d1d1a5b595bdd5d081c185cdcd95960921b60448201526064016101c6565b60405162461bcd60e51b815260206004820152600d60248201526c696e76616c696420706861736560981b60448201526064016101c6565b60608601516001600160a01b03166105855760405162461bcd60e51b815260206004820152600d60248201526c06d75737420686176652061707609c1b60448201526064016101c6565b85604001515183106105d15760405162461bcd60e51b81526020600482015260156024820152746163746f72496478206f7574206f662072616e676560581b60448201526064016101c6565b6105db86856106bc565b6105e4856103af565b8160800151146106285760405162461bcd60e51b815260206004820152600f60248201526e77726f6e67206f6c6420737461746560881b60448201526064016101c6565b61065c61063485611101565b838860400151868151811061064b5761064b61326e565b60200260200101516000015161134e565b61069c5760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964207369676e617475726560781b60448201526064016101c6565b6106a8868686866113d7565b6106b486856001610fdf565b505050505050565b6106c5826103f6565b81516040830151602001516106db908290610e78565b6001600160401b0316815181106106f4576106f461326e565b60200260200101511461073a5760405162461bcd60e51b815260206004820152600e60248201526d696e76616c696420706172616d7360901b60448201526064016101c6565b5050565b60006107568260000151836040015160200151610e78565b9050600061077c8360000151836001600160401b0316815181106104375761043761326e565b9050610787836103af565b8160800151146107c95760405162461bcd60e51b815260206004820152600d60248201526c696e76616c696420737461746560981b60448201526064016101c6565b600260ff16816060015160ff16036108175760405162461bcd60e51b8152602060048201526011602482015270185b1c9958591e4818dbdb98db1d591959607a1b60448201526064016101c6565b606081015160ff1615801561082d57508060a001515b1561085a576020810151815161084e916001600160401b039091169061150b565b6001600160401b031681525b80516001600160401b03164210156108ad5760405162461bcd60e51b81526020600482015260166024820152751d1a5b595bdd5d081b9bdd081c185cdcd959081e595d60521b60448201526064016101c6565b60025b60ff166060820152825180516108e891906001600160401b0385169081106108da576108da61326e565b602002602001015182611566565b505050565b606060006108fa85611658565b60408501515180516001600160401b038111156109195761091961260c565b60405190808252806020026020018201604052801561094c57816020015b60608152602001906001900390816109375790505b50925060005b8151811015610a8557600087604001516040015182815181106109775761097761326e565b6020026020010151905080516001600160401b0381111561099a5761099a61260c565b6040519080825280602002602001820160405280156109c3578160200160208202803683370190505b508583815181106109d6576109d661326e565b602002602001018190525060005b8151811015610a70578860400151604001518381518110610a0757610a0761326e565b60200260200101518181518110610a2057610a2061326e565b6020026020010151868481518110610a3a57610a3a61326e565b60200260200101518281518110610a5357610a5361326e565b602090810291909101015280610a68816132b0565b9150506109e4565b50508080610a7d906132b0565b915050610952565b5060408601516060015184925060005b8151811015610c85576000828281518110610ab257610ab261326e565b602002602001015190506000888680610aca906132b0565b975081518110610adc57610adc61326e565b60200260200101519050610af8826000015182600001516116f9565b610b3c5760405162461bcd60e51b81526020600482015260156024820152741a5b9d985b1a59081cdd5898da185b9b995b081a59605a1b60448201526064016101c6565b6060610b49828b896108ed565b604085015190985090915060005b8751811015610c6d5760005b8251811015610c5a576000848381518110610b8057610b8061326e565b60200260200101518281518110610b9957610b9961326e565b602002602001015190506000848381518110610bb757610bb761326e565b60200260200101519050610c0a828e8681518110610bd757610bd761326e565b60200260200101518361ffff1681518110610bf457610bf461326e565b602002602001015161177790919063ffffffff16565b8d8581518110610c1c57610c1c61326e565b60200260200101518261ffff1681518110610c3957610c3961326e565b60200260200101818152505050508080610c52906132b0565b915050610b63565b5080610c65816132b0565b915050610b57565b50505050508080610c7d906132b0565b915050610a95565b505050935093915050565b60005b83518110156103a8576000848281518110610cb057610cb061326e565b6020026020010151905046816000015103610d715760208101516001600160a01b031615610d715780602001516001600160a01b031663295482ce878481518110610cfd57610cfd61326e565b602002602001015186868681518110610d1857610d1861326e565b60200260200101516040518463ffffffff1660e01b8152600401610d3e939291906133c3565b600060405180830381600087803b158015610d5857600080fd5b505af1158015610d6c573d6000803e3d6000fd5b505050505b5080610d7c816132b0565b915050610c93565b6000610d8f83611101565b9050815184604001515114610de65760405162461bcd60e51b815260206004820152601a60248201527f7369676e617475726573206c656e677468206d69736d6174636800000000000060448201526064016101c6565b60005b82518110156103a857610e2682848381518110610e0857610e0861326e565b60200260200101518760400151848151811061064b5761064b61326e565b610e665760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964207369676e617475726560781b60448201526064016101c6565b80610e70816132b0565b915050610de9565b60008151835114610ec45760405162461bcd60e51b8152602060048201526016602482015275082e4e4c2f240d8cadccee8d0e640dad2e6dac2e8c6d60531b60448201526064016101c6565b81600081518110610ed757610ed761326e565b6020026020010151600103610eee57506000610f2a565b60018251118015610f19575081600181518110610f0d57610f0d61326e565b60200260200101516001145b15610f2657506001610f2a565b5060005b92915050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091525060009081526020818152604091829020825160c08101845281546001600160401b038082168352600160401b8204811694830194909452600160801b810490931693810193909352600160c01b90910460ff908116606084015260018201546080840181905260029092015416151560a0830152909190151590565b6000610ff78360000151846040015160200151610e78565b6001600160401b0316905060008061101e856000015184815181106103135761031361326e565b87516001600160401b0390811660208481019190915288015116604083015260608801516001600160a01b0316151560a0830152909250905083600281111561106957611069613284565b60ff16606083015261107a856103af565b6080808401919091528501511561109c576001600160401b03421682526110da565b8015806110b05750606082015160ff166001145b156110da5760208201516110ce906001600160401b0342169061150b565b6001600160401b031682525b6106b4856000015184815181106110f3576110f361326e565b602002602001015183611566565b6060816040516020016111149190613635565b6040516020818303038152906040529050919050565b602083015160400151805160609183916111438761178a565b6111508260400151611993565b93506000826060015190508651815111156111a55760405162461bcd60e51b81526020600482015260156024820152741cdd5890da185b9b995b1cc81d1bdbc81cda1bdc9d605a1b60448201526064016101c6565b60005b81518110156112aa57600088866111be816132b0565b9750815181106111d0576111d061326e565b602002602001015190506000808484815181106111ef576111ef61326e565b6020026020010151836020015191509150611212826000015182600001516116f9565b6112575760405162461bcd60e51b81526020600482015260166024820152751a5b9d985b1a59081cdd588b58da185b9b995b081a5960521b60448201526064016101c6565b6060611264848d8b61112a565b604084015151909a5090915061127b908890611a89565b611289836020015182611b34565b6112938a82611c24565b5050505080806112a2906132b0565b9150506111a8565b50505050935093915050565b60608160405160200161111491906136a6565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101829052908061130584610f30565b91509150806113475760405162461bcd60e51b815260206004820152600e60248201526d1b9bdd081c9959da5cdd195c995960921b60448201526064016101c6565b5092915050565b6000806113af85805190602001206040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b905060006113bd8286611c8e565b6001600160a01b0390811690851614925050509392505050565b60208301516113e79060016136b9565b6001600160401b031682602001516001600160401b0316146114445760405162461bcd60e51b81526020600482015260166024820152751d995c9cda5bdb881b5d5cdd081a5b98dc995b595b9d60521b60448201526064016101c6565b6080830151156114865760405162461bcd60e51b815260206004820152600d60248201526c185b1c9958591e48199a5b985b609a1b60448201526064016101c6565b61149e83604001518360400151866040015151611cb2565b60608401516040516206371b60ea1b81526001600160a01b038216906318dc6c00906114d49088908890889088906004016136e4565b60006040518083038186803b1580156114ec57600080fd5b505afa158015611500573d6000803e3d6000fd5b505050505050505050565b60006001600160401b03831661152183856136b9565b9150816001600160401b03161015610f2a5760405162461bcd60e51b81526020600482015260086024820152676f766572666c6f7760c01b60448201526064016101c6565b600082815260208181526040918290208351815485840151868601516060808901516001600160401b039586166fffffffffffffffffffffffffffffffff199095168517600160401b948716949094029390931768ffffffffffffffffff60801b1916600160801b9590921694850260ff60c01b191691909117600160c01b60ff9093169283021785556080880151600186015560a08801516002909501805460ff1916951515959095179094558551928352938201939093529283019190915283917f895ef5a5fc3efd313a300b006d6ce97ff0670dfe04f6eea90417edf924fa786b910160405180910390a25050565b60006116708260000151836040015160200151610e78565b905060006116968360000151836001600160401b0316815181106104375761043761326e565b90506116a1836103af565b8160800151146116e35760405162461bcd60e51b815260206004820152600d60248201526c696e76616c696420737461746560981b60448201526064016101c6565b606081015160ff166002146108e85760026108b0565b6000815183511461170c57506000610f2a565b60005b835181101561176d5782818151811061172a5761172a61326e565b60200260200101518482815181106117445761174461326e565b60200260200101511461175b576000915050610f2a565b80611765816132b0565b91505061170f565b5060019392505050565b6000611783828461372f565b9392505050565b8051602082015161179b82826106bc565b6117aa82828560400151610d84565b8160a00151156118475760608201516001600160a01b0316156118015760405162461bcd60e51b815260206004820152600f60248201526e063616e6e6f7420686176652061707608c1b60448201526064016101c6565b60408101516060015151156118475760405162461bcd60e51b815260206004820152600c60248201526b199d5b991cc81b1bd8dad95960a21b60448201526064016101c6565b60008061186883600001516102fa8560000151866040015160200151610e78565b9150915080156119875761187b836103af565b82608001510361188c575050505050565b82602001516001600160401b031682604001516001600160401b0316106118e75760405162461bcd60e51b815260206004820152600f60248201526e34b73b30b634b2103b32b939b4b7b760891b60448201526064016101c6565b606082015160ff161561192e5760405162461bcd60e51b815260206004820152600f60248201526e696e636f727265637420706861736560881b60448201526064016101c6565b81516001600160401b031642106119875760405162461bcd60e51b815260206004820152601960248201527f72656675746174696f6e2074696d656f7574207061737365640000000000000060448201526064016101c6565b6103a884846000610fdf565b606081516001600160401b038111156119ae576119ae61260c565b6040519080825280602002602001820160405280156119d7578160200160208202803683370190505b50905060005b8251811015611a835760008382815181106119fa576119fa61326e565b6020026020010151905060005b8151811015611a6e57611a3f828281518110611a2557611a2561326e565b6020026020010151858581518110610bf457610bf461326e565b848481518110611a5157611a5161326e565b602090810291909101015280611a66816132b0565b915050611a07565b50508080611a7b906132b0565b9150506119dd565b50919050565b8051825114611ada5760405162461bcd60e51b815260206004820152601760248201527f41737365745b5d3a20756e657175616c206c656e67746800000000000000000060448201526064016101c6565b60005b82518110156108e857611b22838281518110611afb57611afb61326e565b6020026020010151838381518110611b1557611b1561326e565b6020026020010151611fa2565b80611b2c816132b0565b915050611add565b8051825114611b855760405162461bcd60e51b815260206004820152601960248201527f75696e743235365b5d3a20756e657175616c206c656e6774680000000000000060448201526064016101c6565b60005b82518110156108e857818181518110611ba357611ba361326e565b6020026020010151838281518110611bbd57611bbd61326e565b602002602001015114611c125760405162461bcd60e51b815260206004820152601760248201527f75696e743235365b5d3a20756e657175616c206974656d00000000000000000060448201526064016101c6565b80611c1c816132b0565b915050611b88565b60005b82518110156108e857611c5f828281518110611c4557611c4561326e565b6020026020010151848381518110610bf457610bf461326e565b838281518110611c7157611c7161326e565b602090810291909101015280611c86816132b0565b915050611c27565b6000806000611c9d858561209a565b91509150611caa81612108565b509392505050565b81604001515183604001515114611d0b5760405162461bcd60e51b815260206004820152601860248201527f62616c616e636573206c656e677468206d69736d61746368000000000000000060448201526064016101c6565b81515183515114611d575760405162461bcd60e51b81526020600482015260166024820152750c2e6e6cae8e640d8cadccee8d040dad2e6dac2e8c6d60531b60448201526064016101c6565b611d69836060015183606001516122c1565b60005b82515181101561020b57611dad84600001518281518110611d8f57611d8f61326e565b602002602001015184600001518381518110611b1557611b1561326e565b6000808386604001518481518110611dc757611dc761326e565b60200260200101515114611e1d5760405162461bcd60e51b815260206004820152601c60248201527f6f6c642062616c616e636573206c656e677468206d69736d617463680000000060448201526064016101c6565b8385604001518481518110611e3457611e3461326e565b60200260200101515114611e8a5760405162461bcd60e51b815260206004820152601c60248201527f6e65772062616c616e636573206c656e677468206d69736d617463680000000060448201526064016101c6565b60005b84811015611f3d57611ede87604001518581518110611eae57611eae61326e565b60200260200101518281518110611ec757611ec761326e565b60200260200101518461177790919063ffffffff16565b9250611f2986604001518581518110611ef957611ef961326e565b60200260200101518281518110611f1257611f1261326e565b60200260200101518361177790919063ffffffff16565b915080611f35816132b0565b915050611e8d565b50808214611f8d5760405162461bcd60e51b815260206004820152601860248201527f73756d206f662062616c616e636573206d69736d61746368000000000000000060448201526064016101c6565b50508080611f9a906132b0565b915050611d6c565b8051825114611fe55760405162461bcd60e51b815260206004820152600f60248201526e1d5b995c5d585b0818da185a5b9251608a1b60448201526064016101c6565b80602001516001600160a01b031682602001516001600160a01b0316146120425760405162461bcd60e51b81526020600482015260116024820152703ab732b8bab0b61032ba342437b63232b960791b60448201526064016101c6565b8060400151805190602001208260400151805190602001201461073a5760405162461bcd60e51b815260206004820152601060248201526f3ab732b8bab0b61031b1a437b63232b960811b60448201526064016101c6565b60008082516041036120d05760208301516040840151606085015160001a6120c48782858561236c565b94509450505050612101565b82516040036120f957602083015160408401516120ee868383612459565b935093505050612101565b506000905060025b9250929050565b600081600481111561211c5761211c613284565b036121245750565b600181600481111561213857612138613284565b036121855760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016101c6565b600281600481111561219957612199613284565b036121e65760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016101c6565b60038160048111156121fa576121fa613284565b036122525760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016101c6565b600481600481111561226657612266613284565b036122be5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016101c6565b50565b80518251146123125760405162461bcd60e51b815260206004820152601a60248201527f537562416c6c6f635b5d3a20756e657175616c206c656e67746800000000000060448201526064016101c6565b60005b82518110156108e85761235a8382815181106123335761233361326e565b602002602001015183838151811061234d5761234d61326e565b6020026020010151612492565b80612364816132b0565b915050612315565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156123a35750600090506003612450565b8460ff16601b141580156123bb57508460ff16601c14155b156123cc5750600090506004612450565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612420573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661244957600060019250925050612450565b9150600090505b94509492505050565b6000806001600160ff1b0383168161247660ff86901c601b61372f565b90506124848782888561236c565b935093505050935093915050565b815181516124a091906116f9565b6124e35760405162461bcd60e51b815260206004820152601460248201527314dd58905b1b1bd8ce881d5b995c5d585b08125160621b60448201526064016101c6565b6124f582602001518260200151611b34565b61073a8260400151826040015180518251146125535760405162461bcd60e51b815260206004820152601860248201527f75696e7431365b5d3a20756e657175616c206c656e677468000000000000000060448201526064016101c6565b60005b82518110156108e8578181815181106125715761257161326e565b602002602001015161ffff1683828151811061258f5761258f61326e565b602002602001015161ffff16146125e15760405162461bcd60e51b815260206004820152601660248201527575696e7431365b5d3a20756e657175616c206974656d60501b60448201526064016101c6565b806125eb816132b0565b915050612556565b60006020828403121561260557600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b03811182821017156126445761264461260c565b60405290565b604080519081016001600160401b03811182821017156126445761264461260c565b604051606081016001600160401b03811182821017156126445761264461260c565b604051608081016001600160401b03811182821017156126445761264461260c565b60405160a081016001600160401b03811182821017156126445761264461260c565b604051601f8201601f191681016001600160401b03811182821017156126fa576126fa61260c565b604052919050565b60006001600160401b0382111561271b5761271b61260c565b5060051b60200190565b80356001600160a01b038116811461273c57600080fd5b919050565b600082601f83011261275257600080fd5b81356001600160401b0381111561276b5761276b61260c565b61277e601f8201601f19166020016126d2565b81815284602083860101111561279357600080fd5b816020850160208301376000918101602001919091529392505050565b8035801515811461273c57600080fd5b600060c082840312156127d257600080fd5b6127da612622565b905081358152602080830135818301526040808401356001600160401b038082111561280557600080fd5b818601915086601f83011261281957600080fd5b813561282c61282782612702565b6126d2565b81815260059190911b8301850190858101908983111561284b57600080fd5b8685015b838110156128c5578035858111156128675760008081fd5b8601808c03601f190188131561287d5760008081fd5b61288561264a565b6128908a8301612725565b815288820135878111156128a45760008081fd5b6128b28e8c83860101612741565b828c01525084525091870191870161284f565b508086890152505050505050506128de60608301612725565b60608201526128ef608083016127b0565b608082015261290060a083016127b0565b60a082015292915050565b600082601f83011261291c57600080fd5b8135602061292c61282783612702565b82815260059290921b8401810191818101908684111561294b57600080fd5b8286015b84811015612966578035835291830191830161294f565b509695505050505050565b80356001600160401b038116811461273c57600080fd5b600082601f83011261299957600080fd5b813560206129a961282783612702565b82815260059290921b840181019181810190868411156129c857600080fd5b8286015b848110156129665780356001600160401b03808211156129ec5760008081fd5b908801906060828b03601f1901811315612a065760008081fd5b612a0e61266c565b8784013581526040612a21818601612725565b828a0152918401359183831115612a385760008081fd5b612a468d8a85880101612741565b9082015286525050509183019183016129cc565b600082601f830112612a6b57600080fd5b81356020612a7b61282783612702565b82815260059290921b84018101918181019086841115612a9a57600080fd5b8286015b848110156129665780356001600160401b03811115612abd5760008081fd5b612acb8986838b010161290b565b845250918301918301612a9e565b600082601f830112612aea57600080fd5b81356020612afa61282783612702565b828152600592831b8501820192828201919087851115612b1957600080fd5b8387015b85811015612c465780356001600160401b0380821115612b3d5760008081fd5b908901906060828c03601f1901811315612b575760008081fd5b612b5f61266c565b8884013583811115612b715760008081fd5b612b7f8e8b8388010161290b565b82525060408085013584811115612b965760008081fd5b612ba48f8c8389010161290b565b838c015250918401359183831115612bbc5760008081fd5b82850194508d603f860112612bd357600093508384fd5b898501359350612be561282785612702565b84815293871b85018101938a810193508e851115612c035760008081fd5b948101945b84861015612c3257853561ffff81168114612c235760008081fd5b8452948a0194928a0192612c08565b908201528752505050928401928401612b1d565b5090979650505050505050565b600060808284031215612c6557600080fd5b612c6d61268e565b905081356001600160401b0380821115612c8657600080fd5b612c9285838601612988565b83526020840135915080821115612ca857600080fd5b612cb48583860161290b565b60208401526040840135915080821115612ccd57600080fd5b612cd985838601612a5a565b60408401526060840135915080821115612cf257600080fd5b50612cff84828501612ad9565b60608301525092915050565b600060a08284031215612d1d57600080fd5b612d256126b0565b905081356001600160401b0380821115612d3e57600080fd5b612d4a8583860161290b565b8352612d5860208501612971565b60208401526040840135915080821115612d7157600080fd5b612d7d85838601612c53565b60408401526060840135915080821115612d9657600080fd5b50612da384828501612741565b606083015250612db5608083016127b0565b608082015292915050565b600080600060608486031215612dd557600080fd5b83356001600160401b0380821115612dec57600080fd5b612df8878388016127c0565b9450602091508186013581811115612e0f57600080fd5b612e1b88828901612d0b565b945050604086013581811115612e3057600080fd5b8601601f81018813612e4157600080fd5b8035612e4f61282782612702565b81815260059190911b8201840190848101908a831115612e6e57600080fd5b8584015b83811015612ea657803586811115612e8a5760008081fd5b612e988d8983890101612d0b565b845250918601918601612e72565b508096505050505050509250925092565b600082601f830112612ec857600080fd5b81356020612ed861282783612702565b82815260059290921b84018101918181019086841115612ef757600080fd5b8286015b848110156129665780356001600160401b03811115612f1a5760008081fd5b612f288986838b0101612741565b845250918301918301612efb565b600080600060608486031215612f4b57600080fd5b83356001600160401b0380821115612f6257600080fd5b612f6e878388016127c0565b94506020860135915080821115612f8457600080fd5b612f9087838801612d0b565b93506040860135915080821115612fa657600080fd5b50612fb386828701612eb7565b9150509250925092565b600060208284031215612fcf57600080fd5b81356001600160401b03811115612fe557600080fd5b612ff184828501612d0b565b949350505050565b60006060828403121561300b57600080fd5b61301361266c565b905081356001600160401b038082111561302c57600080fd5b613038858386016127c0565b8352602084013591508082111561304e57600080fd5b61305a85838601612d0b565b6020840152604084013591508082111561307357600080fd5b5061308084828501612eb7565b60408301525092915050565b6000806040838503121561309f57600080fd5b82356001600160401b03808211156130b657600080fd5b6130c286838701612ff9565b93506020915081850135818111156130d957600080fd5b8501601f810187136130ea57600080fd5b80356130f861282782612702565b81815260059190911b8201840190848101908983111561311757600080fd5b8584015b8381101561314f578035868111156131335760008081fd5b6131418c8983890101612ff9565b84525091860191860161311b565b508096505050505050509250929050565b60006020828403121561317257600080fd5b81356001600160401b0381111561318857600080fd5b612ff1848285016127c0565b600080600080600060a086880312156131ac57600080fd5b85356001600160401b03808211156131c357600080fd5b6131cf89838a016127c0565b965060208801359150808211156131e557600080fd5b6131f189838a01612d0b565b9550604088013591508082111561320757600080fd5b61321389838a01612d0b565b945060608801359350608088013591508082111561323057600080fd5b5061323d88828901612741565b9150509295509295909350565b6020808252600a90820152693737ba103632b233b2b960b11b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016132c2576132c261329a565b5060010190565b6000815180845260005b818110156132ef576020818501810151868301820152016132d3565b81811115613301576000602083870101525b50601f01601f19169290920160200192915050565b600081518084526020808501808196508360051b8101915082860160005b8581101561337b578284038952815180516001600160a01b031685528501516040868601819052613367818701836132c9565b9a87019a9550505090840190600101613334565b5091979650505050505050565b600081518084526020808501945080840160005b838110156133b85781518752958201959082019060010161339c565b509495945050505050565b8381526060602082015260006133dc6060830185613316565b82810360408401526133ee8185613388565b9695505050505050565b600081518084526020808501808196508360051b8101915082860160005b8581101561337b57828403895261342e848351613388565b98850198935090840190600101613416565b600081518084526020808501808196508360051b810191508286016000805b868110156134f4578385038a5282516060815181885261348182890182613388565b91505087820151878203898901526134998282613388565b604093840151898203948a01949094528351808252938a0193869350908a0191505b808310156134df57835161ffff1682529289019260019290920191908901906134bb565b509b88019b965050509185019160010161345f565b509298975050505050505050565b6000815160a0845261351760a0850182613388565b905060206001600160401b03818501511681860152604080850151868403828801526080840181516080865281815180845260a08801915060a08160051b8901019350868301925060005b818110156135b557888503609f19018352835180518652888101516001600160a01b03168987015287015160608887018190526135a1818801836132c9565b965050509287019291870191600101613562565b5050505083820151858203858701526135ce8282613388565b9450505081810151848403838601526135e784826133f8565b935050606081015191505082820360608401526136048282613440565b925050506060830151848203606086015261361f82826132c9565b9150506080830151611caa608086018215159052565b6020815260006117836020830184613502565b80518252602081015160208301526000604082015160c0604085015261367160c0850182613316565b6060848101516001600160a01b03169086015260808085015115159086015260a0938401511515949093019390935250919050565b6020815260006117836020830184613648565b60006001600160401b038083168185168083038211156136db576136db61329a565b01949350505050565b6080815260006136f76080830187613648565b82810360208401526137098187613502565b9050828103604084015261371d8186613502565b91505082606083015295945050505050565b600082198211156137425761374261329a565b50019056fea264697066735822122072360af3f9d09ecb59a6118cb64bf57b459adba73f8383bf751eb5dd123f158c64736f6c634300080f0033" +var AdjudicatorBinRuntime = "608060405234801561001057600080fd5b506004361061007d5760003560e01c8063848890001161005b578063848890001461014b578063c5457f0d1461016c578063db77bb271461017f578063e9bc418d1461019257600080fd5b806311be1997146100825780634176e7ae146101235780634c33077514610138575b600080fd5b6100dd6100903660046126a2565b6000602081905290815260409020805460018201546002909201546001600160401b0380831693600160401b8404821693600160801b81049092169260ff600160c01b9093048316921686565b604080516001600160401b0397881681529587166020870152939095169284019290925260ff166060830152608082015290151560a082015260c0015b60405180910390f35b610136610131366004612e6f565b6101a5565b005b610136610146366004612fe5565b610211565b61015e61015936600461306c565b6103c8565b60405190815260200161011a565b61013661017a36600461313b565b6103e1565b61015e61018d36600461320f565b61040f565b6101366101a0366004613243565b61041a565b82608001516101cf5760405162461bcd60e51b81526004016101c6906132f9565b60405180910390fd5b6101d983836106dc565b6101e28261075e565b60006101f0838360006109a3565b508351604080860151519087015192935061020b9284610d35565b50505050565b82608001516102325760405162461bcd60e51b81526004016101c6906132f9565b6080820151151560011461027a5760405162461bcd60e51b815260206004820152600f60248201526e1cdd185d19481b9bdd08199a5b985b608a1b60448201526064016101c6565b60408201516060015151156102c45760405162461bcd60e51b815260206004820152601060248201526f686173207375622d6368616e6e656c7360801b60448201526064016101c6565b6102ce83836106dc565b6102d9838383610e27565b60008061033684600001516102fa8660000151876040015160200151610f19565b6001600160401b0316815181106103135761031361331d565b602002602001015160009081526020819052604090206001810154909190151590565b915091508015610391578154600119600160c01b90910460ff16016103915760405162461bcd60e51b8152602060048201526011602482015270636f6e636c7564656420616c726561647960781b60448201526064016101c6565b61039d85856002610fd1565b6103c184600001518560400151600001518760400151876040015160400151610d35565b5050505050565b60006103d3826111da565b805190602001209050919050565b8151608001516104035760405162461bcd60e51b81526004016101c6906132f9565b61020b82826000611203565b60006103d38261138d565b825160408401516020015160009161045d91610437908290610f19565b6001600160401b0316815181106104505761045061331d565b60200260200101516113a0565b8054909150600160c01b900460ff166104c45780546001600160401b03164210156104bf5760405162461bcd60e51b81526020600482015260126024820152711d1a5b595bdd5d081b9bdd081c185cdcd95960721b60448201526064016101c6565b61055b565b8054600019600160c01b90910460ff16016105235780546001600160401b031642106104bf5760405162461bcd60e51b815260206004820152600e60248201526d1d1a5b595bdd5d081c185cdcd95960921b60448201526064016101c6565b60405162461bcd60e51b815260206004820152600d60248201526c696e76616c696420706861736560981b60448201526064016101c6565b60608601516001600160a01b03166105a55760405162461bcd60e51b815260206004820152600d60248201526c06d75737420686176652061707609c1b60448201526064016101c6565b85604001515183106105f15760405162461bcd60e51b81526020600482015260156024820152746163746f72496478206f7574206f662072616e676560581b60448201526064016101c6565b6105fb86856106dc565b610604856103c8565b8160010154146106485760405162461bcd60e51b815260206004820152600f60248201526e77726f6e67206f6c6420737461746560881b60448201526064016101c6565b61067c610654856111da565b838860400151868151811061066b5761066b61331d565b6020026020010151600001516113f9565b6106bc5760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964207369676e617475726560781b60448201526064016101c6565b6106c886868686611482565b6106d486856001610fd1565b505050505050565b6106e58261040f565b81516040830151602001516106fb908290610f19565b6001600160401b0316815181106107145761071461331d565b60200260200101511461075a5760405162461bcd60e51b815260206004820152600e60248201526d696e76616c696420706172616d7360901b60448201526064016101c6565b5050565b60006107768260000151836040015160200151610f19565b9050600061079c8360000151836001600160401b0316815181106104505761045061331d565b90506107a7836103c8565b8160010154146107e95760405162461bcd60e51b815260206004820152600d60248201526c696e76616c696420737461746560981b60448201526064016101c6565b8054600119600160c01b90910460ff160161083a5760405162461bcd60e51b8152602060048201526011602482015270185b1c9958591e4818dbdb98db1d591959607a1b60448201526064016101c6565b8054600160c01b900460ff161580156108575750600281015460ff165b1561089757805461087a906001600160401b03600160401b82048116911661335f565b815467ffffffffffffffff19166001600160401b03919091161781555b80546001600160401b03164210156108ea5760405162461bcd60e51b81526020600482015260166024820152751d1a5b595bdd5d081b9bdd081c185cdcd959081e595d60521b60448201526064016101c6565b60025b815460ff91909116600160c01b0260ff60c01b199091161781558251805161099e91906001600160401b0385169081106109295761092961331d565b6020908102919091018101516040805160c08101825285546001600160401b038082168352600160401b8204811695830195909552600160801b810490941691810191909152600160c01b90920460ff908116606084015260018501546080840152600285015416151560a0830152906115cd565b505050565b606060006109b0856116bf565b60408501515180516001600160401b038111156109cf576109cf6126bb565b604051908082528060200260200182016040528015610a0257816020015b60608152602001906001900390816109ed5790505b50925060005b8151811015610b375760008760400151604001518281518110610a2d57610a2d61331d565b6020026020010151905080516001600160401b03811115610a5057610a506126bb565b604051908082528060200260200182016040528015610a79578160200160208202803683370190505b50858381518110610a8c57610a8c61331d565b602002602001018190525060005b8151811015610b24578860400151604001518381518110610abd57610abd61331d565b60200260200101518181518110610ad657610ad661331d565b6020026020010151868481518110610af057610af061331d565b60200260200101518281518110610b0957610b0961331d565b6020908102919091010152610b1d8161338a565b9050610a9a565b505080610b309061338a565b9050610a08565b5060408601516060015184925060005b8151811015610d2a576000828281518110610b6457610b6461331d565b602002602001015190506000888680610b7c9061338a565b975081518110610b8e57610b8e61331d565b60200260200101519050610baa82600001518260000151611765565b610bee5760405162461bcd60e51b81526020600482015260156024820152741a5b9d985b1a59081cdd5898da185b9b995b081a59605a1b60448201526064016101c6565b6060610bfb828b896109a3565b604085015190985090915060005b8751811015610d145760005b8251811015610d03576000848381518110610c3257610c3261331d565b60200260200101518281518110610c4b57610c4b61331d565b602002602001015190506000848381518110610c6957610c6961331d565b60200260200101519050818d8581518110610c8657610c8661331d565b60200260200101518261ffff1681518110610ca357610ca361331d565b6020026020010151610cb591906133a3565b8d8581518110610cc757610cc761331d565b60200260200101518261ffff1681518110610ce457610ce461331d565b602002602001018181525050505080610cfc9061338a565b9050610c15565b50610d0d8161338a565b9050610c09565b505050505080610d239061338a565b9050610b47565b505050935093915050565b60005b83518110156103c1576000848281518110610d5557610d5561331d565b6020026020010151905046816000015103610e165760208101516001600160a01b031615610e165780602001516001600160a01b031663295482ce878481518110610da257610da261331d565b602002602001015186868681518110610dbd57610dbd61331d565b60200260200101516040518463ffffffff1660e01b8152600401610de3939291906134ab565b600060405180830381600087803b158015610dfd57600080fd5b505af1158015610e11573d6000803e3d6000fd5b505050505b50610e208161338a565b9050610d38565b6000610e32836111da565b9050815184604001515114610e895760405162461bcd60e51b815260206004820152601a60248201527f7369676e617475726573206c656e677468206d69736d6174636800000000000060448201526064016101c6565b60005b82518110156103c157610ec982848381518110610eab57610eab61331d565b60200260200101518760400151848151811061066b5761066b61331d565b610f095760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964207369676e617475726560781b60448201526064016101c6565b610f128161338a565b9050610e8c565b60008151835114610f655760405162461bcd60e51b8152602060048201526016602482015275082e4e4c2f240d8cadccee8d0e640dad2e6dac2e8c6d60531b60448201526064016101c6565b81600081518110610f7857610f7861331d565b6020026020010151600103610f8f57506000610fcb565b60018251118015610fba575081600181518110610fae57610fae61331d565b60200260200101516001145b15610fc757506001610fcb565b5060005b92915050565b6000610fe98360000151846040015160200151610f19565b6001600160401b03169050600080611010856000015184815181106103135761031361331d565b8751825460208901516001600160401b03908116600160801b0267ffffffffffffffff60801b1991909316600160401b021677ffffffffffffffffffffffffffffffff00000000000000001990911617178255909250905061107e86606001516001600160a01b0316151590565b6002838101805460ff19169215159290921790915584908111156110a4576110a4613333565b825460ff91909116600160c01b0260ff60c01b199091161782556110c7856103c8565b60018301556080850151156110f557815467ffffffffffffffff1916426001600160401b031617825561114c565b80158061110e5750815460ff600160c01b909104166001145b1561114c57815461112f90600160401b90046001600160401b03164261335f565b825467ffffffffffffffff19166001600160401b03919091161782555b6106d4856000015184815181106111655761116561331d565b6020908102919091018101516040805160c08101825286546001600160401b038082168352600160401b8204811695830195909552600160801b810490941691810191909152600160c01b90920460ff908116606084015260018601546080840152600286015416151560a0830152906115cd565b6060816040516020016111ed919061371d565b6040516020818303038152906040529050919050565b6020830151604001518051606091839161121c876117e1565b6112298260400151611a4a565b935060008260600151905086518151111561127e5760405162461bcd60e51b81526020600482015260156024820152741cdd5890da185b9b995b1cc81d1bdbc81cda1bdc9d605a1b60448201526064016101c6565b60005b815181101561138157600088866112978161338a565b9750815181106112a9576112a961331d565b602002602001015190506000808484815181106112c8576112c861331d565b60200260200101518360200151915091506112eb82600001518260000151611765565b6113305760405162461bcd60e51b81526020600482015260166024820152751a5b9d985b1a59081cdd588b58da185b9b995b081a5960521b60448201526064016101c6565b606061133d848d8b611203565b604084015151909a50909150611354908890611b45565b611362836020015182611bee565b61136c8a82611cdc565b505050508061137a9061338a565b9050611281565b50505050935093915050565b6060816040516020016111ed9190613795565b600081815260208190526040902060018101541515806113f35760405162461bcd60e51b815260206004820152600e60248201526d1b9bdd081c9959da5cdd195c995960921b60448201526064016101c6565b50919050565b60008061145a85805190602001206040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b905060006114688286611d53565b6001600160a01b0390811690851614925050509392505050565b602083015161149290600161335f565b6001600160401b031682602001516001600160401b0316146114f65760405162461bcd60e51b815260206004820152601d60248201527f76657273696f6e206d75737420696e6372656d656e74206279206f6e6500000060448201526064016101c6565b6080830151156115485760405162461bcd60e51b815260206004820181905260248201527f63616e6e6f742070726f67726573732066726f6d2066696e616c20737461746560448201526064016101c6565b61156083604001518360400151866040015151611d77565b60608401516040516206371b60ea1b81526001600160a01b038216906318dc6c00906115969088908890889088906004016137a8565b60006040518083038186803b1580156115ae57600080fd5b505afa1580156115c2573d6000803e3d6000fd5b505050505050505050565b600082815260208181526040918290208351815485840151868601516060808901516001600160401b039586166fffffffffffffffffffffffffffffffff199095168517600160401b948716949094029390931768ffffffffffffffffff60801b1916600160801b9590921694850260ff60c01b191691909117600160c01b60ff9093169283021785556080880151600186015560a08801516002909501805460ff1916951515959095179094558551928352938201939093529283019190915283917f895ef5a5fc3efd313a300b006d6ce97ff0670dfe04f6eea90417edf924fa786b910160405180910390a25050565b60006116d78260000151836040015160200151610f19565b905060006116fd8360000151836001600160401b0316815181106104505761045061331d565b9050611708836103c8565b81600101541461174a5760405162461bcd60e51b815260206004820152600d60248201526c696e76616c696420737461746560981b60448201526064016101c6565b805460ff600160c01b9091041660021461099e5760026108ed565b6000815183511461177857506000610fcb565b60005b83518110156117d7578281815181106117965761179661331d565b60200260200101518482815181106117b0576117b061331d565b6020026020010151146117c7576000915050610fcb565b6117d08161338a565b905061177b565b5060019392505050565b805160208201516117f282826106dc565b61180182828560400151610e27565b8160a001511561189e5760608201516001600160a01b0316156118585760405162461bcd60e51b815260206004820152600f60248201526e063616e6e6f7420686176652061707608c1b60448201526064016101c6565b604081015160600151511561189e5760405162461bcd60e51b815260206004820152600c60248201526b199d5b991cc81b1bd8dad95960a21b60448201526064016101c6565b6000806118bf83600001516102fa8560000151866040015160200151610f19565b6040805160c08101825283546001600160401b038082168352600160401b820481166020840152600160801b8204169282019290925260ff600160c01b909204821660608201526001840154608082015260029093015416151560a083015290925090508015611a3e57611932836103c8565b826080015103611943575050505050565b82602001516001600160401b031682604001516001600160401b03161061199e5760405162461bcd60e51b815260206004820152600f60248201526e34b73b30b634b2103b32b939b4b7b760891b60448201526064016101c6565b606082015160ff16156119e55760405162461bcd60e51b815260206004820152600f60248201526e696e636f727265637420706861736560881b60448201526064016101c6565b81516001600160401b03164210611a3e5760405162461bcd60e51b815260206004820152601960248201527f72656675746174696f6e2074696d656f7574207061737365640000000000000060448201526064016101c6565b6103c184846000610fd1565b606081516001600160401b03811115611a6557611a656126bb565b604051908082528060200260200182016040528015611a8e578160200160208202803683370190505b50905060005b82518110156113f3576000838281518110611ab157611ab161331d565b6020026020010151905060005b8151811015611b3257818181518110611ad957611ad961331d565b6020026020010151848481518110611af357611af361331d565b6020026020010151611b0591906133a3565b848481518110611b1757611b1761331d565b6020908102919091010152611b2b8161338a565b9050611abe565b505080611b3e9061338a565b9050611a94565b8051825114611b965760405162461bcd60e51b815260206004820152601760248201527f41737365745b5d3a20756e657175616c206c656e67746800000000000000000060448201526064016101c6565b60005b825181101561099e57611bde838281518110611bb757611bb761331d565b6020026020010151838381518110611bd157611bd161331d565b6020026020010151612055565b611be78161338a565b9050611b99565b8051825114611c3f5760405162461bcd60e51b815260206004820152601960248201527f75696e743235365b5d3a20756e657175616c206c656e6774680000000000000060448201526064016101c6565b60005b825181101561099e57818181518110611c5d57611c5d61331d565b6020026020010151838281518110611c7757611c7761331d565b602002602001015114611ccc5760405162461bcd60e51b815260206004820152601760248201527f75696e743235365b5d3a20756e657175616c206974656d00000000000000000060448201526064016101c6565b611cd58161338a565b9050611c42565b60005b825181101561099e57818181518110611cfa57611cfa61331d565b6020026020010151838281518110611d1457611d1461331d565b6020026020010151611d2691906133a3565b838281518110611d3857611d3861331d565b6020908102919091010152611d4c8161338a565b9050611cdf565b6000806000611d62858561214d565b91509150611d6f816121bb565b509392505050565b81604001515183604001515114611dd05760405162461bcd60e51b815260206004820152601860248201527f62616c616e636573206c656e677468206d69736d61746368000000000000000060448201526064016101c6565b81515183515114611e1c5760405162461bcd60e51b81526020600482015260166024820152750c2e6e6cae8e640d8cadccee8d040dad2e6dac2e8c6d60531b60448201526064016101c6565b611e2e83606001518360600151612374565b60005b82515181101561020b57611e7284600001518281518110611e5457611e5461331d565b602002602001015184600001518381518110611bd157611bd161331d565b6000808386604001518481518110611e8c57611e8c61331d565b60200260200101515114611ee25760405162461bcd60e51b815260206004820152601c60248201527f6f6c642062616c616e636573206c656e677468206d69736d617463680000000060448201526064016101c6565b8385604001518481518110611ef957611ef961331d565b60200260200101515114611f4f5760405162461bcd60e51b815260206004820152601c60248201527f6e65772062616c616e636573206c656e677468206d69736d617463680000000060448201526064016101c6565b60005b84811015611ff25786604001518481518110611f7057611f7061331d565b60200260200101518181518110611f8957611f8961331d565b602002602001015183611f9c91906133a3565b925085604001518481518110611fb457611fb461331d565b60200260200101518181518110611fcd57611fcd61331d565b602002602001015182611fe091906133a3565b9150611feb8161338a565b9050611f52565b508082146120425760405162461bcd60e51b815260206004820152601860248201527f73756d206f662062616c616e636573206d69736d61746368000000000000000060448201526064016101c6565b50508061204e9061338a565b9050611e31565b80518251146120985760405162461bcd60e51b815260206004820152600f60248201526e1d5b995c5d585b0818da185a5b9251608a1b60448201526064016101c6565b80602001516001600160a01b031682602001516001600160a01b0316146120f55760405162461bcd60e51b81526020600482015260116024820152703ab732b8bab0b61032ba342437b63232b960791b60448201526064016101c6565b8060400151805190602001208260400151805190602001201461075a5760405162461bcd60e51b815260206004820152601060248201526f3ab732b8bab0b61031b1a437b63232b960811b60448201526064016101c6565b60008082516041036121835760208301516040840151606085015160001a6121778782858561241d565b945094505050506121b4565b82516040036121ac57602083015160408401516121a186838361250a565b9350935050506121b4565b506000905060025b9250929050565b60008160048111156121cf576121cf613333565b036121d75750565b60018160048111156121eb576121eb613333565b036122385760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016101c6565b600281600481111561224c5761224c613333565b036122995760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016101c6565b60038160048111156122ad576122ad613333565b036123055760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016101c6565b600481600481111561231957612319613333565b036123715760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016101c6565b50565b80518251146123c55760405162461bcd60e51b815260206004820152601a60248201527f537562416c6c6f635b5d3a20756e657175616c206c656e67746800000000000060448201526064016101c6565b60005b825181101561099e5761240d8382815181106123e6576123e661331d565b60200260200101518383815181106124005761240061331d565b6020026020010151612543565b6124168161338a565b90506123c8565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156124545750600090506003612501565b8460ff16601b1415801561246c57508460ff16601c14155b1561247d5750600090506004612501565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156124d1573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166124fa57600060019250925050612501565b9150600090505b94509492505050565b6000806001600160ff1b0383168161252760ff86901c601b6133a3565b90506125358782888561241d565b935093505050935093915050565b815181516125519190611765565b6125945760405162461bcd60e51b815260206004820152601460248201527314dd58905b1b1bd8ce881d5b995c5d585b08125160621b60448201526064016101c6565b6125a682602001518260200151611bee565b61075a8260400151826040015180518251146126045760405162461bcd60e51b815260206004820152601860248201527f75696e7431365b5d3a20756e657175616c206c656e677468000000000000000060448201526064016101c6565b60005b825181101561099e578181815181106126225761262261331d565b602002602001015161ffff168382815181106126405761264061331d565b602002602001015161ffff16146126925760405162461bcd60e51b815260206004820152601660248201527575696e7431365b5d3a20756e657175616c206974656d60501b60448201526064016101c6565b61269b8161338a565b9050612607565b6000602082840312156126b457600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b03811182821017156126f3576126f36126bb565b60405290565b604080519081016001600160401b03811182821017156126f3576126f36126bb565b604051606081016001600160401b03811182821017156126f3576126f36126bb565b604051608081016001600160401b03811182821017156126f3576126f36126bb565b60405160a081016001600160401b03811182821017156126f3576126f36126bb565b604051601f8201601f191681016001600160401b03811182821017156127a9576127a96126bb565b604052919050565b60006001600160401b038211156127ca576127ca6126bb565b5060051b60200190565b80356001600160a01b03811681146127eb57600080fd5b919050565b600082601f83011261280157600080fd5b81356001600160401b0381111561281a5761281a6126bb565b61282d601f8201601f1916602001612781565b81815284602083860101111561284257600080fd5b816020850160208301376000918101602001919091529392505050565b803580151581146127eb57600080fd5b600060c0828403121561288157600080fd5b6128896126d1565b905081358152602080830135818301526040808401356001600160401b03808211156128b457600080fd5b818601915086601f8301126128c857600080fd5b81356128db6128d6826127b1565b612781565b81815260059190911b830185019085810190898311156128fa57600080fd5b8685015b83811015612974578035858111156129165760008081fd5b8601808c03601f190188131561292c5760008081fd5b6129346126f9565b61293f8a83016127d4565b815288820135878111156129535760008081fd5b6129618e8c838601016127f0565b828c0152508452509187019187016128fe565b5080868901525050505050505061298d606083016127d4565b606082015261299e6080830161285f565b60808201526129af60a0830161285f565b60a082015292915050565b600082601f8301126129cb57600080fd5b813560206129db6128d6836127b1565b82815260059290921b840181019181810190868411156129fa57600080fd5b8286015b84811015612a1557803583529183019183016129fe565b509695505050505050565b80356001600160401b03811681146127eb57600080fd5b600082601f830112612a4857600080fd5b81356020612a586128d6836127b1565b82815260059290921b84018101918181019086841115612a7757600080fd5b8286015b84811015612a155780356001600160401b0380821115612a9b5760008081fd5b908801906060828b03601f1901811315612ab55760008081fd5b612abd61271b565b8784013581526040612ad08186016127d4565b828a0152918401359183831115612ae75760008081fd5b612af58d8a858801016127f0565b908201528652505050918301918301612a7b565b600082601f830112612b1a57600080fd5b81356020612b2a6128d6836127b1565b82815260059290921b84018101918181019086841115612b4957600080fd5b8286015b84811015612a155780356001600160401b03811115612b6c5760008081fd5b612b7a8986838b01016129ba565b845250918301918301612b4d565b600082601f830112612b9957600080fd5b81356020612ba96128d6836127b1565b828152600592831b8501820192828201919087851115612bc857600080fd5b8387015b85811015612cf55780356001600160401b0380821115612bec5760008081fd5b908901906060828c03601f1901811315612c065760008081fd5b612c0e61271b565b8884013583811115612c205760008081fd5b612c2e8e8b838801016129ba565b82525060408085013584811115612c455760008081fd5b612c538f8c838901016129ba565b838c015250918401359183831115612c6b5760008081fd5b82850194508d603f860112612c8257600093508384fd5b898501359350612c946128d6856127b1565b84815293871b85018101938a810193508e851115612cb25760008081fd5b948101945b84861015612ce157853561ffff81168114612cd25760008081fd5b8452948a0194928a0192612cb7565b908201528752505050928401928401612bcc565b5090979650505050505050565b600060808284031215612d1457600080fd5b612d1c61273d565b905081356001600160401b0380821115612d3557600080fd5b612d4185838601612a37565b83526020840135915080821115612d5757600080fd5b612d63858386016129ba565b60208401526040840135915080821115612d7c57600080fd5b612d8885838601612b09565b60408401526060840135915080821115612da157600080fd5b50612dae84828501612b88565b60608301525092915050565b600060a08284031215612dcc57600080fd5b612dd461275f565b905081356001600160401b0380821115612ded57600080fd5b612df9858386016129ba565b8352612e0760208501612a20565b60208401526040840135915080821115612e2057600080fd5b612e2c85838601612d02565b60408401526060840135915080821115612e4557600080fd5b50612e52848285016127f0565b606083015250612e646080830161285f565b608082015292915050565b600080600060608486031215612e8457600080fd5b83356001600160401b0380821115612e9b57600080fd5b612ea78783880161286f565b9450602091508186013581811115612ebe57600080fd5b612eca88828901612dba565b945050604086013581811115612edf57600080fd5b8601601f81018813612ef057600080fd5b8035612efe6128d6826127b1565b81815260059190911b8201840190848101908a831115612f1d57600080fd5b8584015b83811015612f5557803586811115612f395760008081fd5b612f478d8983890101612dba565b845250918601918601612f21565b508096505050505050509250925092565b600082601f830112612f7757600080fd5b81356020612f876128d6836127b1565b82815260059290921b84018101918181019086841115612fa657600080fd5b8286015b84811015612a155780356001600160401b03811115612fc95760008081fd5b612fd78986838b01016127f0565b845250918301918301612faa565b600080600060608486031215612ffa57600080fd5b83356001600160401b038082111561301157600080fd5b61301d8783880161286f565b9450602086013591508082111561303357600080fd5b61303f87838801612dba565b9350604086013591508082111561305557600080fd5b5061306286828701612f66565b9150509250925092565b60006020828403121561307e57600080fd5b81356001600160401b0381111561309457600080fd5b6130a084828501612dba565b949350505050565b6000606082840312156130ba57600080fd5b6130c261271b565b905081356001600160401b03808211156130db57600080fd5b6130e78583860161286f565b835260208401359150808211156130fd57600080fd5b61310985838601612dba565b6020840152604084013591508082111561312257600080fd5b5061312f84828501612f66565b60408301525092915050565b6000806040838503121561314e57600080fd5b82356001600160401b038082111561316557600080fd5b613171868387016130a8565b935060209150818501358181111561318857600080fd5b8501601f8101871361319957600080fd5b80356131a76128d6826127b1565b81815260059190911b820184019084810190898311156131c657600080fd5b8584015b838110156131fe578035868111156131e25760008081fd5b6131f08c89838901016130a8565b8452509186019186016131ca565b508096505050505050509250929050565b60006020828403121561322157600080fd5b81356001600160401b0381111561323757600080fd5b6130a08482850161286f565b600080600080600060a0868803121561325b57600080fd5b85356001600160401b038082111561327257600080fd5b61327e89838a0161286f565b9650602088013591508082111561329457600080fd5b6132a089838a01612dba565b955060408801359150808211156132b657600080fd5b6132c289838a01612dba565b94506060880135935060808801359150808211156132df57600080fd5b506132ec888289016127f0565b9150509295509295909350565b6020808252600a90820152693737ba103632b233b2b960b11b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001600160401b0380831681851680830382111561338157613381613349565b01949350505050565b60006001820161339c5761339c613349565b5060010190565b600082198211156133b6576133b6613349565b500190565b6000815180845260005b818110156133e1576020818501810151868301820152016133c5565b818111156133f3576000602083870101525b50601f01601f19169290920160200192915050565b600082825180855260208086019550808260051b84010181860160005b84811015612cf557858303601f19018952815180516001600160a01b03168452840151604085850181905261345c818601836133bb565b9a86019a9450505090830190600101613425565b600081518084526020808501945080840160005b838110156134a057815187529582019590820190600101613484565b509495945050505050565b8381526060602082015260006134c46060830185613408565b82810360408401526134d68185613470565b9695505050505050565b600082825180855260208086019550808260051b84010181860160005b84811015612cf557601f19868403018952613519838351613470565b988401989250908301906001016134fd565b6000815180845260208085019450848260051b86018286016000805b868110156135dc578484038a5282516060815181875261356982880182613470565b91505087820151868203898801526135818282613470565b604093840151888203948901949094528351808252938a0193869350908a0191505b808310156135c757835161ffff1682529289019260019290920191908901906135a3565b509b88019b9550505091850191600101613547565b509198975050505050505050565b6000815160a084526135ff60a0850182613470565b905060206001600160401b03818501511681860152604080850151868403828801526080840181516080865281815180845260a08801915060a08160051b8901019350868301925060005b8181101561369d57888503609f19018352835180518652888101516001600160a01b0316898701528701516060888701819052613689818801836133bb565b96505050928701929187019160010161364a565b5050505083820151858203858701526136b68282613470565b9450505081810151848403838601526136cf84826134e0565b935050606081015191505082820360608401526136ec828261352b565b925050506060830151848203606086015261370782826133bb565b9150506080830151611d6f608086018215159052565b60208152600061373060208301846135ea565b9392505050565b80518252602081015160208301526000604082015160c0604085015261376060c0850182613408565b6060848101516001600160a01b03169086015260808085015115159086015260a0938401511515949093019390935250919050565b6020815260006137306020830184613737565b6080815260006137bb6080830187613737565b82810360208401526137cd81876135ea565b905082810360408401526137e181866135ea565b9150508260608301529594505050505056fea264697066735822122052627efb39c6a47ee5e7cde2b7c020ad00d9fa957333abaa2e58f37941774f3364736f6c634300080f0033" diff --git a/bindings/assetholdererc20/AssetHolderERC20.go b/bindings/assetholdererc20/AssetHolderERC20.go index bd878bf..6d048cb 100644 --- a/bindings/assetholdererc20/AssetHolderERC20.go +++ b/bindings/assetholdererc20/AssetHolderERC20.go @@ -46,7 +46,7 @@ type ChannelParticipant struct { // Assetholdererc20MetaData contains all meta data concerning the Assetholdererc20 contract. var Assetholdererc20MetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_adjudicator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"fundingID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Deposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"channelID\",\"type\":\"bytes32\"}],\"name\":\"OutcomeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"fundingID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"Withdrawn\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"adjudicator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"fundingID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"holdings\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"channelID\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"ethAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ccAddress\",\"type\":\"bytes\"}],\"internalType\":\"structChannel.Participant[]\",\"name\":\"parts\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"newBals\",\"type\":\"uint256[]\"}],\"name\":\"setOutcome\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"settled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"channelID\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"ethAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ccAddress\",\"type\":\"bytes\"}],\"internalType\":\"structChannel.Participant\",\"name\":\"participant\",\"type\":\"tuple\"},{\"internalType\":\"addresspayable\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structAssetHolder.WithdrawalAuth\",\"name\":\"authorization\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x60a060405234801561001057600080fd5b5060405161129d38038061129d83398101604081905261002f91610070565b600280546001600160a01b0319166001600160a01b03938416179055166080526100a3565b80516001600160a01b038116811461006b57600080fd5b919050565b6000806040838503121561008357600080fd5b61008c83610054565b915061009a60208401610054565b90509250929050565b6080516111d16100cc600039600081816101740152818161080301526109a301526111d16000f3fe6080604052600436106100705760003560e01c8063ae9ee18c1161004e578063ae9ee18c146100e7578063d945af1d14610122578063fc0c546a14610162578063fca0f7781461019657600080fd5b80631de26e1614610075578063295482ce1461008a57806353c2ed8e146100aa575b600080fd5b610088610083366004610dfb565b6101b6565b005b34801561009657600080fd5b506100886100a5366004610e62565b610230565b3480156100b657600080fd5b506002546100ca906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100f357600080fd5b50610114610102366004610edc565b60006020819052908152604090205481565b6040519081526020016100de565b34801561012e57600080fd5b5061015261013d366004610edc565b60016020526000908152604090205460ff1681565b60405190151581526020016100de565b34801561016e57600080fd5b506100ca7f000000000000000000000000000000000000000000000000000000000000000081565b3480156101a257600080fd5b506100886101b1366004610ef5565b610554565b6101c0828261076a565b6000828152602081905260409020546101d990826107ce565b6000838152602081905260409020556101f282826107e1565b817fcd2fe07293de5928c5df9505b65a8d6506f8668dfe81af09090920687edc48a98260405161022491815260200190565b60405180910390a25050565b6002546001600160a01b0316331461029d5760405162461bcd60e51b815260206004820152602560248201527f63616e206f6e6c792062652063616c6c6564206279207468652061646a75646960448201526431b0ba37b960d91b60648201526084015b60405180910390fd5b8281146102fe5760405162461bcd60e51b815260206004820152602960248201527f7061727469636970616e7473206c656e6774682073686f756c6420657175616c6044820152682062616c616e63657360b81b6064820152608401610294565b60008581526001602052604090205460ff161561036b5760405162461bcd60e51b815260206004820152602560248201527f747279696e6720746f2073657420616c726561647920736574746c6564206368604482015264185b9b995b60da1b6064820152608401610294565b600085815260208190526040812080549082905590808567ffffffffffffffff81111561039a5761039a610f94565b6040519080825280602002602001820160405280156103c3578160200160208202803683370190505b50905060005b8681101561049757600061040e8a8a8a858181106103e9576103e9610faa565b90506020028101906103fb9190610fc0565b610409906020810190610ff5565b6108ba565b90508083838151811061042357610423610faa565b60200260200101818152505061045460008083815260200190815260200160002054866107ce90919063ffffffff16565b945061048187878481811061046b5761046b610faa565b90506020020135856107ce90919063ffffffff16565b935050808061048f90611028565b9150506103c9565b508183106105075760005b86811015610505578585828181106104bc576104bc610faa565b905060200201356000808484815181106104d8576104d8610faa565b602002602001015181526020019081526020016000208190555080806104fd90611028565b9150506104a2565b505b6000888152600160208190526040808320805460ff19169092179091555189917fef898d6cd3395b6dfe67a3c1923e5c726c1b154e979fb0a25a9c41d0093168b891a25050505050505050565b823560009081526001602052604090205460ff166105aa5760405162461bcd60e51b815260206004820152601360248201527218da185b9b995b081b9bdd081cd95d1d1b1959606a1b6044820152606401610294565b61061d836040516020016105be9190611051565b60408051601f198184030181526020601f86018190048102840181019092528483529190859085908190840183828082843760009201919091525061060a925050506020870187610fc0565b610618906020810190610ff5565b6108ff565b6106695760405162461bcd60e51b815260206004820152601d60248201527f7369676e617475726520766572696669636174696f6e206661696c65640000006044820152606401610294565b600061067d84356103fb6020870187610fc0565b600081815260208190526040902054909150606085013511156106d75760405162461bcd60e51b8152602060048201526012602482015271696e73756666696369656e742066756e647360701b6044820152606401610294565b6000818152602081905260409020546106f490606086013561098d565b60008281526020819052604090205561070e848484610999565b807fd0b6e7d0170f56c62f87de6a8a47a0ccf41c86ffb5084d399d8eb62e823f2a81606086018035906107449060408901610ff5565b604080519283526001600160a01b0390911660208301520160405180910390a250505050565b34156107ca5760405162461bcd60e51b815260206004820152602960248201527f6d6573736167652076616c7565206d757374206265203020666f7220746f6b656044820152681b8819195c1bdcda5d60ba1b6064820152608401610294565b5050565b60006107da8284611134565b9392505050565b6040516323b872dd60e01b8152336004820152306024820152604481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064016020604051808303816000875af1158015610854573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610878919061114c565b6107ca5760405162461bcd60e51b81526020600482015260136024820152721d1c985b9cd9995c919c9bdb4819985a5b1959606a1b6044820152606401610294565b600082826040516020016108e19291909182526001600160a01b0316602082015260400190565b60405160208183030381529060405280519060200120905092915050565b60008061096085805190602001206040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b9050600061096e8286610a8a565b6001600160a01b0390811690851614925050509392505050565b505050565b60006107da828461116e565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663a9059cbb6109d86060860160408701610ff5565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152606086013560248201526044016020604051808303816000875af1158015610a28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4c919061114c565b6109885760405162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b6044820152606401610294565b6000806000610a998585610aae565b91509150610aa681610b1c565b509392505050565b6000808251604103610ae45760208301516040840151606085015160001a610ad887828585610cd5565b94509450505050610b15565b8251604003610b0d5760208301516040840151610b02868383610dc2565b935093505050610b15565b506000905060025b9250929050565b6000816004811115610b3057610b30611185565b03610b385750565b6001816004811115610b4c57610b4c611185565b03610b995760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610294565b6002816004811115610bad57610bad611185565b03610bfa5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610294565b6003816004811115610c0e57610c0e611185565b03610c665760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610294565b6004816004811115610c7a57610c7a611185565b03610cd25760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610294565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610d0c5750600090506003610db9565b8460ff16601b14158015610d2457508460ff16601c14155b15610d355750600090506004610db9565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610d89573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610db257600060019250925050610db9565b9150600090505b94509492505050565b6000806001600160ff1b03831681610ddf60ff86901c601b611134565b9050610ded87828885610cd5565b935093505050935093915050565b60008060408385031215610e0e57600080fd5b50508035926020909101359150565b60008083601f840112610e2f57600080fd5b50813567ffffffffffffffff811115610e4757600080fd5b6020830191508360208260051b8501011115610b1557600080fd5b600080600080600060608688031215610e7a57600080fd5b85359450602086013567ffffffffffffffff80821115610e9957600080fd5b610ea589838a01610e1d565b90965094506040880135915080821115610ebe57600080fd5b50610ecb88828901610e1d565b969995985093965092949392505050565b600060208284031215610eee57600080fd5b5035919050565b600080600060408486031215610f0a57600080fd5b833567ffffffffffffffff80821115610f2257600080fd5b9085019060808288031215610f3657600080fd5b90935060208501359080821115610f4c57600080fd5b818601915086601f830112610f6057600080fd5b813581811115610f6f57600080fd5b876020828501011115610f8157600080fd5b6020830194508093505050509250925092565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60008235603e19833603018112610fd657600080fd5b9190910192915050565b6001600160a01b0381168114610cd257600080fd5b60006020828403121561100757600080fd5b81356107da81610fe0565b634e487b7160e01b600052601160045260246000fd5b60006001820161103a5761103a611012565b5060010190565b803561104c81610fe0565b919050565b602081528135602082015260006020830135603e1984360301811261107557600080fd5b608060408401528301803561108981610fe0565b6001600160a01b031660a0840152602081013536829003601e190181126110af57600080fd5b0160208101903567ffffffffffffffff8111156110cb57600080fd5b8036038213156110da57600080fd5b604060c08501528060e0850152610100818382870137600081838701015261110460408701611041565b6001600160a01b03811660608701529250606095909501356080850152601f01601f191690920190920192915050565b6000821982111561114757611147611012565b500190565b60006020828403121561115e57600080fd5b815180151581146107da57600080fd5b60008282101561118057611180611012565b500390565b634e487b7160e01b600052602160045260246000fdfea2646970667358221220ad0874027a67427bfc782242eb9ed3252b2e96dbb6f2b27da3f355e3da35f48564736f6c634300080f0033", + Bin: "0x60a060405234801561001057600080fd5b5060405161127538038061127583398101604081905261002f91610070565b600280546001600160a01b0319166001600160a01b03938416179055166080526100a3565b80516001600160a01b038116811461006b57600080fd5b919050565b6000806040838503121561008357600080fd5b61008c83610054565b915061009a60208401610054565b90509250929050565b6080516111a96100cc60003960008181610174015281816107e0015261097401526111a96000f3fe6080604052600436106100705760003560e01c8063ae9ee18c1161004e578063ae9ee18c146100e7578063d945af1d14610122578063fc0c546a14610162578063fca0f7781461019657600080fd5b80631de26e1614610075578063295482ce1461008a57806353c2ed8e146100aa575b600080fd5b610088610083366004610dcc565b6101b6565b005b34801561009657600080fd5b506100886100a5366004610e33565b610231565b3480156100b657600080fd5b506002546100ca906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100f357600080fd5b50610114610102366004610ead565b60006020819052908152604090205481565b6040519081526020016100de565b34801561012e57600080fd5b5061015261013d366004610ead565b60016020526000908152604090205460ff1681565b60405190151581526020016100de565b34801561016e57600080fd5b506100ca7f000000000000000000000000000000000000000000000000000000000000000081565b3480156101a257600080fd5b506100886101b1366004610ec6565b610543565b6101c0828261075a565b6000828152602081905260409020546101da908290610f7b565b6000838152602081905260409020556101f382826107be565b817fcd2fe07293de5928c5df9505b65a8d6506f8668dfe81af09090920687edc48a98260405161022591815260200190565b60405180910390a25050565b6002546001600160a01b0316331461029e5760405162461bcd60e51b815260206004820152602560248201527f63616e206f6e6c792062652063616c6c6564206279207468652061646a75646960448201526431b0ba37b960d91b60648201526084015b60405180910390fd5b8281146102ff5760405162461bcd60e51b815260206004820152602960248201527f7061727469636970616e7473206c656e6774682073686f756c6420657175616c6044820152682062616c616e63657360b81b6064820152608401610295565b60008581526001602052604090205460ff161561036c5760405162461bcd60e51b815260206004820152602560248201527f747279696e6720746f2073657420616c726561647920736574746c6564206368604482015264185b9b995b60da1b6064820152608401610295565b600085815260208190526040812080549082905590808567ffffffffffffffff81111561039b5761039b610f93565b6040519080825280602002602001820160405280156103c4578160200160208202803683370190505b50905060005b8681101561048857600061040f8a8a8a858181106103ea576103ea610fa9565b90506020028101906103fc9190610fbf565b61040a906020810190610ff4565b610897565b90508083838151811061042457610424610fa9565b602002602001018181525050600080828152602001908152602001600020548561044e9190610f7b565b945086868381811061046257610462610fa9565b90506020020135846104749190610f7b565b9350508061048190611018565b90506103ca565b508183106104f65760005b868110156104f4578585828181106104ad576104ad610fa9565b905060200201356000808484815181106104c9576104c9610fa9565b6020026020010151815260200190815260200160002081905550806104ed90611018565b9050610493565b505b6000888152600160208190526040808320805460ff19169092179091555189917fef898d6cd3395b6dfe67a3c1923e5c726c1b154e979fb0a25a9c41d0093168b891a25050505050505050565b823560009081526001602052604090205460ff166105995760405162461bcd60e51b815260206004820152601360248201527218da185b9b995b081b9bdd081cd95d1d1b1959606a1b6044820152606401610295565b61060c836040516020016105ad9190611041565b60408051601f198184030181526020601f8601819004810284018101909252848352919085908590819084018382808284376000920191909152506105f9925050506020870187610fbf565b610607906020810190610ff4565b6108dc565b6106585760405162461bcd60e51b815260206004820152601d60248201527f7369676e617475726520766572696669636174696f6e206661696c65640000006044820152606401610295565b600061066c84356103fc6020870187610fbf565b600081815260208190526040902054909150606085013511156106c65760405162461bcd60e51b8152602060048201526012602482015271696e73756666696369656e742066756e647360701b6044820152606401610295565b6000818152602081905260409020546106e490606086013590611124565b6000828152602081905260409020556106fe84848461096a565b807fd0b6e7d0170f56c62f87de6a8a47a0ccf41c86ffb5084d399d8eb62e823f2a81606086018035906107349060408901610ff4565b604080519283526001600160a01b0390911660208301520160405180910390a250505050565b34156107ba5760405162461bcd60e51b815260206004820152602960248201527f6d6573736167652076616c7565206d757374206265203020666f7220746f6b656044820152681b8819195c1bdcda5d60ba1b6064820152608401610295565b5050565b6040516323b872dd60e01b8152336004820152306024820152604481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064016020604051808303816000875af1158015610831573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610855919061113b565b6107ba5760405162461bcd60e51b81526020600482015260136024820152721d1c985b9cd9995c919c9bdb4819985a5b1959606a1b6044820152606401610295565b600082826040516020016108be9291909182526001600160a01b0316602082015260400190565b60405160208183030381529060405280519060200120905092915050565b60008061093d85805190602001206040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b9050600061094b8286610a5b565b6001600160a01b0390811690851614925050509392505050565b505050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663a9059cbb6109a96060860160408701610ff4565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152606086013560248201526044016020604051808303816000875af11580156109f9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1d919061113b565b6109655760405162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b6044820152606401610295565b6000806000610a6a8585610a7f565b91509150610a7781610aed565b509392505050565b6000808251604103610ab55760208301516040840151606085015160001a610aa987828585610ca6565b94509450505050610ae6565b8251604003610ade5760208301516040840151610ad3868383610d93565b935093505050610ae6565b506000905060025b9250929050565b6000816004811115610b0157610b0161115d565b03610b095750565b6001816004811115610b1d57610b1d61115d565b03610b6a5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610295565b6002816004811115610b7e57610b7e61115d565b03610bcb5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610295565b6003816004811115610bdf57610bdf61115d565b03610c375760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610295565b6004816004811115610c4b57610c4b61115d565b03610ca35760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610295565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610cdd5750600090506003610d8a565b8460ff16601b14158015610cf557508460ff16601c14155b15610d065750600090506004610d8a565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610d5a573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610d8357600060019250925050610d8a565b9150600090505b94509492505050565b6000806001600160ff1b03831681610db060ff86901c601b610f7b565b9050610dbe87828885610ca6565b935093505050935093915050565b60008060408385031215610ddf57600080fd5b50508035926020909101359150565b60008083601f840112610e0057600080fd5b50813567ffffffffffffffff811115610e1857600080fd5b6020830191508360208260051b8501011115610ae657600080fd5b600080600080600060608688031215610e4b57600080fd5b85359450602086013567ffffffffffffffff80821115610e6a57600080fd5b610e7689838a01610dee565b90965094506040880135915080821115610e8f57600080fd5b50610e9c88828901610dee565b969995985093965092949392505050565b600060208284031215610ebf57600080fd5b5035919050565b600080600060408486031215610edb57600080fd5b833567ffffffffffffffff80821115610ef357600080fd5b9085019060808288031215610f0757600080fd5b90935060208501359080821115610f1d57600080fd5b818601915086601f830112610f3157600080fd5b813581811115610f4057600080fd5b876020828501011115610f5257600080fd5b6020830194508093505050509250925092565b634e487b7160e01b600052601160045260246000fd5b60008219821115610f8e57610f8e610f65565b500190565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60008235603e19833603018112610fd557600080fd5b9190910192915050565b6001600160a01b0381168114610ca357600080fd5b60006020828403121561100657600080fd5b813561101181610fdf565b9392505050565b60006001820161102a5761102a610f65565b5060010190565b803561103c81610fdf565b919050565b602081528135602082015260006020830135603e1984360301811261106557600080fd5b608060408401528301803561107981610fdf565b6001600160a01b031660a0840152602081013536829003601e1901811261109f57600080fd5b0160208101903567ffffffffffffffff8111156110bb57600080fd5b8036038213156110ca57600080fd5b604060c08501528060e085015261010081838287013760008183870101526110f460408701611031565b6001600160a01b03811660608701529250606095909501356080850152601f01601f191690920190920192915050565b60008282101561113657611136610f65565b500390565b60006020828403121561114d57600080fd5b8151801515811461101157600080fd5b634e487b7160e01b600052602160045260246000fdfea2646970667358221220e285dbc29171628d35e3b64e848d23e02fa6c180cf400d15487a67a7bede0a6264736f6c634300080f0033", } // Assetholdererc20ABI is the input ABI used to generate the binding from. diff --git a/bindings/assetholdererc20/AssetHolderERC20BinRuntime.go b/bindings/assetholdererc20/AssetHolderERC20BinRuntime.go index f83e511..bb0de7f 100644 --- a/bindings/assetholdererc20/AssetHolderERC20BinRuntime.go +++ b/bindings/assetholdererc20/AssetHolderERC20BinRuntime.go @@ -1,4 +1,4 @@ package assetholdererc20 // import "github.com/perun-network/perun-eth-backend/bindings/assetholdererc20" // AssetHolderERC20BinRuntime is the runtime part of the compiled bytecode used for deploying new contracts. -var AssetHolderERC20BinRuntime = "6080604052600436106100705760003560e01c8063ae9ee18c1161004e578063ae9ee18c146100e7578063d945af1d14610122578063fc0c546a14610162578063fca0f7781461019657600080fd5b80631de26e1614610075578063295482ce1461008a57806353c2ed8e146100aa575b600080fd5b610088610083366004610dfb565b6101b6565b005b34801561009657600080fd5b506100886100a5366004610e62565b610230565b3480156100b657600080fd5b506002546100ca906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100f357600080fd5b50610114610102366004610edc565b60006020819052908152604090205481565b6040519081526020016100de565b34801561012e57600080fd5b5061015261013d366004610edc565b60016020526000908152604090205460ff1681565b60405190151581526020016100de565b34801561016e57600080fd5b506100ca7f000000000000000000000000000000000000000000000000000000000000000081565b3480156101a257600080fd5b506100886101b1366004610ef5565b610554565b6101c0828261076a565b6000828152602081905260409020546101d990826107ce565b6000838152602081905260409020556101f282826107e1565b817fcd2fe07293de5928c5df9505b65a8d6506f8668dfe81af09090920687edc48a98260405161022491815260200190565b60405180910390a25050565b6002546001600160a01b0316331461029d5760405162461bcd60e51b815260206004820152602560248201527f63616e206f6e6c792062652063616c6c6564206279207468652061646a75646960448201526431b0ba37b960d91b60648201526084015b60405180910390fd5b8281146102fe5760405162461bcd60e51b815260206004820152602960248201527f7061727469636970616e7473206c656e6774682073686f756c6420657175616c6044820152682062616c616e63657360b81b6064820152608401610294565b60008581526001602052604090205460ff161561036b5760405162461bcd60e51b815260206004820152602560248201527f747279696e6720746f2073657420616c726561647920736574746c6564206368604482015264185b9b995b60da1b6064820152608401610294565b600085815260208190526040812080549082905590808567ffffffffffffffff81111561039a5761039a610f94565b6040519080825280602002602001820160405280156103c3578160200160208202803683370190505b50905060005b8681101561049757600061040e8a8a8a858181106103e9576103e9610faa565b90506020028101906103fb9190610fc0565b610409906020810190610ff5565b6108ba565b90508083838151811061042357610423610faa565b60200260200101818152505061045460008083815260200190815260200160002054866107ce90919063ffffffff16565b945061048187878481811061046b5761046b610faa565b90506020020135856107ce90919063ffffffff16565b935050808061048f90611028565b9150506103c9565b508183106105075760005b86811015610505578585828181106104bc576104bc610faa565b905060200201356000808484815181106104d8576104d8610faa565b602002602001015181526020019081526020016000208190555080806104fd90611028565b9150506104a2565b505b6000888152600160208190526040808320805460ff19169092179091555189917fef898d6cd3395b6dfe67a3c1923e5c726c1b154e979fb0a25a9c41d0093168b891a25050505050505050565b823560009081526001602052604090205460ff166105aa5760405162461bcd60e51b815260206004820152601360248201527218da185b9b995b081b9bdd081cd95d1d1b1959606a1b6044820152606401610294565b61061d836040516020016105be9190611051565b60408051601f198184030181526020601f86018190048102840181019092528483529190859085908190840183828082843760009201919091525061060a925050506020870187610fc0565b610618906020810190610ff5565b6108ff565b6106695760405162461bcd60e51b815260206004820152601d60248201527f7369676e617475726520766572696669636174696f6e206661696c65640000006044820152606401610294565b600061067d84356103fb6020870187610fc0565b600081815260208190526040902054909150606085013511156106d75760405162461bcd60e51b8152602060048201526012602482015271696e73756666696369656e742066756e647360701b6044820152606401610294565b6000818152602081905260409020546106f490606086013561098d565b60008281526020819052604090205561070e848484610999565b807fd0b6e7d0170f56c62f87de6a8a47a0ccf41c86ffb5084d399d8eb62e823f2a81606086018035906107449060408901610ff5565b604080519283526001600160a01b0390911660208301520160405180910390a250505050565b34156107ca5760405162461bcd60e51b815260206004820152602960248201527f6d6573736167652076616c7565206d757374206265203020666f7220746f6b656044820152681b8819195c1bdcda5d60ba1b6064820152608401610294565b5050565b60006107da8284611134565b9392505050565b6040516323b872dd60e01b8152336004820152306024820152604481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064016020604051808303816000875af1158015610854573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610878919061114c565b6107ca5760405162461bcd60e51b81526020600482015260136024820152721d1c985b9cd9995c919c9bdb4819985a5b1959606a1b6044820152606401610294565b600082826040516020016108e19291909182526001600160a01b0316602082015260400190565b60405160208183030381529060405280519060200120905092915050565b60008061096085805190602001206040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b9050600061096e8286610a8a565b6001600160a01b0390811690851614925050509392505050565b505050565b60006107da828461116e565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663a9059cbb6109d86060860160408701610ff5565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152606086013560248201526044016020604051808303816000875af1158015610a28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4c919061114c565b6109885760405162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b6044820152606401610294565b6000806000610a998585610aae565b91509150610aa681610b1c565b509392505050565b6000808251604103610ae45760208301516040840151606085015160001a610ad887828585610cd5565b94509450505050610b15565b8251604003610b0d5760208301516040840151610b02868383610dc2565b935093505050610b15565b506000905060025b9250929050565b6000816004811115610b3057610b30611185565b03610b385750565b6001816004811115610b4c57610b4c611185565b03610b995760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610294565b6002816004811115610bad57610bad611185565b03610bfa5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610294565b6003816004811115610c0e57610c0e611185565b03610c665760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610294565b6004816004811115610c7a57610c7a611185565b03610cd25760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610294565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610d0c5750600090506003610db9565b8460ff16601b14158015610d2457508460ff16601c14155b15610d355750600090506004610db9565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610d89573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610db257600060019250925050610db9565b9150600090505b94509492505050565b6000806001600160ff1b03831681610ddf60ff86901c601b611134565b9050610ded87828885610cd5565b935093505050935093915050565b60008060408385031215610e0e57600080fd5b50508035926020909101359150565b60008083601f840112610e2f57600080fd5b50813567ffffffffffffffff811115610e4757600080fd5b6020830191508360208260051b8501011115610b1557600080fd5b600080600080600060608688031215610e7a57600080fd5b85359450602086013567ffffffffffffffff80821115610e9957600080fd5b610ea589838a01610e1d565b90965094506040880135915080821115610ebe57600080fd5b50610ecb88828901610e1d565b969995985093965092949392505050565b600060208284031215610eee57600080fd5b5035919050565b600080600060408486031215610f0a57600080fd5b833567ffffffffffffffff80821115610f2257600080fd5b9085019060808288031215610f3657600080fd5b90935060208501359080821115610f4c57600080fd5b818601915086601f830112610f6057600080fd5b813581811115610f6f57600080fd5b876020828501011115610f8157600080fd5b6020830194508093505050509250925092565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60008235603e19833603018112610fd657600080fd5b9190910192915050565b6001600160a01b0381168114610cd257600080fd5b60006020828403121561100757600080fd5b81356107da81610fe0565b634e487b7160e01b600052601160045260246000fd5b60006001820161103a5761103a611012565b5060010190565b803561104c81610fe0565b919050565b602081528135602082015260006020830135603e1984360301811261107557600080fd5b608060408401528301803561108981610fe0565b6001600160a01b031660a0840152602081013536829003601e190181126110af57600080fd5b0160208101903567ffffffffffffffff8111156110cb57600080fd5b8036038213156110da57600080fd5b604060c08501528060e0850152610100818382870137600081838701015261110460408701611041565b6001600160a01b03811660608701529250606095909501356080850152601f01601f191690920190920192915050565b6000821982111561114757611147611012565b500190565b60006020828403121561115e57600080fd5b815180151581146107da57600080fd5b60008282101561118057611180611012565b500390565b634e487b7160e01b600052602160045260246000fdfea2646970667358221220ad0874027a67427bfc782242eb9ed3252b2e96dbb6f2b27da3f355e3da35f48564736f6c634300080f0033" +var AssetHolderERC20BinRuntime = "6080604052600436106100705760003560e01c8063ae9ee18c1161004e578063ae9ee18c146100e7578063d945af1d14610122578063fc0c546a14610162578063fca0f7781461019657600080fd5b80631de26e1614610075578063295482ce1461008a57806353c2ed8e146100aa575b600080fd5b610088610083366004610dcc565b6101b6565b005b34801561009657600080fd5b506100886100a5366004610e33565b610231565b3480156100b657600080fd5b506002546100ca906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100f357600080fd5b50610114610102366004610ead565b60006020819052908152604090205481565b6040519081526020016100de565b34801561012e57600080fd5b5061015261013d366004610ead565b60016020526000908152604090205460ff1681565b60405190151581526020016100de565b34801561016e57600080fd5b506100ca7f000000000000000000000000000000000000000000000000000000000000000081565b3480156101a257600080fd5b506100886101b1366004610ec6565b610543565b6101c0828261075a565b6000828152602081905260409020546101da908290610f7b565b6000838152602081905260409020556101f382826107be565b817fcd2fe07293de5928c5df9505b65a8d6506f8668dfe81af09090920687edc48a98260405161022591815260200190565b60405180910390a25050565b6002546001600160a01b0316331461029e5760405162461bcd60e51b815260206004820152602560248201527f63616e206f6e6c792062652063616c6c6564206279207468652061646a75646960448201526431b0ba37b960d91b60648201526084015b60405180910390fd5b8281146102ff5760405162461bcd60e51b815260206004820152602960248201527f7061727469636970616e7473206c656e6774682073686f756c6420657175616c6044820152682062616c616e63657360b81b6064820152608401610295565b60008581526001602052604090205460ff161561036c5760405162461bcd60e51b815260206004820152602560248201527f747279696e6720746f2073657420616c726561647920736574746c6564206368604482015264185b9b995b60da1b6064820152608401610295565b600085815260208190526040812080549082905590808567ffffffffffffffff81111561039b5761039b610f93565b6040519080825280602002602001820160405280156103c4578160200160208202803683370190505b50905060005b8681101561048857600061040f8a8a8a858181106103ea576103ea610fa9565b90506020028101906103fc9190610fbf565b61040a906020810190610ff4565b610897565b90508083838151811061042457610424610fa9565b602002602001018181525050600080828152602001908152602001600020548561044e9190610f7b565b945086868381811061046257610462610fa9565b90506020020135846104749190610f7b565b9350508061048190611018565b90506103ca565b508183106104f65760005b868110156104f4578585828181106104ad576104ad610fa9565b905060200201356000808484815181106104c9576104c9610fa9565b6020026020010151815260200190815260200160002081905550806104ed90611018565b9050610493565b505b6000888152600160208190526040808320805460ff19169092179091555189917fef898d6cd3395b6dfe67a3c1923e5c726c1b154e979fb0a25a9c41d0093168b891a25050505050505050565b823560009081526001602052604090205460ff166105995760405162461bcd60e51b815260206004820152601360248201527218da185b9b995b081b9bdd081cd95d1d1b1959606a1b6044820152606401610295565b61060c836040516020016105ad9190611041565b60408051601f198184030181526020601f8601819004810284018101909252848352919085908590819084018382808284376000920191909152506105f9925050506020870187610fbf565b610607906020810190610ff4565b6108dc565b6106585760405162461bcd60e51b815260206004820152601d60248201527f7369676e617475726520766572696669636174696f6e206661696c65640000006044820152606401610295565b600061066c84356103fc6020870187610fbf565b600081815260208190526040902054909150606085013511156106c65760405162461bcd60e51b8152602060048201526012602482015271696e73756666696369656e742066756e647360701b6044820152606401610295565b6000818152602081905260409020546106e490606086013590611124565b6000828152602081905260409020556106fe84848461096a565b807fd0b6e7d0170f56c62f87de6a8a47a0ccf41c86ffb5084d399d8eb62e823f2a81606086018035906107349060408901610ff4565b604080519283526001600160a01b0390911660208301520160405180910390a250505050565b34156107ba5760405162461bcd60e51b815260206004820152602960248201527f6d6573736167652076616c7565206d757374206265203020666f7220746f6b656044820152681b8819195c1bdcda5d60ba1b6064820152608401610295565b5050565b6040516323b872dd60e01b8152336004820152306024820152604481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064016020604051808303816000875af1158015610831573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610855919061113b565b6107ba5760405162461bcd60e51b81526020600482015260136024820152721d1c985b9cd9995c919c9bdb4819985a5b1959606a1b6044820152606401610295565b600082826040516020016108be9291909182526001600160a01b0316602082015260400190565b60405160208183030381529060405280519060200120905092915050565b60008061093d85805190602001206040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b9050600061094b8286610a5b565b6001600160a01b0390811690851614925050509392505050565b505050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663a9059cbb6109a96060860160408701610ff4565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152606086013560248201526044016020604051808303816000875af11580156109f9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1d919061113b565b6109655760405162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b6044820152606401610295565b6000806000610a6a8585610a7f565b91509150610a7781610aed565b509392505050565b6000808251604103610ab55760208301516040840151606085015160001a610aa987828585610ca6565b94509450505050610ae6565b8251604003610ade5760208301516040840151610ad3868383610d93565b935093505050610ae6565b506000905060025b9250929050565b6000816004811115610b0157610b0161115d565b03610b095750565b6001816004811115610b1d57610b1d61115d565b03610b6a5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610295565b6002816004811115610b7e57610b7e61115d565b03610bcb5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610295565b6003816004811115610bdf57610bdf61115d565b03610c375760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610295565b6004816004811115610c4b57610c4b61115d565b03610ca35760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610295565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610cdd5750600090506003610d8a565b8460ff16601b14158015610cf557508460ff16601c14155b15610d065750600090506004610d8a565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610d5a573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610d8357600060019250925050610d8a565b9150600090505b94509492505050565b6000806001600160ff1b03831681610db060ff86901c601b610f7b565b9050610dbe87828885610ca6565b935093505050935093915050565b60008060408385031215610ddf57600080fd5b50508035926020909101359150565b60008083601f840112610e0057600080fd5b50813567ffffffffffffffff811115610e1857600080fd5b6020830191508360208260051b8501011115610ae657600080fd5b600080600080600060608688031215610e4b57600080fd5b85359450602086013567ffffffffffffffff80821115610e6a57600080fd5b610e7689838a01610dee565b90965094506040880135915080821115610e8f57600080fd5b50610e9c88828901610dee565b969995985093965092949392505050565b600060208284031215610ebf57600080fd5b5035919050565b600080600060408486031215610edb57600080fd5b833567ffffffffffffffff80821115610ef357600080fd5b9085019060808288031215610f0757600080fd5b90935060208501359080821115610f1d57600080fd5b818601915086601f830112610f3157600080fd5b813581811115610f4057600080fd5b876020828501011115610f5257600080fd5b6020830194508093505050509250925092565b634e487b7160e01b600052601160045260246000fd5b60008219821115610f8e57610f8e610f65565b500190565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60008235603e19833603018112610fd557600080fd5b9190910192915050565b6001600160a01b0381168114610ca357600080fd5b60006020828403121561100657600080fd5b813561101181610fdf565b9392505050565b60006001820161102a5761102a610f65565b5060010190565b803561103c81610fdf565b919050565b602081528135602082015260006020830135603e1984360301811261106557600080fd5b608060408401528301803561107981610fdf565b6001600160a01b031660a0840152602081013536829003601e1901811261109f57600080fd5b0160208101903567ffffffffffffffff8111156110bb57600080fd5b8036038213156110ca57600080fd5b604060c08501528060e085015261010081838287013760008183870101526110f460408701611031565b6001600160a01b03811660608701529250606095909501356080850152601f01601f191690920190920192915050565b60008282101561113657611136610f65565b500390565b60006020828403121561114d57600080fd5b8151801515811461101157600080fd5b634e487b7160e01b600052602160045260246000fdfea2646970667358221220e285dbc29171628d35e3b64e848d23e02fa6c180cf400d15487a67a7bede0a6264736f6c634300080f0033" diff --git a/bindings/assetholdereth/AssetHolderETH.go b/bindings/assetholdereth/AssetHolderETH.go index 64f9cd9..d3be064 100644 --- a/bindings/assetholdereth/AssetHolderETH.go +++ b/bindings/assetholdereth/AssetHolderETH.go @@ -46,7 +46,7 @@ type ChannelParticipant struct { // AssetholderethMetaData contains all meta data concerning the Assetholdereth contract. var AssetholderethMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_adjudicator\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"fundingID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Deposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"channelID\",\"type\":\"bytes32\"}],\"name\":\"OutcomeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"fundingID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"Withdrawn\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"adjudicator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"fundingID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"holdings\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"channelID\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"ethAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ccAddress\",\"type\":\"bytes\"}],\"internalType\":\"structChannel.Participant[]\",\"name\":\"parts\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"newBals\",\"type\":\"uint256[]\"}],\"name\":\"setOutcome\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"settled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"channelID\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"ethAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ccAddress\",\"type\":\"bytes\"}],\"internalType\":\"structChannel.Participant\",\"name\":\"participant\",\"type\":\"tuple\"},{\"internalType\":\"addresspayable\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structAssetHolder.WithdrawalAuth\",\"name\":\"authorization\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b5060405161105b38038061105b83398101604081905261002f91610054565b600280546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b610fc8806100936000396000f3fe6080604052600436106100555760003560e01c80631de26e161461005a578063295482ce1461006f57806353c2ed8e1461008f578063ae9ee18c146100cc578063d945af1d14610107578063fca0f77814610147575b600080fd5b61006d610068366004610c14565b610167565b005b34801561007b57600080fd5b5061006d61008a366004610c7b565b6101d7565b34801561009b57600080fd5b506002546100af906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100d857600080fd5b506100f96100e7366004610cf5565b60006020819052908152604090205481565b6040519081526020016100c3565b34801561011357600080fd5b50610137610122366004610cf5565b60016020526000908152604090205460ff1681565b60405190151581526020016100c3565b34801561015357600080fd5b5061006d610162366004610d0e565b6104fb565b6101718282610711565b60008281526020819052604090205461018a9082610764565b600083815260208190526040902055817fcd2fe07293de5928c5df9505b65a8d6506f8668dfe81af09090920687edc48a9826040516101cb91815260200190565b60405180910390a25050565b6002546001600160a01b031633146102445760405162461bcd60e51b815260206004820152602560248201527f63616e206f6e6c792062652063616c6c6564206279207468652061646a75646960448201526431b0ba37b960d91b60648201526084015b60405180910390fd5b8281146102a55760405162461bcd60e51b815260206004820152602960248201527f7061727469636970616e7473206c656e6774682073686f756c6420657175616c6044820152682062616c616e63657360b81b606482015260840161023b565b60008581526001602052604090205460ff16156103125760405162461bcd60e51b815260206004820152602560248201527f747279696e6720746f2073657420616c726561647920736574746c6564206368604482015264185b9b995b60da1b606482015260840161023b565b600085815260208190526040812080549082905590808567ffffffffffffffff81111561034157610341610dad565b60405190808252806020026020018201604052801561036a578160200160208202803683370190505b50905060005b8681101561043e5760006103b58a8a8a8581811061039057610390610dc3565b90506020028101906103a29190610dd9565b6103b0906020810190610e0e565b610777565b9050808383815181106103ca576103ca610dc3565b6020026020010181815250506103fb600080838152602001908152602001600020548661076490919063ffffffff16565b945061042887878481811061041257610412610dc3565b905060200201358561076490919063ffffffff16565b935050808061043690610e41565b915050610370565b508183106104ae5760005b868110156104ac5785858281811061046357610463610dc3565b9050602002013560008084848151811061047f5761047f610dc3565b602002602001015181526020019081526020016000208190555080806104a490610e41565b915050610449565b505b6000888152600160208190526040808320805460ff19169092179091555189917fef898d6cd3395b6dfe67a3c1923e5c726c1b154e979fb0a25a9c41d0093168b891a25050505050505050565b823560009081526001602052604090205460ff166105515760405162461bcd60e51b815260206004820152601360248201527218da185b9b995b081b9bdd081cd95d1d1b1959606a1b604482015260640161023b565b6105c4836040516020016105659190610e6a565b60408051601f198184030181526020601f8601819004810284018101909252848352919085908590819084018382808284376000920191909152506105b1925050506020870187610dd9565b6105bf906020810190610e0e565b6107bc565b6106105760405162461bcd60e51b815260206004820152601d60248201527f7369676e617475726520766572696669636174696f6e206661696c6564000000604482015260640161023b565b600061062484356103a26020870187610dd9565b6000818152602081905260409020549091506060850135111561067e5760405162461bcd60e51b8152602060048201526012602482015271696e73756666696369656e742066756e647360701b604482015260640161023b565b60008181526020819052604090205461069b906060860135610845565b6000828152602081905260409020556106b5848484610851565b807fd0b6e7d0170f56c62f87de6a8a47a0ccf41c86ffb5084d399d8eb62e823f2a81606086018035906106eb9060408901610e0e565b604080519283526001600160a01b0390911660208301520160405180910390a250505050565b8034146107605760405162461bcd60e51b815260206004820152601f60248201527f77726f6e6720616d6f756e74206f662045544820666f72206465706f73697400604482015260640161023b565b5050565b60006107708284610f4d565b9392505050565b6000828260405160200161079e9291909182526001600160a01b0316602082015260400190565b60405160208183030381529060405280519060200120905092915050565b60008061081d85805190602001206040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b9050600061082b82866108a3565b6001600160a01b0390811690851614925050509392505050565b60006107708284610f65565b6108616060840160408501610e0e565b6001600160a01b03166108fc84606001359081150290604051600060405180830381858888f1935050505015801561089d573d6000803e3d6000fd5b50505050565b60008060006108b285856108c7565b915091506108bf81610935565b509392505050565b60008082516041036108fd5760208301516040840151606085015160001a6108f187828585610aee565b9450945050505061092e565b8251604003610926576020830151604084015161091b868383610bdb565b93509350505061092e565b506000905060025b9250929050565b600081600481111561094957610949610f7c565b036109515750565b600181600481111561096557610965610f7c565b036109b25760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161023b565b60028160048111156109c6576109c6610f7c565b03610a135760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161023b565b6003816004811115610a2757610a27610f7c565b03610a7f5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161023b565b6004816004811115610a9357610a93610f7c565b03610aeb5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b606482015260840161023b565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610b255750600090506003610bd2565b8460ff16601b14158015610b3d57508460ff16601c14155b15610b4e5750600090506004610bd2565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610ba2573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610bcb57600060019250925050610bd2565b9150600090505b94509492505050565b6000806001600160ff1b03831681610bf860ff86901c601b610f4d565b9050610c0687828885610aee565b935093505050935093915050565b60008060408385031215610c2757600080fd5b50508035926020909101359150565b60008083601f840112610c4857600080fd5b50813567ffffffffffffffff811115610c6057600080fd5b6020830191508360208260051b850101111561092e57600080fd5b600080600080600060608688031215610c9357600080fd5b85359450602086013567ffffffffffffffff80821115610cb257600080fd5b610cbe89838a01610c36565b90965094506040880135915080821115610cd757600080fd5b50610ce488828901610c36565b969995985093965092949392505050565b600060208284031215610d0757600080fd5b5035919050565b600080600060408486031215610d2357600080fd5b833567ffffffffffffffff80821115610d3b57600080fd5b9085019060808288031215610d4f57600080fd5b90935060208501359080821115610d6557600080fd5b818601915086601f830112610d7957600080fd5b813581811115610d8857600080fd5b876020828501011115610d9a57600080fd5b6020830194508093505050509250925092565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60008235603e19833603018112610def57600080fd5b9190910192915050565b6001600160a01b0381168114610aeb57600080fd5b600060208284031215610e2057600080fd5b813561077081610df9565b634e487b7160e01b600052601160045260246000fd5b600060018201610e5357610e53610e2b565b5060010190565b8035610e6581610df9565b919050565b602081528135602082015260006020830135603e19843603018112610e8e57600080fd5b6080604084015283018035610ea281610df9565b6001600160a01b031660a0840152602081013536829003601e19018112610ec857600080fd5b0160208101903567ffffffffffffffff811115610ee457600080fd5b803603821315610ef357600080fd5b604060c08501528060e08501526101008183828701376000818387010152610f1d60408701610e5a565b6001600160a01b03811660608701529250606095909501356080850152601f01601f191690920190920192915050565b60008219821115610f6057610f60610e2b565b500190565b600082821015610f7757610f77610e2b565b500390565b634e487b7160e01b600052602160045260246000fdfea2646970667358221220dea45cdf7eabfb0362894605f2b04ce28ac37ab4c50adf6c360fd904a7c797c364736f6c634300080f0033", + Bin: "0x608060405234801561001057600080fd5b5060405161103338038061103383398101604081905261002f91610054565b600280546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b610fa0806100936000396000f3fe6080604052600436106100555760003560e01c80631de26e161461005a578063295482ce1461006f57806353c2ed8e1461008f578063ae9ee18c146100cc578063d945af1d14610107578063fca0f77814610147575b600080fd5b61006d610068366004610be5565b610167565b005b34801561007b57600080fd5b5061006d61008a366004610c4c565b6101d8565b34801561009b57600080fd5b506002546100af906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100d857600080fd5b506100f96100e7366004610cc6565b60006020819052908152604090205481565b6040519081526020016100c3565b34801561011357600080fd5b50610137610122366004610cc6565b60016020526000908152604090205460ff1681565b60405190151581526020016100c3565b34801561015357600080fd5b5061006d610162366004610cdf565b6104ea565b6101718282610701565b60008281526020819052604090205461018b908290610d94565b600083815260208190526040902055817fcd2fe07293de5928c5df9505b65a8d6506f8668dfe81af09090920687edc48a9826040516101cc91815260200190565b60405180910390a25050565b6002546001600160a01b031633146102455760405162461bcd60e51b815260206004820152602560248201527f63616e206f6e6c792062652063616c6c6564206279207468652061646a75646960448201526431b0ba37b960d91b60648201526084015b60405180910390fd5b8281146102a65760405162461bcd60e51b815260206004820152602960248201527f7061727469636970616e7473206c656e6774682073686f756c6420657175616c6044820152682062616c616e63657360b81b606482015260840161023c565b60008581526001602052604090205460ff16156103135760405162461bcd60e51b815260206004820152602560248201527f747279696e6720746f2073657420616c726561647920736574746c6564206368604482015264185b9b995b60da1b606482015260840161023c565b600085815260208190526040812080549082905590808567ffffffffffffffff81111561034257610342610dac565b60405190808252806020026020018201604052801561036b578160200160208202803683370190505b50905060005b8681101561042f5760006103b68a8a8a8581811061039157610391610dc2565b90506020028101906103a39190610dd8565b6103b1906020810190610e0d565b610754565b9050808383815181106103cb576103cb610dc2565b60200260200101818152505060008082815260200190815260200160002054856103f59190610d94565b945086868381811061040957610409610dc2565b905060200201358461041b9190610d94565b9350508061042890610e31565b9050610371565b5081831061049d5760005b8681101561049b5785858281811061045457610454610dc2565b9050602002013560008084848151811061047057610470610dc2565b60200260200101518152602001908152602001600020819055508061049490610e31565b905061043a565b505b6000888152600160208190526040808320805460ff19169092179091555189917fef898d6cd3395b6dfe67a3c1923e5c726c1b154e979fb0a25a9c41d0093168b891a25050505050505050565b823560009081526001602052604090205460ff166105405760405162461bcd60e51b815260206004820152601360248201527218da185b9b995b081b9bdd081cd95d1d1b1959606a1b604482015260640161023c565b6105b3836040516020016105549190610e5a565b60408051601f198184030181526020601f8601819004810284018101909252848352919085908590819084018382808284376000920191909152506105a0925050506020870187610dd8565b6105ae906020810190610e0d565b610799565b6105ff5760405162461bcd60e51b815260206004820152601d60248201527f7369676e617475726520766572696669636174696f6e206661696c6564000000604482015260640161023c565b600061061384356103a36020870187610dd8565b6000818152602081905260409020549091506060850135111561066d5760405162461bcd60e51b8152602060048201526012602482015271696e73756666696369656e742066756e647360701b604482015260640161023c565b60008181526020819052604090205461068b90606086013590610f3d565b6000828152602081905260409020556106a5848484610822565b807fd0b6e7d0170f56c62f87de6a8a47a0ccf41c86ffb5084d399d8eb62e823f2a81606086018035906106db9060408901610e0d565b604080519283526001600160a01b0390911660208301520160405180910390a250505050565b8034146107505760405162461bcd60e51b815260206004820152601f60248201527f77726f6e6720616d6f756e74206f662045544820666f72206465706f73697400604482015260640161023c565b5050565b6000828260405160200161077b9291909182526001600160a01b0316602082015260400190565b60405160208183030381529060405280519060200120905092915050565b6000806107fa85805190602001206040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b905060006108088286610874565b6001600160a01b0390811690851614925050509392505050565b6108326060840160408501610e0d565b6001600160a01b03166108fc84606001359081150290604051600060405180830381858888f1935050505015801561086e573d6000803e3d6000fd5b50505050565b60008060006108838585610898565b9150915061089081610906565b509392505050565b60008082516041036108ce5760208301516040840151606085015160001a6108c287828585610abf565b945094505050506108ff565b82516040036108f757602083015160408401516108ec868383610bac565b9350935050506108ff565b506000905060025b9250929050565b600081600481111561091a5761091a610f54565b036109225750565b600181600481111561093657610936610f54565b036109835760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161023c565b600281600481111561099757610997610f54565b036109e45760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161023c565b60038160048111156109f8576109f8610f54565b03610a505760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161023c565b6004816004811115610a6457610a64610f54565b03610abc5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b606482015260840161023c565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610af65750600090506003610ba3565b8460ff16601b14158015610b0e57508460ff16601c14155b15610b1f5750600090506004610ba3565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610b73573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610b9c57600060019250925050610ba3565b9150600090505b94509492505050565b6000806001600160ff1b03831681610bc960ff86901c601b610d94565b9050610bd787828885610abf565b935093505050935093915050565b60008060408385031215610bf857600080fd5b50508035926020909101359150565b60008083601f840112610c1957600080fd5b50813567ffffffffffffffff811115610c3157600080fd5b6020830191508360208260051b85010111156108ff57600080fd5b600080600080600060608688031215610c6457600080fd5b85359450602086013567ffffffffffffffff80821115610c8357600080fd5b610c8f89838a01610c07565b90965094506040880135915080821115610ca857600080fd5b50610cb588828901610c07565b969995985093965092949392505050565b600060208284031215610cd857600080fd5b5035919050565b600080600060408486031215610cf457600080fd5b833567ffffffffffffffff80821115610d0c57600080fd5b9085019060808288031215610d2057600080fd5b90935060208501359080821115610d3657600080fd5b818601915086601f830112610d4a57600080fd5b813581811115610d5957600080fd5b876020828501011115610d6b57600080fd5b6020830194508093505050509250925092565b634e487b7160e01b600052601160045260246000fd5b60008219821115610da757610da7610d7e565b500190565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60008235603e19833603018112610dee57600080fd5b9190910192915050565b6001600160a01b0381168114610abc57600080fd5b600060208284031215610e1f57600080fd5b8135610e2a81610df8565b9392505050565b600060018201610e4357610e43610d7e565b5060010190565b8035610e5581610df8565b919050565b602081528135602082015260006020830135603e19843603018112610e7e57600080fd5b6080604084015283018035610e9281610df8565b6001600160a01b031660a0840152602081013536829003601e19018112610eb857600080fd5b0160208101903567ffffffffffffffff811115610ed457600080fd5b803603821315610ee357600080fd5b604060c08501528060e08501526101008183828701376000818387010152610f0d60408701610e4a565b6001600160a01b03811660608701529250606095909501356080850152601f01601f191690920190920192915050565b600082821015610f4f57610f4f610d7e565b500390565b634e487b7160e01b600052602160045260246000fdfea264697066735822122038dc947cb2ebf2fee90e000b19334221d8c9a23e7c6769f3907ca15a4537512c64736f6c634300080f0033", } // AssetholderethABI is the input ABI used to generate the binding from. diff --git a/bindings/assetholdereth/AssetHolderETHBinRuntime.go b/bindings/assetholdereth/AssetHolderETHBinRuntime.go index c7ec69f..d6c18f1 100644 --- a/bindings/assetholdereth/AssetHolderETHBinRuntime.go +++ b/bindings/assetholdereth/AssetHolderETHBinRuntime.go @@ -1,4 +1,4 @@ package assetholdereth // import "github.com/perun-network/perun-eth-backend/bindings/assetholdereth" // AssetHolderETHBinRuntime is the runtime part of the compiled bytecode used for deploying new contracts. -var AssetHolderETHBinRuntime = "6080604052600436106100555760003560e01c80631de26e161461005a578063295482ce1461006f57806353c2ed8e1461008f578063ae9ee18c146100cc578063d945af1d14610107578063fca0f77814610147575b600080fd5b61006d610068366004610c14565b610167565b005b34801561007b57600080fd5b5061006d61008a366004610c7b565b6101d7565b34801561009b57600080fd5b506002546100af906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100d857600080fd5b506100f96100e7366004610cf5565b60006020819052908152604090205481565b6040519081526020016100c3565b34801561011357600080fd5b50610137610122366004610cf5565b60016020526000908152604090205460ff1681565b60405190151581526020016100c3565b34801561015357600080fd5b5061006d610162366004610d0e565b6104fb565b6101718282610711565b60008281526020819052604090205461018a9082610764565b600083815260208190526040902055817fcd2fe07293de5928c5df9505b65a8d6506f8668dfe81af09090920687edc48a9826040516101cb91815260200190565b60405180910390a25050565b6002546001600160a01b031633146102445760405162461bcd60e51b815260206004820152602560248201527f63616e206f6e6c792062652063616c6c6564206279207468652061646a75646960448201526431b0ba37b960d91b60648201526084015b60405180910390fd5b8281146102a55760405162461bcd60e51b815260206004820152602960248201527f7061727469636970616e7473206c656e6774682073686f756c6420657175616c6044820152682062616c616e63657360b81b606482015260840161023b565b60008581526001602052604090205460ff16156103125760405162461bcd60e51b815260206004820152602560248201527f747279696e6720746f2073657420616c726561647920736574746c6564206368604482015264185b9b995b60da1b606482015260840161023b565b600085815260208190526040812080549082905590808567ffffffffffffffff81111561034157610341610dad565b60405190808252806020026020018201604052801561036a578160200160208202803683370190505b50905060005b8681101561043e5760006103b58a8a8a8581811061039057610390610dc3565b90506020028101906103a29190610dd9565b6103b0906020810190610e0e565b610777565b9050808383815181106103ca576103ca610dc3565b6020026020010181815250506103fb600080838152602001908152602001600020548661076490919063ffffffff16565b945061042887878481811061041257610412610dc3565b905060200201358561076490919063ffffffff16565b935050808061043690610e41565b915050610370565b508183106104ae5760005b868110156104ac5785858281811061046357610463610dc3565b9050602002013560008084848151811061047f5761047f610dc3565b602002602001015181526020019081526020016000208190555080806104a490610e41565b915050610449565b505b6000888152600160208190526040808320805460ff19169092179091555189917fef898d6cd3395b6dfe67a3c1923e5c726c1b154e979fb0a25a9c41d0093168b891a25050505050505050565b823560009081526001602052604090205460ff166105515760405162461bcd60e51b815260206004820152601360248201527218da185b9b995b081b9bdd081cd95d1d1b1959606a1b604482015260640161023b565b6105c4836040516020016105659190610e6a565b60408051601f198184030181526020601f8601819004810284018101909252848352919085908590819084018382808284376000920191909152506105b1925050506020870187610dd9565b6105bf906020810190610e0e565b6107bc565b6106105760405162461bcd60e51b815260206004820152601d60248201527f7369676e617475726520766572696669636174696f6e206661696c6564000000604482015260640161023b565b600061062484356103a26020870187610dd9565b6000818152602081905260409020549091506060850135111561067e5760405162461bcd60e51b8152602060048201526012602482015271696e73756666696369656e742066756e647360701b604482015260640161023b565b60008181526020819052604090205461069b906060860135610845565b6000828152602081905260409020556106b5848484610851565b807fd0b6e7d0170f56c62f87de6a8a47a0ccf41c86ffb5084d399d8eb62e823f2a81606086018035906106eb9060408901610e0e565b604080519283526001600160a01b0390911660208301520160405180910390a250505050565b8034146107605760405162461bcd60e51b815260206004820152601f60248201527f77726f6e6720616d6f756e74206f662045544820666f72206465706f73697400604482015260640161023b565b5050565b60006107708284610f4d565b9392505050565b6000828260405160200161079e9291909182526001600160a01b0316602082015260400190565b60405160208183030381529060405280519060200120905092915050565b60008061081d85805190602001206040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b9050600061082b82866108a3565b6001600160a01b0390811690851614925050509392505050565b60006107708284610f65565b6108616060840160408501610e0e565b6001600160a01b03166108fc84606001359081150290604051600060405180830381858888f1935050505015801561089d573d6000803e3d6000fd5b50505050565b60008060006108b285856108c7565b915091506108bf81610935565b509392505050565b60008082516041036108fd5760208301516040840151606085015160001a6108f187828585610aee565b9450945050505061092e565b8251604003610926576020830151604084015161091b868383610bdb565b93509350505061092e565b506000905060025b9250929050565b600081600481111561094957610949610f7c565b036109515750565b600181600481111561096557610965610f7c565b036109b25760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161023b565b60028160048111156109c6576109c6610f7c565b03610a135760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161023b565b6003816004811115610a2757610a27610f7c565b03610a7f5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161023b565b6004816004811115610a9357610a93610f7c565b03610aeb5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b606482015260840161023b565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610b255750600090506003610bd2565b8460ff16601b14158015610b3d57508460ff16601c14155b15610b4e5750600090506004610bd2565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610ba2573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610bcb57600060019250925050610bd2565b9150600090505b94509492505050565b6000806001600160ff1b03831681610bf860ff86901c601b610f4d565b9050610c0687828885610aee565b935093505050935093915050565b60008060408385031215610c2757600080fd5b50508035926020909101359150565b60008083601f840112610c4857600080fd5b50813567ffffffffffffffff811115610c6057600080fd5b6020830191508360208260051b850101111561092e57600080fd5b600080600080600060608688031215610c9357600080fd5b85359450602086013567ffffffffffffffff80821115610cb257600080fd5b610cbe89838a01610c36565b90965094506040880135915080821115610cd757600080fd5b50610ce488828901610c36565b969995985093965092949392505050565b600060208284031215610d0757600080fd5b5035919050565b600080600060408486031215610d2357600080fd5b833567ffffffffffffffff80821115610d3b57600080fd5b9085019060808288031215610d4f57600080fd5b90935060208501359080821115610d6557600080fd5b818601915086601f830112610d7957600080fd5b813581811115610d8857600080fd5b876020828501011115610d9a57600080fd5b6020830194508093505050509250925092565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60008235603e19833603018112610def57600080fd5b9190910192915050565b6001600160a01b0381168114610aeb57600080fd5b600060208284031215610e2057600080fd5b813561077081610df9565b634e487b7160e01b600052601160045260246000fd5b600060018201610e5357610e53610e2b565b5060010190565b8035610e6581610df9565b919050565b602081528135602082015260006020830135603e19843603018112610e8e57600080fd5b6080604084015283018035610ea281610df9565b6001600160a01b031660a0840152602081013536829003601e19018112610ec857600080fd5b0160208101903567ffffffffffffffff811115610ee457600080fd5b803603821315610ef357600080fd5b604060c08501528060e08501526101008183828701376000818387010152610f1d60408701610e5a565b6001600160a01b03811660608701529250606095909501356080850152601f01601f191690920190920192915050565b60008219821115610f6057610f60610e2b565b500190565b600082821015610f7757610f77610e2b565b500390565b634e487b7160e01b600052602160045260246000fdfea2646970667358221220dea45cdf7eabfb0362894605f2b04ce28ac37ab4c50adf6c360fd904a7c797c364736f6c634300080f0033" +var AssetHolderETHBinRuntime = "6080604052600436106100555760003560e01c80631de26e161461005a578063295482ce1461006f57806353c2ed8e1461008f578063ae9ee18c146100cc578063d945af1d14610107578063fca0f77814610147575b600080fd5b61006d610068366004610be5565b610167565b005b34801561007b57600080fd5b5061006d61008a366004610c4c565b6101d8565b34801561009b57600080fd5b506002546100af906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100d857600080fd5b506100f96100e7366004610cc6565b60006020819052908152604090205481565b6040519081526020016100c3565b34801561011357600080fd5b50610137610122366004610cc6565b60016020526000908152604090205460ff1681565b60405190151581526020016100c3565b34801561015357600080fd5b5061006d610162366004610cdf565b6104ea565b6101718282610701565b60008281526020819052604090205461018b908290610d94565b600083815260208190526040902055817fcd2fe07293de5928c5df9505b65a8d6506f8668dfe81af09090920687edc48a9826040516101cc91815260200190565b60405180910390a25050565b6002546001600160a01b031633146102455760405162461bcd60e51b815260206004820152602560248201527f63616e206f6e6c792062652063616c6c6564206279207468652061646a75646960448201526431b0ba37b960d91b60648201526084015b60405180910390fd5b8281146102a65760405162461bcd60e51b815260206004820152602960248201527f7061727469636970616e7473206c656e6774682073686f756c6420657175616c6044820152682062616c616e63657360b81b606482015260840161023c565b60008581526001602052604090205460ff16156103135760405162461bcd60e51b815260206004820152602560248201527f747279696e6720746f2073657420616c726561647920736574746c6564206368604482015264185b9b995b60da1b606482015260840161023c565b600085815260208190526040812080549082905590808567ffffffffffffffff81111561034257610342610dac565b60405190808252806020026020018201604052801561036b578160200160208202803683370190505b50905060005b8681101561042f5760006103b68a8a8a8581811061039157610391610dc2565b90506020028101906103a39190610dd8565b6103b1906020810190610e0d565b610754565b9050808383815181106103cb576103cb610dc2565b60200260200101818152505060008082815260200190815260200160002054856103f59190610d94565b945086868381811061040957610409610dc2565b905060200201358461041b9190610d94565b9350508061042890610e31565b9050610371565b5081831061049d5760005b8681101561049b5785858281811061045457610454610dc2565b9050602002013560008084848151811061047057610470610dc2565b60200260200101518152602001908152602001600020819055508061049490610e31565b905061043a565b505b6000888152600160208190526040808320805460ff19169092179091555189917fef898d6cd3395b6dfe67a3c1923e5c726c1b154e979fb0a25a9c41d0093168b891a25050505050505050565b823560009081526001602052604090205460ff166105405760405162461bcd60e51b815260206004820152601360248201527218da185b9b995b081b9bdd081cd95d1d1b1959606a1b604482015260640161023c565b6105b3836040516020016105549190610e5a565b60408051601f198184030181526020601f8601819004810284018101909252848352919085908590819084018382808284376000920191909152506105a0925050506020870187610dd8565b6105ae906020810190610e0d565b610799565b6105ff5760405162461bcd60e51b815260206004820152601d60248201527f7369676e617475726520766572696669636174696f6e206661696c6564000000604482015260640161023c565b600061061384356103a36020870187610dd8565b6000818152602081905260409020549091506060850135111561066d5760405162461bcd60e51b8152602060048201526012602482015271696e73756666696369656e742066756e647360701b604482015260640161023c565b60008181526020819052604090205461068b90606086013590610f3d565b6000828152602081905260409020556106a5848484610822565b807fd0b6e7d0170f56c62f87de6a8a47a0ccf41c86ffb5084d399d8eb62e823f2a81606086018035906106db9060408901610e0d565b604080519283526001600160a01b0390911660208301520160405180910390a250505050565b8034146107505760405162461bcd60e51b815260206004820152601f60248201527f77726f6e6720616d6f756e74206f662045544820666f72206465706f73697400604482015260640161023c565b5050565b6000828260405160200161077b9291909182526001600160a01b0316602082015260400190565b60405160208183030381529060405280519060200120905092915050565b6000806107fa85805190602001206040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b905060006108088286610874565b6001600160a01b0390811690851614925050509392505050565b6108326060840160408501610e0d565b6001600160a01b03166108fc84606001359081150290604051600060405180830381858888f1935050505015801561086e573d6000803e3d6000fd5b50505050565b60008060006108838585610898565b9150915061089081610906565b509392505050565b60008082516041036108ce5760208301516040840151606085015160001a6108c287828585610abf565b945094505050506108ff565b82516040036108f757602083015160408401516108ec868383610bac565b9350935050506108ff565b506000905060025b9250929050565b600081600481111561091a5761091a610f54565b036109225750565b600181600481111561093657610936610f54565b036109835760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161023c565b600281600481111561099757610997610f54565b036109e45760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161023c565b60038160048111156109f8576109f8610f54565b03610a505760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161023c565b6004816004811115610a6457610a64610f54565b03610abc5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b606482015260840161023c565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610af65750600090506003610ba3565b8460ff16601b14158015610b0e57508460ff16601c14155b15610b1f5750600090506004610ba3565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610b73573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610b9c57600060019250925050610ba3565b9150600090505b94509492505050565b6000806001600160ff1b03831681610bc960ff86901c601b610d94565b9050610bd787828885610abf565b935093505050935093915050565b60008060408385031215610bf857600080fd5b50508035926020909101359150565b60008083601f840112610c1957600080fd5b50813567ffffffffffffffff811115610c3157600080fd5b6020830191508360208260051b85010111156108ff57600080fd5b600080600080600060608688031215610c6457600080fd5b85359450602086013567ffffffffffffffff80821115610c8357600080fd5b610c8f89838a01610c07565b90965094506040880135915080821115610ca857600080fd5b50610cb588828901610c07565b969995985093965092949392505050565b600060208284031215610cd857600080fd5b5035919050565b600080600060408486031215610cf457600080fd5b833567ffffffffffffffff80821115610d0c57600080fd5b9085019060808288031215610d2057600080fd5b90935060208501359080821115610d3657600080fd5b818601915086601f830112610d4a57600080fd5b813581811115610d5957600080fd5b876020828501011115610d6b57600080fd5b6020830194508093505050509250925092565b634e487b7160e01b600052601160045260246000fd5b60008219821115610da757610da7610d7e565b500190565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60008235603e19833603018112610dee57600080fd5b9190910192915050565b6001600160a01b0381168114610abc57600080fd5b600060208284031215610e1f57600080fd5b8135610e2a81610df8565b9392505050565b600060018201610e4357610e43610d7e565b5060010190565b8035610e5581610df8565b919050565b602081528135602082015260006020830135603e19843603018112610e7e57600080fd5b6080604084015283018035610e9281610df8565b6001600160a01b031660a0840152602081013536829003601e19018112610eb857600080fd5b0160208101903567ffffffffffffffff811115610ed457600080fd5b803603821315610ee357600080fd5b604060c08501528060e08501526101008183828701376000818387010152610f0d60408701610e4a565b6001600160a01b03811660608701529250606095909501356080850152601f01601f191690920190920192915050565b600082821015610f4f57610f4f610d7e565b500390565b634e487b7160e01b600052602160045260246000fdfea264697066735822122038dc947cb2ebf2fee90e000b19334221d8c9a23e7c6769f3907ca15a4537512c64736f6c634300080f0033" diff --git a/bindings/generate.sh b/bindings/generate.sh index d285591..1f04ccb 100755 --- a/bindings/generate.sh +++ b/bindings/generate.sh @@ -47,7 +47,7 @@ generate() { mkdir $PKG # Compile and generate binary runtime. - $SOLC --abi --bin --bin-runtime --optimize --allow-paths contracts/vendor, contracts/contracts/$FILE.sol -o $PKG/ + $SOLC --abi --bin --bin-runtime --optimize --optimize-runs 200 --allow-paths contracts/vendor, contracts/contracts/$FILE.sol -o $PKG/ BIN_RUNTIME=$(cat ${PKG}/${CONTRACT}.bin-runtime) OUT_FILE="$PKG/${CONTRACT}BinRuntime.go" echo "package $PKG // import \"github.com/perun-network/perun-eth-backend/bindings/$PKG\"" > $OUT_FILE diff --git a/bindings/peruntoken/PerunToken.go b/bindings/peruntoken/PerunToken.go index 8ab4868..ee74141 100644 --- a/bindings/peruntoken/PerunToken.go +++ b/bindings/peruntoken/PerunToken.go @@ -32,7 +32,7 @@ var ( // PeruntokenMetaData contains all meta data concerning the Peruntoken contract. var PeruntokenMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"initBalance\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x60806040523480156200001157600080fd5b5060405162000d8038038062000d8083398101604081905262000034916200020f565b6040518060400160405280600a8152602001692832b93ab72a37b5b2b760b11b8152506040518060400160405280600381526020016228292760e91b815250816003908162000084919062000377565b50600462000093828262000377565b50505060005b8251811015620000e657620000d1838281518110620000bc57620000bc62000443565b602002602001015183620000ef60201b60201c565b80620000dd816200046f565b91505062000099565b505050620004a6565b6001600160a01b0382166200014a5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b80600260008282546200015e91906200048b565b90915550506001600160a01b038216600090815260208190526040812080548392906200018d9084906200048b565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b03811681146200020a57600080fd5b919050565b600080604083850312156200022357600080fd5b82516001600160401b03808211156200023b57600080fd5b818501915085601f8301126200025057600080fd5b8151602082821115620002675762000267620001dc565b8160051b604051601f19603f830116810181811086821117156200028f576200028f620001dc565b604052928352818301935084810182019289841115620002ae57600080fd5b948201945b83861015620002d757620002c786620001f2565b85529482019493820193620002b3565b97909101519698969750505050505050565b600181811c90821680620002fe57607f821691505b6020821081036200031f57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001d757600081815260208120601f850160051c810160208610156200034e5750805b601f850160051c820191505b818110156200036f578281556001016200035a565b505050505050565b81516001600160401b03811115620003935762000393620001dc565b620003ab81620003a48454620002e9565b8462000325565b602080601f831160018114620003e35760008415620003ca5750858301515b600019600386901b1c1916600185901b1785556200036f565b600085815260208120601f198616915b828110156200041457888601518255948401946001909101908401620003f3565b5085821015620004335787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820162000484576200048462000459565b5060010190565b60008219821115620004a157620004a162000459565b500190565b6108ca80620004b66000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461012357806370a082311461013657806395d89b411461015f578063a457c2d714610167578063a9059cbb1461017a578063dd62ed3e1461018d57600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610101578063313ce56714610114575b600080fd5b6100b66101c6565b6040516100c39190610708565b60405180910390f35b6100df6100da366004610779565b610258565b60405190151581526020016100c3565b6002545b6040519081526020016100c3565b6100df61010f3660046107a3565b61026e565b604051601281526020016100c3565b6100df610131366004610779565b610324565b6100f36101443660046107df565b6001600160a01b031660009081526020819052604090205490565b6100b6610360565b6100df610175366004610779565b61036f565b6100df610188366004610779565b610408565b6100f361019b366004610801565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101d590610834565b80601f016020809104026020016040519081016040528092919081815260200182805461020190610834565b801561024e5780601f106102235761010080835404028352916020019161024e565b820191906000526020600020905b81548152906001019060200180831161023157829003601f168201915b5050505050905090565b6000610265338484610415565b50600192915050565b6001600160a01b0383166000908152600160209081526040808320338452909152812054600019811461030e57828110156103015760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b61030e8533858403610415565b610319858585610539565b506001949350505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161026591859061035b90869061086e565b610415565b6060600480546101d590610834565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156103f15760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016102f8565b6103fe3385858403610415565b5060019392505050565b6000610265338484610539565b6001600160a01b0383166104775760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016102f8565b6001600160a01b0382166104d85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016102f8565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661059d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016102f8565b6001600160a01b0382166105ff5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016102f8565b6001600160a01b038316600090815260208190526040902054818110156106775760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016102f8565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906106ae90849061086e565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516106fa91815260200190565b60405180910390a350505050565b600060208083528351808285015260005b8181101561073557858101830151858201604001528201610719565b81811115610747576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b038116811461077457600080fd5b919050565b6000806040838503121561078c57600080fd5b6107958361075d565b946020939093013593505050565b6000806000606084860312156107b857600080fd5b6107c18461075d565b92506107cf6020850161075d565b9150604084013590509250925092565b6000602082840312156107f157600080fd5b6107fa8261075d565b9392505050565b6000806040838503121561081457600080fd5b61081d8361075d565b915061082b6020840161075d565b90509250929050565b600181811c9082168061084857607f821691505b60208210810361086857634e487b7160e01b600052602260045260246000fd5b50919050565b6000821982111561088f57634e487b7160e01b600052601160045260246000fd5b50019056fea2646970667358221220e350df2aa985c0af2619470429a57bb9a808eebd0fcb1d4cd5038fbd4bd396aa64736f6c634300080f0033", + Bin: "0x60806040523480156200001157600080fd5b5060405162000d7e38038062000d7e83398101604081905262000034916200020d565b6040518060400160405280600a8152602001692832b93ab72a37b5b2b760b11b8152506040518060400160405280600381526020016228292760e91b815250816003908162000084919062000375565b50600462000093828262000375565b50505060005b8251811015620000e457620000d1838281518110620000bc57620000bc62000441565b602002602001015183620000ed60201b60201c565b620000dc816200046d565b905062000099565b505050620004a4565b6001600160a01b038216620001485760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b80600260008282546200015c919062000489565b90915550506001600160a01b038216600090815260208190526040812080548392906200018b90849062000489565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b03811681146200020857600080fd5b919050565b600080604083850312156200022157600080fd5b82516001600160401b03808211156200023957600080fd5b818501915085601f8301126200024e57600080fd5b8151602082821115620002655762000265620001da565b8160051b604051601f19603f830116810181811086821117156200028d576200028d620001da565b604052928352818301935084810182019289841115620002ac57600080fd5b948201945b83861015620002d557620002c586620001f0565b85529482019493820193620002b1565b97909101519698969750505050505050565b600181811c90821680620002fc57607f821691505b6020821081036200031d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001d557600081815260208120601f850160051c810160208610156200034c5750805b601f850160051c820191505b818110156200036d5782815560010162000358565b505050505050565b81516001600160401b03811115620003915762000391620001da565b620003a981620003a28454620002e7565b8462000323565b602080601f831160018114620003e15760008415620003c85750858301515b600019600386901b1c1916600185901b1785556200036d565b600085815260208120601f198616915b828110156200041257888601518255948401946001909101908401620003f1565b5085821015620004315787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820162000482576200048262000457565b5060010190565b600082198211156200049f576200049f62000457565b500190565b6108ca80620004b46000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461012357806370a082311461013657806395d89b411461015f578063a457c2d714610167578063a9059cbb1461017a578063dd62ed3e1461018d57600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610101578063313ce56714610114575b600080fd5b6100b66101c6565b6040516100c39190610708565b60405180910390f35b6100df6100da366004610779565b610258565b60405190151581526020016100c3565b6002545b6040519081526020016100c3565b6100df61010f3660046107a3565b61026e565b604051601281526020016100c3565b6100df610131366004610779565b610324565b6100f36101443660046107df565b6001600160a01b031660009081526020819052604090205490565b6100b6610360565b6100df610175366004610779565b61036f565b6100df610188366004610779565b610408565b6100f361019b366004610801565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101d590610834565b80601f016020809104026020016040519081016040528092919081815260200182805461020190610834565b801561024e5780601f106102235761010080835404028352916020019161024e565b820191906000526020600020905b81548152906001019060200180831161023157829003601f168201915b5050505050905090565b6000610265338484610415565b50600192915050565b6001600160a01b0383166000908152600160209081526040808320338452909152812054600019811461030e57828110156103015760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b61030e8533858403610415565b610319858585610539565b506001949350505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161026591859061035b90869061086e565b610415565b6060600480546101d590610834565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156103f15760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016102f8565b6103fe3385858403610415565b5060019392505050565b6000610265338484610539565b6001600160a01b0383166104775760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016102f8565b6001600160a01b0382166104d85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016102f8565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661059d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016102f8565b6001600160a01b0382166105ff5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016102f8565b6001600160a01b038316600090815260208190526040902054818110156106775760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016102f8565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906106ae90849061086e565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516106fa91815260200190565b60405180910390a350505050565b600060208083528351808285015260005b8181101561073557858101830151858201604001528201610719565b81811115610747576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b038116811461077457600080fd5b919050565b6000806040838503121561078c57600080fd5b6107958361075d565b946020939093013593505050565b6000806000606084860312156107b857600080fd5b6107c18461075d565b92506107cf6020850161075d565b9150604084013590509250925092565b6000602082840312156107f157600080fd5b6107fa8261075d565b9392505050565b6000806040838503121561081457600080fd5b61081d8361075d565b915061082b6020840161075d565b90509250929050565b600181811c9082168061084857607f821691505b60208210810361086857634e487b7160e01b600052602260045260246000fd5b50919050565b6000821982111561088f57634e487b7160e01b600052601160045260246000fd5b50019056fea264697066735822122087e60bb54f41d4105143e4624a571ed9829f6a028488012276e66237e3be73c264736f6c634300080f0033", } // PeruntokenABI is the input ABI used to generate the binding from. diff --git a/bindings/peruntoken/PerunTokenBinRuntime.go b/bindings/peruntoken/PerunTokenBinRuntime.go index 8e050b7..6389622 100644 --- a/bindings/peruntoken/PerunTokenBinRuntime.go +++ b/bindings/peruntoken/PerunTokenBinRuntime.go @@ -1,4 +1,4 @@ package peruntoken // import "github.com/perun-network/perun-eth-backend/bindings/peruntoken" // PerunTokenBinRuntime is the runtime part of the compiled bytecode used for deploying new contracts. -var PerunTokenBinRuntime = "608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461012357806370a082311461013657806395d89b411461015f578063a457c2d714610167578063a9059cbb1461017a578063dd62ed3e1461018d57600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610101578063313ce56714610114575b600080fd5b6100b66101c6565b6040516100c39190610708565b60405180910390f35b6100df6100da366004610779565b610258565b60405190151581526020016100c3565b6002545b6040519081526020016100c3565b6100df61010f3660046107a3565b61026e565b604051601281526020016100c3565b6100df610131366004610779565b610324565b6100f36101443660046107df565b6001600160a01b031660009081526020819052604090205490565b6100b6610360565b6100df610175366004610779565b61036f565b6100df610188366004610779565b610408565b6100f361019b366004610801565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101d590610834565b80601f016020809104026020016040519081016040528092919081815260200182805461020190610834565b801561024e5780601f106102235761010080835404028352916020019161024e565b820191906000526020600020905b81548152906001019060200180831161023157829003601f168201915b5050505050905090565b6000610265338484610415565b50600192915050565b6001600160a01b0383166000908152600160209081526040808320338452909152812054600019811461030e57828110156103015760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b61030e8533858403610415565b610319858585610539565b506001949350505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161026591859061035b90869061086e565b610415565b6060600480546101d590610834565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156103f15760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016102f8565b6103fe3385858403610415565b5060019392505050565b6000610265338484610539565b6001600160a01b0383166104775760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016102f8565b6001600160a01b0382166104d85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016102f8565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661059d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016102f8565b6001600160a01b0382166105ff5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016102f8565b6001600160a01b038316600090815260208190526040902054818110156106775760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016102f8565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906106ae90849061086e565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516106fa91815260200190565b60405180910390a350505050565b600060208083528351808285015260005b8181101561073557858101830151858201604001528201610719565b81811115610747576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b038116811461077457600080fd5b919050565b6000806040838503121561078c57600080fd5b6107958361075d565b946020939093013593505050565b6000806000606084860312156107b857600080fd5b6107c18461075d565b92506107cf6020850161075d565b9150604084013590509250925092565b6000602082840312156107f157600080fd5b6107fa8261075d565b9392505050565b6000806040838503121561081457600080fd5b61081d8361075d565b915061082b6020840161075d565b90509250929050565b600181811c9082168061084857607f821691505b60208210810361086857634e487b7160e01b600052602260045260246000fd5b50919050565b6000821982111561088f57634e487b7160e01b600052601160045260246000fd5b50019056fea2646970667358221220e350df2aa985c0af2619470429a57bb9a808eebd0fcb1d4cd5038fbd4bd396aa64736f6c634300080f0033" +var PerunTokenBinRuntime = "608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461012357806370a082311461013657806395d89b411461015f578063a457c2d714610167578063a9059cbb1461017a578063dd62ed3e1461018d57600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610101578063313ce56714610114575b600080fd5b6100b66101c6565b6040516100c39190610708565b60405180910390f35b6100df6100da366004610779565b610258565b60405190151581526020016100c3565b6002545b6040519081526020016100c3565b6100df61010f3660046107a3565b61026e565b604051601281526020016100c3565b6100df610131366004610779565b610324565b6100f36101443660046107df565b6001600160a01b031660009081526020819052604090205490565b6100b6610360565b6100df610175366004610779565b61036f565b6100df610188366004610779565b610408565b6100f361019b366004610801565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101d590610834565b80601f016020809104026020016040519081016040528092919081815260200182805461020190610834565b801561024e5780601f106102235761010080835404028352916020019161024e565b820191906000526020600020905b81548152906001019060200180831161023157829003601f168201915b5050505050905090565b6000610265338484610415565b50600192915050565b6001600160a01b0383166000908152600160209081526040808320338452909152812054600019811461030e57828110156103015760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b61030e8533858403610415565b610319858585610539565b506001949350505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161026591859061035b90869061086e565b610415565b6060600480546101d590610834565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156103f15760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016102f8565b6103fe3385858403610415565b5060019392505050565b6000610265338484610539565b6001600160a01b0383166104775760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016102f8565b6001600160a01b0382166104d85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016102f8565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661059d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016102f8565b6001600160a01b0382166105ff5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016102f8565b6001600160a01b038316600090815260208190526040902054818110156106775760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016102f8565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906106ae90849061086e565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516106fa91815260200190565b60405180910390a350505050565b600060208083528351808285015260005b8181101561073557858101830151858201604001528201610719565b81811115610747576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b038116811461077457600080fd5b919050565b6000806040838503121561078c57600080fd5b6107958361075d565b946020939093013593505050565b6000806000606084860312156107b857600080fd5b6107c18461075d565b92506107cf6020850161075d565b9150604084013590509250925092565b6000602082840312156107f157600080fd5b6107fa8261075d565b9392505050565b6000806040838503121561081457600080fd5b61081d8361075d565b915061082b6020840161075d565b90509250929050565b600181811c9082168061084857607f821691505b60208210810361086857634e487b7160e01b600052602260045260246000fd5b50919050565b6000821982111561088f57634e487b7160e01b600052601160045260246000fd5b50019056fea264697066735822122087e60bb54f41d4105143e4624a571ed9829f6a028488012276e66237e3be73c264736f6c634300080f0033" diff --git a/bindings/trivialapp/TrivialApp.go b/bindings/trivialapp/TrivialApp.go index 70af383..9672d03 100644 --- a/bindings/trivialapp/TrivialApp.go +++ b/bindings/trivialapp/TrivialApp.go @@ -79,7 +79,7 @@ type ChannelSubAlloc struct { // TrivialappMetaData contains all meta data concerning the Trivialapp contract. var TrivialappMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"challengeDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"ethAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ccAddress\",\"type\":\"bytes\"}],\"internalType\":\"structChannel.Participant[]\",\"name\":\"participants\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"app\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"ledgerChannel\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"virtualChannel\",\"type\":\"bool\"}],\"internalType\":\"structChannel.Params\",\"name\":\"params\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"channelID\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"ethHolder\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ccHolder\",\"type\":\"bytes\"}],\"internalType\":\"structChannel.Asset[]\",\"name\":\"assets\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"backends\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"balances\",\"type\":\"uint256[][]\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"ID\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint16[]\",\"name\":\"indexMap\",\"type\":\"uint16[]\"}],\"internalType\":\"structChannel.SubAlloc[]\",\"name\":\"locked\",\"type\":\"tuple[]\"}],\"internalType\":\"structChannel.Allocation\",\"name\":\"outcome\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"appData\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"isFinal\",\"type\":\"bool\"}],\"internalType\":\"structChannel.State\",\"name\":\"from\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"channelID\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"ethHolder\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ccHolder\",\"type\":\"bytes\"}],\"internalType\":\"structChannel.Asset[]\",\"name\":\"assets\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"backends\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"balances\",\"type\":\"uint256[][]\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"ID\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint16[]\",\"name\":\"indexMap\",\"type\":\"uint16[]\"}],\"internalType\":\"structChannel.SubAlloc[]\",\"name\":\"locked\",\"type\":\"tuple[]\"}],\"internalType\":\"structChannel.Allocation\",\"name\":\"outcome\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"appData\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"isFinal\",\"type\":\"bool\"}],\"internalType\":\"structChannel.State\",\"name\":\"to\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"actorIdx\",\"type\":\"uint256\"}],\"name\":\"validTransition\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b5061011c806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c806318dc6c0014602d575b600080fd5b603e60383660046057565b50505050565b005b600060a08284031215605157600080fd5b50919050565b60008060008060808587031215606c57600080fd5b843567ffffffffffffffff80821115608357600080fd5b9086019060c08289031215609657600080fd5b9094506020860135908082111560ab57600080fd5b60b5888389016040565b9450604087013591508082111560ca57600080fd5b5060d5878288016040565b94979396509394606001359350505056fea2646970667358221220e3a5ba7c9056e07ef923d220ac312c1d3ad685d3cad7ebb5a487bd290dfec78964736f6c634300080f0033", + Bin: "0x608060405234801561001057600080fd5b5061011c806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c806318dc6c0014602d575b600080fd5b603e60383660046057565b50505050565b005b600060a08284031215605157600080fd5b50919050565b60008060008060808587031215606c57600080fd5b843567ffffffffffffffff80821115608357600080fd5b9086019060c08289031215609657600080fd5b9094506020860135908082111560ab57600080fd5b60b5888389016040565b9450604087013591508082111560ca57600080fd5b5060d5878288016040565b94979396509394606001359350505056fea26469706673582212205081e797202cb035c07d4df0f6988f47b842ec24f720e8dc1336efef5813300764736f6c634300080f0033", } // TrivialappABI is the input ABI used to generate the binding from. diff --git a/bindings/trivialapp/TrivialAppBinRuntime.go b/bindings/trivialapp/TrivialAppBinRuntime.go index cf9f746..5ddbf66 100644 --- a/bindings/trivialapp/TrivialAppBinRuntime.go +++ b/bindings/trivialapp/TrivialAppBinRuntime.go @@ -1,4 +1,4 @@ package trivialapp // import "github.com/perun-network/perun-eth-backend/bindings/trivialapp" // TrivialAppBinRuntime is the runtime part of the compiled bytecode used for deploying new contracts. -var TrivialAppBinRuntime = "6080604052348015600f57600080fd5b506004361060285760003560e01c806318dc6c0014602d575b600080fd5b603e60383660046057565b50505050565b005b600060a08284031215605157600080fd5b50919050565b60008060008060808587031215606c57600080fd5b843567ffffffffffffffff80821115608357600080fd5b9086019060c08289031215609657600080fd5b9094506020860135908082111560ab57600080fd5b60b5888389016040565b9450604087013591508082111560ca57600080fd5b5060d5878288016040565b94979396509394606001359350505056fea2646970667358221220e3a5ba7c9056e07ef923d220ac312c1d3ad685d3cad7ebb5a487bd290dfec78964736f6c634300080f0033" +var TrivialAppBinRuntime = "6080604052348015600f57600080fd5b506004361060285760003560e01c806318dc6c0014602d575b600080fd5b603e60383660046057565b50505050565b005b600060a08284031215605157600080fd5b50919050565b60008060008060808587031215606c57600080fd5b843567ffffffffffffffff80821115608357600080fd5b9086019060c08289031215609657600080fd5b9094506020860135908082111560ab57600080fd5b60b5888389016040565b9450604087013591508082111560ca57600080fd5b5060d5878288016040565b94979396509394606001359350505056fea26469706673582212205081e797202cb035c07d4df0f6988f47b842ec24f720e8dc1336efef5813300764736f6c634300080f0033" From 5f0c9aa97735392351b621e76512a0e80972a790 Mon Sep 17 00:00:00 2001 From: Sophia Koehler Date: Wed, 18 Dec 2024 10:43:00 +0100 Subject: [PATCH 10/15] chore: Add Maintainers file Signed-off-by: Sophia Koehler --- MAINTAINERS.md | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 MAINTAINERS.md diff --git a/MAINTAINERS.md b/MAINTAINERS.md new file mode 100644 index 0000000..0b46f82 --- /dev/null +++ b/MAINTAINERS.md @@ -0,0 +1,26 @@ +# Maintainers + +## Active Maintainers +| Name | Github | [Discord][_chat_url] | +|-------------------|----------------------------------------------------|----------------| +| Hendrik Amler | [@tinnendo](https://github.com/tinnendo) | hendrik#5345 | +| Jan Bormet | [@janbormet](https://github.com/janbormet) | _.pants | +| Ilja von Hoessle | [@iljabvh](https://github.com/iljabvh) | iljabvh | +| Sophia Koehler | [@sophia1ch](https://github.com/sophia1ch) | sophia#3072 | +| Philipp-Florens Lehwalder | [@cryptphil](https://github.com/cryptphil) | cryptphil | +| Steffen Rattay | [@rmbrt](https://github.com/rmbrt) | rmbrt | +| Minh Huy Tran | [@NhoxxKienn](https://github.com/NhoxxKienn) | NhoxxKienn | +| Jens Winkle | [@DragonDev1906](https://github.com/DragonDev1906) | jens#4601 | + +## Emeritus Maintainers + +| Name | GitHub | [Discord][_chat_url] | +|-------------------|-----------|----------------------| +| Matthias Geihs | [@matthiasgeihs](https://github.com/matthiasgeihs) | mpn#9737 | +| Manoranjith | [@manoranjith](https://github.com/manoranjith) | manoranjith#8124 | +| Sebastian Stammler | [@sebastianst](https://github.com/sebastianst) | | +| Anagha Sukumaran| [@anagha-ks](https://github.com/anagha-ks) | | +| Oliver Tale-Yazdi | [@ggwpez](https://github.com/ggwpez) | | + + +[_chat_url]: https://discord.com/channels/817445017680609340/834052993258225715 \ No newline at end of file From 61a01c7f61a96841c46a960c063bbbdd5aa87dde Mon Sep 17 00:00:00 2001 From: Sophia Koehler Date: Mon, 23 Dec 2024 12:45:32 +0100 Subject: [PATCH 11/15] chore(all): update go-perun dependency and gofmt files Signed-off-by: Sophia Koehler --- channel/adjudicator_test.go | 3 ++- channel/asset.go | 22 +++++++++++++--------- channel/backend.go | 2 +- channel/conclude.go | 1 + channel/contractbackend.go | 3 ++- channel/erc20_depositor.go | 18 ++++++++++-------- channel/eth_depositor.go | 4 ++-- channel/register.go | 1 + channel/register_test.go | 3 ++- channel/subscription.go | 1 + channel/test/adjudicator.go | 5 +++-- channel/test/randomizer.go | 2 +- channel/withdraw.go | 4 ++-- channel/withdraw_test.go | 3 ++- client/payment_test.go | 3 ++- client/subchannel_test.go | 3 ++- client/test/setup.go | 3 ++- go.mod | 6 ++++-- go.sum | 5 +++-- wallet/address.go | 1 + wallet/simple/transactor.go | 1 + 21 files changed, 58 insertions(+), 36 deletions(-) diff --git a/channel/adjudicator_test.go b/channel/adjudicator_test.go index e386808..15e3b8b 100644 --- a/channel/adjudicator_test.go +++ b/channel/adjudicator_test.go @@ -16,10 +16,11 @@ package channel_test import ( "context" - "perun.network/go-perun/wallet" "testing" "time" + "perun.network/go-perun/wallet" + "github.com/ethereum/go-ethereum/common" "github.com/pkg/errors" "github.com/stretchr/testify/assert" diff --git a/channel/asset.go b/channel/asset.go index a797cad..08125c8 100644 --- a/channel/asset.go +++ b/channel/asset.go @@ -54,7 +54,7 @@ func MakeAssetID(id *big.Int) multi.AssetID { if id.Sign() < 0 { panic("must not be smaller than zero") } - return AssetID{backendID: 1, LedgerID: MakeChainID(id)} + return AssetID{backendID: 1, ledgerID: MakeChainID(id)} } // UnmarshalBinary unmarshals the chainID from its binary representation. @@ -85,7 +85,7 @@ type ( AssetID struct { backendID uint32 - LedgerID ChainID + ledgerID ChainID } // AssetMapKey is the map key representation of an asset. @@ -96,8 +96,12 @@ func (id AssetID) BackendID() uint32 { return id.backendID } -func (id AssetID) LedgerId() multi.LedgerID { - return &id.LedgerID +func (id AssetID) ChainID() *big.Int { + return id.ledgerID.Int +} + +func (id AssetID) LedgerID() multi.LedgerID { + return &id.ledgerID } func (a Asset) AssetID() multi.AssetID { @@ -117,7 +121,7 @@ func (a Asset) MapKey() AssetMapKey { // MarshalBinary marshals the asset into its binary representation. func (a Asset) MarshalBinary() ([]byte, error) { var buf bytes.Buffer - err := perunio.Encode(&buf, a.assetID.LedgerID, a.assetID.backendID, &a.AssetHolder) + err := perunio.Encode(&buf, a.assetID.ledgerID, a.assetID.backendID, &a.AssetHolder) if err != nil { return nil, err } @@ -127,12 +131,12 @@ func (a Asset) MarshalBinary() ([]byte, error) { // UnmarshalBinary unmarshals the asset from its binary representation. func (a *Asset) UnmarshalBinary(data []byte) error { buf := bytes.NewBuffer(data) - return perunio.Decode(buf, &a.assetID.LedgerID, &a.assetID.backendID, &a.AssetHolder) + return perunio.Decode(buf, &a.assetID.ledgerID, &a.assetID.backendID, &a.AssetHolder) } // LedgerID returns the ledger ID the asset lives on. func (a Asset) LedgerID() multi.LedgerID { - return a.AssetID().LedgerId() + return a.AssetID().LedgerID() } // NewAsset creates a new asset from an chainID and the AssetHolder address. @@ -152,7 +156,7 @@ func (a Asset) Equal(b channel.Asset) bool { if !ok { return false } - return a.assetID.LedgerID.MapKey() == ethAsset.assetID.LedgerID.MapKey() && a.EthAddress() == ethAsset.EthAddress() + return a.assetID.LedgerID().MapKey() == ethAsset.assetID.LedgerID().MapKey() && a.EthAddress() == ethAsset.EthAddress() } // Address returns the address of the asset. @@ -165,7 +169,7 @@ func (a Asset) Address() []byte { func filterAssets(assets []channel.Asset, chainID ChainID) []channel.Asset { var filtered []channel.Asset for _, asset := range assets { - if a, ok := asset.(*Asset); ok && a.assetID.LedgerID.MapKey() == chainID.MapKey() { //nolint:forcetypeassert // We would have to panic anyways. + if a, ok := asset.(*Asset); ok && a.assetID.LedgerID().MapKey() == chainID.MapKey() { //nolint:forcetypeassert // We would have to panic anyways. filtered = append(filtered, a) } } diff --git a/channel/backend.go b/channel/backend.go index cd2a5cc..510006c 100644 --- a/channel/backend.go +++ b/channel/backend.go @@ -324,7 +324,7 @@ func assetsToEthAssets(assets []channel.Asset, bIDs []wallet.BackendID) []adjudi log.Panicf("wrong address type: %T", a) } cAddrs[i] = adjudicator.ChannelAsset{ - ChainID: asset.assetID.LedgerID.Int, + ChainID: asset.assetID.ChainID(), EthHolder: asset.EthAddress(), CcHolder: make([]byte, 32), } diff --git a/channel/conclude.go b/channel/conclude.go index 21fc891..78d57d4 100644 --- a/channel/conclude.go +++ b/channel/conclude.go @@ -17,6 +17,7 @@ package channel import ( "context" "fmt" + "perun.network/go-perun/wallet" "github.com/ethereum/go-ethereum" diff --git a/channel/contractbackend.go b/channel/contractbackend.go index 0481d48..5fb6df6 100644 --- a/channel/contractbackend.go +++ b/channel/contractbackend.go @@ -17,9 +17,10 @@ package channel import ( "context" "math/big" - "perun.network/go-perun/channel/multi" "sync" + "perun.network/go-perun/channel/multi" + "github.com/ethereum/go-ethereum" "github.com/ethereum/go-ethereum/accounts" "github.com/ethereum/go-ethereum/accounts/abi/bind" diff --git a/channel/erc20_depositor.go b/channel/erc20_depositor.go index e36c2cf..0a0d7f0 100644 --- a/channel/erc20_depositor.go +++ b/channel/erc20_depositor.go @@ -42,8 +42,10 @@ type ERC20Depositor struct { const erc20DepositorNumTx = 2 // Keep track of the increase allowance and deposit processes. -var depositLocksMtx sync.Mutex -var depositLocks = make(map[string]*sync.Mutex) +var ( + depositLocksMtx sync.Mutex + depositLocks = make(map[string]*sync.Mutex) +) // DepositResult is created to keep track of the returned values. type DepositResult struct { @@ -71,7 +73,7 @@ func (d *ERC20Depositor) Deposit(ctx context.Context, req DepositReq) (types.Tra var depResult DepositResult txApproval, approvalReceived, errApproval := d.Approve(ctx, lock, req, callOpts) if errApproval != nil { - return nil, errors.WithMessagef(errApproval, "approving asset: %x", req.Asset) + return nil, errors.WithMessagef(errApproval, "approving asset: %v", req.Asset) } if approvalReceived { txDeposit, err := d.DepositOnly(ctx, req) @@ -89,12 +91,12 @@ func (d *ERC20Depositor) DepositOnly(ctx context.Context, req DepositReq) (*type // Bind a `AssetHolderERC20` instance. assetholder, err := assetholdererc20.NewAssetholdererc20(req.Asset.EthAddress(), req.CB) if err != nil { - return nil, errors.Wrapf(err, "binding AssetHolderERC20 contract at: %x", req.Asset) + return nil, errors.Wrapf(err, "binding AssetHolderERC20 contract at: %v", req.Asset) } // Deposit. opts, err := req.CB.NewTransactor(ctx, d.GasLimit, req.Account) if err != nil { - return nil, errors.WithMessagef(err, "creating transactor for asset: %x", req.Asset) + return nil, errors.WithMessagef(err, "creating transactor for asset: %v", req.Asset) } tx, err := assetholder.Deposit(opts, req.FundingID, req.Balance) @@ -119,7 +121,7 @@ func (d *ERC20Depositor) Approve(ctx context.Context, lock *sync.Mutex, req Depo allowance, err := token.Allowance(&callOpts, req.Account.Address, req.Asset.EthAddress()) if err != nil { - return nil, false, errors.WithMessagef(err, "could not get Allowance for asset: %x", req.Asset) + return nil, false, errors.WithMessagef(err, "could not get Allowance for asset: %v", req.Asset) } result := new(big.Int).Add(req.Balance, allowance) @@ -127,7 +129,7 @@ func (d *ERC20Depositor) Approve(ctx context.Context, lock *sync.Mutex, req Depo // Increase the allowance. opts, err := req.CB.NewTransactor(ctx, d.GasLimit, req.Account) if err != nil { - return nil, false, errors.WithMessagef(err, "creating transactor for asset: %x", req.Asset) + return nil, false, errors.WithMessagef(err, "creating transactor for asset: %v", req.Asset) } // Create a channel for receiving PeruntokenApproval events eventSink := make(chan *peruntoken.PeruntokenApproval) @@ -143,7 +145,7 @@ func (d *ERC20Depositor) Approve(ctx context.Context, lock *sync.Mutex, req Depo tx, err := token.Approve(opts, req.Asset.EthAddress(), result) if err != nil { err = cherrors.CheckIsChainNotReachableError(err) - return nil, false, errors.WithMessagef(err, "increasing allowance for asset: %x", req.Asset) + return nil, false, errors.WithMessagef(err, "increasing allowance for asset: %v", req.Asset) } var approvalReceived bool diff --git a/channel/eth_depositor.go b/channel/eth_depositor.go index 0f7a0e8..cbb11ca 100644 --- a/channel/eth_depositor.go +++ b/channel/eth_depositor.go @@ -44,11 +44,11 @@ func (d *ETHDepositor) Deposit(ctx context.Context, req DepositReq) (types.Trans // since we only use the interface functions here. contract, err := assetholdereth.NewAssetholdereth(req.Asset.EthAddress(), req.CB) if err != nil { - return nil, errors.Wrapf(err, "binding AssetHolderETH contract at: %x", req.Asset) + return nil, errors.Wrapf(err, "binding AssetHolderETH contract at: %v", req.Asset) } opts, err := req.CB.NewTransactor(ctx, d.GasLimit, req.Account) if err != nil { - return nil, errors.WithMessagef(err, "creating transactor for asset: %x", req.Asset) + return nil, errors.WithMessagef(err, "creating transactor for asset: %v", req.Asset) } opts.Value = req.Balance diff --git a/channel/register.go b/channel/register.go index 036af44..a0cd632 100644 --- a/channel/register.go +++ b/channel/register.go @@ -16,6 +16,7 @@ package channel import ( "context" + "perun.network/go-perun/log" "github.com/pkg/errors" diff --git a/channel/register_test.go b/channel/register_test.go index 446c7b9..c3372e2 100644 --- a/channel/register_test.go +++ b/channel/register_test.go @@ -17,11 +17,12 @@ package channel_test import ( "context" "fmt" - "perun.network/go-perun/wallet" "sync" "testing" "time" + "perun.network/go-perun/wallet" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" diff --git a/channel/subscription.go b/channel/subscription.go index 1d66b53..3b210fe 100644 --- a/channel/subscription.go +++ b/channel/subscription.go @@ -18,6 +18,7 @@ import ( "context" "log" "math/big" + perunwallet "perun.network/go-perun/wallet" "github.com/ethereum/go-ethereum" diff --git a/channel/test/adjudicator.go b/channel/test/adjudicator.go index 5fee8d1..7921a48 100644 --- a/channel/test/adjudicator.go +++ b/channel/test/adjudicator.go @@ -17,16 +17,17 @@ package test import ( "context" "fmt" - "perun.network/go-perun/wallet" + "log" "time" + "perun.network/go-perun/wallet" + "github.com/ethereum/go-ethereum/accounts" "github.com/ethereum/go-ethereum/common" ethchannel "github.com/perun-network/perun-eth-backend/channel" "github.com/pkg/errors" "perun.network/go-perun/channel" - "perun.network/go-perun/log" ) // A SimAdjudicator is an Adjudicator for simulated backends. Its Register diff --git a/channel/test/randomizer.go b/channel/test/randomizer.go index cecb066..923d934 100644 --- a/channel/test/randomizer.go +++ b/channel/test/randomizer.go @@ -35,7 +35,7 @@ func (randomizer) NewRandomAsset(rng *rand.Rand) channel.Asset { func NewRandomAsset(rng *rand.Rand) *ethchannel.Asset { chainID := NewRandomChainID(rng) asset := ethwtest.NewRandomAddress(rng) - return ethchannel.NewAsset(chainID.LedgerID.Int, common.Address(asset)) + return ethchannel.NewAsset(chainID.ChainID(), common.Address(asset)) } // NewRandomChainID returns a new random AssetID. diff --git a/channel/withdraw.go b/channel/withdraw.go index 6bfabac..65c4c7a 100644 --- a/channel/withdraw.go +++ b/channel/withdraw.go @@ -17,13 +17,14 @@ package channel import ( "context" "fmt" + "math/big" + "github.com/ethereum/go-ethereum/accounts/abi" "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/pkg/errors" "golang.org/x/sync/errgroup" - "math/big" "github.com/perun-network/perun-eth-backend/bindings" "github.com/perun-network/perun-eth-backend/bindings/assetholder" @@ -186,7 +187,6 @@ func (a *Adjudicator) newWithdrawalAuth(request channel.AdjudicatorReq, asset as } func encodeAssetHolderWithdrawalAuth(a assetholder.AssetHolderWithdrawalAuth) ([]byte, error) { - // Define the top-level ABI type for the Authorization struct. authorizationType, err := abi.NewType("tuple", "tuple(bytes32 channelID, tuple(address ethAddress, bytes ccAddress) participant, address receiver, uint256 amount)", []abi.ArgumentMarshaling{ {Name: "channelID", Type: "bytes32"}, diff --git a/channel/withdraw_test.go b/channel/withdraw_test.go index 50ad047..dd25cea 100644 --- a/channel/withdraw_test.go +++ b/channel/withdraw_test.go @@ -17,11 +17,12 @@ package channel_test import ( "context" "fmt" - "perun.network/go-perun/wallet" "sync" "testing" "time" + "perun.network/go-perun/wallet" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" diff --git a/client/payment_test.go b/client/payment_test.go index fc860cc..ce62927 100644 --- a/client/payment_test.go +++ b/client/payment_test.go @@ -17,11 +17,12 @@ package client_test import ( "context" "math/big" - perunwallet "perun.network/go-perun/wallet" "sync" "testing" "time" + perunwallet "perun.network/go-perun/wallet" + "github.com/ethereum/go-ethereum/common" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" diff --git a/client/subchannel_test.go b/client/subchannel_test.go index 98107bd..e539880 100644 --- a/client/subchannel_test.go +++ b/client/subchannel_test.go @@ -17,9 +17,10 @@ package client_test import ( "context" "math/big" - "perun.network/go-perun/wallet" "testing" + "perun.network/go-perun/wallet" + ethchanneltest "github.com/perun-network/perun-eth-backend/channel/test" ethclienttest "github.com/perun-network/perun-eth-backend/client/test" "perun.network/go-perun/apps/payment" diff --git a/client/test/setup.go b/client/test/setup.go index e2e4883..612b5df 100644 --- a/client/test/setup.go +++ b/client/test/setup.go @@ -16,9 +16,10 @@ package test import ( "math/rand" + "time" + "perun.network/go-perun/wallet" wtest "perun.network/go-perun/wallet/test" - "time" ethctest "github.com/perun-network/perun-eth-backend/channel/test" ethwtest "github.com/perun-network/perun-eth-backend/wallet/test" diff --git a/go.mod b/go.mod index ba81d74..08b36d4 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,8 @@ module github.com/perun-network/perun-eth-backend -go 1.19 +go 1.22 + +toolchain go1.22.0 require ( github.com/ethereum/go-ethereum v1.10.12 @@ -9,7 +11,7 @@ require ( github.com/sirupsen/logrus v1.8.1 github.com/stretchr/testify v1.7.0 golang.org/x/sync v0.0.0-20210220032951-036812b2e83c - perun.network/go-perun v0.11.1-0.20241106101254-39095c144884 + perun.network/go-perun v0.12.1-0.20241223112511-d463e822db12 polycry.pt/poly-go v0.0.0-20220301085937-fb9d71b45a37 ) diff --git a/go.sum b/go.sum index b630447..6c1dacd 100644 --- a/go.sum +++ b/go.sum @@ -402,6 +402,7 @@ go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI= +go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -645,8 +646,8 @@ honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= -perun.network/go-perun v0.11.1-0.20241106101254-39095c144884 h1:BhqP2zp//z0+r+JMM+WFCC8UxV8otSItDgWe7PIQpIk= -perun.network/go-perun v0.11.1-0.20241106101254-39095c144884/go.mod h1:mkmgZ/EQ7EPpDprFkg5+0Cz+QEIJb4SezkDdEPyKtVI= +perun.network/go-perun v0.12.1-0.20241223112511-d463e822db12 h1:wLiF8lSX+rrnO4W359gxbW8FH2HilEb3LGzeqGLnj68= +perun.network/go-perun v0.12.1-0.20241223112511-d463e822db12/go.mod h1:uH8iwi75alXDizxxDzH0A+6uqXPbagCpKfl8ECMv/cA= polycry.pt/poly-go v0.0.0-20220301085937-fb9d71b45a37 h1:iA5GzEa/hHfVlQpimEjPV09NATwHXxSjWNB0VVodtew= polycry.pt/poly-go v0.0.0-20220301085937-fb9d71b45a37/go.mod h1:XUBrNtqgEhN3EEOP/5gh7IBd3xVHKidCjXDZfl9+kMU= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= diff --git a/wallet/address.go b/wallet/address.go index 0eefa67..af5aa3c 100644 --- a/wallet/address.go +++ b/wallet/address.go @@ -17,6 +17,7 @@ package wallet import ( "bytes" "fmt" + "github.com/perun-network/perun-eth-backend/bindings/assetholder" "github.com/ethereum/go-ethereum/common" diff --git a/wallet/simple/transactor.go b/wallet/simple/transactor.go index 866b8a4..ba1e5f3 100644 --- a/wallet/simple/transactor.go +++ b/wallet/simple/transactor.go @@ -16,6 +16,7 @@ package simple import ( stderrors "errors" + "github.com/ethereum/go-ethereum/accounts" "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" From 3f500a6f769d7f09995d0bfc1c861b0a05990002 Mon Sep 17 00:00:00 2001 From: Sophia Koehler Date: Mon, 23 Dec 2024 12:48:51 +0100 Subject: [PATCH 12/15] fix: delete toolchain directive Signed-off-by: Sophia Koehler --- go.mod | 2 -- 1 file changed, 2 deletions(-) diff --git a/go.mod b/go.mod index 08b36d4..a7a2bda 100644 --- a/go.mod +++ b/go.mod @@ -2,8 +2,6 @@ module github.com/perun-network/perun-eth-backend go 1.22 -toolchain go1.22.0 - require ( github.com/ethereum/go-ethereum v1.10.12 github.com/miguelmota/go-ethereum-hdwallet v0.1.1 From 639ef811f41d47b05185fd169ea5ec6830811c62 Mon Sep 17 00:00:00 2001 From: Sophia Koehler Date: Mon, 30 Dec 2024 15:39:59 +0100 Subject: [PATCH 13/15] chore(all): Add comments Signed-off-by: Sophia Koehler --- channel/asset.go | 6 +++++- channel/backend.go | 6 +++--- channel/backend_test.go | 3 ++- channel/funder.go | 2 ++ channel/funder_test.go | 5 +++-- wallet/address.go | 3 ++- 6 files changed, 17 insertions(+), 8 deletions(-) diff --git a/channel/asset.go b/channel/asset.go index 08125c8..0c1acb9 100644 --- a/channel/asset.go +++ b/channel/asset.go @@ -92,18 +92,22 @@ type ( AssetMapKey string ) +// BackendID returns the backend ID of the asset. func (id AssetID) BackendID() uint32 { return id.backendID } +// ChainID returns the chain ID of the asset. func (id AssetID) ChainID() *big.Int { return id.ledgerID.Int } +// LedgerID returns the ledger ID of the asset. func (id AssetID) LedgerID() multi.LedgerID { return &id.ledgerID } +// AssetID returns the asset ID of the asset. func (a Asset) AssetID() multi.AssetID { return a.assetID } @@ -169,7 +173,7 @@ func (a Asset) Address() []byte { func filterAssets(assets []channel.Asset, chainID ChainID) []channel.Asset { var filtered []channel.Asset for _, asset := range assets { - if a, ok := asset.(*Asset); ok && a.assetID.LedgerID().MapKey() == chainID.MapKey() { //nolint:forcetypeassert // We would have to panic anyways. + if a, ok := asset.(*Asset); ok && a.assetID.LedgerID().MapKey() == chainID.MapKey() { filtered = append(filtered, a) } } diff --git a/channel/backend.go b/channel/backend.go index 510006c..31a11da 100644 --- a/channel/backend.go +++ b/channel/backend.go @@ -256,7 +256,7 @@ func pwToCommonAddresses(addr []map[wallet.BackendID]wallet.Address) []adjudicat } cAddrs[i].CcAddress = addBytes } else { - cAddrs[i].CcAddress = make([]byte, 32) + cAddrs[i].CcAddress = make([]byte, 32) //nolint:gomnd } } return cAddrs @@ -326,7 +326,7 @@ func assetsToEthAssets(assets []channel.Asset, bIDs []wallet.BackendID) []adjudi cAddrs[i] = adjudicator.ChannelAsset{ ChainID: asset.assetID.ChainID(), EthHolder: asset.EthAddress(), - CcHolder: make([]byte, 32), + CcHolder: make([]byte, 32), //nolint:gomnd } } else { asset, err := a.MarshalBinary() @@ -334,7 +334,7 @@ func assetsToEthAssets(assets []channel.Asset, bIDs []wallet.BackendID) []adjudi log.Panicf("error encoding asset: %v", err) } cAddrs[i] = adjudicator.ChannelAsset{ - ChainID: big.NewInt(2), + ChainID: big.NewInt(2), //nolint:gomnd EthHolder: common.HexToAddress("0x0000000000000000000000000000000000000000"), CcHolder: asset, } diff --git a/channel/backend_test.go b/channel/backend_test.go index 83a7d16..5f8ae21 100644 --- a/channel/backend_test.go +++ b/channel/backend_test.go @@ -100,7 +100,8 @@ func testCalcID(t *testing.T, rng *rand.Rand, contr *adjudicator.Adjudicator, op } assert.Panics(t, func() { - channel.CalcID(nil) + _, err := channel.CalcID(nil) + require.NoError(t, err) }) } diff --git a/channel/funder.go b/channel/funder.go index 833cb4a..9869356 100644 --- a/channel/funder.go +++ b/channel/funder.go @@ -139,6 +139,8 @@ func (f *Funder) IsAssetRegistered(asset Asset) (Depositor, accounts.Account, bo // If funding on a real blockchain, make sure that the passed context doesn't // cancel before the funding period of length ChallengeDuration elapses, or // funding will be canceled prematurely. +// +//nolint:funlen func (f *Funder) Fund(ctx context.Context, request channel.FundingReq) error { f.mtx.RLock() defer f.mtx.RUnlock() diff --git a/channel/funder_test.go b/channel/funder_test.go index 4b6614e..6bfb70a 100644 --- a/channel/funder_test.go +++ b/channel/funder_test.go @@ -17,6 +17,7 @@ package channel_test import ( "context" "fmt" + "log" "math" "math/big" "math/rand" @@ -509,12 +510,12 @@ func newNFunders( // fundERC20 funds `to` with ERC20 tokens from account `from`. func fundERC20(ctx context.Context, cb ethchannel.ContractBackend, from accounts.Account, to common.Address, token common.Address, asset ethchannel.Asset) error { - fmt.Println("Funding ERC20") + log.Println("Funding ERC20") contract, err := peruntoken.NewPeruntoken(token, cb) if err != nil { return errors.WithMessagef(err, "binding AssetHolderERC20 contract at: %v", asset) } - fmt.Println("Contract created") + log.Println("Contract created") // Transfer. opts, err := cb.NewTransactor(ctx, txERC20GasLimit, from) if err != nil { diff --git a/wallet/address.go b/wallet/address.go index af5aa3c..daa551e 100644 --- a/wallet/address.go +++ b/wallet/address.go @@ -103,7 +103,7 @@ func AsEthAddr(a wallet.Address) common.Address { return common.Address(*addrTyped) } -// AsChannelParticipant is a helper function to convert a map of address interfaces back into a channelParticipant +// AsChannelParticipant is a helper function to convert a map of address interfaces back into a channelParticipant. func AsChannelParticipant(a map[wallet.BackendID]wallet.Address) assetholder.ChannelParticipant { _a := assetholder.ChannelParticipant{} for i, address := range a { @@ -130,6 +130,7 @@ func AsWalletAddr(addr common.Address) *Address { return (*Address)(&addr) } +// AddressMapfromAccountMap converts a map of accounts to a map of addresses. func AddressMapfromAccountMap(accs map[wallet.BackendID]wallet.Account) map[wallet.BackendID]wallet.Address { addresses := make(map[wallet.BackendID]wallet.Address) for id, a := range accs { From d9f34d97ca0669d63dd5a00cfdf61b524ccd08a6 Mon Sep 17 00:00:00 2001 From: Sophia Koehler Date: Mon, 30 Dec 2024 15:51:30 +0100 Subject: [PATCH 14/15] chore(all): Add comments Signed-off-by: Sophia Koehler --- channel/asset.go | 3 ++- channel/contractbackend.go | 2 +- channel/funder_test.go | 3 --- client/test/multiledger.go | 1 + 4 files changed, 4 insertions(+), 5 deletions(-) diff --git a/channel/asset.go b/channel/asset.go index 0c1acb9..a49b302 100644 --- a/channel/asset.go +++ b/channel/asset.go @@ -83,6 +83,7 @@ type ( AssetHolder wallet.Address } + // AssetID is the unique identifier of an asset. AssetID struct { backendID uint32 ledgerID ChainID @@ -145,7 +146,7 @@ func (a Asset) LedgerID() multi.LedgerID { // NewAsset creates a new asset from an chainID and the AssetHolder address. func NewAsset(chainID *big.Int, assetHolder common.Address) *Asset { - id := MakeAssetID(chainID).(AssetID) + id := MakeAssetID(chainID).(AssetID) //nolint: forcetypeassert // AssetID implements multi.AssetID return &Asset{assetID: id, AssetHolder: *wallet.AsWalletAddr(assetHolder)} } diff --git a/channel/contractbackend.go b/channel/contractbackend.go index 5fb6df6..463f26e 100644 --- a/channel/contractbackend.go +++ b/channel/contractbackend.go @@ -99,7 +99,7 @@ func NewContractBackend(cf ContractInterface, chainID ChainID, tr Transactor, tx } } -// AssetID returns the chain identifier of the contract backend. +// ChainID returns the chain identifier of the contract backend. func (c *ContractBackend) ChainID() ChainID { return c.chainID } diff --git a/channel/funder_test.go b/channel/funder_test.go index 6bfb70a..ef92362 100644 --- a/channel/funder_test.go +++ b/channel/funder_test.go @@ -17,7 +17,6 @@ package channel_test import ( "context" "fmt" - "log" "math" "math/big" "math/rand" @@ -510,12 +509,10 @@ func newNFunders( // fundERC20 funds `to` with ERC20 tokens from account `from`. func fundERC20(ctx context.Context, cb ethchannel.ContractBackend, from accounts.Account, to common.Address, token common.Address, asset ethchannel.Asset) error { - log.Println("Funding ERC20") contract, err := peruntoken.NewPeruntoken(token, cb) if err != nil { return errors.WithMessagef(err, "binding AssetHolderERC20 contract at: %v", asset) } - log.Println("Contract created") // Transfer. opts, err := cb.NewTransactor(ctx, txERC20GasLimit, from) if err != nil { diff --git a/client/test/multiledger.go b/client/test/multiledger.go index 7ddb428..408357a 100644 --- a/client/test/multiledger.go +++ b/client/test/multiledger.go @@ -100,6 +100,7 @@ type testLedger struct { asset *ethchannel.Asset } +// AssetID returns the asset ID of the ledger. func (l testLedger) AssetID() multi.AssetID { return ethchannel.MakeAssetID(ethchannel.MakeChainID(l.simSetup.SimBackend.ChainID()).Int) } From a30c3f0ba2dbf731fa7e8ceccac226bed653ec45 Mon Sep 17 00:00:00 2001 From: Sophia Koehler Date: Mon, 30 Dec 2024 16:12:33 +0100 Subject: [PATCH 15/15] fix: increase test timeout Signed-off-by: Sophia Koehler --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 19fce03..a7b949d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -75,7 +75,7 @@ jobs: ${{ runner.os }}-go- - name: go test - run: go test -timeout 60s ./... + run: go test -timeout 80s ./... race-test: name: Race Test