From 74b849356c44d973a96b77c96d2aa5e8c3dd43a1 Mon Sep 17 00:00:00 2001 From: Ilja von Hoessle Date: Thu, 9 Mar 2023 21:16:02 +0100 Subject: [PATCH 01/16] payment-channel: Update go-perun methods used in client for compatibility to go-perun 0.10.6 * client: Modify go-perun methods * workflow: Set ganache to latest Signed-off-by: Ilja von Hoessle --- .github/workflows/ci.yml | 30 +++++++++++++-------------- payment-channel/client/channel.go | 7 ++----- payment-channel/client/client.go | 34 ++++++++++++++++--------------- payment-channel/client/handle.go | 21 +++++++++---------- payment-channel/client/util.go | 19 +++++++++-------- payment-channel/go.mod | 6 ++++-- payment-channel/go.sum | 28 ++++++------------------- payment-channel/main.go | 2 +- payment-channel/util.go | 9 ++++---- 9 files changed, 72 insertions(+), 84 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 643ea9d..5074aac 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,7 +6,7 @@ jobs: name: Test Examples runs-on: ubuntu-latest env: - gananache-image: trufflesuite/ganache-cli:v6.12.2 + ganache-image: trufflesuite/ganache-cli:v6.12.2 steps: - uses: actions/checkout@v3 @@ -22,16 +22,16 @@ jobs: key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} restore-keys: | ${{ runner.os }}-go- - + - name: Pull ganache-cli image - run: docker pull ${{ env.gananache-image }} + run: docker pull ${{ env.ganache-image }} - name: Simple Client working-directory: simple-client env: MNEMONIC: pistol kiwi shrug future ozone ostrich match remove crucial oblige cream critic run: | - docker run --rm --name ganache --detach --publish 8545:8545 ${{ env.gananache-image }} -b 5 -a 2 -m "$MNEMONIC" + docker run --rm --name ganache --detach --publish 8545:8545 ${{ env.ganache-image }} -b 5 -a 2 -m "$MNEMONIC" sleep 5 go run . docker stop ganache @@ -39,12 +39,12 @@ jobs: - name: Payment Channel ETH working-directory: payment-channel env: - KEY_DEPLOYER: '0x79ea8f62d97bc0591a4224c1725fca6b00de5b2cea286fe2e0bb35c5e76be46e' - KEY_ALICE: '0x1af2e950272dd403de7a5760d41c6e44d92b6d02797e51810795ff03cc2cda4f' - KEY_BOB: '0xf63d7d8e930bccd74e93cf5662fde2c28fd8be95edb70c73f1bdd863d07f412e' - BALANCE: '10000000000000000000' + KEY_DEPLOYER: "0x79ea8f62d97bc0591a4224c1725fca6b00de5b2cea286fe2e0bb35c5e76be46e" + KEY_ALICE: "0x1af2e950272dd403de7a5760d41c6e44d92b6d02797e51810795ff03cc2cda4f" + KEY_BOB: "0xf63d7d8e930bccd74e93cf5662fde2c28fd8be95edb70c73f1bdd863d07f412e" + BALANCE: "10000000000000000000" run: | - docker run --rm --name ganache --detach --publish 8545:8545 ${{ env.gananache-image }} --account $KEY_DEPLOYER,$BALANCE --account $KEY_ALICE,$BALANCE --account $KEY_BOB,$BALANCE --blockTime=5 + docker run --rm --name ganache --detach --publish 8545:8545 trufflesuite/ganache:latest --account $KEY_DEPLOYER,$BALANCE --account $KEY_ALICE,$BALANCE --account $KEY_BOB,$BALANCE --blockTime=5 --gasPrice=0 sleep 5 go run . docker stop ganache @@ -60,12 +60,12 @@ jobs: - name: App Channel working-directory: app-channel env: - KEY_DEPLOYER: '0x79ea8f62d97bc0591a4224c1725fca6b00de5b2cea286fe2e0bb35c5e76be46e' - KEY_ALICE: '0x1af2e950272dd403de7a5760d41c6e44d92b6d02797e51810795ff03cc2cda4f' - KEY_BOB: '0xf63d7d8e930bccd74e93cf5662fde2c28fd8be95edb70c73f1bdd863d07f412e' - BALANCE: '10000000000000000000' + KEY_DEPLOYER: "0x79ea8f62d97bc0591a4224c1725fca6b00de5b2cea286fe2e0bb35c5e76be46e" + KEY_ALICE: "0x1af2e950272dd403de7a5760d41c6e44d92b6d02797e51810795ff03cc2cda4f" + KEY_BOB: "0xf63d7d8e930bccd74e93cf5662fde2c28fd8be95edb70c73f1bdd863d07f412e" + BALANCE: "10000000000000000000" run: | - docker run --rm --name ganache --detach --publish 8545:8545 ${{ env.gananache-image }} --account $KEY_DEPLOYER,$BALANCE --account $KEY_ALICE,$BALANCE --account $KEY_BOB,$BALANCE --blockTime=5 + docker run --rm --name ganache --detach --publish 8545:8545 ${{ env.ganache-image }} --account $KEY_DEPLOYER,$BALANCE --account $KEY_ALICE,$BALANCE --account $KEY_BOB,$BALANCE --blockTime=5 sleep 5 go run . docker stop ganache @@ -73,7 +73,7 @@ jobs: - name: Collateralized Channels working-directory: collateralized-channels env: - GANACHE_CMD: "docker run --name ganache --rm --publish 8545:8545 ${{ env.gananache-image }}" + GANACHE_CMD: "docker run --name ganache --rm --publish 8545:8545 ${{ env.ganache-image }}" run: | go test -v -timeout 60s . docker stop ganache || true # Cleanup diff --git a/payment-channel/client/channel.go b/payment-channel/client/channel.go index 13949f6..bf21f05 100644 --- a/payment-channel/client/channel.go +++ b/payment-channel/client/channel.go @@ -3,7 +3,6 @@ package client import ( "context" "math/big" - "perun.network/go-perun/channel" "perun.network/go-perun/client" ) @@ -26,12 +25,11 @@ func newPaymentChannel(ch *client.Channel, currency channel.Asset) *PaymentChann func (c PaymentChannel) SendPayment(amount float64) { // Transfer the given amount from us to peer. // Use UpdateBy to update the channel state. - err := c.ch.UpdateBy(context.TODO(), func(state *channel.State) error { // We use context.TODO to keep the code simple. + err := c.ch.Update(context.TODO(), func(state *channel.State) { // We use context.TODO to keep the code simple. ethAmount := EthToWei(big.NewFloat(amount)) actor := c.ch.Idx() peer := 1 - actor state.Allocation.TransferBalance(actor, peer, c.currency, ethAmount) - return nil }) if err != nil { panic(err) // We panic on error to keep the code simple. @@ -42,9 +40,8 @@ func (c PaymentChannel) SendPayment(amount float64) { func (c PaymentChannel) Settle() { // Finalize the channel to enable fast settlement. if !c.ch.State().IsFinal { - err := c.ch.UpdateBy(context.TODO(), func(state *channel.State) error { + err := c.ch.Update(context.TODO(), func(state *channel.State) { state.IsFinal = true - return nil }) if err != nil { panic(err) diff --git a/payment-channel/client/client.go b/payment-channel/client/client.go index 7ef0cd8..6aa696c 100644 --- a/payment-channel/client/client.go +++ b/payment-channel/client/client.go @@ -19,9 +19,11 @@ import ( "fmt" "math/big" - ethchannel "perun.network/go-perun/backend/ethereum/channel" - ethwallet "perun.network/go-perun/backend/ethereum/wallet" - swallet "perun.network/go-perun/backend/ethereum/wallet/simple" + ethchannel "github.com/perun-network/perun-eth-backend/channel" + ethwallet "github.com/perun-network/perun-eth-backend/wallet" + swallet "github.com/perun-network/perun-eth-backend/wallet/simple" + ethwire "github.com/perun-network/perun-eth-backend/wire" + "perun.network/go-perun/channel" "perun.network/go-perun/client" "perun.network/go-perun/wallet" @@ -33,14 +35,11 @@ import ( "github.com/pkg/errors" ) -const ( - txFinalityDepth = 1 // Number of blocks required to confirm a transaction. -) - // PaymentClient is a payment channel client. type PaymentClient struct { - perunClient *client.Client // The core Perun client. - account wallet.Address // The account we use for on-chain and off-chain transactions. + perunClient *client.Client // The core Perun client. + account wallet.Address // The account we use for on-chain and off-chain transactions. + waddress wire.Address currency channel.Asset // The currency we expect to get paid in. channels chan *PaymentChannel // Accepted payment channels. } @@ -50,10 +49,11 @@ func SetupPaymentClient( bus wire.Bus, // bus is used of off-chain communication. w *swallet.Wallet, // w is the wallet used for signing transactions. acc common.Address, // acc is the address of the account to be used for signing transactions. + eaddress *ethwallet.Address, // eaddress is the address of the Ethereum account to be used for signing transactions. nodeURL string, // nodeURL is the URL of the blockchain node. chainID uint64, // chainID is the identifier of the blockchain. adjudicator common.Address, // adjudicator is the address of the adjudicator. - asset ethwallet.Address, // asset is the address of the asset holder for our payment channels. + assetaddr ethwallet.Address, // asset is the address of the asset holder for our payment channels. ) (*PaymentClient, error) { // Create Ethereum client and contract backend. cb, err := CreateContractBackend(nodeURL, chainID, w) @@ -66,7 +66,7 @@ func SetupPaymentClient( if err != nil { return nil, fmt.Errorf("validating adjudicator: %w", err) } - err = ethchannel.ValidateAssetHolderETH(context.TODO(), cb, common.Address(asset), adjudicator) + err = ethchannel.ValidateAssetHolderETH(context.TODO(), cb, common.Address(assetaddr), adjudicator) if err != nil { return nil, fmt.Errorf("validating adjudicator: %w", err) } @@ -75,7 +75,8 @@ func SetupPaymentClient( funder := ethchannel.NewFunder(cb) dep := ethchannel.NewETHDepositor() ethAcc := accounts.Account{Address: acc} - funder.RegisterAsset(asset, dep, ethAcc) + asset := ethchannel.NewAsset(big.NewInt(int64(chainID)), common.Address(assetaddr)) + funder.RegisterAsset(*asset, dep, ethAcc) // Setup adjudicator. adj := ethchannel.NewAdjudicator(cb, adjudicator, acc, ethAcc) @@ -87,7 +88,7 @@ func SetupPaymentClient( } // Setup Perun client. - waddr := ethwallet.AsWalletAddr(acc) + waddr := ðwire.Address{Address: eaddress} perunClient, err := client.New(waddr, bus, funder, adj, w, watcher) if err != nil { return nil, errors.WithMessage(err, "creating client") @@ -96,8 +97,9 @@ func SetupPaymentClient( // Create client and start request handler. c := &PaymentClient{ perunClient: perunClient, - account: waddr, - currency: &asset, + account: eaddress, + waddress: waddr, + currency: asset, channels: make(chan *PaymentChannel, 1), } go perunClient.Handle(c, c) @@ -110,7 +112,7 @@ func (c *PaymentClient) OpenChannel(peer wire.Address, amount float64) *PaymentC // We define the channel participants. The proposer has always index 0. Here // we use the on-chain addresses as off-chain addresses, but we could also // use different ones. - participants := []wire.Address{c.account, peer} + participants := []wire.Address{c.waddress, peer} // We create an initial allocation which defines the starting balances. initAlloc := channel.NewAllocation(2, c.currency) diff --git a/payment-channel/client/handle.go b/payment-channel/client/handle.go index f6fbb3f..035046a 100644 --- a/payment-channel/client/handle.go +++ b/payment-channel/client/handle.go @@ -19,31 +19,30 @@ import ( "fmt" "log" "math/big" - "perun.network/go-perun/channel" "perun.network/go-perun/client" ) // HandleProposal is the callback for incoming channel proposals. func (c *PaymentClient) HandleProposal(p client.ChannelProposal, r *client.ProposalResponder) { - lcp, err := func() (*client.LedgerChannelProposal, error) { + lcp, err := func() (*client.LedgerChannelProposalMsg, error) { // Ensure that we got a ledger channel proposal. - lcp, ok := p.(*client.LedgerChannelProposal) + lcp, ok := p.(*client.LedgerChannelProposalMsg) if !ok { - return nil, fmt.Errorf("Invalid proposal type: %T\n", p) + return nil, fmt.Errorf("invalid proposal type: %T", p) } // Check that we have the correct number of participants. if lcp.NumPeers() != 2 { - return nil, fmt.Errorf("Invalid number of participants: %d", lcp.NumPeers()) + return nil, fmt.Errorf("invalid number of participants: %d", lcp.NumPeers()) } // Check that the channel has the expected assets and funding balances. const assetIdx, peerIdx = 0, 1 - if err := channel.AssetsAssertEqual(lcp.InitBals.Assets, []channel.Asset{c.currency}); err != nil { - return nil, fmt.Errorf("Invalid assets: %v\n", err) + if err := channel.AssertAssetsEqual(lcp.InitBals.Assets, []channel.Asset{c.currency}); err != nil { + return nil, fmt.Errorf("invalid assets: %v", err) } else if lcp.FundingAgreement[assetIdx][peerIdx].Cmp(big.NewInt(0)) != 0 { - return nil, fmt.Errorf("Invalid funding balance") + return nil, fmt.Errorf("invalid funding balance") } return lcp, nil }() @@ -73,16 +72,16 @@ func (c *PaymentClient) HandleProposal(p client.ChannelProposal, r *client.Propo func (c *PaymentClient) HandleUpdate(cur *channel.State, next client.ChannelUpdate, r *client.UpdateResponder) { // We accept every update that increases our balance. err := func() error { - err := channel.AssetsAssertEqual(cur.Assets, next.State.Assets) + err := channel.AssertAssetsEqual(cur.Assets, next.State.Assets) if err != nil { - return fmt.Errorf("Invalid assets: %v", err) + return fmt.Errorf("invalid assets: %v", err) } receiverIdx := 1 - next.ActorIdx // This works because we are in a two-party channel. curBal := cur.Allocation.Balance(receiverIdx, c.currency) nextBal := next.State.Allocation.Balance(receiverIdx, c.currency) if nextBal.Cmp(curBal) < 0 { - return fmt.Errorf("Invalid balance: %v", nextBal) + return fmt.Errorf("invalid balance: %v", nextBal) } return nil }() diff --git a/payment-channel/client/util.go b/payment-channel/client/util.go index 116daea..28f2b0b 100644 --- a/payment-channel/client/util.go +++ b/payment-channel/client/util.go @@ -15,24 +15,27 @@ package client import ( - "math/big" - "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/ethclient" - ethchannel "perun.network/go-perun/backend/ethereum/channel" - ethwallet "perun.network/go-perun/backend/ethereum/wallet" - swallet "perun.network/go-perun/backend/ethereum/wallet/simple" + ethchannel "github.com/perun-network/perun-eth-backend/channel" + ethwallet "github.com/perun-network/perun-eth-backend/wallet" + swallet "github.com/perun-network/perun-eth-backend/wallet/simple" + "math/big" "perun.network/go-perun/wire" ) +const ( + txFinalityDepth = 1 // Number of blocks required to confirm a transaction. +) + // CreateContractBackend creates a new contract backend. func CreateContractBackend( nodeURL string, chainID uint64, w *swallet.Wallet, ) (ethchannel.ContractBackend, error) { - signer := types.NewEIP155Signer(new(big.Int).SetUint64(chainID)) + signer := types.LatestSignerForChainID(new(big.Int).SetUint64(chainID)) transactor := swallet.NewTransactor(w, signer) ethClient, err := ethclient.Dial(nodeURL) @@ -40,7 +43,7 @@ func CreateContractBackend( return ethchannel.ContractBackend{}, err } - return ethchannel.NewContractBackend(ethClient, transactor, txFinalityDepth), nil + return ethchannel.NewContractBackend(ethClient, ethchannel.MakeChainID(big.NewInt(int64(chainID))), transactor, txFinalityDepth), nil } // WalletAddress returns the wallet address of the client. @@ -50,7 +53,7 @@ func (c *PaymentClient) WalletAddress() common.Address { // WireAddress returns the wire address of the client. func (c *PaymentClient) WireAddress() wire.Address { - return c.account + return c.waddress } // EthToWei converts a given amount in ETH to Wei. diff --git a/payment-channel/go.mod b/payment-channel/go.mod index ec44f49..66d2fda 100644 --- a/payment-channel/go.mod +++ b/payment-channel/go.mod @@ -1,11 +1,12 @@ module perun.network/perun-examples/payment-channel -go 1.17 +go 1.19 require ( github.com/ethereum/go-ethereum v1.10.12 + github.com/perun-network/perun-eth-backend v0.1.0 github.com/pkg/errors v0.9.1 - perun.network/go-perun v0.8.0 + perun.network/go-perun v0.10.6 ) require ( @@ -29,4 +30,5 @@ require ( golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912 // indirect gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c // indirect + polycry.pt/poly-go v0.0.0-20220301085937-fb9d71b45a37 // indirect ) diff --git a/payment-channel/go.sum b/payment-channel/go.sum index 0fd56e0..b4ed635 100644 --- a/payment-channel/go.sum +++ b/payment-channel/go.sum @@ -44,7 +44,6 @@ github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3 github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= -github.com/allegro/bigcache v1.2.1/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= github.com/apache/arrow/go/arrow v0.0.0-20191024131854-af6fa24be0db/go.mod h1:VTxUBvSJ3s3eHAg65PNgrsn5BtqCRPdmyXh6rAfdxN0= github.com/aws/aws-sdk-go-v2 v1.2.0/go.mod h1:zEQs02YRBw1DjK0PoJv3ygDYOFTre1ejlJWl8FwAuQo= @@ -66,7 +65,6 @@ github.com/btcsuite/btcd v0.21.0-beta/go.mod h1:ZSWyehm27aAuS9bvkATT+Xte3hjHZ+MR github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= github.com/btcsuite/btcutil v1.0.2/go.mod h1:j9HUFwoQRsZL3V4n+qG+CUnEGHOarIxfC3Le2Yhbcts= -github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce/go.mod h1:0DVlHczLPewLcPGEIeUEzfOJhqGPQ0mJJRDBtD307+o= github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= github.com/btcsuite/goleveldb v1.0.0/go.mod h1:QiK9vBlgftBg6rWQIj6wFzbPfRjiykIEhBH4obrXJ/I= @@ -105,10 +103,8 @@ github.com/deepmap/oapi-codegen v1.8.2/go.mod h1:YLgSKSDv/bZQB7N4ws6luhozi3cEdRk github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-bitstream v0.0.0-20180413035011-3522498ce2c8/go.mod h1:VMaSuZ+SZcx/wljOQKvp5srsbCiKDEb6K2wC4+PiBmQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= -github.com/dlclark/regexp2 v1.2.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= github.com/docker/docker v1.4.2-0.20180625184442-8e610b2b55bf/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/dop251/goja v0.0.0-20200721192441-a695b0cdd498/go.mod h1:Mw6PkjjMXWbTj+nnj4s3QPXq1jaT0s5pC0iFD4+BOAA= github.com/dop251/goja v0.0.0-20211011172007-d99e4b8cbf48/go.mod h1:R9ET47fwRVRPZnOGvHxxhuZcbrMCuiqOz3Rlrh4KSnk= github.com/dop251/goja_nodejs v0.0.0-20210225215109-d91c329300e7/go.mod h1:hn7BA7c8pLvoGndExHudxTDKZ84Pyvv+90pbBjbTz0Y= github.com/eclipse/paho.mqtt.golang v1.2.0/go.mod h1:H9keYFcgq3Qr5OUJm/JZI/i6U7joQ8SYLhZwfeOo6Ts= @@ -116,7 +112,6 @@ github.com/edsrzf/mmap-go v1.0.0 h1:CEBF7HpRnUCSJgGUb5h1Gm7e3VkmVDrR8lvWVLtrOFw= github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/ethereum/go-ethereum v1.10.4/go.mod h1:nEE0TP5MtxGzOMd7egIrbPJMQBnhVU3ELNxhBglIzhg= github.com/ethereum/go-ethereum v1.10.12 h1:el/KddB3gLEsnNgGQ3SQuZuiZjwnFTYHe5TwUet5Om4= github.com/ethereum/go-ethereum v1.10.12/go.mod h1:W3yfrFyL9C1pHcwY5hmRHVDaorTiQxhYBkKyu5mEDHw= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= @@ -142,7 +137,6 @@ github.com/go-ole/go-ole v1.2.1 h1:2lOsA72HgjxAuMlKpFiCbHTvu44PIVkZ5hqm3RSdI/E= github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-sourcemap/sourcemap v2.1.2+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= github.com/go-sourcemap/sourcemap v2.1.3+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= @@ -169,7 +163,6 @@ github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvq github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= @@ -209,7 +202,6 @@ github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iU github.com/holiman/uint256 v1.2.0 h1:gpSYcPLWGv4sG43I2mVLiDZCNDh/EpGjSk8tmtxitHM= github.com/holiman/uint256 v1.2.0/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/huin/goupnp v1.0.1-0.20210310174557-0ca763054c88/go.mod h1:nNs7wvRfN1eKaMknBydLNQU6146XQim8t4h+q90biWo= github.com/huin/goupnp v1.0.2 h1:RfGLP+h3mvisuWEyybxNq5Eft3NWhHLPeUN72kpKZoI= github.com/huin/goupnp v1.0.2/go.mod h1:0dxJBVBHqTMjIUMkESDTNgOOx/Mw5wYIfyFmdzSamkM= github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= @@ -242,7 +234,6 @@ github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfV github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= github.com/jwilder/encoding v0.0.0-20170811194829-b4e1701a28ef/go.mod h1:Ct9fl0F6iIOGgxJ5npU/IUOhOhqlVrGjyIZc8/MagT0= -github.com/karalabe/usb v0.0.0-20190919080040-51dc0efba356/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= github.com/karalabe/usb v0.0.0-20211005121534-4c5740d64559/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= @@ -269,7 +260,6 @@ github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/matryer/moq v0.0.0-20190312154309-6cfb0558e1bd/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.0/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.8 h1:c1ghPdyEDarC70ftn0y+A/Ee++9zz8ljHG1b13eJ0s8= @@ -277,7 +267,6 @@ github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope github.com/mattn/go-ieproxy v0.0.0-20190610004146-91bb50d98149/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= github.com/mattn/go-ieproxy v0.0.0-20190702010315-6dee0af9227d/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.5-0.20180830101745-3fb116b82035/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= @@ -288,7 +277,6 @@ github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/mattn/go-tty v0.0.0-20180907095812-13ff1204f104/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/miguelmota/go-ethereum-hdwallet v0.1.1/go.mod h1:f9m9uXokAHA6WNoYOPjj4AqjJS5pquQRiYYj/XSyPYc= github.com/mitchellh/mapstructure v1.4.1 h1:CpVNEelQCZBooIPDn+AR3NpivK/TIKU8bDxdASFVQag= github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/pointerstructure v1.2.0 h1:O+i9nHnXS3l/9Wu7r4NrEdwA2VFTicjUEN1uBnDo34A= @@ -315,6 +303,8 @@ github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFSt github.com/opentracing/opentracing-go v1.0.3-0.20180606204148-bd9c31933947/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/paulbellamy/ratecounter v0.2.0/go.mod h1:Hfx1hDpSGoqxkVVpBi/IlYD7kChlfo5C6hzIHwPqfFE= +github.com/perun-network/perun-eth-backend v0.1.0 h1:MySwhdtz7MbwzIeGP5tJqdb6MZRBBKugzMt6nY5YLMs= +github.com/perun-network/perun-eth-backend v0.1.0/go.mod h1:yE+WLgaHzKVBRVsmXB2a9DWj55J8RSM2ippIes7DTns= github.com/peterh/liner v1.0.1-0.20180619022028-8c1271fcf47f/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc= github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= @@ -372,7 +362,6 @@ github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81P github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/syndtr/goleveldb v1.0.1-0.20210305035536-64b5b1c73954/go.mod h1:u2MKkTVTVJWe5D1rCvame8WqhBd88EuIwODJZ1VHCPM= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= @@ -389,13 +378,11 @@ github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+ github.com/willf/bitset v1.1.3/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= 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= @@ -444,7 +431,6 @@ golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181011144130-49bb7cea24b1/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -464,7 +450,6 @@ golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwY golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210220033124-5f55cee0dc0d/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -515,10 +500,8 @@ golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210316164454-77fc1eacc6aa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210420205809-ac73e9fd8988/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912 h1:uCLL3g5wH2xjxVREVuAbP9JM5PPKjRbXKRa6IBjkzmU= golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= @@ -563,7 +546,6 @@ golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapK golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200108203644-89082a384178/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -640,7 +622,9 @@ 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.8.0 h1:ltGjAlv4Ep1WlR4G7xsCuRTw6Tbb1x+otQiZ9Dh20PM= -perun.network/go-perun v0.8.0/go.mod h1:VwcPIRO9hLyhHOjvl+8FZWtgh56c68E/miXGNPe2OdQ= +perun.network/go-perun v0.10.6 h1:uj1e33yfCSfE75DK/uwjNp+TwvGG85Qhi6HuYQ9EPrQ= +perun.network/go-perun v0.10.6/go.mod h1:BGBZC3npkX457u87pjDd0NEIXr1a4dsH4H/YpLdGGe8= +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= rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= diff --git a/payment-channel/main.go b/payment-channel/main.go index 97b7006..f09a589 100644 --- a/payment-channel/main.go +++ b/payment-channel/main.go @@ -17,7 +17,7 @@ package main import ( "log" - ethwallet "perun.network/go-perun/backend/ethereum/wallet" + ethwallet "github.com/perun-network/perun-eth-backend/wallet" "perun.network/go-perun/wire" ) diff --git a/payment-channel/util.go b/payment-channel/util.go index 27d99d5..b552f90 100644 --- a/payment-channel/util.go +++ b/payment-channel/util.go @@ -18,14 +18,13 @@ import ( "context" "log" "math/big" - "github.com/ethereum/go-ethereum/accounts" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/ethclient" - ethchannel "perun.network/go-perun/backend/ethereum/channel" - ethwallet "perun.network/go-perun/backend/ethereum/wallet" - swallet "perun.network/go-perun/backend/ethereum/wallet/simple" + ethchannel "github.com/perun-network/perun-eth-backend/channel" + ethwallet "github.com/perun-network/perun-eth-backend/wallet" + swallet "github.com/perun-network/perun-eth-backend/wallet/simple" "perun.network/go-perun/wire" "perun.network/perun-examples/payment-channel/client" ) @@ -73,12 +72,14 @@ func setupPaymentClient( } w := swallet.NewWallet(k) acc := crypto.PubkeyToAddress(k.PublicKey) + eaddr := ethwallet.AsWalletAddr(acc) // Create and start client. c, err := client.SetupPaymentClient( bus, w, acc, + eaddr, nodeURL, chainID, adjudicator, From df4986539b66358e7c82fc8ab5c868a8828e76fc Mon Sep 17 00:00:00 2001 From: Ilja von Hoessle Date: Thu, 9 Mar 2023 21:16:02 +0100 Subject: [PATCH 02/16] payment-channel: Update go-perun methods used in client for compatibility to go-perun 0.10.6 * client: Modify go-perun methods * workflow: Set ganache to latest Signed-off-by: Ilja von Hoessle --- .github/workflows/ci.yml | 17 ++++++++++++++++ payment-channel/client/channel.go | 7 ++----- payment-channel/client/client.go | 34 ++++++++++++++++--------------- payment-channel/client/handle.go | 21 +++++++++---------- payment-channel/client/util.go | 19 +++++++++-------- payment-channel/go.mod | 6 ++++-- payment-channel/go.sum | 28 ++++++------------------- payment-channel/main.go | 2 +- payment-channel/util.go | 9 ++++---- 9 files changed, 74 insertions(+), 69 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 21db44c..a67e72a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,7 +6,11 @@ jobs: name: Test Examples runs-on: ubuntu-latest env: +<<<<<<< HEAD ganache-image: trufflesuite/ganache:v7.9.1 +======= + ganache-image: trufflesuite/ganache-cli:v6.12.2 +>>>>>>> 74b8493 (payment-channel: Update go-perun methods used in client for compatibility to go-perun 0.10.6) steps: - uses: actions/checkout@v3 @@ -22,8 +26,13 @@ jobs: key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} restore-keys: | ${{ runner.os }}-go- +<<<<<<< HEAD - name: Pull ganache image +======= + + - name: Pull ganache-cli image +>>>>>>> 74b8493 (payment-channel: Update go-perun methods used in client for compatibility to go-perun 0.10.6) run: docker pull ${{ env.ganache-image }} - name: Simple Client @@ -44,7 +53,11 @@ jobs: KEY_BOB: "0xf63d7d8e930bccd74e93cf5662fde2c28fd8be95edb70c73f1bdd863d07f412e" BALANCE: "10000000000000000000" run: | +<<<<<<< HEAD docker run --rm --name ganache --detach --publish 8545:8545 ${{ env.ganache-image }} --wallet.accounts $KEY_DEPLOYER,$BALANCE $KEY_ALICE,$BALANCE $KEY_BOB,$BALANCE --b=5 +======= + docker run --rm --name ganache --detach --publish 8545:8545 trufflesuite/ganache:latest --account $KEY_DEPLOYER,$BALANCE --account $KEY_ALICE,$BALANCE --account $KEY_BOB,$BALANCE --blockTime=5 --gasPrice=0 +>>>>>>> 74b8493 (payment-channel: Update go-perun methods used in client for compatibility to go-perun 0.10.6) sleep 5 go run . docker stop ganache @@ -65,7 +78,11 @@ jobs: KEY_BOB: "0xf63d7d8e930bccd74e93cf5662fde2c28fd8be95edb70c73f1bdd863d07f412e" BALANCE: "10000000000000000000" run: | +<<<<<<< HEAD docker run --rm --name ganache --detach --publish 8545:8545 ${{ env.ganache-image }} --wallet.accounts $KEY_DEPLOYER,$BALANCE $KEY_ALICE,$BALANCE $KEY_BOB,$BALANCE --b=5 +======= + docker run --rm --name ganache --detach --publish 8545:8545 ${{ env.ganache-image }} --account $KEY_DEPLOYER,$BALANCE --account $KEY_ALICE,$BALANCE --account $KEY_BOB,$BALANCE --blockTime=5 +>>>>>>> 74b8493 (payment-channel: Update go-perun methods used in client for compatibility to go-perun 0.10.6) sleep 5 go run . docker stop ganache diff --git a/payment-channel/client/channel.go b/payment-channel/client/channel.go index 13949f6..bf21f05 100644 --- a/payment-channel/client/channel.go +++ b/payment-channel/client/channel.go @@ -3,7 +3,6 @@ package client import ( "context" "math/big" - "perun.network/go-perun/channel" "perun.network/go-perun/client" ) @@ -26,12 +25,11 @@ func newPaymentChannel(ch *client.Channel, currency channel.Asset) *PaymentChann func (c PaymentChannel) SendPayment(amount float64) { // Transfer the given amount from us to peer. // Use UpdateBy to update the channel state. - err := c.ch.UpdateBy(context.TODO(), func(state *channel.State) error { // We use context.TODO to keep the code simple. + err := c.ch.Update(context.TODO(), func(state *channel.State) { // We use context.TODO to keep the code simple. ethAmount := EthToWei(big.NewFloat(amount)) actor := c.ch.Idx() peer := 1 - actor state.Allocation.TransferBalance(actor, peer, c.currency, ethAmount) - return nil }) if err != nil { panic(err) // We panic on error to keep the code simple. @@ -42,9 +40,8 @@ func (c PaymentChannel) SendPayment(amount float64) { func (c PaymentChannel) Settle() { // Finalize the channel to enable fast settlement. if !c.ch.State().IsFinal { - err := c.ch.UpdateBy(context.TODO(), func(state *channel.State) error { + err := c.ch.Update(context.TODO(), func(state *channel.State) { state.IsFinal = true - return nil }) if err != nil { panic(err) diff --git a/payment-channel/client/client.go b/payment-channel/client/client.go index 7ef0cd8..6aa696c 100644 --- a/payment-channel/client/client.go +++ b/payment-channel/client/client.go @@ -19,9 +19,11 @@ import ( "fmt" "math/big" - ethchannel "perun.network/go-perun/backend/ethereum/channel" - ethwallet "perun.network/go-perun/backend/ethereum/wallet" - swallet "perun.network/go-perun/backend/ethereum/wallet/simple" + ethchannel "github.com/perun-network/perun-eth-backend/channel" + ethwallet "github.com/perun-network/perun-eth-backend/wallet" + swallet "github.com/perun-network/perun-eth-backend/wallet/simple" + ethwire "github.com/perun-network/perun-eth-backend/wire" + "perun.network/go-perun/channel" "perun.network/go-perun/client" "perun.network/go-perun/wallet" @@ -33,14 +35,11 @@ import ( "github.com/pkg/errors" ) -const ( - txFinalityDepth = 1 // Number of blocks required to confirm a transaction. -) - // PaymentClient is a payment channel client. type PaymentClient struct { - perunClient *client.Client // The core Perun client. - account wallet.Address // The account we use for on-chain and off-chain transactions. + perunClient *client.Client // The core Perun client. + account wallet.Address // The account we use for on-chain and off-chain transactions. + waddress wire.Address currency channel.Asset // The currency we expect to get paid in. channels chan *PaymentChannel // Accepted payment channels. } @@ -50,10 +49,11 @@ func SetupPaymentClient( bus wire.Bus, // bus is used of off-chain communication. w *swallet.Wallet, // w is the wallet used for signing transactions. acc common.Address, // acc is the address of the account to be used for signing transactions. + eaddress *ethwallet.Address, // eaddress is the address of the Ethereum account to be used for signing transactions. nodeURL string, // nodeURL is the URL of the blockchain node. chainID uint64, // chainID is the identifier of the blockchain. adjudicator common.Address, // adjudicator is the address of the adjudicator. - asset ethwallet.Address, // asset is the address of the asset holder for our payment channels. + assetaddr ethwallet.Address, // asset is the address of the asset holder for our payment channels. ) (*PaymentClient, error) { // Create Ethereum client and contract backend. cb, err := CreateContractBackend(nodeURL, chainID, w) @@ -66,7 +66,7 @@ func SetupPaymentClient( if err != nil { return nil, fmt.Errorf("validating adjudicator: %w", err) } - err = ethchannel.ValidateAssetHolderETH(context.TODO(), cb, common.Address(asset), adjudicator) + err = ethchannel.ValidateAssetHolderETH(context.TODO(), cb, common.Address(assetaddr), adjudicator) if err != nil { return nil, fmt.Errorf("validating adjudicator: %w", err) } @@ -75,7 +75,8 @@ func SetupPaymentClient( funder := ethchannel.NewFunder(cb) dep := ethchannel.NewETHDepositor() ethAcc := accounts.Account{Address: acc} - funder.RegisterAsset(asset, dep, ethAcc) + asset := ethchannel.NewAsset(big.NewInt(int64(chainID)), common.Address(assetaddr)) + funder.RegisterAsset(*asset, dep, ethAcc) // Setup adjudicator. adj := ethchannel.NewAdjudicator(cb, adjudicator, acc, ethAcc) @@ -87,7 +88,7 @@ func SetupPaymentClient( } // Setup Perun client. - waddr := ethwallet.AsWalletAddr(acc) + waddr := ðwire.Address{Address: eaddress} perunClient, err := client.New(waddr, bus, funder, adj, w, watcher) if err != nil { return nil, errors.WithMessage(err, "creating client") @@ -96,8 +97,9 @@ func SetupPaymentClient( // Create client and start request handler. c := &PaymentClient{ perunClient: perunClient, - account: waddr, - currency: &asset, + account: eaddress, + waddress: waddr, + currency: asset, channels: make(chan *PaymentChannel, 1), } go perunClient.Handle(c, c) @@ -110,7 +112,7 @@ func (c *PaymentClient) OpenChannel(peer wire.Address, amount float64) *PaymentC // We define the channel participants. The proposer has always index 0. Here // we use the on-chain addresses as off-chain addresses, but we could also // use different ones. - participants := []wire.Address{c.account, peer} + participants := []wire.Address{c.waddress, peer} // We create an initial allocation which defines the starting balances. initAlloc := channel.NewAllocation(2, c.currency) diff --git a/payment-channel/client/handle.go b/payment-channel/client/handle.go index f6fbb3f..035046a 100644 --- a/payment-channel/client/handle.go +++ b/payment-channel/client/handle.go @@ -19,31 +19,30 @@ import ( "fmt" "log" "math/big" - "perun.network/go-perun/channel" "perun.network/go-perun/client" ) // HandleProposal is the callback for incoming channel proposals. func (c *PaymentClient) HandleProposal(p client.ChannelProposal, r *client.ProposalResponder) { - lcp, err := func() (*client.LedgerChannelProposal, error) { + lcp, err := func() (*client.LedgerChannelProposalMsg, error) { // Ensure that we got a ledger channel proposal. - lcp, ok := p.(*client.LedgerChannelProposal) + lcp, ok := p.(*client.LedgerChannelProposalMsg) if !ok { - return nil, fmt.Errorf("Invalid proposal type: %T\n", p) + return nil, fmt.Errorf("invalid proposal type: %T", p) } // Check that we have the correct number of participants. if lcp.NumPeers() != 2 { - return nil, fmt.Errorf("Invalid number of participants: %d", lcp.NumPeers()) + return nil, fmt.Errorf("invalid number of participants: %d", lcp.NumPeers()) } // Check that the channel has the expected assets and funding balances. const assetIdx, peerIdx = 0, 1 - if err := channel.AssetsAssertEqual(lcp.InitBals.Assets, []channel.Asset{c.currency}); err != nil { - return nil, fmt.Errorf("Invalid assets: %v\n", err) + if err := channel.AssertAssetsEqual(lcp.InitBals.Assets, []channel.Asset{c.currency}); err != nil { + return nil, fmt.Errorf("invalid assets: %v", err) } else if lcp.FundingAgreement[assetIdx][peerIdx].Cmp(big.NewInt(0)) != 0 { - return nil, fmt.Errorf("Invalid funding balance") + return nil, fmt.Errorf("invalid funding balance") } return lcp, nil }() @@ -73,16 +72,16 @@ func (c *PaymentClient) HandleProposal(p client.ChannelProposal, r *client.Propo func (c *PaymentClient) HandleUpdate(cur *channel.State, next client.ChannelUpdate, r *client.UpdateResponder) { // We accept every update that increases our balance. err := func() error { - err := channel.AssetsAssertEqual(cur.Assets, next.State.Assets) + err := channel.AssertAssetsEqual(cur.Assets, next.State.Assets) if err != nil { - return fmt.Errorf("Invalid assets: %v", err) + return fmt.Errorf("invalid assets: %v", err) } receiverIdx := 1 - next.ActorIdx // This works because we are in a two-party channel. curBal := cur.Allocation.Balance(receiverIdx, c.currency) nextBal := next.State.Allocation.Balance(receiverIdx, c.currency) if nextBal.Cmp(curBal) < 0 { - return fmt.Errorf("Invalid balance: %v", nextBal) + return fmt.Errorf("invalid balance: %v", nextBal) } return nil }() diff --git a/payment-channel/client/util.go b/payment-channel/client/util.go index 116daea..28f2b0b 100644 --- a/payment-channel/client/util.go +++ b/payment-channel/client/util.go @@ -15,24 +15,27 @@ package client import ( - "math/big" - "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/ethclient" - ethchannel "perun.network/go-perun/backend/ethereum/channel" - ethwallet "perun.network/go-perun/backend/ethereum/wallet" - swallet "perun.network/go-perun/backend/ethereum/wallet/simple" + ethchannel "github.com/perun-network/perun-eth-backend/channel" + ethwallet "github.com/perun-network/perun-eth-backend/wallet" + swallet "github.com/perun-network/perun-eth-backend/wallet/simple" + "math/big" "perun.network/go-perun/wire" ) +const ( + txFinalityDepth = 1 // Number of blocks required to confirm a transaction. +) + // CreateContractBackend creates a new contract backend. func CreateContractBackend( nodeURL string, chainID uint64, w *swallet.Wallet, ) (ethchannel.ContractBackend, error) { - signer := types.NewEIP155Signer(new(big.Int).SetUint64(chainID)) + signer := types.LatestSignerForChainID(new(big.Int).SetUint64(chainID)) transactor := swallet.NewTransactor(w, signer) ethClient, err := ethclient.Dial(nodeURL) @@ -40,7 +43,7 @@ func CreateContractBackend( return ethchannel.ContractBackend{}, err } - return ethchannel.NewContractBackend(ethClient, transactor, txFinalityDepth), nil + return ethchannel.NewContractBackend(ethClient, ethchannel.MakeChainID(big.NewInt(int64(chainID))), transactor, txFinalityDepth), nil } // WalletAddress returns the wallet address of the client. @@ -50,7 +53,7 @@ func (c *PaymentClient) WalletAddress() common.Address { // WireAddress returns the wire address of the client. func (c *PaymentClient) WireAddress() wire.Address { - return c.account + return c.waddress } // EthToWei converts a given amount in ETH to Wei. diff --git a/payment-channel/go.mod b/payment-channel/go.mod index ec44f49..66d2fda 100644 --- a/payment-channel/go.mod +++ b/payment-channel/go.mod @@ -1,11 +1,12 @@ module perun.network/perun-examples/payment-channel -go 1.17 +go 1.19 require ( github.com/ethereum/go-ethereum v1.10.12 + github.com/perun-network/perun-eth-backend v0.1.0 github.com/pkg/errors v0.9.1 - perun.network/go-perun v0.8.0 + perun.network/go-perun v0.10.6 ) require ( @@ -29,4 +30,5 @@ require ( golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912 // indirect gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c // indirect + polycry.pt/poly-go v0.0.0-20220301085937-fb9d71b45a37 // indirect ) diff --git a/payment-channel/go.sum b/payment-channel/go.sum index 0fd56e0..b4ed635 100644 --- a/payment-channel/go.sum +++ b/payment-channel/go.sum @@ -44,7 +44,6 @@ github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3 github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= -github.com/allegro/bigcache v1.2.1/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= github.com/apache/arrow/go/arrow v0.0.0-20191024131854-af6fa24be0db/go.mod h1:VTxUBvSJ3s3eHAg65PNgrsn5BtqCRPdmyXh6rAfdxN0= github.com/aws/aws-sdk-go-v2 v1.2.0/go.mod h1:zEQs02YRBw1DjK0PoJv3ygDYOFTre1ejlJWl8FwAuQo= @@ -66,7 +65,6 @@ github.com/btcsuite/btcd v0.21.0-beta/go.mod h1:ZSWyehm27aAuS9bvkATT+Xte3hjHZ+MR github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= github.com/btcsuite/btcutil v1.0.2/go.mod h1:j9HUFwoQRsZL3V4n+qG+CUnEGHOarIxfC3Le2Yhbcts= -github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce/go.mod h1:0DVlHczLPewLcPGEIeUEzfOJhqGPQ0mJJRDBtD307+o= github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= github.com/btcsuite/goleveldb v1.0.0/go.mod h1:QiK9vBlgftBg6rWQIj6wFzbPfRjiykIEhBH4obrXJ/I= @@ -105,10 +103,8 @@ github.com/deepmap/oapi-codegen v1.8.2/go.mod h1:YLgSKSDv/bZQB7N4ws6luhozi3cEdRk github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-bitstream v0.0.0-20180413035011-3522498ce2c8/go.mod h1:VMaSuZ+SZcx/wljOQKvp5srsbCiKDEb6K2wC4+PiBmQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= -github.com/dlclark/regexp2 v1.2.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= github.com/docker/docker v1.4.2-0.20180625184442-8e610b2b55bf/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/dop251/goja v0.0.0-20200721192441-a695b0cdd498/go.mod h1:Mw6PkjjMXWbTj+nnj4s3QPXq1jaT0s5pC0iFD4+BOAA= github.com/dop251/goja v0.0.0-20211011172007-d99e4b8cbf48/go.mod h1:R9ET47fwRVRPZnOGvHxxhuZcbrMCuiqOz3Rlrh4KSnk= github.com/dop251/goja_nodejs v0.0.0-20210225215109-d91c329300e7/go.mod h1:hn7BA7c8pLvoGndExHudxTDKZ84Pyvv+90pbBjbTz0Y= github.com/eclipse/paho.mqtt.golang v1.2.0/go.mod h1:H9keYFcgq3Qr5OUJm/JZI/i6U7joQ8SYLhZwfeOo6Ts= @@ -116,7 +112,6 @@ github.com/edsrzf/mmap-go v1.0.0 h1:CEBF7HpRnUCSJgGUb5h1Gm7e3VkmVDrR8lvWVLtrOFw= github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/ethereum/go-ethereum v1.10.4/go.mod h1:nEE0TP5MtxGzOMd7egIrbPJMQBnhVU3ELNxhBglIzhg= github.com/ethereum/go-ethereum v1.10.12 h1:el/KddB3gLEsnNgGQ3SQuZuiZjwnFTYHe5TwUet5Om4= github.com/ethereum/go-ethereum v1.10.12/go.mod h1:W3yfrFyL9C1pHcwY5hmRHVDaorTiQxhYBkKyu5mEDHw= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= @@ -142,7 +137,6 @@ github.com/go-ole/go-ole v1.2.1 h1:2lOsA72HgjxAuMlKpFiCbHTvu44PIVkZ5hqm3RSdI/E= github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-sourcemap/sourcemap v2.1.2+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= github.com/go-sourcemap/sourcemap v2.1.3+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= @@ -169,7 +163,6 @@ github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvq github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= @@ -209,7 +202,6 @@ github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iU github.com/holiman/uint256 v1.2.0 h1:gpSYcPLWGv4sG43I2mVLiDZCNDh/EpGjSk8tmtxitHM= github.com/holiman/uint256 v1.2.0/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/huin/goupnp v1.0.1-0.20210310174557-0ca763054c88/go.mod h1:nNs7wvRfN1eKaMknBydLNQU6146XQim8t4h+q90biWo= github.com/huin/goupnp v1.0.2 h1:RfGLP+h3mvisuWEyybxNq5Eft3NWhHLPeUN72kpKZoI= github.com/huin/goupnp v1.0.2/go.mod h1:0dxJBVBHqTMjIUMkESDTNgOOx/Mw5wYIfyFmdzSamkM= github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= @@ -242,7 +234,6 @@ github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfV github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= github.com/jwilder/encoding v0.0.0-20170811194829-b4e1701a28ef/go.mod h1:Ct9fl0F6iIOGgxJ5npU/IUOhOhqlVrGjyIZc8/MagT0= -github.com/karalabe/usb v0.0.0-20190919080040-51dc0efba356/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= github.com/karalabe/usb v0.0.0-20211005121534-4c5740d64559/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= @@ -269,7 +260,6 @@ github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/matryer/moq v0.0.0-20190312154309-6cfb0558e1bd/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.0/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.8 h1:c1ghPdyEDarC70ftn0y+A/Ee++9zz8ljHG1b13eJ0s8= @@ -277,7 +267,6 @@ github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope github.com/mattn/go-ieproxy v0.0.0-20190610004146-91bb50d98149/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= github.com/mattn/go-ieproxy v0.0.0-20190702010315-6dee0af9227d/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.5-0.20180830101745-3fb116b82035/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= @@ -288,7 +277,6 @@ github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/mattn/go-tty v0.0.0-20180907095812-13ff1204f104/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/miguelmota/go-ethereum-hdwallet v0.1.1/go.mod h1:f9m9uXokAHA6WNoYOPjj4AqjJS5pquQRiYYj/XSyPYc= github.com/mitchellh/mapstructure v1.4.1 h1:CpVNEelQCZBooIPDn+AR3NpivK/TIKU8bDxdASFVQag= github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/pointerstructure v1.2.0 h1:O+i9nHnXS3l/9Wu7r4NrEdwA2VFTicjUEN1uBnDo34A= @@ -315,6 +303,8 @@ github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFSt github.com/opentracing/opentracing-go v1.0.3-0.20180606204148-bd9c31933947/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/paulbellamy/ratecounter v0.2.0/go.mod h1:Hfx1hDpSGoqxkVVpBi/IlYD7kChlfo5C6hzIHwPqfFE= +github.com/perun-network/perun-eth-backend v0.1.0 h1:MySwhdtz7MbwzIeGP5tJqdb6MZRBBKugzMt6nY5YLMs= +github.com/perun-network/perun-eth-backend v0.1.0/go.mod h1:yE+WLgaHzKVBRVsmXB2a9DWj55J8RSM2ippIes7DTns= github.com/peterh/liner v1.0.1-0.20180619022028-8c1271fcf47f/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc= github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= @@ -372,7 +362,6 @@ github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81P github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/syndtr/goleveldb v1.0.1-0.20210305035536-64b5b1c73954/go.mod h1:u2MKkTVTVJWe5D1rCvame8WqhBd88EuIwODJZ1VHCPM= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= @@ -389,13 +378,11 @@ github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+ github.com/willf/bitset v1.1.3/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= 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= @@ -444,7 +431,6 @@ golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181011144130-49bb7cea24b1/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -464,7 +450,6 @@ golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwY golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210220033124-5f55cee0dc0d/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -515,10 +500,8 @@ golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210316164454-77fc1eacc6aa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210420205809-ac73e9fd8988/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912 h1:uCLL3g5wH2xjxVREVuAbP9JM5PPKjRbXKRa6IBjkzmU= golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= @@ -563,7 +546,6 @@ golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapK golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200108203644-89082a384178/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -640,7 +622,9 @@ 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.8.0 h1:ltGjAlv4Ep1WlR4G7xsCuRTw6Tbb1x+otQiZ9Dh20PM= -perun.network/go-perun v0.8.0/go.mod h1:VwcPIRO9hLyhHOjvl+8FZWtgh56c68E/miXGNPe2OdQ= +perun.network/go-perun v0.10.6 h1:uj1e33yfCSfE75DK/uwjNp+TwvGG85Qhi6HuYQ9EPrQ= +perun.network/go-perun v0.10.6/go.mod h1:BGBZC3npkX457u87pjDd0NEIXr1a4dsH4H/YpLdGGe8= +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= rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= diff --git a/payment-channel/main.go b/payment-channel/main.go index 97b7006..f09a589 100644 --- a/payment-channel/main.go +++ b/payment-channel/main.go @@ -17,7 +17,7 @@ package main import ( "log" - ethwallet "perun.network/go-perun/backend/ethereum/wallet" + ethwallet "github.com/perun-network/perun-eth-backend/wallet" "perun.network/go-perun/wire" ) diff --git a/payment-channel/util.go b/payment-channel/util.go index 27d99d5..b552f90 100644 --- a/payment-channel/util.go +++ b/payment-channel/util.go @@ -18,14 +18,13 @@ import ( "context" "log" "math/big" - "github.com/ethereum/go-ethereum/accounts" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/ethclient" - ethchannel "perun.network/go-perun/backend/ethereum/channel" - ethwallet "perun.network/go-perun/backend/ethereum/wallet" - swallet "perun.network/go-perun/backend/ethereum/wallet/simple" + ethchannel "github.com/perun-network/perun-eth-backend/channel" + ethwallet "github.com/perun-network/perun-eth-backend/wallet" + swallet "github.com/perun-network/perun-eth-backend/wallet/simple" "perun.network/go-perun/wire" "perun.network/perun-examples/payment-channel/client" ) @@ -73,12 +72,14 @@ func setupPaymentClient( } w := swallet.NewWallet(k) acc := crypto.PubkeyToAddress(k.PublicKey) + eaddr := ethwallet.AsWalletAddr(acc) // Create and start client. c, err := client.SetupPaymentClient( bus, w, acc, + eaddr, nodeURL, chainID, adjudicator, From 99d610d94353235d65cb80174ce0f1d81880fe08 Mon Sep 17 00:00:00 2001 From: Minh Huy Tran Date: Wed, 13 Dec 2023 13:07:41 +0100 Subject: [PATCH 03/16] update appchannel code to go-perun 10.6 Signed-off-by: Minh Huy Tran --- app-channel/app/app.go | 8 +- app-channel/app/data.go | 21 + app-channel/client/channel.go | 9 +- app-channel/client/client.go | 31 +- app-channel/client/handle.go | 23 +- app-channel/client/util.go | 13 +- app-channel/go.mod | 52 ++- app-channel/go.sum | 694 ++++++---------------------------- app-channel/main.go | 3 +- app-channel/util.go | 10 +- 10 files changed, 231 insertions(+), 633 deletions(-) diff --git a/app-channel/app/app.go b/app-channel/app/app.go index b2ad7ea..67aa45c 100644 --- a/app-channel/app/app.go +++ b/app-channel/app/app.go @@ -41,6 +41,10 @@ func (a *TicTacToeApp) Def() wallet.Address { return a.Addr } +func (a *TicTacToeApp) NewData() channel.Data { + return &TicTacToeAppData{} +} + func (a *TicTacToeApp) InitData(firstActor channel.Index) *TicTacToeAppData { return &TicTacToeAppData{ NextActor: uint8(firstActor), @@ -93,9 +97,9 @@ func (a *TicTacToeApp) ValidInit(p *channel.Params, s *channel.State) error { // ValidTransition is called whenever the channel state transitions. func (a *TicTacToeApp) ValidTransition(params *channel.Params, from, to *channel.State, idx channel.Index) error { - err := channel.AssetsAssertEqual(from.Assets, to.Assets) + err := channel.AssertAssetsEqual(from.Assets, to.Assets) if err != nil { - return fmt.Errorf("Invalid assets: %v", err) + return fmt.Errorf("invalid assets: %v", err) } fromData, ok := from.Data.(*TicTacToeAppData) diff --git a/app-channel/app/data.go b/app-channel/app/data.go index cdbd6a1..b7f2eb0 100644 --- a/app-channel/app/data.go +++ b/app-channel/app/data.go @@ -28,6 +28,27 @@ func (d *TicTacToeAppData) String() string { return b.String() } +func (d *TicTacToeAppData) MarshalBinary() ([]byte, error) { + var b bytes.Buffer + err := d.Encode(&b) + return b.Bytes(), err +} + +func (d *TicTacToeAppData) UnmarshalBinary(data []byte) error { + var err error + buffer := bytes.NewBuffer(data) + d.NextActor, err = readUInt8(buffer) + if err != nil { + return errors.WithMessage(err, "reading actor") + } + grid, err := readUInt8Array(buffer, len(d.Grid)) + if err != nil { + return errors.WithMessage(err, "reading grid") + } + copy(d.Grid[:], makeFieldValueArray(grid)) + return nil +} + // Encode encodes app data onto an io.Writer. func (d *TicTacToeAppData) Encode(w io.Writer) error { err := writeUInt8(w, d.NextActor) diff --git a/app-channel/client/channel.go b/app-channel/client/channel.go index d94d264..cbb5cfe 100644 --- a/app-channel/client/channel.go +++ b/app-channel/client/channel.go @@ -21,13 +21,16 @@ func newTicTacToeChannel(ch *client.Channel) *TicTacToeChannel { // Set sends a game move to the channel peer. func (g *TicTacToeChannel) Set(x, y int) { - err := g.ch.UpdateBy(context.TODO(), func(state *channel.State) error { + err := g.ch.Update(context.TODO(), func(state *channel.State) { app, ok := state.App.(*app.TicTacToeApp) if !ok { - return fmt.Errorf("invalid app type: %T", app) + panic(fmt.Errorf("invalid app type: %T", app)) } - return app.Set(state, x, y, g.ch.Idx()) + err := app.Set(state, x, y, g.ch.Idx()) + if err != nil { + panic(err) + } }) if err != nil { panic(err) // We panic on error to keep the code simple. diff --git a/app-channel/client/client.go b/app-channel/client/client.go index 1d2f834..ae45562 100644 --- a/app-channel/client/client.go +++ b/app-channel/client/client.go @@ -17,10 +17,13 @@ package client import ( "context" "fmt" + "math/big" + + ethchannel "github.com/perun-network/perun-eth-backend/channel" + ethwallet "github.com/perun-network/perun-eth-backend/wallet" + swallet "github.com/perun-network/perun-eth-backend/wallet/simple" + ethwire "github.com/perun-network/perun-eth-backend/wire" - ethchannel "perun.network/go-perun/backend/ethereum/channel" - ethwallet "perun.network/go-perun/backend/ethereum/wallet" - swallet "perun.network/go-perun/backend/ethereum/wallet/simple" "perun.network/go-perun/channel" "perun.network/go-perun/client" "perun.network/go-perun/wallet" @@ -39,8 +42,9 @@ const ( // AppClient is an app channel client. type AppClient struct { - perunClient *client.Client // The core Perun client. - account wallet.Address // The account we use for on-chain and off-chain transactions. + perunClient *client.Client // The core Perun client. + account wallet.Address // The account we use for on-chain and off-chain transactions. + waddress wire.Address currency channel.Asset // The currency we expect to get paid in. stake channel.Bal // The amount we put at stake. app *app.TicTacToeApp // The app definition. @@ -52,10 +56,11 @@ func SetupAppClient( bus wire.Bus, // bus is used of off-chain communication. w *swallet.Wallet, // w is the wallet used for signing transactions. acc common.Address, // acc is the address of the account to be used for signing transactions. + eaddress *ethwallet.Address, // eaddress is the address of the Ethereum account to be used for signing transactions. nodeURL string, // nodeURL is the URL of the blockchain node. chainID uint64, // chainID is the identifier of the blockchain. adjudicator common.Address, // adjudicator is the address of the adjudicator. - asset ethwallet.Address, // asset is the address of the asset holder for our app channels. + assetaddr ethwallet.Address, // asset is the address of the asset holder for our app channels. app *app.TicTacToeApp, // app is the channel app we want to set up the client with. stake channel.Bal, // stake is the balance the client is willing to fund the channel with. ) (*AppClient, error) { @@ -70,7 +75,7 @@ func SetupAppClient( if err != nil { return nil, fmt.Errorf("validating adjudicator: %w", err) } - err = ethchannel.ValidateAssetHolderETH(context.TODO(), cb, common.Address(asset), adjudicator) + err = ethchannel.ValidateAssetHolderETH(context.TODO(), cb, common.Address(assetaddr), adjudicator) if err != nil { return nil, fmt.Errorf("validating adjudicator: %w", err) } @@ -79,7 +84,8 @@ func SetupAppClient( funder := ethchannel.NewFunder(cb) dep := ethchannel.NewETHDepositor() ethAcc := accounts.Account{Address: acc} - funder.RegisterAsset(asset, dep, ethAcc) + asset := ethchannel.NewAsset(big.NewInt(int64(chainID)), common.Address(assetaddr)) + funder.RegisterAsset(*asset, dep, ethAcc) // Setup adjudicator. adj := ethchannel.NewAdjudicator(cb, adjudicator, acc, ethAcc) @@ -91,7 +97,7 @@ func SetupAppClient( } // Setup Perun client. - waddr := ethwallet.AsWalletAddr(acc) + waddr := ðwire.Address{Address: eaddress} perunClient, err := client.New(waddr, bus, funder, adj, w, watcher) if err != nil { return nil, errors.WithMessage(err, "creating client") @@ -100,8 +106,9 @@ func SetupAppClient( // Create client and start request handler. c := &AppClient{ perunClient: perunClient, - account: waddr, - currency: &asset, + account: eaddress, + waddress: waddr, + currency: asset, stake: stake, app: app, channels: make(chan *TicTacToeChannel, 1), @@ -115,7 +122,7 @@ func SetupAppClient( // OpenAppChannel opens a new app channel with the specified peer. func (c *AppClient) OpenAppChannel(peer wire.Address) *TicTacToeChannel { - participants := []wire.Address{c.account, peer} + participants := []wire.Address{c.waddress, peer} // We create an initial allocation which defines the starting balances. initAlloc := channel.NewAllocation(2, c.currency) diff --git a/app-channel/client/handle.go b/app-channel/client/handle.go index 2b9d4ce..72291f5 100644 --- a/app-channel/client/handle.go +++ b/app-channel/client/handle.go @@ -18,41 +18,42 @@ import ( "context" "fmt" "log" + "perun.network/go-perun/channel" "perun.network/go-perun/client" ) // HandleProposal is the callback for incoming channel proposals. func (c *AppClient) HandleProposal(p client.ChannelProposal, r *client.ProposalResponder) { - lcp, err := func() (*client.LedgerChannelProposal, error) { + lcp, err := func() (*client.LedgerChannelProposalMsg, error) { // Ensure that we got a ledger channel proposal. - lcp, ok := p.(*client.LedgerChannelProposal) + lcp, ok := p.(*client.LedgerChannelProposalMsg) if !ok { - return nil, fmt.Errorf("Invalid proposal type: %T\n", p) + return nil, fmt.Errorf("invalid proposal type: %T", p) } // Ensure the ledger channel proposal includes the expected app. - if !lcp.App.Def().Equals(c.app.Def()) { - return nil, fmt.Errorf("Invalid app type ") + if !lcp.App.Def().Equal(c.app.Def()) { + return nil, fmt.Errorf("invalid app type ") } // Check that we have the correct number of participants. if lcp.NumPeers() != 2 { - return nil, fmt.Errorf("Invalid number of participants: %d", lcp.NumPeers()) + return nil, fmt.Errorf("invalid number of participants: %d", lcp.NumPeers()) } // Check that the channel has the expected assets. - err := channel.AssetsAssertEqual(lcp.InitBals.Assets, []channel.Asset{c.currency}) + err := channel.AssertAssetsEqual(lcp.InitBals.Assets, []channel.Asset{c.currency}) if err != nil { - return nil, fmt.Errorf("Invalid assets: %v\n", err) + return nil, fmt.Errorf("invalid assets: %v", err) } // Check that the channel has the expected assets and funding balances. const assetIdx, peerIdx = 0, 1 - if err := channel.AssetsAssertEqual(lcp.InitBals.Assets, []channel.Asset{c.currency}); err != nil { - return nil, fmt.Errorf("Invalid assets: %v\n", err) + if err := channel.AssertAssetsEqual(lcp.InitBals.Assets, []channel.Asset{c.currency}); err != nil { + return nil, fmt.Errorf("invalid assets: %v", err) } else if lcp.FundingAgreement[assetIdx][peerIdx].Cmp(c.stake) != 0 { - return nil, fmt.Errorf("Invalid funding balance") + return nil, fmt.Errorf("invalid funding balance") } return lcp, nil }() diff --git a/app-channel/client/util.go b/app-channel/client/util.go index bead96d..1ae0f81 100644 --- a/app-channel/client/util.go +++ b/app-channel/client/util.go @@ -16,14 +16,15 @@ package client import ( "math/big" + "perun.network/go-perun/wire" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/ethclient" - ethchannel "perun.network/go-perun/backend/ethereum/channel" - ethwallet "perun.network/go-perun/backend/ethereum/wallet" - swallet "perun.network/go-perun/backend/ethereum/wallet/simple" + ethchannel "github.com/perun-network/perun-eth-backend/channel" + ethwallet "github.com/perun-network/perun-eth-backend/wallet" + swallet "github.com/perun-network/perun-eth-backend/wallet/simple" ) // CreateContractBackend creates a new contract backend. @@ -32,7 +33,7 @@ func CreateContractBackend( chainID uint64, w *swallet.Wallet, ) (ethchannel.ContractBackend, error) { - signer := types.NewEIP155Signer(new(big.Int).SetUint64(chainID)) + signer := types.LatestSignerForChainID(new(big.Int).SetUint64(chainID)) transactor := swallet.NewTransactor(w, signer) ethClient, err := ethclient.Dial(nodeURL) @@ -40,7 +41,7 @@ func CreateContractBackend( return ethchannel.ContractBackend{}, err } - return ethchannel.NewContractBackend(ethClient, transactor, txFinalityDepth), nil + return ethchannel.NewContractBackend(ethClient, ethchannel.MakeChainID(big.NewInt(int64(chainID))), transactor, txFinalityDepth), nil } // WalletAddress returns the wallet address of the client. @@ -50,7 +51,7 @@ func (c *AppClient) WalletAddress() common.Address { // WireAddress returns the wire address of the client. func (c *AppClient) WireAddress() wire.Address { - return c.account + return c.waddress } // EthToWei converts a given amount in ETH to Wei. diff --git a/app-channel/go.mod b/app-channel/go.mod index c14cd46..622cd61 100644 --- a/app-channel/go.mod +++ b/app-channel/go.mod @@ -1,32 +1,48 @@ module perun.network/perun-examples/app-channel -go 1.17 +go 1.19 require ( - github.com/ethereum/go-ethereum v1.10.12 + github.com/ethereum/go-ethereum v1.13.5 + github.com/perun-network/perun-eth-backend v0.1.0 github.com/pkg/errors v0.9.1 - perun.network/go-perun v0.8.0 + perun.network/go-perun v0.10.6 ) require ( - github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 // indirect + github.com/Microsoft/go-winio v0.6.1 // indirect + github.com/StackExchange/wmi v1.2.1 // indirect + github.com/bits-and-blooms/bitset v1.12.0 // indirect github.com/btcsuite/btcd v0.21.0-beta // indirect + github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect + github.com/consensys/bavard v0.1.13 // indirect + github.com/consensys/gnark-crypto v0.12.1 // indirect + github.com/crate-crypto/go-kzg-4844 v0.7.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect - github.com/deckarep/golang-set v0.0.0-20180603214616-504e848d77ea // indirect - github.com/go-ole/go-ole v1.2.1 // indirect - github.com/go-stack/stack v1.8.0 // indirect - github.com/google/uuid v1.1.5 // indirect + github.com/deckarep/golang-set/v2 v2.1.0 // indirect + github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect + github.com/ethereum/c-kzg-4844 v0.4.0 // indirect + github.com/fsnotify/fsnotify v1.6.0 // indirect + github.com/go-ole/go-ole v1.2.5 // indirect + github.com/go-stack/stack v1.8.1 // indirect + github.com/google/uuid v1.3.0 // indirect github.com/gorilla/websocket v1.4.2 // indirect + github.com/holiman/uint256 v1.2.4 // indirect + github.com/mmcloughlin/addchain v0.4.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/rjeczalik/notify v0.9.1 // indirect github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible // indirect - github.com/sirupsen/logrus v1.8.1 // indirect - github.com/stretchr/testify v1.7.0 // indirect - github.com/tklauser/go-sysconf v0.3.5 // indirect - github.com/tklauser/numcpus v0.2.2 // indirect - golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2 // indirect - golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect - golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912 // indirect - gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect - gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c // indirect + github.com/sirupsen/logrus v1.9.0 // indirect + github.com/stretchr/testify v1.8.4 // indirect + github.com/supranational/blst v0.3.11 // indirect + github.com/tklauser/go-sysconf v0.3.12 // indirect + github.com/tklauser/numcpus v0.6.1 // indirect + golang.org/x/crypto v0.16.0 // indirect + golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect + golang.org/x/mod v0.12.0 // indirect + golang.org/x/sync v0.5.0 // indirect + golang.org/x/sys v0.15.0 // indirect + golang.org/x/tools v0.13.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + polycry.pt/poly-go v0.0.0-20220301085937-fb9d71b45a37 // indirect + rsc.io/tmplfunc v0.0.3 // indirect ) diff --git a/app-channel/go.sum b/app-channel/go.sum index 0fd56e0..29ff5ac 100644 --- a/app-channel/go.sum +++ b/app-channel/go.sum @@ -1,72 +1,21 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.43.0/go.mod h1:BOSR3VbTLkk6FDC/TcffxP4NF/FFBGA5ku+jvKOP7pg= -cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= -cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= -cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= -cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= -cloud.google.com/go v0.51.0/go.mod h1:hWtGJ6gnXH+KgDv+V0zFGDvpi07n3z8ZNj3T1RW0Gcw= -cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= -cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= -cloud.google.com/go/bigtable v1.2.0/go.mod h1:JcVAOl45lrTmQfLj7T6TxyMzIN/3FGGcFm+2xVAli2o= -cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= -cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= -cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= -cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= -cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= -collectd.org v0.3.0/go.mod h1:A/8DzQBkF6abtvrT2j/AU/4tiBgJWYyh0y/oB/4MlWE= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/Azure/azure-pipeline-go v0.2.1/go.mod h1:UGSo8XybXnIGZ3epmeBw7Jdz+HiUVpqIlpz/HKHylF4= -github.com/Azure/azure-pipeline-go v0.2.2/go.mod h1:4rQ/NZncSvGqNkkOsNpOU1tgoNuIlp9AfUH5G1tvCHc= -github.com/Azure/azure-storage-blob-go v0.7.0/go.mod h1:f9YQKtsG1nMisotuTPpO0tjNuEjKRYAcJU8/ydDI++4= -github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= -github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= -github.com/Azure/go-autorest/autorest/adal v0.8.0/go.mod h1:Z6vX6WXXuyieHAXwMj0S6HY6e6wcHn37qQMBQlvY3lc= -github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= -github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g= -github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= -github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= -github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM= -github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= -github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 h1:fLjPD/aNc3UIOA6tDi6QXUemppXK3P9BI7mr2hd6gx8= -github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= -github.com/VictoriaMetrics/fastcache v1.6.0 h1:C/3Oi3EiBCqufydp1neRZkqcwmEiuRT9c3fqvvgKm5o= -github.com/VictoriaMetrics/fastcache v1.6.0/go.mod h1:0qHz5QP0GMX4pfmMA/zt5RgfNuXJrTP0zS7DqpHGGTw= +github.com/DataDog/zstd v1.4.5 h1:EndNeuB0l9syBZhut0wns3gV1hL8zX8LIu6ZiVHWLIQ= +github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= +github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= +github.com/StackExchange/wmi v1.2.1 h1:VIkavFPXSjcnS+O8yTq7NI32k0R5Aj+v39y29VYDOSA= +github.com/StackExchange/wmi v1.2.1/go.mod h1:rcmrprowKIVzvc+NUiLncP2uuArMWLCbu9SBzvHz7e8= +github.com/VictoriaMetrics/fastcache v1.12.1 h1:i0mICQuojGDL3KblA7wUNlY5lOK6a4bwt3uRKnkZU40= github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= -github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= -github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= -github.com/allegro/bigcache v1.2.1/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= -github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= -github.com/apache/arrow/go/arrow v0.0.0-20191024131854-af6fa24be0db/go.mod h1:VTxUBvSJ3s3eHAg65PNgrsn5BtqCRPdmyXh6rAfdxN0= -github.com/aws/aws-sdk-go-v2 v1.2.0/go.mod h1:zEQs02YRBw1DjK0PoJv3ygDYOFTre1ejlJWl8FwAuQo= -github.com/aws/aws-sdk-go-v2/config v1.1.1/go.mod h1:0XsVy9lBI/BCXm+2Tuvt39YmdHwS5unDQmxZOYe8F5Y= -github.com/aws/aws-sdk-go-v2/credentials v1.1.1/go.mod h1:mM2iIjwl7LULWtS6JCACyInboHirisUUdkBPoTHMOUo= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.0.2/go.mod h1:3hGg3PpiEjHnrkrlasTfxFqUsZ2GCk/fMUn4CbKgSkM= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.0.2/go.mod h1:45MfaXZ0cNbeuT0KQ1XJylq8A6+OpVV2E5kvY/Kq+u8= -github.com/aws/aws-sdk-go-v2/service/route53 v1.1.1/go.mod h1:rLiOUrPLW/Er5kRcQ7NkwbjlijluLsrIbu/iyl35RO4= -github.com/aws/aws-sdk-go-v2/service/sso v1.1.1/go.mod h1:SuZJxklHxLAXgLTc1iFXbEWkXs7QRTQpCLGaKIprQW0= -github.com/aws/aws-sdk-go-v2/service/sts v1.1.1/go.mod h1:Wi0EBZwiz/K44YliU0EKxqTCJGUfYTWXrrBwkq736bM= -github.com/aws/smithy-go v1.1.0/go.mod h1:EzMw8dbp/YJL4A5/sbhGddag+NPT7q084agLbB9LgIw= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= -github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40/go.mod h1:8rLXio+WjiTceGBHIoTvn60HIbs7Hm7bcHjyrSqYB9c= -github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= +github.com/bits-and-blooms/bitset v1.12.0 h1:U/q1fAF7xXRhFCrhROzIfffYnu+dlS38vCZtmFVPHmA= +github.com/bits-and-blooms/bitset v1.12.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= github.com/btcsuite/btcd v0.21.0-beta h1:At9hIZdJW0s9E/fAz28nrz6AmcNlSVucCH796ZteX1M= github.com/btcsuite/btcd v0.21.0-beta/go.mod h1:ZSWyehm27aAuS9bvkATT+Xte3hjHZ+MRgMY/8NJ7K94= +github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= +github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= github.com/btcsuite/btcutil v1.0.2/go.mod h1:j9HUFwoQRsZL3V4n+qG+CUnEGHOarIxfC3Le2Yhbcts= -github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce/go.mod h1:0DVlHczLPewLcPGEIeUEzfOJhqGPQ0mJJRDBtD307+o= github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= github.com/btcsuite/goleveldb v1.0.0/go.mod h1:QiK9vBlgftBg6rWQIj6wFzbPfRjiykIEhBH4obrXJ/I= @@ -74,573 +23,166 @@ github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= -github.com/c-bata/go-prompt v0.2.2/go.mod h1:VzqtzE2ksDBcdln8G7mk2RX9QyGjH+OVqOCSiVIqS34= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/cp v0.1.0 h1:SE+dxFebS7Iik5LK0tsi1k9ZCxEaFX4AjQmoyA+1dJk= -github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= -github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cloudflare/cloudflare-go v0.14.0/go.mod h1:EnwdgGMaFOruiPZRFSgn+TsQ3hQ7C/YWzIGLeu5c304= -github.com/consensys/bavard v0.1.8-0.20210406032232-f3452dc9b572/go.mod h1:Bpd0/3mZuaj6Sj+PqrmIquiOKy397AKGThQPaGzNXAQ= -github.com/consensys/gnark-crypto v0.4.1-0.20210426202927-39ac3d4b3f1f/go.mod h1:815PAHg3wvysy0SyIqanF8gZ0Y1wjk/hrDHD/iT88+Q= -github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= -github.com/dave/jennifer v1.2.0/go.mod h1:fIb+770HOpJ2fmN9EPPKOqm1vMGhB+TwXKMZhrIygKg= +github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= +github.com/cockroachdb/errors v1.8.1 h1:A5+txlVZfOqFBDa4mGz2bUWSp0aHElvHX2bKkdbQu+Y= +github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f h1:o/kfcElHqOiXqcou5a3rIlMc7oJbMQkeLk0VQJ7zgqY= +github.com/cockroachdb/pebble v0.0.0-20230928194634-aa077af62593 h1:aPEJyR4rPBvDmeyi+l/FS/VtA00IWvjeFvjen1m1l1A= +github.com/cockroachdb/redact v1.0.8 h1:8QG/764wK+vmEYoOlfobpe12EQcS81ukx/a4hdVMxNw= +github.com/cockroachdb/sentry-go v0.6.1-cockroachdb.2 h1:IKgmqgMQlVJIZj19CdocBeSfSaiCbEBZGKODaixqtHM= +github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= +github.com/consensys/bavard v0.1.13 h1:oLhMLOFGTLdlda/kma4VOJazblc7IM5y5QPd2A/YjhQ= +github.com/consensys/bavard v0.1.13/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI= +github.com/consensys/gnark-crypto v0.12.1 h1:lHH39WuuFgVHONRl3J0LRBtuYdQTumFSDtJF7HpyG8M= +github.com/consensys/gnark-crypto v0.12.1/go.mod h1:v2Gy7L/4ZRosZ7Ivs+9SfUDr0f5UlG+EM5t7MPHiLuY= +github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= +github.com/crate-crypto/go-kzg-4844 v0.7.0 h1:C0vgZRk4q4EZ/JgPfzuSoxdCq3C3mOZMBShovmncxvA= +github.com/crate-crypto/go-kzg-4844 v0.7.0/go.mod h1:1kMhvPgI0Ky3yIa+9lFySEBUBXkYxeOi8ZF1sYioxhc= github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/deckarep/golang-set v0.0.0-20180603214616-504e848d77ea h1:j4317fAZh7X6GqbFowYdYdI0L9bwxL07jyPZIdepyZ0= -github.com/deckarep/golang-set v0.0.0-20180603214616-504e848d77ea/go.mod h1:93vsz/8Wt4joVM7c2AVqh+YRMiUSc14yDtF28KmMOgQ= +github.com/deckarep/golang-set/v2 v2.1.0 h1:g47V4Or+DUdzbs8FxCCmgb6VYd+ptPAngjM6dtGktsI= +github.com/deckarep/golang-set/v2 v2.1.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4= +github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5ilcvdfma9wOH6Y= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 h1:8UrgZ3GkP4i/CLijOJx79Yu+etlyjdBU4sfcs2WYQMs= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= -github.com/deepmap/oapi-codegen v1.6.0/go.mod h1:ryDa9AgbELGeB+YEXE1dR53yAjHwFvE9iAUlWl9Al3M= -github.com/deepmap/oapi-codegen v1.8.2/go.mod h1:YLgSKSDv/bZQB7N4ws6luhozi3cEdRktEqrX88CvjIw= -github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-bitstream v0.0.0-20180413035011-3522498ce2c8/go.mod h1:VMaSuZ+SZcx/wljOQKvp5srsbCiKDEb6K2wC4+PiBmQ= -github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= -github.com/dlclark/regexp2 v1.2.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= -github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= -github.com/docker/docker v1.4.2-0.20180625184442-8e610b2b55bf/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/dop251/goja v0.0.0-20200721192441-a695b0cdd498/go.mod h1:Mw6PkjjMXWbTj+nnj4s3QPXq1jaT0s5pC0iFD4+BOAA= -github.com/dop251/goja v0.0.0-20211011172007-d99e4b8cbf48/go.mod h1:R9ET47fwRVRPZnOGvHxxhuZcbrMCuiqOz3Rlrh4KSnk= -github.com/dop251/goja_nodejs v0.0.0-20210225215109-d91c329300e7/go.mod h1:hn7BA7c8pLvoGndExHudxTDKZ84Pyvv+90pbBjbTz0Y= -github.com/eclipse/paho.mqtt.golang v1.2.0/go.mod h1:H9keYFcgq3Qr5OUJm/JZI/i6U7joQ8SYLhZwfeOo6Ts= -github.com/edsrzf/mmap-go v1.0.0 h1:CEBF7HpRnUCSJgGUb5h1Gm7e3VkmVDrR8lvWVLtrOFw= -github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/ethereum/go-ethereum v1.10.4/go.mod h1:nEE0TP5MtxGzOMd7egIrbPJMQBnhVU3ELNxhBglIzhg= -github.com/ethereum/go-ethereum v1.10.12 h1:el/KddB3gLEsnNgGQ3SQuZuiZjwnFTYHe5TwUet5Om4= -github.com/ethereum/go-ethereum v1.10.12/go.mod h1:W3yfrFyL9C1pHcwY5hmRHVDaorTiQxhYBkKyu5mEDHw= -github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/ethereum/c-kzg-4844 v0.4.0 h1:3MS1s4JtA868KpJxroZoepdV0ZKBp3u/O5HcZ7R3nlY= +github.com/ethereum/c-kzg-4844 v0.4.0/go.mod h1:VewdlzQmpT5QSrVhbBuGoCdFJkpaJlO1aQputP83wc0= +github.com/ethereum/go-ethereum v1.13.5 h1:U6TCRciCqZRe4FPXmy1sMGxTfuk8P7u2UoinF3VbaFk= +github.com/ethereum/go-ethereum v1.13.5/go.mod h1:yMTu38GSuyxaYzQMViqNmQ1s3cE84abZexQmTgenWk0= github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5 h1:FtmdgXiUlNeRsoNMFlKLDt+S+6hbjVMEW6RGQ7aUf7c= -github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= -github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= +github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff h1:tY80oXqGNY4FhTFhk+o9oFHGINQ/+vhlm8HFzi6znCI= -github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= -github.com/getkin/kin-openapi v0.53.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= -github.com/getkin/kin-openapi v0.61.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/glycerine/go-unsnap-stream v0.0.0-20180323001048-9f0cb55181dd/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE= -github.com/glycerine/goconvey v0.0.0-20190410193231-58a59202ab31/go.mod h1:Ogl1Tioa0aV7gstGFO7KhffUsb9M4ydbEbbxpcEDc24= -github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJpoZOs= -github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= -github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-ole/go-ole v1.2.1 h1:2lOsA72HgjxAuMlKpFiCbHTvu44PIVkZ5hqm3RSdI/E= -github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= -github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-sourcemap/sourcemap v2.1.2+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= -github.com/go-sourcemap/sourcemap v2.1.3+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= -github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= -github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= -github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= -github.com/golang/geo v0.0.0-20190916061304-5b978397cfec/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/go-ole/go-ole v1.2.5 h1:t4MGB5xEDZvXI+0rMjjsfBsD7yAgp/s9ZDkL1JndXwY= +github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= +github.com/go-stack/stack v1.8.1 h1:ntEHSVwIt7PNXNpgPmVfMrNhLtgjlmnZha2kOpuRiDw= +github.com/go-stack/stack v1.8.1/go.mod h1:dcoOX6HbPZSZptuspn9bctJ+N/CnF5gGygcUP3XYfe4= +github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= -github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golangci/lint-1 v0.0.0-20181222135242-d2cdd8c08219/go.mod h1:/X8TswGSh1pIozq4ZwCfxS0WA5JGXguxk94ar/4c87Y= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/flatbuffers v1.11.0/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/gofuzz v1.1.1-0.20200604201612-c04b05f3adfa/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/uuid v1.1.5 h1:kxhtnfFVi+rYdOALN0B3k9UT86zVJKfBimRaciULW4I= -github.com/google/uuid v1.1.5/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= +github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= +github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb h1:PBC98N2aIaM3XXiurYmW7fx4GZkL8feAMVq7nEjURHk= +github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= +github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/graph-gophers/graphql-go v0.0.0-20201113091052-beb923fada29/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= github.com/hashicorp/go-bexpr v0.1.10 h1:9kuI5PFotCboP3dkDYFr/wi0gg0QVbSNz5oFRpxn4uE= -github.com/hashicorp/go-bexpr v0.1.10/go.mod h1:oxlubA2vC/gFVfX1A6JGp7ls7uCDlfJn732ehYYg+g0= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d h1:dg1dEPuWpEqDnvIw251EVy4zlP8gWbsGj4BsUKCRpYs= -github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/holiman/billy v0.0.0-20230718173358-1c7e68d277a7 h1:3JQNjnMRil1yD0IfZKHF9GxxWKDJGj8I0IqOUol//sw= github.com/holiman/bloomfilter/v2 v2.0.3 h1:73e0e/V0tCydx14a0SCYS/EWCxgwLZ18CZcZKVu0fao= -github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= -github.com/holiman/uint256 v1.2.0 h1:gpSYcPLWGv4sG43I2mVLiDZCNDh/EpGjSk8tmtxitHM= -github.com/holiman/uint256 v1.2.0/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= +github.com/holiman/uint256 v1.2.4 h1:jUc4Nk8fm9jZabQuqr2JzednajVmBpC+oiTiXZJEApU= +github.com/holiman/uint256 v1.2.4/go.mod h1:EOMSn4q6Nyt9P6efbI3bueV4e1b3dGlUCXeiRV4ng7E= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/huin/goupnp v1.0.1-0.20210310174557-0ca763054c88/go.mod h1:nNs7wvRfN1eKaMknBydLNQU6146XQim8t4h+q90biWo= -github.com/huin/goupnp v1.0.2 h1:RfGLP+h3mvisuWEyybxNq5Eft3NWhHLPeUN72kpKZoI= -github.com/huin/goupnp v1.0.2/go.mod h1:0dxJBVBHqTMjIUMkESDTNgOOx/Mw5wYIfyFmdzSamkM= -github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= -github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/influxdata/flux v0.65.1/go.mod h1:J754/zds0vvpfwuq7Gc2wRdVwEodfpCFM7mYlOw2LqY= -github.com/influxdata/influxdb v1.8.3/go.mod h1:JugdFhsvvI8gadxOI6noqNeeBHvWNTbfYGtiAn+2jhI= -github.com/influxdata/influxdb-client-go/v2 v2.4.0/go.mod h1:vLNHdxTJkIf2mSLvGrpj8TCcISApPoXkaxP8g9uRlW8= -github.com/influxdata/influxql v1.1.1-0.20200828144457-65d3ef77d385/go.mod h1:gHp9y86a/pxhjJ+zMjNXiQAA197Xk9wLxaz+fGG+kWk= -github.com/influxdata/line-protocol v0.0.0-20180522152040-32c6aa80de5e/go.mod h1:4kt73NQhadE3daL3WhR5EJ/J2ocX0PZzwxQ0gXJ7oFE= -github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= -github.com/influxdata/line-protocol v0.0.0-20210311194329-9aa0e372d097/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= -github.com/influxdata/promql/v2 v2.12.0/go.mod h1:fxOPu+DY0bqCTCECchSRtWfc+0X19ybifQhZoQNF5D8= -github.com/influxdata/roaring v0.4.13-0.20180809181101-fc520f41fab6/go.mod h1:bSgUQ7q5ZLSO+bKBGqJiCBGAl+9DxyW63zLTujjUlOE= -github.com/influxdata/tdigest v0.0.0-20181121200506-bf2b5ad3c0a9/go.mod h1:Js0mqiSBE6Ffsg94weZZ2c+v/ciT8QRHFOap7EKDrR0= -github.com/influxdata/usage-client v0.0.0-20160829180054-6d3895376368/go.mod h1:Wbbw6tYNvwa5dlB6304Sd+82Z3f7PmVZHVKU637d4po= -github.com/jackpal/go-nat-pmp v1.0.2-0.20160603034137-1fa385a6f458 h1:6OvNmYgJyexcZ3pYbTI9jWx5tHo1Dee/tWbLMfPe2TA= -github.com/jackpal/go-nat-pmp v1.0.2-0.20160603034137-1fa385a6f458/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= -github.com/jedisct1/go-minisign v0.0.0-20190909160543-45766022959e/go.mod h1:G1CVv03EnqU1wYL2dFwXxW2An0az9JTl/ZsqXQeBlkU= +github.com/huin/goupnp v1.3.0 h1:UvLUlWDNpoUdYzb2TCn+MuTWtcjXKSza2n6CBdQ0xXc= +github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= -github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= -github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/jsternberg/zap-logfmt v1.0.0/go.mod h1:uvPs/4X51zdkcm5jXl5SYoN+4RK21K8mysFmDaM/h+o= -github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= -github.com/jwilder/encoding v0.0.0-20170811194829-b4e1701a28ef/go.mod h1:Ct9fl0F6iIOGgxJ5npU/IUOhOhqlVrGjyIZc8/MagT0= -github.com/karalabe/usb v0.0.0-20190919080040-51dc0efba356/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= -github.com/karalabe/usb v0.0.0-20211005121534-4c5740d64559/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= -github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= -github.com/klauspost/compress v1.4.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= -github.com/klauspost/crc32 v0.0.0-20161016154125-cb6bfca970f6/go.mod h1:+ZoRqAPRLkC4NPOvfYeR5KNOrY6TD+/sAC3HXPZgDYg= -github.com/klauspost/pgzip v1.0.2-0.20170402124221-0bf5dcad4ada/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= -github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/klauspost/compress v1.15.15 h1:EF27CXIuDsYJ6mmvtBRlEuB2UVOqHG1tAXgZ7yIO+lw= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= -github.com/labstack/echo/v4 v4.2.1/go.mod h1:AA49e0DZ8kk5jTOOCKNuPR6oTnBS0dYiM4FW1e6jwpg= -github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= -github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8= -github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/matryer/moq v0.0.0-20190312154309-6cfb0558e1bd/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.0/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.8 h1:c1ghPdyEDarC70ftn0y+A/Ee++9zz8ljHG1b13eJ0s8= -github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-ieproxy v0.0.0-20190610004146-91bb50d98149/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= -github.com/mattn/go-ieproxy v0.0.0-20190702010315-6dee0af9227d/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= -github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.5-0.20180830101745-3fb116b82035/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= -github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= -github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0= -github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= -github.com/mattn/go-tty v0.0.0-20180907095812-13ff1204f104/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE= -github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/miguelmota/go-ethereum-hdwallet v0.1.1/go.mod h1:f9m9uXokAHA6WNoYOPjj4AqjJS5pquQRiYYj/XSyPYc= +github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= +github.com/leanovate/gopter v0.2.9 h1:fQjYxZaynp97ozCzfOyOuAGOU4aU/z37zf/tOujFk7c= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= +github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU= +github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= github.com/mitchellh/mapstructure v1.4.1 h1:CpVNEelQCZBooIPDn+AR3NpivK/TIKU8bDxdASFVQag= -github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/pointerstructure v1.2.0 h1:O+i9nHnXS3l/9Wu7r4NrEdwA2VFTicjUEN1uBnDo34A= -github.com/mitchellh/pointerstructure v1.2.0/go.mod h1:BRAsLI5zgXmw97Lf6s25bs8ohIXc3tViBH44KcwB2g4= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae/go.mod h1:qAyveg+e4CE+eKJXWVjKXM4ck2QobLqTDytGJbLLhJg= -github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= -github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= -github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= +github.com/mmcloughlin/addchain v0.4.0 h1:SobOdjm2xLj1KkXN5/n0xTIWyZA2+s99UCY1iPfkHRY= +github.com/mmcloughlin/addchain v0.4.0/go.mod h1:A86O+tHqZLMNO4w6ZZ4FlVQEadcoqkyU72HC5wJ4RlU= +github.com/mmcloughlin/profile v0.1.1/go.mod h1:IhHD7q1ooxgwTgjxQYkACGA77oFTDdFVejUS1/tS/qU= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= -github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/opentracing/opentracing-go v1.0.3-0.20180606204148-bd9c31933947/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/paulbellamy/ratecounter v0.2.0/go.mod h1:Hfx1hDpSGoqxkVVpBi/IlYD7kChlfo5C6hzIHwPqfFE= -github.com/peterh/liner v1.0.1-0.20180619022028-8c1271fcf47f/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc= -github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= -github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= -github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/perun-network/perun-eth-backend v0.1.0 h1:MySwhdtz7MbwzIeGP5tJqdb6MZRBBKugzMt6nY5YLMs= +github.com/perun-network/perun-eth-backend v0.1.0/go.mod h1:yE+WLgaHzKVBRVsmXB2a9DWj55J8RSM2ippIes7DTns= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/term v0.0.0-20180730021639-bffc007b7fd5/go.mod h1:eCbImbZ95eXtAUIbLAuAVnBnwf83mjf6QIVH8SHYwqQ= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= -github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/tsdb v0.7.1 h1:YZcsG11NqnK4czYLrWd9mpEuAJIHVQLwdrleYfszMAA= -github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= -github.com/retailnext/hllpp v1.0.1-0.20180308014038-101a6d2f8b52/go.mod h1:RDpi1RftBQPUCDRw6SmxeaREsAaRKnOclghuzp/WRzc= -github.com/rjeczalik/notify v0.9.1 h1:CLCKso/QK1snAlnhNR/CNvNiFU2saUtjV0bx3EwNeCE= -github.com/rjeczalik/notify v0.9.1/go.mod h1:rKwnCoCGeuQnwBtTSPL9Dad03Vh2n40ePRrjvIXnJho= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/prometheus/client_golang v1.12.0 h1:C+UIj/QWtmqY13Arb8kwMt5j34/0Z2iKamrJ+ryC0Gg= +github.com/prometheus/client_model v0.2.1-0.20210607210712-147c58e9608a h1:CmF68hwI0XsOQ5UwlBopMi2Ow4Pbg32akc4KIVCOm+Y= +github.com/prometheus/common v0.32.1 h1:hWIdL3N2HoUx3B8j3YN9mWor0qhY/NlEKZEaXxuIRh4= +github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU= +github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= +github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik= -github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= -github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/segmentio/kafka-go v0.1.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= -github.com/segmentio/kafka-go v0.2.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= -github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= +github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible h1:Bn1aCHHRnjv4Bl16T8rcaFjYSrGrIZvpiGO6P3Q4GpU= github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= -github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4 h1:Gb2Tyox57NRNuZ2d3rmvB3pcmbu7O1RS3m8WRx7ilrg= -github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q= +github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= +github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/status-im/keycard-go v0.2.0 h1:QDLFswOQu1r5jsycloeQh3bVU8n/NatHHaZobtDnDzA= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1 h1:2vfRuCMp5sSVIDSqO8oNnWJq7mPa6KVP3iPIwFBuy8A= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.2.0/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= +github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/syndtr/goleveldb v1.0.1-0.20210305035536-64b5b1c73954/go.mod h1:u2MKkTVTVJWe5D1rCvame8WqhBd88EuIwODJZ1VHCPM= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/supranational/blst v0.3.11 h1:LyU6FolezeWAhvQk0k6O/d49jqgO52MSDDfYgbeoEm4= +github.com/supranational/blst v0.3.11/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= -github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= -github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= -github.com/tklauser/go-sysconf v0.3.5 h1:uu3Xl4nkLzQfXNsWn15rPc/HQCJKObbt1dKJeWp3vU4= -github.com/tklauser/go-sysconf v0.3.5/go.mod h1:MkWzOF4RMCshBAMXuhXJs64Rte09mITnppBXY/rYEFI= -github.com/tklauser/numcpus v0.2.2 h1:oyhllyrScuYI6g+h/zUvNXNp1wy7x8qQy3t/piefldA= -github.com/tklauser/numcpus v0.2.2/go.mod h1:x3qojaO3uyYt0i56EW/VUYs7uBvdl2fkfZFu0T9wgjM= -github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef h1:wHSqTBrZW24CsNJDfeh9Ex6Pm0Rcpc7qrgKBiL44vF4= -github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= -github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= -github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= -github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= -github.com/willf/bitset v1.1.3/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= -github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -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= +github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU= +github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI= +github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk= +github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY= +github.com/tyler-smith/go-bip39 v1.1.0 h1:5eUemwrMargf3BSLRRCalXT93Ns6pQJIjYQN2nyfOP8= +github.com/urfave/cli/v2 v2.25.7 h1:VAzn5oq403l5pHjc4OhD54+XGO9cdKVL/7lDjF+iKUs= +github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= 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= -golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190909091759-094676da4a83/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2 h1:It14KIkyBFYkHkwZ7k45minvA9aorojkyjGk9KJ5B/w= -golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= -golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= -golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= -golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= -golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= -golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= -golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/crypto v0.16.0 h1:mMMrFzRSCF0GvB7Ne27XVtVAaXLrPmgPC7/v0tkwHaY= +golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= +golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g= +golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k= +golang.org/x/mod v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc= +golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181011144130-49bb7cea24b1/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210220033124-5f55cee0dc0d/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE= +golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200107162124-548cf772de50/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200826173525-f9321e4c35a6/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210316164454-77fc1eacc6aa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210420205809-ac73e9fd8988/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912 h1:uCLL3g5wH2xjxVREVuAbP9JM5PPKjRbXKRa6IBjkzmU= -golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= +golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba h1:O8mE0/t419eoIwhTFpKVkHiTs/Igowgfkj25AcZrtiE= -golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200108203644-89082a384178/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= -gonum.org/v1/gonum v0.0.0-20181121035319-3f7ecaa7e8ca/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= -gonum.org/v1/gonum v0.6.0/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU= -gonum.org/v1/netlib v0.0.0-20181029234149-ec6d1f5cefe6/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= -gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= -gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= -google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= -google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190716160619-c506a9f90610/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200108215221-bd8f9a0ef82f/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= +golang.org/x/tools v0.13.0 h1:Iey4qkscZuv0VvIt8E0neZjtPVQFSc870HQ448QgEmQ= +golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= +google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce h1:+JknDZhAj8YMt7GC73Ei8pv4MzjDUNPHgQWJdtMAaDU= -gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= -gopkg.in/olebedev/go-duktape.v3 v3.0.0-20200619000410-60c24ae608a6/go.mod h1:uAJfkITjFhyEEuUfm7bsmCZRbW5WRq8s9EY8HZ6hCns= +gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/urfave/cli.v1 v1.20.0 h1:NdAVW6RYxDif9DhDHaAortIu956m2c0v+09AZBPTbE0= -gopkg.in/urfave/cli.v1 v1.20.0/go.mod h1:vuBzUtMdQeixQj8LVd+/98pzhxNGQoyuPBlsXHOQNO0= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -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.8.0 h1:ltGjAlv4Ep1WlR4G7xsCuRTw6Tbb1x+otQiZ9Dh20PM= -perun.network/go-perun v0.8.0/go.mod h1:VwcPIRO9hLyhHOjvl+8FZWtgh56c68E/miXGNPe2OdQ= -rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +perun.network/go-perun v0.10.6 h1:uj1e33yfCSfE75DK/uwjNp+TwvGG85Qhi6HuYQ9EPrQ= +perun.network/go-perun v0.10.6/go.mod h1:BGBZC3npkX457u87pjDd0NEIXr1a4dsH4H/YpLdGGe8= +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/tmplfunc v0.0.3 h1:53XFQh69AfOa8Tw0Jm7t+GV7KZhOi6jzsCzTtKbMvzU= +rsc.io/tmplfunc v0.0.3/go.mod h1:AG3sTPzElb1Io3Yg4voV9AGZJuleGAwaVRxL9M49PhA= diff --git a/app-channel/main.go b/app-channel/main.go index bf8cfd7..299e58e 100644 --- a/app-channel/main.go +++ b/app-channel/main.go @@ -17,7 +17,8 @@ package main import ( "log" "math/big" - ethwallet "perun.network/go-perun/backend/ethereum/wallet" + + ethwallet "github.com/perun-network/perun-eth-backend/wallet" "perun.network/go-perun/wire" "perun.network/perun-examples/app-channel/app" "perun.network/perun-examples/app-channel/client" diff --git a/app-channel/util.go b/app-channel/util.go index f006935..bbe65a2 100644 --- a/app-channel/util.go +++ b/app-channel/util.go @@ -20,7 +20,6 @@ import ( "math/big" "github.com/ethereum/go-ethereum/accounts/abi/bind" - ethwallet "perun.network/go-perun/backend/ethereum/wallet" "perun.network/perun-examples/app-channel/app" "perun.network/perun-examples/app-channel/contracts/generated/ticTacToeApp" @@ -29,8 +28,9 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/ethclient" - ethchannel "perun.network/go-perun/backend/ethereum/channel" - swallet "perun.network/go-perun/backend/ethereum/wallet/simple" + ethchannel "github.com/perun-network/perun-eth-backend/channel" + ethwallet "github.com/perun-network/perun-eth-backend/wallet" + swallet "github.com/perun-network/perun-eth-backend/wallet/simple" "perun.network/go-perun/channel" "perun.network/go-perun/wire" "perun.network/perun-examples/app-channel/client" @@ -61,7 +61,7 @@ func deployContracts(nodeURL string, chainID uint64, privateKey string) (adj, ah panic(err) } - const gasLimit = 1100000 // Must be sufficient for deploying TicTacToe.sol. + const gasLimit = 2200000 // Must be sufficient for deploying TicTacToe.sol. tops, err := cb.NewTransactor(context.TODO(), gasLimit, acc) if err != nil { panic(err) @@ -97,12 +97,14 @@ func setupGameClient( } w := swallet.NewWallet(k) acc := crypto.PubkeyToAddress(k.PublicKey) + eaddr := ethwallet.AsWalletAddr(acc) // Create and start client. c, err := client.SetupAppClient( bus, w, acc, + eaddr, nodeURL, chainID, adjudicator, From a67fcf7370c44cd4c89e3f07cb78e335421e7265 Mon Sep 17 00:00:00 2001 From: Minh Huy Tran Date: Wed, 13 Dec 2023 13:08:21 +0100 Subject: [PATCH 04/16] update contract to solidity 0.8.0 and generate new bindings --- app-channel/contracts/TicTacToeApp.sol | 4 +- app-channel/contracts/generate.sh | 36 ++- .../contracts/generated/ticTacToeApp/App.abi | 1 + .../contracts/generated/ticTacToeApp/App.bin | 0 .../generated/ticTacToeApp/Array.abi | 1 + .../generated/ticTacToeApp/Array.bin | 1 + .../generated/ticTacToeApp/Channel.abi | 1 + .../generated/ticTacToeApp/Channel.bin | 1 + .../generated/ticTacToeApp/ECDSA.abi | 1 + .../generated/ticTacToeApp/ECDSA.bin | 1 + .../generated/ticTacToeApp/SafeMath.abi | 1 + .../generated/ticTacToeApp/SafeMath.bin | 1 + .../contracts/generated/ticTacToeApp/Sig.abi | 1 + .../contracts/generated/ticTacToeApp/Sig.bin | 1 + .../generated/ticTacToeApp/Strings.abi | 1 + .../generated/ticTacToeApp/Strings.bin | 1 + .../generated/ticTacToeApp/TicTacToeApp.abi | 1 + .../generated/ticTacToeApp/TicTacToeApp.bin | 1 + .../generated/ticTacToeApp/TicTacToeApp.go | 271 ++++++++++++++++++ .../generated/ticTacToeApp/ticTacToeApp.go | 264 ----------------- app-channel/contracts/perun-eth-contracts | 2 +- 21 files changed, 316 insertions(+), 276 deletions(-) mode change 100644 => 100755 app-channel/contracts/generate.sh create mode 100644 app-channel/contracts/generated/ticTacToeApp/App.abi create mode 100644 app-channel/contracts/generated/ticTacToeApp/App.bin create mode 100644 app-channel/contracts/generated/ticTacToeApp/Array.abi create mode 100644 app-channel/contracts/generated/ticTacToeApp/Array.bin create mode 100644 app-channel/contracts/generated/ticTacToeApp/Channel.abi create mode 100644 app-channel/contracts/generated/ticTacToeApp/Channel.bin create mode 100644 app-channel/contracts/generated/ticTacToeApp/ECDSA.abi create mode 100644 app-channel/contracts/generated/ticTacToeApp/ECDSA.bin create mode 100644 app-channel/contracts/generated/ticTacToeApp/SafeMath.abi create mode 100644 app-channel/contracts/generated/ticTacToeApp/SafeMath.bin create mode 100644 app-channel/contracts/generated/ticTacToeApp/Sig.abi create mode 100644 app-channel/contracts/generated/ticTacToeApp/Sig.bin create mode 100644 app-channel/contracts/generated/ticTacToeApp/Strings.abi create mode 100644 app-channel/contracts/generated/ticTacToeApp/Strings.bin create mode 100644 app-channel/contracts/generated/ticTacToeApp/TicTacToeApp.abi create mode 100644 app-channel/contracts/generated/ticTacToeApp/TicTacToeApp.bin create mode 100644 app-channel/contracts/generated/ticTacToeApp/TicTacToeApp.go delete mode 100644 app-channel/contracts/generated/ticTacToeApp/ticTacToeApp.go diff --git a/app-channel/contracts/TicTacToeApp.sol b/app-channel/contracts/TicTacToeApp.sol index 66be830..276da69 100644 --- a/app-channel/contracts/TicTacToeApp.sol +++ b/app-channel/contracts/TicTacToeApp.sol @@ -14,7 +14,7 @@ // SPDX-License-Identifier: Apache-2.0 -pragma solidity ^0.7.0; +pragma solidity ^0.8.0; pragma experimental ABIEncoderV2; import "./perun-eth-contracts/contracts/App.sol"; @@ -71,7 +71,7 @@ contract TicTacToeApp is App { // Test final state. (bool isFinal, bool hasWinner, uint8 winner) = checkFinal(to.appData); require(to.isFinal == isFinal, "final flag"); - Array.requireEqualAddressArray(to.outcome.assets, from.outcome.assets); + Channel.requireEqualAssetArray(to.outcome.assets, from.outcome.assets); Channel.requireEqualSubAllocArray(to.outcome.locked, from.outcome.locked); uint256[][] memory expectedBalances = from.outcome.balances; if (hasWinner) { diff --git a/app-channel/contracts/generate.sh b/app-channel/contracts/generate.sh old mode 100644 new mode 100755 index 4bc15d7..4ea4d9f --- a/app-channel/contracts/generate.sh +++ b/app-channel/contracts/generate.sh @@ -2,28 +2,46 @@ set -e -if [ -z "$ABIGEN" ] +# Define ABIGEN and SOLC default values. +ABIGEN=abigen +SOLC=solc + +echo 'Please ensure that solc v0.8.15+ and abigen 1.10.18+ are installed.' + +if ! $ABIGEN --version then - ABIGEN=abigen + echo "'abigen' not found. Please add to PATH or set ABIGEN='path_to_abigen'." + exit 1 fi -if [ -z "$SOLC" ] +if ! $SOLC --version then - SOLC=solc + echo "'solc' not found. Please add to PATH or set SOLC='path_to_solc'." + exit 1 fi +echo "Please ensure that the repository was cloned with submodules: 'git submodule update --init --recursive'." + # Generate golang bindings from solidity contract # Argument 1: solidity contract file # Argument 2: golang contract name (used for package and file) generate_bindings() { - CONTRACT_SOL_FILE=$1 - CONTRACT_GO_NAME=$2 - PKG=$CONTRACT_GO_NAME + FILE=$1 + PKG=$2 + CONTRACT=$FILE GENDIR=./generated/$PKG + + echo "Generating $PKG bindings..." + rm -r $GENDIR mkdir -p $GENDIR - $ABIGEN --pkg $PKG --sol $CONTRACT_SOL_FILE --out $GENDIR/$CONTRACT_GO_NAME.go --solc $SOLC + + # Compile and generate binary runtime + $SOLC --abi --bin --optimize $FILE.sol -o $GENDIR + + # Generate bindings. + $ABIGEN --pkg $PKG --abi $GENDIR/$FILE.abi --bin $GENDIR/$FILE.bin --out $GENDIR/$CONTRACT.go } -generate_bindings ./TicTacToeApp.sol ticTacToeApp +generate_bindings "TicTacToeApp" "ticTacToeApp" # generate_bindings ./perun-eth-contracts/contracts/Adjudicator.sol adjudicator # generate_bindings ./perun-eth-contracts/contracts/AssetHolderETH.sol assetHolderETH diff --git a/app-channel/contracts/generated/ticTacToeApp/App.abi b/app-channel/contracts/generated/ticTacToeApp/App.abi new file mode 100644 index 0000000..746273b --- /dev/null +++ b/app-channel/contracts/generated/ticTacToeApp/App.abi @@ -0,0 +1 @@ +[{"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":"struct Channel.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":"struct Channel.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":"struct Channel.SubAlloc[]","name":"locked","type":"tuple[]"}],"internalType":"struct Channel.Allocation","name":"outcome","type":"tuple"},{"internalType":"bytes","name":"appData","type":"bytes"},{"internalType":"bool","name":"isFinal","type":"bool"}],"internalType":"struct Channel.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":"struct Channel.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":"struct Channel.SubAlloc[]","name":"locked","type":"tuple[]"}],"internalType":"struct Channel.Allocation","name":"outcome","type":"tuple"},{"internalType":"bytes","name":"appData","type":"bytes"},{"internalType":"bool","name":"isFinal","type":"bool"}],"internalType":"struct Channel.State","name":"to","type":"tuple"},{"internalType":"uint256","name":"actorIdx","type":"uint256"}],"name":"validTransition","outputs":[],"stateMutability":"pure","type":"function"}] \ No newline at end of file diff --git a/app-channel/contracts/generated/ticTacToeApp/App.bin b/app-channel/contracts/generated/ticTacToeApp/App.bin new file mode 100644 index 0000000..e69de29 diff --git a/app-channel/contracts/generated/ticTacToeApp/Array.abi b/app-channel/contracts/generated/ticTacToeApp/Array.abi new file mode 100644 index 0000000..0637a08 --- /dev/null +++ b/app-channel/contracts/generated/ticTacToeApp/Array.abi @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/app-channel/contracts/generated/ticTacToeApp/Array.bin b/app-channel/contracts/generated/ticTacToeApp/Array.bin new file mode 100644 index 0000000..3661f5e --- /dev/null +++ b/app-channel/contracts/generated/ticTacToeApp/Array.bin @@ -0,0 +1 @@ +60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f80fdfea264697066735822122064a97a4b5ce9a6010d94440fc46daa4929cd2c32f94f399ff1f7c859cba0cd1864736f6c63430008170033 \ No newline at end of file diff --git a/app-channel/contracts/generated/ticTacToeApp/Channel.abi b/app-channel/contracts/generated/ticTacToeApp/Channel.abi new file mode 100644 index 0000000..0637a08 --- /dev/null +++ b/app-channel/contracts/generated/ticTacToeApp/Channel.abi @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/app-channel/contracts/generated/ticTacToeApp/Channel.bin b/app-channel/contracts/generated/ticTacToeApp/Channel.bin new file mode 100644 index 0000000..abb5306 --- /dev/null +++ b/app-channel/contracts/generated/ticTacToeApp/Channel.bin @@ -0,0 +1 @@ +60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f80fdfea2646970667358221220ed1e36bd83e2fba7443e4494e11b02d40be995c475d92b7c7e185a69513d962164736f6c63430008170033 \ No newline at end of file diff --git a/app-channel/contracts/generated/ticTacToeApp/ECDSA.abi b/app-channel/contracts/generated/ticTacToeApp/ECDSA.abi new file mode 100644 index 0000000..0637a08 --- /dev/null +++ b/app-channel/contracts/generated/ticTacToeApp/ECDSA.abi @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/app-channel/contracts/generated/ticTacToeApp/ECDSA.bin b/app-channel/contracts/generated/ticTacToeApp/ECDSA.bin new file mode 100644 index 0000000..afd6d38 --- /dev/null +++ b/app-channel/contracts/generated/ticTacToeApp/ECDSA.bin @@ -0,0 +1 @@ +60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f80fdfea26469706673582212208fd07e021411b2fb88005a7568185ab748d72d2c840ae3cab4c4abd9c04cb82c64736f6c63430008170033 \ No newline at end of file diff --git a/app-channel/contracts/generated/ticTacToeApp/SafeMath.abi b/app-channel/contracts/generated/ticTacToeApp/SafeMath.abi new file mode 100644 index 0000000..0637a08 --- /dev/null +++ b/app-channel/contracts/generated/ticTacToeApp/SafeMath.abi @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/app-channel/contracts/generated/ticTacToeApp/SafeMath.bin b/app-channel/contracts/generated/ticTacToeApp/SafeMath.bin new file mode 100644 index 0000000..8ebe480 --- /dev/null +++ b/app-channel/contracts/generated/ticTacToeApp/SafeMath.bin @@ -0,0 +1 @@ +60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f80fdfea2646970667358221220608cfd50e49c8bb167018ffb20f65dffa64d84dc23d664cccf28f983c448883664736f6c63430008170033 \ No newline at end of file diff --git a/app-channel/contracts/generated/ticTacToeApp/Sig.abi b/app-channel/contracts/generated/ticTacToeApp/Sig.abi new file mode 100644 index 0000000..0637a08 --- /dev/null +++ b/app-channel/contracts/generated/ticTacToeApp/Sig.abi @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/app-channel/contracts/generated/ticTacToeApp/Sig.bin b/app-channel/contracts/generated/ticTacToeApp/Sig.bin new file mode 100644 index 0000000..808d91c --- /dev/null +++ b/app-channel/contracts/generated/ticTacToeApp/Sig.bin @@ -0,0 +1 @@ +60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f80fdfea264697066735822122043f0d22e185ecc6c33134b023a39ad01a58c9ff1388e17f423e2e608dc78739264736f6c63430008170033 \ No newline at end of file diff --git a/app-channel/contracts/generated/ticTacToeApp/Strings.abi b/app-channel/contracts/generated/ticTacToeApp/Strings.abi new file mode 100644 index 0000000..0637a08 --- /dev/null +++ b/app-channel/contracts/generated/ticTacToeApp/Strings.abi @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/app-channel/contracts/generated/ticTacToeApp/Strings.bin b/app-channel/contracts/generated/ticTacToeApp/Strings.bin new file mode 100644 index 0000000..3eab34f --- /dev/null +++ b/app-channel/contracts/generated/ticTacToeApp/Strings.bin @@ -0,0 +1 @@ +60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f80fdfea264697066735822122021c0879aebe67319994fcd2505052fdd9aeb7f49678f90dd8e6a4d315a6b159464736f6c63430008170033 \ No newline at end of file diff --git a/app-channel/contracts/generated/ticTacToeApp/TicTacToeApp.abi b/app-channel/contracts/generated/ticTacToeApp/TicTacToeApp.abi new file mode 100644 index 0000000..c078755 --- /dev/null +++ b/app-channel/contracts/generated/ticTacToeApp/TicTacToeApp.abi @@ -0,0 +1 @@ +[{"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":"struct Channel.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":"struct Channel.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":"struct Channel.SubAlloc[]","name":"locked","type":"tuple[]"}],"internalType":"struct Channel.Allocation","name":"outcome","type":"tuple"},{"internalType":"bytes","name":"appData","type":"bytes"},{"internalType":"bool","name":"isFinal","type":"bool"}],"internalType":"struct Channel.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":"struct Channel.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":"struct Channel.SubAlloc[]","name":"locked","type":"tuple[]"}],"internalType":"struct Channel.Allocation","name":"outcome","type":"tuple"},{"internalType":"bytes","name":"appData","type":"bytes"},{"internalType":"bool","name":"isFinal","type":"bool"}],"internalType":"struct Channel.State","name":"to","type":"tuple"},{"internalType":"uint256","name":"signerIdx","type":"uint256"}],"name":"validTransition","outputs":[],"stateMutability":"pure","type":"function"}] \ No newline at end of file diff --git a/app-channel/contracts/generated/ticTacToeApp/TicTacToeApp.bin b/app-channel/contracts/generated/ticTacToeApp/TicTacToeApp.bin new file mode 100644 index 0000000..3f96990 --- /dev/null +++ b/app-channel/contracts/generated/ticTacToeApp/TicTacToeApp.bin @@ -0,0 +1 @@ +608060405234801561000f575f80fd5b506114b98061001d5f395ff3fe608060405234801561000f575f80fd5b5060043610610029575f3560e01c80636d7eba0d1461002d575b5f80fd5b61004061003b366004610f46565b610042565b005b60026100516040860186610fd7565b90501461009e5760405162461bcd60e51b81526020600482015260166024820152756e756d626572206f66207061727469636970616e747360501b60448201526064015b60405180910390fd5b5f6100ac606085018561101d565b5f816100ba576100ba611060565b919091013560f81c9150600990506100d360015f611088565b6100dd9190611088565b60ff166100ed606085018561101d565b90501461012a5760405162461bcd60e51b815260206004820152600b60248201526a0c8c2e8c240d8cadccee8d60ab1b6044820152606401610095565b818160ff161461016f5760405162461bcd60e51b815260206004820152601060248201526f30b1ba37b9103737ba1039b4b3b732b960811b6044820152606401610095565b61017c606084018461101d565b5f8161018a5761018a611060565b919091013560f81c905060026101a1836001611088565b6101ab91906110a7565b60ff16146101e85760405162461bcd60e51b815260206004820152600a6024820152693732bc3a1030b1ba37b960b11b6044820152606401610095565b5f806101f5600182611088565b60ff1690505b600961020860015f611088565b6102129190611088565b60ff1681101561039957600261022b606087018761101d565b8381811061023b5761023b611060565b9050013560f81c60f81b60f81c60ff1611156102865760405162461bcd60e51b815260206004820152600a602482015269677269642076616c756560b01b6044820152606401610095565b610293606087018761101d565b828181106102a3576102a3611060565b909101356001600160f81b03191690506102c0606087018761101d565b838181106102d0576102d0611060565b9050013560f81c60f81b6001600160f81b03191614610391575f6102f7606088018861101d565b8381811061030757610307611060565b9050013560f81c60f81b60f81c60ff16146103505760405162461bcd60e51b81526020600482015260096024820152686f766572777269746560b81b6044820152606401610095565b811561038c5760405162461bcd60e51b815260206004820152600b60248201526a74776f20616374696f6e7360a81b6044820152606401610095565b600191505b6001016101fb565b505f80806103e66103ad606089018961101d565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506107a492505050565b9194509250905082151561040060a0890160808a016110d4565b15151461043c5760405162461bcd60e51b815260206004820152600a60248201526966696e616c20666c616760b01b6044820152606401610095565b61051561044c60408901896110fa565b6104569080611118565b808060200260200160405190810160405280939291908181526020015f905b828210156104a157610492604083028601368190038101906111cc565b81526020019060010190610475565b50505050508980604001906104b691906110fa565b6104c09080611118565b808060200260200160405190810160405280939291908181526020015f905b8282101561050b576104fc604083028601368190038101906111cc565b815260200190600101906104df565b505050505061098f565b61056561052560408901896110fa565b610533906040810190610fd7565b61053c916112ba565b61054960408b018b6110fa565b610557906040810190610fd7565b610560916112ba565b610a34565b5f61057360408a018a6110fa565b610581906020810190610fd7565b61058a916113e7565b9050821561076b575f61059e836001611457565b9050815167ffffffffffffffff8111156105ba576105ba61115e565b6040519080825280602002602001820160405280156105ed57816020015b60608152602001906001900390816105d85790505b5091505f5b82518110156107685760408051600280825260608201835290916020830190803683370190505083828151811061062b5761062b611060565b602090810291909101015261064360408c018c6110fa565b610651906020810190610fd7565b8281811061066157610661611060565b90506020028101906106739190610fd7565b600181811061068457610684611060565b905060200201358b806040019061069b91906110fa565b6106a9906020810190610fd7565b838181106106b9576106b9611060565b90506020028101906106cb9190610fd7565b5f8181106106db576106db611060565b905060200201356106ec9190611470565b8382815181106106fe576106fe611060565b60200260200101518560ff168151811061071a5761071a611060565b6020026020010181815250505f83828151811061073957610739611060565b60200260200101518360ff168151811061075557610755611060565b60209081029190910101526001016105f2565b50505b61079861077b60408a018a6110fa565b610789906020810190610fd7565b610792916113e7565b82610ad4565b50505050505050505050565b60408051610160810182525f610100820181815260016101208401819052600261014085018190529184528451606081810187526003808352600460208481018290526005858b01819052818a019590955289518085018b52600680825260078284018190526008838e018190528c8e01939093528c518088018e528b815280850196909652858d01829052868c01959095528b518087018d52978852878301849052878c019490945260808a019690965289518085018b5287815280820195909552848a0186905260a089019490945288518084018a52878152808501829052808a019590955260c088019490945287519182018852938152908101919091529384015260e082019290925281908190815b6008811015610934575f806108e2888585600881106108d8576108d8611060565b6020020151610b74565b91509150811561092a575f1960ff82160161090a576001805f96509650965050505050610988565b60011960ff82160161092a57600180600196509650965050505050610988565b50506001016108b7565b505f5b855181101561097b575f60ff1686828151811061095657610956611060565b016020015160f81c14610973575f805f9450945094505050610988565b600101610937565b5060015f80935093509350505b9193909250565b80518251146109e05760405162461bcd60e51b815260206004820152601760248201527f41737365745b5d3a20756e657175616c206c656e6774680000000000000000006044820152606401610095565b5f5b8251811015610a2f57610a27838281518110610a0057610a00611060565b6020026020010151838381518110610a1a57610a1a611060565b6020026020010151610c4a565b6001016109e2565b505050565b8051825114610a855760405162461bcd60e51b815260206004820152601a60248201527f537562416c6c6f635b5d3a20756e657175616c206c656e6774680000000000006044820152606401610095565b5f5b8251811015610a2f57610acc838281518110610aa557610aa5611060565b6020026020010151838381518110610abf57610abf611060565b6020026020010151610cf9565b600101610a87565b8051825114610b255760405162461bcd60e51b815260206004820152601b60248201527f75696e743235365b5d5b5d3a20756e657175616c206c656e67746800000000006044820152606401610095565b5f5b8251811015610a2f57610b6c838281518110610b4557610b45611060565b6020026020010151838381518110610b5f57610b5f611060565b6020026020010151610d65565b600101610b27565b5f80808484826020020151610b8a60015f611088565b610b949190611088565b60ff1681518110610ba757610ba7611060565b01602001516001600160f81b031916905060015b6003811015610c38576001600160f81b0319821686868360038110610be257610be2611060565b6020020151610bf260015f611088565b610bfc9190611088565b60ff1681518110610c0f57610c0f611060565b01602001516001600160f81b03191614610c30575f80935093505050610c43565b600101610bbb565b506001925060f81c90505b9250929050565b8051825114610c945760405162461bcd60e51b8152602060048201526016602482015275105cdcd95d0e881d5b995c5d585b0818da185a5b925160521b6044820152606401610095565b80602001516001600160a01b031682602001516001600160a01b031614610cf55760405162461bcd60e51b815260206004820152601560248201527420b9b9b2ba1d103ab732b8bab0b6103437b63232b960591b6044820152606401610095565b5050565b8051825114610d415760405162461bcd60e51b815260206004820152601460248201527314dd58905b1b1bd8ce881d5b995c5d585b08125160621b6044820152606401610095565b610d5382602001518260200151610d65565b610cf582604001518260400151610e4a565b8051825114610db65760405162461bcd60e51b815260206004820152601960248201527f75696e743235365b5d3a20756e657175616c206c656e677468000000000000006044820152606401610095565b5f5b8251811015610a2f57818181518110610dd357610dd3611060565b6020026020010151838281518110610ded57610ded611060565b602002602001015114610e425760405162461bcd60e51b815260206004820152601760248201527f75696e743235365b5d3a20756e657175616c206974656d0000000000000000006044820152606401610095565b600101610db8565b8051825114610e9b5760405162461bcd60e51b815260206004820152601860248201527f75696e7431365b5d3a20756e657175616c206c656e67746800000000000000006044820152606401610095565b5f5b8251811015610a2f57818181518110610eb857610eb8611060565b602002602001015161ffff16838281518110610ed657610ed6611060565b602002602001015161ffff1614610f285760405162461bcd60e51b815260206004820152601660248201527575696e7431365b5d3a20756e657175616c206974656d60501b6044820152606401610095565b600101610e9d565b5f60a08284031215610f40575f80fd5b50919050565b5f805f8060808587031215610f59575f80fd5b843567ffffffffffffffff80821115610f70575f80fd5b9086019060c08289031215610f83575f80fd5b90945060208601359080821115610f98575f80fd5b610fa488838901610f30565b94506040870135915080821115610fb9575f80fd5b50610fc687828801610f30565b949793965093946060013593505050565b5f808335601e19843603018112610fec575f80fd5b83018035915067ffffffffffffffff821115611006575f80fd5b6020019150600581901b3603821315610c43575f80fd5b5f808335601e19843603018112611032575f80fd5b83018035915067ffffffffffffffff82111561104c575f80fd5b602001915036819003821315610c43575f80fd5b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b60ff81811683821601908111156110a1576110a1611074565b92915050565b5f60ff8316806110c557634e487b7160e01b5f52601260045260245ffd5b8060ff84160691505092915050565b5f602082840312156110e4575f80fd5b813580151581146110f3575f80fd5b9392505050565b5f8235605e1983360301811261110e575f80fd5b9190910192915050565b5f808335601e1984360301811261112d575f80fd5b83018035915067ffffffffffffffff821115611147575f80fd5b6020019150600681901b3603821315610c43575f80fd5b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff811182821017156111955761119561115e565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156111c4576111c461115e565b604052919050565b5f604082840312156111dc575f80fd5b6040516040810181811067ffffffffffffffff821117156111ff576111ff61115e565b6040528235815260208301356001600160a01b038116811461121f575f80fd5b60208201529392505050565b5f67ffffffffffffffff8211156112445761124461115e565b5060051b60200190565b5f82601f83011261125d575f80fd5b8135602061127261126d8361122b565b61119b565b8083825260208201915060208460051b870101935086841115611293575f80fd5b602086015b848110156112af5780358352918301918301611298565b509695505050505050565b5f6112c761126d8461122b565b83815260208082019190600586811b8601368111156112e4575f80fd5b865b818110156113da57803567ffffffffffffffff80821115611305575f80fd5b818a01915060608236031215611319575f80fd5b611321611172565b823581528683013582811115611335575f80fd5b6113413682860161124e565b888301525060408084013583811115611358575f80fd5b939093019236601f85011261136b575f80fd5b8335925061137b61126d8461122b565b83815292871b84018801928881019036851115611396575f80fd5b948901945b848610156113c357853561ffff811681146113b4575f80fd5b8252948901949089019061139b565b9183019190915250885250509483019483016112e6565b5092979650505050505050565b5f6113f461126d8461122b565b80848252602080830192508560051b850136811115611411575f80fd5b855b8181101561144b57803567ffffffffffffffff811115611431575f80fd5b61143d36828a0161124e565b865250938201938201611413565b50919695505050505050565b60ff82811682821603908111156110a1576110a1611074565b808201808211156110a1576110a161107456fea26469706673582212202c009f94c620318f23c7f0595d7e8d81cc6ff93f3b0953fb2d514716734ce65764736f6c63430008170033 \ No newline at end of file diff --git a/app-channel/contracts/generated/ticTacToeApp/TicTacToeApp.go b/app-channel/contracts/generated/ticTacToeApp/TicTacToeApp.go new file mode 100644 index 0000000..97c29fa --- /dev/null +++ b/app-channel/contracts/generated/ticTacToeApp/TicTacToeApp.go @@ -0,0 +1,271 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package ticTacToeApp + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "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/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = 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 + 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 +} + +// 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 + App common.Address + LedgerChannel bool + VirtualChannel bool +} + +// ChannelState is an auto generated low-level Go binding around an user-defined struct. +type ChannelState struct { + ChannelID [32]byte + Version uint64 + Outcome ChannelAllocation + AppData []byte + IsFinal bool +} + +// ChannelSubAlloc is an auto generated low-level Go binding around an user-defined struct. +type ChannelSubAlloc struct { + ID [32]byte + Balances []*big.Int + IndexMap []uint16 +} + +// TicTacToeAppMetaData contains all meta data concerning the TicTacToeApp contract. +var TicTacToeAppMetaData = &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\":\"signerIdx\",\"type\":\"uint256\"}],\"name\":\"validTransition\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"}]", + Bin: "0x608060405234801561000f575f80fd5b506114b98061001d5f395ff3fe608060405234801561000f575f80fd5b5060043610610029575f3560e01c80636d7eba0d1461002d575b5f80fd5b61004061003b366004610f46565b610042565b005b60026100516040860186610fd7565b90501461009e5760405162461bcd60e51b81526020600482015260166024820152756e756d626572206f66207061727469636970616e747360501b60448201526064015b60405180910390fd5b5f6100ac606085018561101d565b5f816100ba576100ba611060565b919091013560f81c9150600990506100d360015f611088565b6100dd9190611088565b60ff166100ed606085018561101d565b90501461012a5760405162461bcd60e51b815260206004820152600b60248201526a0c8c2e8c240d8cadccee8d60ab1b6044820152606401610095565b818160ff161461016f5760405162461bcd60e51b815260206004820152601060248201526f30b1ba37b9103737ba1039b4b3b732b960811b6044820152606401610095565b61017c606084018461101d565b5f8161018a5761018a611060565b919091013560f81c905060026101a1836001611088565b6101ab91906110a7565b60ff16146101e85760405162461bcd60e51b815260206004820152600a6024820152693732bc3a1030b1ba37b960b11b6044820152606401610095565b5f806101f5600182611088565b60ff1690505b600961020860015f611088565b6102129190611088565b60ff1681101561039957600261022b606087018761101d565b8381811061023b5761023b611060565b9050013560f81c60f81b60f81c60ff1611156102865760405162461bcd60e51b815260206004820152600a602482015269677269642076616c756560b01b6044820152606401610095565b610293606087018761101d565b828181106102a3576102a3611060565b909101356001600160f81b03191690506102c0606087018761101d565b838181106102d0576102d0611060565b9050013560f81c60f81b6001600160f81b03191614610391575f6102f7606088018861101d565b8381811061030757610307611060565b9050013560f81c60f81b60f81c60ff16146103505760405162461bcd60e51b81526020600482015260096024820152686f766572777269746560b81b6044820152606401610095565b811561038c5760405162461bcd60e51b815260206004820152600b60248201526a74776f20616374696f6e7360a81b6044820152606401610095565b600191505b6001016101fb565b505f80806103e66103ad606089018961101d565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506107a492505050565b9194509250905082151561040060a0890160808a016110d4565b15151461043c5760405162461bcd60e51b815260206004820152600a60248201526966696e616c20666c616760b01b6044820152606401610095565b61051561044c60408901896110fa565b6104569080611118565b808060200260200160405190810160405280939291908181526020015f905b828210156104a157610492604083028601368190038101906111cc565b81526020019060010190610475565b50505050508980604001906104b691906110fa565b6104c09080611118565b808060200260200160405190810160405280939291908181526020015f905b8282101561050b576104fc604083028601368190038101906111cc565b815260200190600101906104df565b505050505061098f565b61056561052560408901896110fa565b610533906040810190610fd7565b61053c916112ba565b61054960408b018b6110fa565b610557906040810190610fd7565b610560916112ba565b610a34565b5f61057360408a018a6110fa565b610581906020810190610fd7565b61058a916113e7565b9050821561076b575f61059e836001611457565b9050815167ffffffffffffffff8111156105ba576105ba61115e565b6040519080825280602002602001820160405280156105ed57816020015b60608152602001906001900390816105d85790505b5091505f5b82518110156107685760408051600280825260608201835290916020830190803683370190505083828151811061062b5761062b611060565b602090810291909101015261064360408c018c6110fa565b610651906020810190610fd7565b8281811061066157610661611060565b90506020028101906106739190610fd7565b600181811061068457610684611060565b905060200201358b806040019061069b91906110fa565b6106a9906020810190610fd7565b838181106106b9576106b9611060565b90506020028101906106cb9190610fd7565b5f8181106106db576106db611060565b905060200201356106ec9190611470565b8382815181106106fe576106fe611060565b60200260200101518560ff168151811061071a5761071a611060565b6020026020010181815250505f83828151811061073957610739611060565b60200260200101518360ff168151811061075557610755611060565b60209081029190910101526001016105f2565b50505b61079861077b60408a018a6110fa565b610789906020810190610fd7565b610792916113e7565b82610ad4565b50505050505050505050565b60408051610160810182525f610100820181815260016101208401819052600261014085018190529184528451606081810187526003808352600460208481018290526005858b01819052818a019590955289518085018b52600680825260078284018190526008838e018190528c8e01939093528c518088018e528b815280850196909652858d01829052868c01959095528b518087018d52978852878301849052878c019490945260808a019690965289518085018b5287815280820195909552848a0186905260a089019490945288518084018a52878152808501829052808a019590955260c088019490945287519182018852938152908101919091529384015260e082019290925281908190815b6008811015610934575f806108e2888585600881106108d8576108d8611060565b6020020151610b74565b91509150811561092a575f1960ff82160161090a576001805f96509650965050505050610988565b60011960ff82160161092a57600180600196509650965050505050610988565b50506001016108b7565b505f5b855181101561097b575f60ff1686828151811061095657610956611060565b016020015160f81c14610973575f805f9450945094505050610988565b600101610937565b5060015f80935093509350505b9193909250565b80518251146109e05760405162461bcd60e51b815260206004820152601760248201527f41737365745b5d3a20756e657175616c206c656e6774680000000000000000006044820152606401610095565b5f5b8251811015610a2f57610a27838281518110610a0057610a00611060565b6020026020010151838381518110610a1a57610a1a611060565b6020026020010151610c4a565b6001016109e2565b505050565b8051825114610a855760405162461bcd60e51b815260206004820152601a60248201527f537562416c6c6f635b5d3a20756e657175616c206c656e6774680000000000006044820152606401610095565b5f5b8251811015610a2f57610acc838281518110610aa557610aa5611060565b6020026020010151838381518110610abf57610abf611060565b6020026020010151610cf9565b600101610a87565b8051825114610b255760405162461bcd60e51b815260206004820152601b60248201527f75696e743235365b5d5b5d3a20756e657175616c206c656e67746800000000006044820152606401610095565b5f5b8251811015610a2f57610b6c838281518110610b4557610b45611060565b6020026020010151838381518110610b5f57610b5f611060565b6020026020010151610d65565b600101610b27565b5f80808484826020020151610b8a60015f611088565b610b949190611088565b60ff1681518110610ba757610ba7611060565b01602001516001600160f81b031916905060015b6003811015610c38576001600160f81b0319821686868360038110610be257610be2611060565b6020020151610bf260015f611088565b610bfc9190611088565b60ff1681518110610c0f57610c0f611060565b01602001516001600160f81b03191614610c30575f80935093505050610c43565b600101610bbb565b506001925060f81c90505b9250929050565b8051825114610c945760405162461bcd60e51b8152602060048201526016602482015275105cdcd95d0e881d5b995c5d585b0818da185a5b925160521b6044820152606401610095565b80602001516001600160a01b031682602001516001600160a01b031614610cf55760405162461bcd60e51b815260206004820152601560248201527420b9b9b2ba1d103ab732b8bab0b6103437b63232b960591b6044820152606401610095565b5050565b8051825114610d415760405162461bcd60e51b815260206004820152601460248201527314dd58905b1b1bd8ce881d5b995c5d585b08125160621b6044820152606401610095565b610d5382602001518260200151610d65565b610cf582604001518260400151610e4a565b8051825114610db65760405162461bcd60e51b815260206004820152601960248201527f75696e743235365b5d3a20756e657175616c206c656e677468000000000000006044820152606401610095565b5f5b8251811015610a2f57818181518110610dd357610dd3611060565b6020026020010151838281518110610ded57610ded611060565b602002602001015114610e425760405162461bcd60e51b815260206004820152601760248201527f75696e743235365b5d3a20756e657175616c206974656d0000000000000000006044820152606401610095565b600101610db8565b8051825114610e9b5760405162461bcd60e51b815260206004820152601860248201527f75696e7431365b5d3a20756e657175616c206c656e67746800000000000000006044820152606401610095565b5f5b8251811015610a2f57818181518110610eb857610eb8611060565b602002602001015161ffff16838281518110610ed657610ed6611060565b602002602001015161ffff1614610f285760405162461bcd60e51b815260206004820152601660248201527575696e7431365b5d3a20756e657175616c206974656d60501b6044820152606401610095565b600101610e9d565b5f60a08284031215610f40575f80fd5b50919050565b5f805f8060808587031215610f59575f80fd5b843567ffffffffffffffff80821115610f70575f80fd5b9086019060c08289031215610f83575f80fd5b90945060208601359080821115610f98575f80fd5b610fa488838901610f30565b94506040870135915080821115610fb9575f80fd5b50610fc687828801610f30565b949793965093946060013593505050565b5f808335601e19843603018112610fec575f80fd5b83018035915067ffffffffffffffff821115611006575f80fd5b6020019150600581901b3603821315610c43575f80fd5b5f808335601e19843603018112611032575f80fd5b83018035915067ffffffffffffffff82111561104c575f80fd5b602001915036819003821315610c43575f80fd5b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b60ff81811683821601908111156110a1576110a1611074565b92915050565b5f60ff8316806110c557634e487b7160e01b5f52601260045260245ffd5b8060ff84160691505092915050565b5f602082840312156110e4575f80fd5b813580151581146110f3575f80fd5b9392505050565b5f8235605e1983360301811261110e575f80fd5b9190910192915050565b5f808335601e1984360301811261112d575f80fd5b83018035915067ffffffffffffffff821115611147575f80fd5b6020019150600681901b3603821315610c43575f80fd5b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff811182821017156111955761119561115e565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156111c4576111c461115e565b604052919050565b5f604082840312156111dc575f80fd5b6040516040810181811067ffffffffffffffff821117156111ff576111ff61115e565b6040528235815260208301356001600160a01b038116811461121f575f80fd5b60208201529392505050565b5f67ffffffffffffffff8211156112445761124461115e565b5060051b60200190565b5f82601f83011261125d575f80fd5b8135602061127261126d8361122b565b61119b565b8083825260208201915060208460051b870101935086841115611293575f80fd5b602086015b848110156112af5780358352918301918301611298565b509695505050505050565b5f6112c761126d8461122b565b83815260208082019190600586811b8601368111156112e4575f80fd5b865b818110156113da57803567ffffffffffffffff80821115611305575f80fd5b818a01915060608236031215611319575f80fd5b611321611172565b823581528683013582811115611335575f80fd5b6113413682860161124e565b888301525060408084013583811115611358575f80fd5b939093019236601f85011261136b575f80fd5b8335925061137b61126d8461122b565b83815292871b84018801928881019036851115611396575f80fd5b948901945b848610156113c357853561ffff811681146113b4575f80fd5b8252948901949089019061139b565b9183019190915250885250509483019483016112e6565b5092979650505050505050565b5f6113f461126d8461122b565b80848252602080830192508560051b850136811115611411575f80fd5b855b8181101561144b57803567ffffffffffffffff811115611431575f80fd5b61143d36828a0161124e565b865250938201938201611413565b50919695505050505050565b60ff82811682821603908111156110a1576110a1611074565b808201808211156110a1576110a161107456fea26469706673582212202c009f94c620318f23c7f0595d7e8d81cc6ff93f3b0953fb2d514716734ce65764736f6c63430008170033", +} + +// TicTacToeAppABI is the input ABI used to generate the binding from. +// Deprecated: Use TicTacToeAppMetaData.ABI instead. +var TicTacToeAppABI = TicTacToeAppMetaData.ABI + +// TicTacToeAppBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use TicTacToeAppMetaData.Bin instead. +var TicTacToeAppBin = TicTacToeAppMetaData.Bin + +// DeployTicTacToeApp deploys a new Ethereum contract, binding an instance of TicTacToeApp to it. +func DeployTicTacToeApp(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *TicTacToeApp, error) { + parsed, err := TicTacToeAppMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(TicTacToeAppBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &TicTacToeApp{TicTacToeAppCaller: TicTacToeAppCaller{contract: contract}, TicTacToeAppTransactor: TicTacToeAppTransactor{contract: contract}, TicTacToeAppFilterer: TicTacToeAppFilterer{contract: contract}}, nil +} + +// TicTacToeApp is an auto generated Go binding around an Ethereum contract. +type TicTacToeApp struct { + TicTacToeAppCaller // Read-only binding to the contract + TicTacToeAppTransactor // Write-only binding to the contract + TicTacToeAppFilterer // Log filterer for contract events +} + +// TicTacToeAppCaller is an auto generated read-only Go binding around an Ethereum contract. +type TicTacToeAppCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// TicTacToeAppTransactor is an auto generated write-only Go binding around an Ethereum contract. +type TicTacToeAppTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// TicTacToeAppFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type TicTacToeAppFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// TicTacToeAppSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type TicTacToeAppSession struct { + Contract *TicTacToeApp // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// TicTacToeAppCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type TicTacToeAppCallerSession struct { + Contract *TicTacToeAppCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// TicTacToeAppTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type TicTacToeAppTransactorSession struct { + Contract *TicTacToeAppTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// TicTacToeAppRaw is an auto generated low-level Go binding around an Ethereum contract. +type TicTacToeAppRaw struct { + Contract *TicTacToeApp // Generic contract binding to access the raw methods on +} + +// TicTacToeAppCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type TicTacToeAppCallerRaw struct { + Contract *TicTacToeAppCaller // Generic read-only contract binding to access the raw methods on +} + +// TicTacToeAppTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type TicTacToeAppTransactorRaw struct { + Contract *TicTacToeAppTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewTicTacToeApp creates a new instance of TicTacToeApp, bound to a specific deployed contract. +func NewTicTacToeApp(address common.Address, backend bind.ContractBackend) (*TicTacToeApp, error) { + contract, err := bindTicTacToeApp(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &TicTacToeApp{TicTacToeAppCaller: TicTacToeAppCaller{contract: contract}, TicTacToeAppTransactor: TicTacToeAppTransactor{contract: contract}, TicTacToeAppFilterer: TicTacToeAppFilterer{contract: contract}}, nil +} + +// NewTicTacToeAppCaller creates a new read-only instance of TicTacToeApp, bound to a specific deployed contract. +func NewTicTacToeAppCaller(address common.Address, caller bind.ContractCaller) (*TicTacToeAppCaller, error) { + contract, err := bindTicTacToeApp(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &TicTacToeAppCaller{contract: contract}, nil +} + +// NewTicTacToeAppTransactor creates a new write-only instance of TicTacToeApp, bound to a specific deployed contract. +func NewTicTacToeAppTransactor(address common.Address, transactor bind.ContractTransactor) (*TicTacToeAppTransactor, error) { + contract, err := bindTicTacToeApp(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &TicTacToeAppTransactor{contract: contract}, nil +} + +// NewTicTacToeAppFilterer creates a new log filterer instance of TicTacToeApp, bound to a specific deployed contract. +func NewTicTacToeAppFilterer(address common.Address, filterer bind.ContractFilterer) (*TicTacToeAppFilterer, error) { + contract, err := bindTicTacToeApp(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &TicTacToeAppFilterer{contract: contract}, nil +} + +// bindTicTacToeApp binds a generic wrapper to an already deployed contract. +func bindTicTacToeApp(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := TicTacToeAppMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_TicTacToeApp *TicTacToeAppRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _TicTacToeApp.Contract.TicTacToeAppCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_TicTacToeApp *TicTacToeAppRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _TicTacToeApp.Contract.TicTacToeAppTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_TicTacToeApp *TicTacToeAppRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _TicTacToeApp.Contract.TicTacToeAppTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_TicTacToeApp *TicTacToeAppCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _TicTacToeApp.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_TicTacToeApp *TicTacToeAppTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _TicTacToeApp.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_TicTacToeApp *TicTacToeAppTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _TicTacToeApp.Contract.contract.Transact(opts, method, params...) +} + +// ValidTransition is a free data retrieval call binding the contract method 0x6d7eba0d. +// +// 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 signerIdx) pure returns() +func (_TicTacToeApp *TicTacToeAppCaller) ValidTransition(opts *bind.CallOpts, params ChannelParams, from ChannelState, to ChannelState, signerIdx *big.Int) error { + var out []interface{} + err := _TicTacToeApp.contract.Call(opts, &out, "validTransition", params, from, to, signerIdx) + + if err != nil { + return err + } + + return err + +} + +// ValidTransition is a free data retrieval call binding the contract method 0x6d7eba0d. +// +// 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 signerIdx) pure returns() +func (_TicTacToeApp *TicTacToeAppSession) ValidTransition(params ChannelParams, from ChannelState, to ChannelState, signerIdx *big.Int) error { + return _TicTacToeApp.Contract.ValidTransition(&_TicTacToeApp.CallOpts, params, from, to, signerIdx) +} + +// ValidTransition is a free data retrieval call binding the contract method 0x6d7eba0d. +// +// 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 signerIdx) pure returns() +func (_TicTacToeApp *TicTacToeAppCallerSession) ValidTransition(params ChannelParams, from ChannelState, to ChannelState, signerIdx *big.Int) error { + return _TicTacToeApp.Contract.ValidTransition(&_TicTacToeApp.CallOpts, params, from, to, signerIdx) +} diff --git a/app-channel/contracts/generated/ticTacToeApp/ticTacToeApp.go b/app-channel/contracts/generated/ticTacToeApp/ticTacToeApp.go deleted file mode 100644 index 849d5d9..0000000 --- a/app-channel/contracts/generated/ticTacToeApp/ticTacToeApp.go +++ /dev/null @@ -1,264 +0,0 @@ -// Code generated - DO NOT EDIT. -// This file is a generated binding and any manual changes will be lost. - -package ticTacToeApp - -import ( - "errors" - "math/big" - "strings" - - ethereum "github.com/ethereum/go-ethereum" - "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/ethereum/go-ethereum/event" -) - -// Reference imports to suppress errors if they are not otherwise used. -var ( - _ = errors.New - _ = big.NewInt - _ = strings.NewReader - _ = ethereum.NotFound - _ = bind.Bind - _ = common.Big1 - _ = types.BloomLookup - _ = event.NewSubscription -) - -// ChannelAllocation is an auto generated low-level Go binding around an user-defined struct. -type ChannelAllocation struct { - Assets []common.Address - Balances [][]*big.Int - Locked []ChannelSubAlloc -} - -// 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 - App common.Address - LedgerChannel bool - VirtualChannel bool -} - -// ChannelState is an auto generated low-level Go binding around an user-defined struct. -type ChannelState struct { - ChannelID [32]byte - Version uint64 - Outcome ChannelAllocation - AppData []byte - IsFinal bool -} - -// ChannelSubAlloc is an auto generated low-level Go binding around an user-defined struct. -type ChannelSubAlloc struct { - ID [32]byte - Balances []*big.Int - IndexMap []uint16 -} - -// TicTacToeAppMetaData contains all meta data concerning the TicTacToeApp contract. -var TicTacToeAppMetaData = &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\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"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\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"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\":\"signerIdx\",\"type\":\"uint256\"}],\"name\":\"validTransition\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b506111c1806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80630d1feb4f14610030575b600080fd5b61004361003e366004610d36565b610045565b005b60026100546040860186610f98565b90501461007c5760405162461bcd60e51b815260040161007390610f0c565b60405180910390fd5b600061008b6060850185610fdf565b60008161009457fe5b919091013560f81c9150600a90506100af6060850185610fdf565b9050146100ce5760405162461bcd60e51b815260040161007390610f3c565b818160ff16146100f05760405162461bcd60e51b815260040161007390610e40565b6100fd6060840184610fdf565b60008161010657fe5b9091013560f81c6001838101161490506101325760405162461bcd60e51b815260040161007390610e8d565b600060015b600a81101561024f57600261014f6060870187610fdf565b8381811061015957fe5b9050013560f81c60f81b60f81c60ff1611156101875760405162461bcd60e51b815260040161007390610dee565b6101946060870187610fdf565b8281811061019e57fe5b909101356001600160f81b03191690506101bb6060870187610fdf565b838181106101c557fe5b9050013560f81c60f81b6001600160f81b031916146102475760006101ed6060880188610fdf565b838181106101f757fe5b9050013560f81c60f81b60f81c60ff16146102245760405162461bcd60e51b815260040161007390610e6a565b81156102425760405162461bcd60e51b815260040161007390610dc9565b600191505b600101610137565b506000808061029e6102646060890189610fdf565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105bc92505050565b919450925090508215156102b860a0890160808a01610d0f565b1515146102d75760405162461bcd60e51b815260040161007390610eb1565b6103716102e76040890189611024565b6102f19080610f98565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506103309250505060408b018b611024565b61033a9080610f98565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506107a492505050565b6103c16103816040890189611024565b61038f906040810190610f98565b610398916110d3565b6103a560408b018b611024565b6103b3906040810190610f98565b6103bc916110d3565b61089f565b60006103d060408a018a611024565b6103de906020810190610f98565b6103e791611085565b9050821561058357805160018390039067ffffffffffffffff8111801561040d57600080fd5b5060405190808252806020026020018201604052801561044157816020015b606081526020019060019003908161042c5790505b50915060005b82518110156105805760408051600280825260608201835290916020830190803683370190505083828151811061047a57fe5b602090810291909101015261049260408c018c611024565b6104a0906020810190610f98565b828181106104aa57fe5b90506020028101906104bc9190610f98565b60018181106104c757fe5b905060200201358b80604001906104de9190611024565b6104ec906020810190610f98565b838181106104f657fe5b90506020028101906105089190610f98565b600081811061051357fe5b905060200201350183828151811061052757fe5b60200260200101518560ff168151811061053d57fe5b602002602001018181525050600083828151811061055757fe5b60200260200101518360ff168151811061056d57fe5b6020908102919091010152600101610447565b50505b6105b061059360408a018a611024565b6105a1906020810190610f98565b6105aa91611085565b82610904565b50505050505050505050565b60408051610160810182526000610100820181815260016101208401819052600261014085018190529184528451606081810187526003808352600460208481018290526005858b01819052818a019590955289518085018b52600680825260078284018190526008838e018190528c8e01939093528c518088018e528b815280850196909652858d01829052868c01959095528b518087018d52978852878301849052878c019490945260808a019690965289518085018b5287815280820195909552848a0186905260a089019490945288518084018a52878152808501829052808a019590955260c088019490945287519182018852938152908101919091529384015260e082019290925281908190815b600881101561074a576000806106f6888585600881106106ec57fe5b6020020151610969565b9150915081156107405760ff8116600114156107205760018060009650965096505050505061079d565b60ff8116600214156107405760018060019650965096505050505061079d565b50506001016106d0565b5060005b855181101561078f57600060ff1686828151811061076857fe5b016020015160f81c14610787576000806000945094509450505061079d565b60010161074e565b506001600080935093509350505b9193909250565b80518251146107fa576040805162461bcd60e51b815260206004820152601960248201527f616464726573735b5d3a20756e657175616c206c656e67746800000000000000604482015290519081900360640190fd5b60005b825181101561089a5781818151811061081257fe5b60200260200101516001600160a01b031683828151811061082f57fe5b60200260200101516001600160a01b031614610892576040805162461bcd60e51b815260206004820152601760248201527f616464726573735b5d3a20756e657175616c206974656d000000000000000000604482015290519081900360640190fd5b6001016107fd565b505050565b80518251146108c05760405162461bcd60e51b815260040161007390610f61565b60005b825181101561089a576108fc8382815181106108db57fe5b60200260200101518383815181106108ef57fe5b6020026020010151610a11565b6001016108c3565b80518251146109255760405162461bcd60e51b815260040161007390610ed5565b60005b825181101561089a5761096183828151811061094057fe5b602002602001015183838151811061095457fe5b6020026020010151610a5a565b600101610928565b60008080848482602002015160016000010160ff168151811061098857fe5b01602001516001600160f81b031916905060015b60038110156109ff576001600160f81b03198216868683600381106109bd57fe5b602002015160016000010160ff16815181106109d557fe5b01602001516001600160f81b031916146109f757600080935093505050610a0a565b60010161099c565b506001925060f81c90505b9250929050565b8051825114610a325760405162461bcd60e51b815260040161007390610e12565b610a4482602001518260200151610a5a565b610a5682604001518260400151610b3e565b5050565b8051825114610ab0576040805162461bcd60e51b815260206004820152601960248201527f75696e743235365b5d3a20756e657175616c206c656e67746800000000000000604482015290519081900360640190fd5b60005b825181101561089a57818181518110610ac857fe5b6020026020010151838281518110610adc57fe5b602002602001015114610b36576040805162461bcd60e51b815260206004820152601760248201527f75696e743235365b5d3a20756e657175616c206974656d000000000000000000604482015290519081900360640190fd5b600101610ab3565b8051825114610b94576040805162461bcd60e51b815260206004820152601860248201527f75696e7431365b5d3a20756e657175616c206c656e6774680000000000000000604482015290519081900360640190fd5b60005b825181101561089a57818181518110610bac57fe5b602002602001015161ffff16838281518110610bc457fe5b602002602001015161ffff1614610c1b576040805162461bcd60e51b815260206004820152601660248201527575696e7431365b5d3a20756e657175616c206974656d60501b604482015290519081900360640190fd5b600101610b97565b600082601f830112610c33578081fd5b81356020610c48610c4383611067565b611043565b8281528181019085830183850287018401881015610c64578586fd5b855b85811015610c9157813561ffff81168114610c7f578788fd5b84529284019290840190600101610c66565b5090979650505050505050565b600082601f830112610cae578081fd5b81356020610cbe610c4383611067565b8281528181019085830183850287018401881015610cda578586fd5b855b85811015610c9157813584529284019290840190600101610cdc565b600060a08284031215610d09578081fd5b50919050565b600060208284031215610d20578081fd5b81358015158114610d2f578182fd5b9392505050565b60008060008060808587031215610d4b578283fd5b843567ffffffffffffffff80821115610d62578485fd5b9086019060c08289031215610d75578485fd5b90945060208601359080821115610d8a578485fd5b610d9688838901610cf8565b94506040870135915080821115610dab578384fd5b50610db887828801610cf8565b949793965093946060013593505050565b6020808252600b908201526a74776f20616374696f6e7360a81b604082015260600190565b6020808252600a9082015269677269642076616c756560b01b604082015260600190565b60208082526014908201527314dd58905b1b1bd8ce881d5b995c5d585b08125160621b604082015260600190565b60208082526010908201526f30b1ba37b9103737ba1039b4b3b732b960811b604082015260600190565b6020808252600990820152686f766572777269746560b81b604082015260600190565b6020808252600a90820152693732bc3a1030b1ba37b960b11b604082015260600190565b6020808252600a908201526966696e616c20666c616760b01b604082015260600190565b6020808252601b908201527f75696e743235365b5d5b5d3a20756e657175616c206c656e6774680000000000604082015260600190565b6020808252601690820152756e756d626572206f66207061727469636970616e747360501b604082015260600190565b6020808252600b908201526a0c8c2e8c240d8cadccee8d60ab1b604082015260600190565b6020808252601a908201527f537562416c6c6f635b5d3a20756e657175616c206c656e677468000000000000604082015260600190565b6000808335601e19843603018112610fae578283fd5b83018035915067ffffffffffffffff821115610fc8578283fd5b6020908101925081023603821315610a0a57600080fd5b6000808335601e19843603018112610ff5578283fd5b83018035915067ffffffffffffffff82111561100f578283fd5b602001915036819003821315610a0a57600080fd5b60008235605e19833603018112611039578182fd5b9190910192915050565b60405181810167ffffffffffffffff8111828210171561105f57fe5b604052919050565b600067ffffffffffffffff82111561107b57fe5b5060209081020190565b6000611093610c4384611067565b8381526020808201919084845b878110156110c7576110b53683358901610c9e565b855293820193908201906001016110a0565b50919695505050505050565b60006110e1610c4384611067565b8381526020808201919084845b878110156110c75781358701606080823603121561110a578788fd5b604080519182019167ffffffffffffffff808411828510171561112957fe5b92825283358152868401359280841115611141578a8bfd5b61114d36858701610c9e565b8883015282850135935080841115611163578a8bfd5b5061117036848601610c23565b918101919091528752505093820193908201906001016110ee56fea264697066735822122044800f789b90fd7beb3d3050eafee3ae00bffb9f3b9087b671f24666c0f952bb64736f6c63430007060033", -} - -// TicTacToeAppABI is the input ABI used to generate the binding from. -// Deprecated: Use TicTacToeAppMetaData.ABI instead. -var TicTacToeAppABI = TicTacToeAppMetaData.ABI - -// TicTacToeAppBin is the compiled bytecode used for deploying new contracts. -// Deprecated: Use TicTacToeAppMetaData.Bin instead. -var TicTacToeAppBin = TicTacToeAppMetaData.Bin - -// DeployTicTacToeApp deploys a new Ethereum contract, binding an instance of TicTacToeApp to it. -func DeployTicTacToeApp(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *TicTacToeApp, error) { - parsed, err := TicTacToeAppMetaData.GetAbi() - if err != nil { - return common.Address{}, nil, nil, err - } - if parsed == nil { - return common.Address{}, nil, nil, errors.New("GetABI returned nil") - } - - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(TicTacToeAppBin), backend) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &TicTacToeApp{TicTacToeAppCaller: TicTacToeAppCaller{contract: contract}, TicTacToeAppTransactor: TicTacToeAppTransactor{contract: contract}, TicTacToeAppFilterer: TicTacToeAppFilterer{contract: contract}}, nil -} - -// TicTacToeApp is an auto generated Go binding around an Ethereum contract. -type TicTacToeApp struct { - TicTacToeAppCaller // Read-only binding to the contract - TicTacToeAppTransactor // Write-only binding to the contract - TicTacToeAppFilterer // Log filterer for contract events -} - -// TicTacToeAppCaller is an auto generated read-only Go binding around an Ethereum contract. -type TicTacToeAppCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// TicTacToeAppTransactor is an auto generated write-only Go binding around an Ethereum contract. -type TicTacToeAppTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// TicTacToeAppFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type TicTacToeAppFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// TicTacToeAppSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type TicTacToeAppSession struct { - Contract *TicTacToeApp // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// TicTacToeAppCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type TicTacToeAppCallerSession struct { - Contract *TicTacToeAppCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// TicTacToeAppTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type TicTacToeAppTransactorSession struct { - Contract *TicTacToeAppTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// TicTacToeAppRaw is an auto generated low-level Go binding around an Ethereum contract. -type TicTacToeAppRaw struct { - Contract *TicTacToeApp // Generic contract binding to access the raw methods on -} - -// TicTacToeAppCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type TicTacToeAppCallerRaw struct { - Contract *TicTacToeAppCaller // Generic read-only contract binding to access the raw methods on -} - -// TicTacToeAppTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type TicTacToeAppTransactorRaw struct { - Contract *TicTacToeAppTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewTicTacToeApp creates a new instance of TicTacToeApp, bound to a specific deployed contract. -func NewTicTacToeApp(address common.Address, backend bind.ContractBackend) (*TicTacToeApp, error) { - contract, err := bindTicTacToeApp(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &TicTacToeApp{TicTacToeAppCaller: TicTacToeAppCaller{contract: contract}, TicTacToeAppTransactor: TicTacToeAppTransactor{contract: contract}, TicTacToeAppFilterer: TicTacToeAppFilterer{contract: contract}}, nil -} - -// NewTicTacToeAppCaller creates a new read-only instance of TicTacToeApp, bound to a specific deployed contract. -func NewTicTacToeAppCaller(address common.Address, caller bind.ContractCaller) (*TicTacToeAppCaller, error) { - contract, err := bindTicTacToeApp(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &TicTacToeAppCaller{contract: contract}, nil -} - -// NewTicTacToeAppTransactor creates a new write-only instance of TicTacToeApp, bound to a specific deployed contract. -func NewTicTacToeAppTransactor(address common.Address, transactor bind.ContractTransactor) (*TicTacToeAppTransactor, error) { - contract, err := bindTicTacToeApp(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &TicTacToeAppTransactor{contract: contract}, nil -} - -// NewTicTacToeAppFilterer creates a new log filterer instance of TicTacToeApp, bound to a specific deployed contract. -func NewTicTacToeAppFilterer(address common.Address, filterer bind.ContractFilterer) (*TicTacToeAppFilterer, error) { - contract, err := bindTicTacToeApp(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &TicTacToeAppFilterer{contract: contract}, nil -} - -// bindTicTacToeApp binds a generic wrapper to an already deployed contract. -func bindTicTacToeApp(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(TicTacToeAppABI)) - if err != nil { - return nil, err - } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_TicTacToeApp *TicTacToeAppRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _TicTacToeApp.Contract.TicTacToeAppCaller.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_TicTacToeApp *TicTacToeAppRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _TicTacToeApp.Contract.TicTacToeAppTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_TicTacToeApp *TicTacToeAppRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _TicTacToeApp.Contract.TicTacToeAppTransactor.contract.Transact(opts, method, params...) -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_TicTacToeApp *TicTacToeAppCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _TicTacToeApp.Contract.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_TicTacToeApp *TicTacToeAppTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _TicTacToeApp.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_TicTacToeApp *TicTacToeAppTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _TicTacToeApp.Contract.contract.Transact(opts, method, params...) -} - -// ValidTransition is a free data retrieval call binding the contract method 0x0d1feb4f. -// -// Solidity: function validTransition((uint256,uint256,address[],address,bool,bool) params, (bytes32,uint64,(address[],uint256[][],(bytes32,uint256[],uint16[])[]),bytes,bool) from, (bytes32,uint64,(address[],uint256[][],(bytes32,uint256[],uint16[])[]),bytes,bool) to, uint256 signerIdx) pure returns() -func (_TicTacToeApp *TicTacToeAppCaller) ValidTransition(opts *bind.CallOpts, params ChannelParams, from ChannelState, to ChannelState, signerIdx *big.Int) error { - var out []interface{} - err := _TicTacToeApp.contract.Call(opts, &out, "validTransition", params, from, to, signerIdx) - - if err != nil { - return err - } - - return err - -} - -// ValidTransition is a free data retrieval call binding the contract method 0x0d1feb4f. -// -// Solidity: function validTransition((uint256,uint256,address[],address,bool,bool) params, (bytes32,uint64,(address[],uint256[][],(bytes32,uint256[],uint16[])[]),bytes,bool) from, (bytes32,uint64,(address[],uint256[][],(bytes32,uint256[],uint16[])[]),bytes,bool) to, uint256 signerIdx) pure returns() -func (_TicTacToeApp *TicTacToeAppSession) ValidTransition(params ChannelParams, from ChannelState, to ChannelState, signerIdx *big.Int) error { - return _TicTacToeApp.Contract.ValidTransition(&_TicTacToeApp.CallOpts, params, from, to, signerIdx) -} - -// ValidTransition is a free data retrieval call binding the contract method 0x0d1feb4f. -// -// Solidity: function validTransition((uint256,uint256,address[],address,bool,bool) params, (bytes32,uint64,(address[],uint256[][],(bytes32,uint256[],uint16[])[]),bytes,bool) from, (bytes32,uint64,(address[],uint256[][],(bytes32,uint256[],uint16[])[]),bytes,bool) to, uint256 signerIdx) pure returns() -func (_TicTacToeApp *TicTacToeAppCallerSession) ValidTransition(params ChannelParams, from ChannelState, to ChannelState, signerIdx *big.Int) error { - return _TicTacToeApp.Contract.ValidTransition(&_TicTacToeApp.CallOpts, params, from, to, signerIdx) -} diff --git a/app-channel/contracts/perun-eth-contracts b/app-channel/contracts/perun-eth-contracts index 73b45de..01699bf 160000 --- a/app-channel/contracts/perun-eth-contracts +++ b/app-channel/contracts/perun-eth-contracts @@ -1 +1 @@ -Subproject commit 73b45dee752da4af2f95044c64c8b214459cda32 +Subproject commit 01699bf3e63695a6c6cf8142d0a54c91c97aaa34 From 2582122209af4b68e4a74832fb4f9512ba8a9324 Mon Sep 17 00:00:00 2001 From: Minh Huy Tran Date: Wed, 13 Dec 2023 13:31:12 +0100 Subject: [PATCH 05/16] remove all generated bin and abi files, modify generate script to clean up Signed-off-by: Minh Huy Tran --- app-channel/contracts/TicTacToeApp.sol | 1 - app-channel/contracts/generate.sh | 4 ++++ app-channel/contracts/generated/ticTacToeApp/App.abi | 1 - app-channel/contracts/generated/ticTacToeApp/App.bin | 0 app-channel/contracts/generated/ticTacToeApp/Array.abi | 1 - app-channel/contracts/generated/ticTacToeApp/Array.bin | 1 - app-channel/contracts/generated/ticTacToeApp/Channel.abi | 1 - app-channel/contracts/generated/ticTacToeApp/Channel.bin | 1 - app-channel/contracts/generated/ticTacToeApp/ECDSA.abi | 1 - app-channel/contracts/generated/ticTacToeApp/ECDSA.bin | 1 - app-channel/contracts/generated/ticTacToeApp/SafeMath.abi | 1 - app-channel/contracts/generated/ticTacToeApp/SafeMath.bin | 1 - app-channel/contracts/generated/ticTacToeApp/Sig.abi | 1 - app-channel/contracts/generated/ticTacToeApp/Sig.bin | 1 - app-channel/contracts/generated/ticTacToeApp/Strings.abi | 1 - app-channel/contracts/generated/ticTacToeApp/Strings.bin | 1 - app-channel/contracts/generated/ticTacToeApp/TicTacToeApp.abi | 1 - app-channel/contracts/generated/ticTacToeApp/TicTacToeApp.bin | 1 - app-channel/contracts/generated/ticTacToeApp/TicTacToeApp.go | 2 +- app-channel/util.go | 2 +- 20 files changed, 6 insertions(+), 18 deletions(-) delete mode 100644 app-channel/contracts/generated/ticTacToeApp/App.abi delete mode 100644 app-channel/contracts/generated/ticTacToeApp/App.bin delete mode 100644 app-channel/contracts/generated/ticTacToeApp/Array.abi delete mode 100644 app-channel/contracts/generated/ticTacToeApp/Array.bin delete mode 100644 app-channel/contracts/generated/ticTacToeApp/Channel.abi delete mode 100644 app-channel/contracts/generated/ticTacToeApp/Channel.bin delete mode 100644 app-channel/contracts/generated/ticTacToeApp/ECDSA.abi delete mode 100644 app-channel/contracts/generated/ticTacToeApp/ECDSA.bin delete mode 100644 app-channel/contracts/generated/ticTacToeApp/SafeMath.abi delete mode 100644 app-channel/contracts/generated/ticTacToeApp/SafeMath.bin delete mode 100644 app-channel/contracts/generated/ticTacToeApp/Sig.abi delete mode 100644 app-channel/contracts/generated/ticTacToeApp/Sig.bin delete mode 100644 app-channel/contracts/generated/ticTacToeApp/Strings.abi delete mode 100644 app-channel/contracts/generated/ticTacToeApp/Strings.bin delete mode 100644 app-channel/contracts/generated/ticTacToeApp/TicTacToeApp.abi delete mode 100644 app-channel/contracts/generated/ticTacToeApp/TicTacToeApp.bin diff --git a/app-channel/contracts/TicTacToeApp.sol b/app-channel/contracts/TicTacToeApp.sol index 276da69..1e1420f 100644 --- a/app-channel/contracts/TicTacToeApp.sol +++ b/app-channel/contracts/TicTacToeApp.sol @@ -15,7 +15,6 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.0; -pragma experimental ABIEncoderV2; import "./perun-eth-contracts/contracts/App.sol"; diff --git a/app-channel/contracts/generate.sh b/app-channel/contracts/generate.sh index 4ea4d9f..b6751c1 100755 --- a/app-channel/contracts/generate.sh +++ b/app-channel/contracts/generate.sh @@ -40,6 +40,10 @@ generate_bindings() { # Generate bindings. $ABIGEN --pkg $PKG --abi $GENDIR/$FILE.abi --bin $GENDIR/$FILE.bin --out $GENDIR/$CONTRACT.go + + # Clean up .abi and .bin files + find $GENDIR -name "*.abi" -type f -delete + find $GENDIR -name "*.bin" -type f -delete } generate_bindings "TicTacToeApp" "ticTacToeApp" diff --git a/app-channel/contracts/generated/ticTacToeApp/App.abi b/app-channel/contracts/generated/ticTacToeApp/App.abi deleted file mode 100644 index 746273b..0000000 --- a/app-channel/contracts/generated/ticTacToeApp/App.abi +++ /dev/null @@ -1 +0,0 @@ -[{"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":"struct Channel.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":"struct Channel.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":"struct Channel.SubAlloc[]","name":"locked","type":"tuple[]"}],"internalType":"struct Channel.Allocation","name":"outcome","type":"tuple"},{"internalType":"bytes","name":"appData","type":"bytes"},{"internalType":"bool","name":"isFinal","type":"bool"}],"internalType":"struct Channel.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":"struct Channel.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":"struct Channel.SubAlloc[]","name":"locked","type":"tuple[]"}],"internalType":"struct Channel.Allocation","name":"outcome","type":"tuple"},{"internalType":"bytes","name":"appData","type":"bytes"},{"internalType":"bool","name":"isFinal","type":"bool"}],"internalType":"struct Channel.State","name":"to","type":"tuple"},{"internalType":"uint256","name":"actorIdx","type":"uint256"}],"name":"validTransition","outputs":[],"stateMutability":"pure","type":"function"}] \ No newline at end of file diff --git a/app-channel/contracts/generated/ticTacToeApp/App.bin b/app-channel/contracts/generated/ticTacToeApp/App.bin deleted file mode 100644 index e69de29..0000000 diff --git a/app-channel/contracts/generated/ticTacToeApp/Array.abi b/app-channel/contracts/generated/ticTacToeApp/Array.abi deleted file mode 100644 index 0637a08..0000000 --- a/app-channel/contracts/generated/ticTacToeApp/Array.abi +++ /dev/null @@ -1 +0,0 @@ -[] \ No newline at end of file diff --git a/app-channel/contracts/generated/ticTacToeApp/Array.bin b/app-channel/contracts/generated/ticTacToeApp/Array.bin deleted file mode 100644 index 3661f5e..0000000 --- a/app-channel/contracts/generated/ticTacToeApp/Array.bin +++ /dev/null @@ -1 +0,0 @@ -60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f80fdfea264697066735822122064a97a4b5ce9a6010d94440fc46daa4929cd2c32f94f399ff1f7c859cba0cd1864736f6c63430008170033 \ No newline at end of file diff --git a/app-channel/contracts/generated/ticTacToeApp/Channel.abi b/app-channel/contracts/generated/ticTacToeApp/Channel.abi deleted file mode 100644 index 0637a08..0000000 --- a/app-channel/contracts/generated/ticTacToeApp/Channel.abi +++ /dev/null @@ -1 +0,0 @@ -[] \ No newline at end of file diff --git a/app-channel/contracts/generated/ticTacToeApp/Channel.bin b/app-channel/contracts/generated/ticTacToeApp/Channel.bin deleted file mode 100644 index abb5306..0000000 --- a/app-channel/contracts/generated/ticTacToeApp/Channel.bin +++ /dev/null @@ -1 +0,0 @@ -60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f80fdfea2646970667358221220ed1e36bd83e2fba7443e4494e11b02d40be995c475d92b7c7e185a69513d962164736f6c63430008170033 \ No newline at end of file diff --git a/app-channel/contracts/generated/ticTacToeApp/ECDSA.abi b/app-channel/contracts/generated/ticTacToeApp/ECDSA.abi deleted file mode 100644 index 0637a08..0000000 --- a/app-channel/contracts/generated/ticTacToeApp/ECDSA.abi +++ /dev/null @@ -1 +0,0 @@ -[] \ No newline at end of file diff --git a/app-channel/contracts/generated/ticTacToeApp/ECDSA.bin b/app-channel/contracts/generated/ticTacToeApp/ECDSA.bin deleted file mode 100644 index afd6d38..0000000 --- a/app-channel/contracts/generated/ticTacToeApp/ECDSA.bin +++ /dev/null @@ -1 +0,0 @@ -60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f80fdfea26469706673582212208fd07e021411b2fb88005a7568185ab748d72d2c840ae3cab4c4abd9c04cb82c64736f6c63430008170033 \ No newline at end of file diff --git a/app-channel/contracts/generated/ticTacToeApp/SafeMath.abi b/app-channel/contracts/generated/ticTacToeApp/SafeMath.abi deleted file mode 100644 index 0637a08..0000000 --- a/app-channel/contracts/generated/ticTacToeApp/SafeMath.abi +++ /dev/null @@ -1 +0,0 @@ -[] \ No newline at end of file diff --git a/app-channel/contracts/generated/ticTacToeApp/SafeMath.bin b/app-channel/contracts/generated/ticTacToeApp/SafeMath.bin deleted file mode 100644 index 8ebe480..0000000 --- a/app-channel/contracts/generated/ticTacToeApp/SafeMath.bin +++ /dev/null @@ -1 +0,0 @@ -60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f80fdfea2646970667358221220608cfd50e49c8bb167018ffb20f65dffa64d84dc23d664cccf28f983c448883664736f6c63430008170033 \ No newline at end of file diff --git a/app-channel/contracts/generated/ticTacToeApp/Sig.abi b/app-channel/contracts/generated/ticTacToeApp/Sig.abi deleted file mode 100644 index 0637a08..0000000 --- a/app-channel/contracts/generated/ticTacToeApp/Sig.abi +++ /dev/null @@ -1 +0,0 @@ -[] \ No newline at end of file diff --git a/app-channel/contracts/generated/ticTacToeApp/Sig.bin b/app-channel/contracts/generated/ticTacToeApp/Sig.bin deleted file mode 100644 index 808d91c..0000000 --- a/app-channel/contracts/generated/ticTacToeApp/Sig.bin +++ /dev/null @@ -1 +0,0 @@ -60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f80fdfea264697066735822122043f0d22e185ecc6c33134b023a39ad01a58c9ff1388e17f423e2e608dc78739264736f6c63430008170033 \ No newline at end of file diff --git a/app-channel/contracts/generated/ticTacToeApp/Strings.abi b/app-channel/contracts/generated/ticTacToeApp/Strings.abi deleted file mode 100644 index 0637a08..0000000 --- a/app-channel/contracts/generated/ticTacToeApp/Strings.abi +++ /dev/null @@ -1 +0,0 @@ -[] \ No newline at end of file diff --git a/app-channel/contracts/generated/ticTacToeApp/Strings.bin b/app-channel/contracts/generated/ticTacToeApp/Strings.bin deleted file mode 100644 index 3eab34f..0000000 --- a/app-channel/contracts/generated/ticTacToeApp/Strings.bin +++ /dev/null @@ -1 +0,0 @@ -60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f80fdfea264697066735822122021c0879aebe67319994fcd2505052fdd9aeb7f49678f90dd8e6a4d315a6b159464736f6c63430008170033 \ No newline at end of file diff --git a/app-channel/contracts/generated/ticTacToeApp/TicTacToeApp.abi b/app-channel/contracts/generated/ticTacToeApp/TicTacToeApp.abi deleted file mode 100644 index c078755..0000000 --- a/app-channel/contracts/generated/ticTacToeApp/TicTacToeApp.abi +++ /dev/null @@ -1 +0,0 @@ -[{"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":"struct Channel.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":"struct Channel.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":"struct Channel.SubAlloc[]","name":"locked","type":"tuple[]"}],"internalType":"struct Channel.Allocation","name":"outcome","type":"tuple"},{"internalType":"bytes","name":"appData","type":"bytes"},{"internalType":"bool","name":"isFinal","type":"bool"}],"internalType":"struct Channel.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":"struct Channel.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":"struct Channel.SubAlloc[]","name":"locked","type":"tuple[]"}],"internalType":"struct Channel.Allocation","name":"outcome","type":"tuple"},{"internalType":"bytes","name":"appData","type":"bytes"},{"internalType":"bool","name":"isFinal","type":"bool"}],"internalType":"struct Channel.State","name":"to","type":"tuple"},{"internalType":"uint256","name":"signerIdx","type":"uint256"}],"name":"validTransition","outputs":[],"stateMutability":"pure","type":"function"}] \ No newline at end of file diff --git a/app-channel/contracts/generated/ticTacToeApp/TicTacToeApp.bin b/app-channel/contracts/generated/ticTacToeApp/TicTacToeApp.bin deleted file mode 100644 index 3f96990..0000000 --- a/app-channel/contracts/generated/ticTacToeApp/TicTacToeApp.bin +++ /dev/null @@ -1 +0,0 @@ -608060405234801561000f575f80fd5b506114b98061001d5f395ff3fe608060405234801561000f575f80fd5b5060043610610029575f3560e01c80636d7eba0d1461002d575b5f80fd5b61004061003b366004610f46565b610042565b005b60026100516040860186610fd7565b90501461009e5760405162461bcd60e51b81526020600482015260166024820152756e756d626572206f66207061727469636970616e747360501b60448201526064015b60405180910390fd5b5f6100ac606085018561101d565b5f816100ba576100ba611060565b919091013560f81c9150600990506100d360015f611088565b6100dd9190611088565b60ff166100ed606085018561101d565b90501461012a5760405162461bcd60e51b815260206004820152600b60248201526a0c8c2e8c240d8cadccee8d60ab1b6044820152606401610095565b818160ff161461016f5760405162461bcd60e51b815260206004820152601060248201526f30b1ba37b9103737ba1039b4b3b732b960811b6044820152606401610095565b61017c606084018461101d565b5f8161018a5761018a611060565b919091013560f81c905060026101a1836001611088565b6101ab91906110a7565b60ff16146101e85760405162461bcd60e51b815260206004820152600a6024820152693732bc3a1030b1ba37b960b11b6044820152606401610095565b5f806101f5600182611088565b60ff1690505b600961020860015f611088565b6102129190611088565b60ff1681101561039957600261022b606087018761101d565b8381811061023b5761023b611060565b9050013560f81c60f81b60f81c60ff1611156102865760405162461bcd60e51b815260206004820152600a602482015269677269642076616c756560b01b6044820152606401610095565b610293606087018761101d565b828181106102a3576102a3611060565b909101356001600160f81b03191690506102c0606087018761101d565b838181106102d0576102d0611060565b9050013560f81c60f81b6001600160f81b03191614610391575f6102f7606088018861101d565b8381811061030757610307611060565b9050013560f81c60f81b60f81c60ff16146103505760405162461bcd60e51b81526020600482015260096024820152686f766572777269746560b81b6044820152606401610095565b811561038c5760405162461bcd60e51b815260206004820152600b60248201526a74776f20616374696f6e7360a81b6044820152606401610095565b600191505b6001016101fb565b505f80806103e66103ad606089018961101d565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506107a492505050565b9194509250905082151561040060a0890160808a016110d4565b15151461043c5760405162461bcd60e51b815260206004820152600a60248201526966696e616c20666c616760b01b6044820152606401610095565b61051561044c60408901896110fa565b6104569080611118565b808060200260200160405190810160405280939291908181526020015f905b828210156104a157610492604083028601368190038101906111cc565b81526020019060010190610475565b50505050508980604001906104b691906110fa565b6104c09080611118565b808060200260200160405190810160405280939291908181526020015f905b8282101561050b576104fc604083028601368190038101906111cc565b815260200190600101906104df565b505050505061098f565b61056561052560408901896110fa565b610533906040810190610fd7565b61053c916112ba565b61054960408b018b6110fa565b610557906040810190610fd7565b610560916112ba565b610a34565b5f61057360408a018a6110fa565b610581906020810190610fd7565b61058a916113e7565b9050821561076b575f61059e836001611457565b9050815167ffffffffffffffff8111156105ba576105ba61115e565b6040519080825280602002602001820160405280156105ed57816020015b60608152602001906001900390816105d85790505b5091505f5b82518110156107685760408051600280825260608201835290916020830190803683370190505083828151811061062b5761062b611060565b602090810291909101015261064360408c018c6110fa565b610651906020810190610fd7565b8281811061066157610661611060565b90506020028101906106739190610fd7565b600181811061068457610684611060565b905060200201358b806040019061069b91906110fa565b6106a9906020810190610fd7565b838181106106b9576106b9611060565b90506020028101906106cb9190610fd7565b5f8181106106db576106db611060565b905060200201356106ec9190611470565b8382815181106106fe576106fe611060565b60200260200101518560ff168151811061071a5761071a611060565b6020026020010181815250505f83828151811061073957610739611060565b60200260200101518360ff168151811061075557610755611060565b60209081029190910101526001016105f2565b50505b61079861077b60408a018a6110fa565b610789906020810190610fd7565b610792916113e7565b82610ad4565b50505050505050505050565b60408051610160810182525f610100820181815260016101208401819052600261014085018190529184528451606081810187526003808352600460208481018290526005858b01819052818a019590955289518085018b52600680825260078284018190526008838e018190528c8e01939093528c518088018e528b815280850196909652858d01829052868c01959095528b518087018d52978852878301849052878c019490945260808a019690965289518085018b5287815280820195909552848a0186905260a089019490945288518084018a52878152808501829052808a019590955260c088019490945287519182018852938152908101919091529384015260e082019290925281908190815b6008811015610934575f806108e2888585600881106108d8576108d8611060565b6020020151610b74565b91509150811561092a575f1960ff82160161090a576001805f96509650965050505050610988565b60011960ff82160161092a57600180600196509650965050505050610988565b50506001016108b7565b505f5b855181101561097b575f60ff1686828151811061095657610956611060565b016020015160f81c14610973575f805f9450945094505050610988565b600101610937565b5060015f80935093509350505b9193909250565b80518251146109e05760405162461bcd60e51b815260206004820152601760248201527f41737365745b5d3a20756e657175616c206c656e6774680000000000000000006044820152606401610095565b5f5b8251811015610a2f57610a27838281518110610a0057610a00611060565b6020026020010151838381518110610a1a57610a1a611060565b6020026020010151610c4a565b6001016109e2565b505050565b8051825114610a855760405162461bcd60e51b815260206004820152601a60248201527f537562416c6c6f635b5d3a20756e657175616c206c656e6774680000000000006044820152606401610095565b5f5b8251811015610a2f57610acc838281518110610aa557610aa5611060565b6020026020010151838381518110610abf57610abf611060565b6020026020010151610cf9565b600101610a87565b8051825114610b255760405162461bcd60e51b815260206004820152601b60248201527f75696e743235365b5d5b5d3a20756e657175616c206c656e67746800000000006044820152606401610095565b5f5b8251811015610a2f57610b6c838281518110610b4557610b45611060565b6020026020010151838381518110610b5f57610b5f611060565b6020026020010151610d65565b600101610b27565b5f80808484826020020151610b8a60015f611088565b610b949190611088565b60ff1681518110610ba757610ba7611060565b01602001516001600160f81b031916905060015b6003811015610c38576001600160f81b0319821686868360038110610be257610be2611060565b6020020151610bf260015f611088565b610bfc9190611088565b60ff1681518110610c0f57610c0f611060565b01602001516001600160f81b03191614610c30575f80935093505050610c43565b600101610bbb565b506001925060f81c90505b9250929050565b8051825114610c945760405162461bcd60e51b8152602060048201526016602482015275105cdcd95d0e881d5b995c5d585b0818da185a5b925160521b6044820152606401610095565b80602001516001600160a01b031682602001516001600160a01b031614610cf55760405162461bcd60e51b815260206004820152601560248201527420b9b9b2ba1d103ab732b8bab0b6103437b63232b960591b6044820152606401610095565b5050565b8051825114610d415760405162461bcd60e51b815260206004820152601460248201527314dd58905b1b1bd8ce881d5b995c5d585b08125160621b6044820152606401610095565b610d5382602001518260200151610d65565b610cf582604001518260400151610e4a565b8051825114610db65760405162461bcd60e51b815260206004820152601960248201527f75696e743235365b5d3a20756e657175616c206c656e677468000000000000006044820152606401610095565b5f5b8251811015610a2f57818181518110610dd357610dd3611060565b6020026020010151838281518110610ded57610ded611060565b602002602001015114610e425760405162461bcd60e51b815260206004820152601760248201527f75696e743235365b5d3a20756e657175616c206974656d0000000000000000006044820152606401610095565b600101610db8565b8051825114610e9b5760405162461bcd60e51b815260206004820152601860248201527f75696e7431365b5d3a20756e657175616c206c656e67746800000000000000006044820152606401610095565b5f5b8251811015610a2f57818181518110610eb857610eb8611060565b602002602001015161ffff16838281518110610ed657610ed6611060565b602002602001015161ffff1614610f285760405162461bcd60e51b815260206004820152601660248201527575696e7431365b5d3a20756e657175616c206974656d60501b6044820152606401610095565b600101610e9d565b5f60a08284031215610f40575f80fd5b50919050565b5f805f8060808587031215610f59575f80fd5b843567ffffffffffffffff80821115610f70575f80fd5b9086019060c08289031215610f83575f80fd5b90945060208601359080821115610f98575f80fd5b610fa488838901610f30565b94506040870135915080821115610fb9575f80fd5b50610fc687828801610f30565b949793965093946060013593505050565b5f808335601e19843603018112610fec575f80fd5b83018035915067ffffffffffffffff821115611006575f80fd5b6020019150600581901b3603821315610c43575f80fd5b5f808335601e19843603018112611032575f80fd5b83018035915067ffffffffffffffff82111561104c575f80fd5b602001915036819003821315610c43575f80fd5b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b60ff81811683821601908111156110a1576110a1611074565b92915050565b5f60ff8316806110c557634e487b7160e01b5f52601260045260245ffd5b8060ff84160691505092915050565b5f602082840312156110e4575f80fd5b813580151581146110f3575f80fd5b9392505050565b5f8235605e1983360301811261110e575f80fd5b9190910192915050565b5f808335601e1984360301811261112d575f80fd5b83018035915067ffffffffffffffff821115611147575f80fd5b6020019150600681901b3603821315610c43575f80fd5b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff811182821017156111955761119561115e565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156111c4576111c461115e565b604052919050565b5f604082840312156111dc575f80fd5b6040516040810181811067ffffffffffffffff821117156111ff576111ff61115e565b6040528235815260208301356001600160a01b038116811461121f575f80fd5b60208201529392505050565b5f67ffffffffffffffff8211156112445761124461115e565b5060051b60200190565b5f82601f83011261125d575f80fd5b8135602061127261126d8361122b565b61119b565b8083825260208201915060208460051b870101935086841115611293575f80fd5b602086015b848110156112af5780358352918301918301611298565b509695505050505050565b5f6112c761126d8461122b565b83815260208082019190600586811b8601368111156112e4575f80fd5b865b818110156113da57803567ffffffffffffffff80821115611305575f80fd5b818a01915060608236031215611319575f80fd5b611321611172565b823581528683013582811115611335575f80fd5b6113413682860161124e565b888301525060408084013583811115611358575f80fd5b939093019236601f85011261136b575f80fd5b8335925061137b61126d8461122b565b83815292871b84018801928881019036851115611396575f80fd5b948901945b848610156113c357853561ffff811681146113b4575f80fd5b8252948901949089019061139b565b9183019190915250885250509483019483016112e6565b5092979650505050505050565b5f6113f461126d8461122b565b80848252602080830192508560051b850136811115611411575f80fd5b855b8181101561144b57803567ffffffffffffffff811115611431575f80fd5b61143d36828a0161124e565b865250938201938201611413565b50919695505050505050565b60ff82811682821603908111156110a1576110a1611074565b808201808211156110a1576110a161107456fea26469706673582212202c009f94c620318f23c7f0595d7e8d81cc6ff93f3b0953fb2d514716734ce65764736f6c63430008170033 \ No newline at end of file diff --git a/app-channel/contracts/generated/ticTacToeApp/TicTacToeApp.go b/app-channel/contracts/generated/ticTacToeApp/TicTacToeApp.go index 97c29fa..8d033c4 100644 --- a/app-channel/contracts/generated/ticTacToeApp/TicTacToeApp.go +++ b/app-channel/contracts/generated/ticTacToeApp/TicTacToeApp.go @@ -71,7 +71,7 @@ type ChannelSubAlloc struct { // TicTacToeAppMetaData contains all meta data concerning the TicTacToeApp contract. var TicTacToeAppMetaData = &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\":\"signerIdx\",\"type\":\"uint256\"}],\"name\":\"validTransition\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"}]", - Bin: "0x608060405234801561000f575f80fd5b506114b98061001d5f395ff3fe608060405234801561000f575f80fd5b5060043610610029575f3560e01c80636d7eba0d1461002d575b5f80fd5b61004061003b366004610f46565b610042565b005b60026100516040860186610fd7565b90501461009e5760405162461bcd60e51b81526020600482015260166024820152756e756d626572206f66207061727469636970616e747360501b60448201526064015b60405180910390fd5b5f6100ac606085018561101d565b5f816100ba576100ba611060565b919091013560f81c9150600990506100d360015f611088565b6100dd9190611088565b60ff166100ed606085018561101d565b90501461012a5760405162461bcd60e51b815260206004820152600b60248201526a0c8c2e8c240d8cadccee8d60ab1b6044820152606401610095565b818160ff161461016f5760405162461bcd60e51b815260206004820152601060248201526f30b1ba37b9103737ba1039b4b3b732b960811b6044820152606401610095565b61017c606084018461101d565b5f8161018a5761018a611060565b919091013560f81c905060026101a1836001611088565b6101ab91906110a7565b60ff16146101e85760405162461bcd60e51b815260206004820152600a6024820152693732bc3a1030b1ba37b960b11b6044820152606401610095565b5f806101f5600182611088565b60ff1690505b600961020860015f611088565b6102129190611088565b60ff1681101561039957600261022b606087018761101d565b8381811061023b5761023b611060565b9050013560f81c60f81b60f81c60ff1611156102865760405162461bcd60e51b815260206004820152600a602482015269677269642076616c756560b01b6044820152606401610095565b610293606087018761101d565b828181106102a3576102a3611060565b909101356001600160f81b03191690506102c0606087018761101d565b838181106102d0576102d0611060565b9050013560f81c60f81b6001600160f81b03191614610391575f6102f7606088018861101d565b8381811061030757610307611060565b9050013560f81c60f81b60f81c60ff16146103505760405162461bcd60e51b81526020600482015260096024820152686f766572777269746560b81b6044820152606401610095565b811561038c5760405162461bcd60e51b815260206004820152600b60248201526a74776f20616374696f6e7360a81b6044820152606401610095565b600191505b6001016101fb565b505f80806103e66103ad606089018961101d565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506107a492505050565b9194509250905082151561040060a0890160808a016110d4565b15151461043c5760405162461bcd60e51b815260206004820152600a60248201526966696e616c20666c616760b01b6044820152606401610095565b61051561044c60408901896110fa565b6104569080611118565b808060200260200160405190810160405280939291908181526020015f905b828210156104a157610492604083028601368190038101906111cc565b81526020019060010190610475565b50505050508980604001906104b691906110fa565b6104c09080611118565b808060200260200160405190810160405280939291908181526020015f905b8282101561050b576104fc604083028601368190038101906111cc565b815260200190600101906104df565b505050505061098f565b61056561052560408901896110fa565b610533906040810190610fd7565b61053c916112ba565b61054960408b018b6110fa565b610557906040810190610fd7565b610560916112ba565b610a34565b5f61057360408a018a6110fa565b610581906020810190610fd7565b61058a916113e7565b9050821561076b575f61059e836001611457565b9050815167ffffffffffffffff8111156105ba576105ba61115e565b6040519080825280602002602001820160405280156105ed57816020015b60608152602001906001900390816105d85790505b5091505f5b82518110156107685760408051600280825260608201835290916020830190803683370190505083828151811061062b5761062b611060565b602090810291909101015261064360408c018c6110fa565b610651906020810190610fd7565b8281811061066157610661611060565b90506020028101906106739190610fd7565b600181811061068457610684611060565b905060200201358b806040019061069b91906110fa565b6106a9906020810190610fd7565b838181106106b9576106b9611060565b90506020028101906106cb9190610fd7565b5f8181106106db576106db611060565b905060200201356106ec9190611470565b8382815181106106fe576106fe611060565b60200260200101518560ff168151811061071a5761071a611060565b6020026020010181815250505f83828151811061073957610739611060565b60200260200101518360ff168151811061075557610755611060565b60209081029190910101526001016105f2565b50505b61079861077b60408a018a6110fa565b610789906020810190610fd7565b610792916113e7565b82610ad4565b50505050505050505050565b60408051610160810182525f610100820181815260016101208401819052600261014085018190529184528451606081810187526003808352600460208481018290526005858b01819052818a019590955289518085018b52600680825260078284018190526008838e018190528c8e01939093528c518088018e528b815280850196909652858d01829052868c01959095528b518087018d52978852878301849052878c019490945260808a019690965289518085018b5287815280820195909552848a0186905260a089019490945288518084018a52878152808501829052808a019590955260c088019490945287519182018852938152908101919091529384015260e082019290925281908190815b6008811015610934575f806108e2888585600881106108d8576108d8611060565b6020020151610b74565b91509150811561092a575f1960ff82160161090a576001805f96509650965050505050610988565b60011960ff82160161092a57600180600196509650965050505050610988565b50506001016108b7565b505f5b855181101561097b575f60ff1686828151811061095657610956611060565b016020015160f81c14610973575f805f9450945094505050610988565b600101610937565b5060015f80935093509350505b9193909250565b80518251146109e05760405162461bcd60e51b815260206004820152601760248201527f41737365745b5d3a20756e657175616c206c656e6774680000000000000000006044820152606401610095565b5f5b8251811015610a2f57610a27838281518110610a0057610a00611060565b6020026020010151838381518110610a1a57610a1a611060565b6020026020010151610c4a565b6001016109e2565b505050565b8051825114610a855760405162461bcd60e51b815260206004820152601a60248201527f537562416c6c6f635b5d3a20756e657175616c206c656e6774680000000000006044820152606401610095565b5f5b8251811015610a2f57610acc838281518110610aa557610aa5611060565b6020026020010151838381518110610abf57610abf611060565b6020026020010151610cf9565b600101610a87565b8051825114610b255760405162461bcd60e51b815260206004820152601b60248201527f75696e743235365b5d5b5d3a20756e657175616c206c656e67746800000000006044820152606401610095565b5f5b8251811015610a2f57610b6c838281518110610b4557610b45611060565b6020026020010151838381518110610b5f57610b5f611060565b6020026020010151610d65565b600101610b27565b5f80808484826020020151610b8a60015f611088565b610b949190611088565b60ff1681518110610ba757610ba7611060565b01602001516001600160f81b031916905060015b6003811015610c38576001600160f81b0319821686868360038110610be257610be2611060565b6020020151610bf260015f611088565b610bfc9190611088565b60ff1681518110610c0f57610c0f611060565b01602001516001600160f81b03191614610c30575f80935093505050610c43565b600101610bbb565b506001925060f81c90505b9250929050565b8051825114610c945760405162461bcd60e51b8152602060048201526016602482015275105cdcd95d0e881d5b995c5d585b0818da185a5b925160521b6044820152606401610095565b80602001516001600160a01b031682602001516001600160a01b031614610cf55760405162461bcd60e51b815260206004820152601560248201527420b9b9b2ba1d103ab732b8bab0b6103437b63232b960591b6044820152606401610095565b5050565b8051825114610d415760405162461bcd60e51b815260206004820152601460248201527314dd58905b1b1bd8ce881d5b995c5d585b08125160621b6044820152606401610095565b610d5382602001518260200151610d65565b610cf582604001518260400151610e4a565b8051825114610db65760405162461bcd60e51b815260206004820152601960248201527f75696e743235365b5d3a20756e657175616c206c656e677468000000000000006044820152606401610095565b5f5b8251811015610a2f57818181518110610dd357610dd3611060565b6020026020010151838281518110610ded57610ded611060565b602002602001015114610e425760405162461bcd60e51b815260206004820152601760248201527f75696e743235365b5d3a20756e657175616c206974656d0000000000000000006044820152606401610095565b600101610db8565b8051825114610e9b5760405162461bcd60e51b815260206004820152601860248201527f75696e7431365b5d3a20756e657175616c206c656e67746800000000000000006044820152606401610095565b5f5b8251811015610a2f57818181518110610eb857610eb8611060565b602002602001015161ffff16838281518110610ed657610ed6611060565b602002602001015161ffff1614610f285760405162461bcd60e51b815260206004820152601660248201527575696e7431365b5d3a20756e657175616c206974656d60501b6044820152606401610095565b600101610e9d565b5f60a08284031215610f40575f80fd5b50919050565b5f805f8060808587031215610f59575f80fd5b843567ffffffffffffffff80821115610f70575f80fd5b9086019060c08289031215610f83575f80fd5b90945060208601359080821115610f98575f80fd5b610fa488838901610f30565b94506040870135915080821115610fb9575f80fd5b50610fc687828801610f30565b949793965093946060013593505050565b5f808335601e19843603018112610fec575f80fd5b83018035915067ffffffffffffffff821115611006575f80fd5b6020019150600581901b3603821315610c43575f80fd5b5f808335601e19843603018112611032575f80fd5b83018035915067ffffffffffffffff82111561104c575f80fd5b602001915036819003821315610c43575f80fd5b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b60ff81811683821601908111156110a1576110a1611074565b92915050565b5f60ff8316806110c557634e487b7160e01b5f52601260045260245ffd5b8060ff84160691505092915050565b5f602082840312156110e4575f80fd5b813580151581146110f3575f80fd5b9392505050565b5f8235605e1983360301811261110e575f80fd5b9190910192915050565b5f808335601e1984360301811261112d575f80fd5b83018035915067ffffffffffffffff821115611147575f80fd5b6020019150600681901b3603821315610c43575f80fd5b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff811182821017156111955761119561115e565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156111c4576111c461115e565b604052919050565b5f604082840312156111dc575f80fd5b6040516040810181811067ffffffffffffffff821117156111ff576111ff61115e565b6040528235815260208301356001600160a01b038116811461121f575f80fd5b60208201529392505050565b5f67ffffffffffffffff8211156112445761124461115e565b5060051b60200190565b5f82601f83011261125d575f80fd5b8135602061127261126d8361122b565b61119b565b8083825260208201915060208460051b870101935086841115611293575f80fd5b602086015b848110156112af5780358352918301918301611298565b509695505050505050565b5f6112c761126d8461122b565b83815260208082019190600586811b8601368111156112e4575f80fd5b865b818110156113da57803567ffffffffffffffff80821115611305575f80fd5b818a01915060608236031215611319575f80fd5b611321611172565b823581528683013582811115611335575f80fd5b6113413682860161124e565b888301525060408084013583811115611358575f80fd5b939093019236601f85011261136b575f80fd5b8335925061137b61126d8461122b565b83815292871b84018801928881019036851115611396575f80fd5b948901945b848610156113c357853561ffff811681146113b4575f80fd5b8252948901949089019061139b565b9183019190915250885250509483019483016112e6565b5092979650505050505050565b5f6113f461126d8461122b565b80848252602080830192508560051b850136811115611411575f80fd5b855b8181101561144b57803567ffffffffffffffff811115611431575f80fd5b61143d36828a0161124e565b865250938201938201611413565b50919695505050505050565b60ff82811682821603908111156110a1576110a1611074565b808201808211156110a1576110a161107456fea26469706673582212202c009f94c620318f23c7f0595d7e8d81cc6ff93f3b0953fb2d514716734ce65764736f6c63430008170033", + Bin: "0x608060405234801561000f575f80fd5b506114b98061001d5f395ff3fe608060405234801561000f575f80fd5b5060043610610029575f3560e01c80636d7eba0d1461002d575b5f80fd5b61004061003b366004610f46565b610042565b005b60026100516040860186610fd7565b90501461009e5760405162461bcd60e51b81526020600482015260166024820152756e756d626572206f66207061727469636970616e747360501b60448201526064015b60405180910390fd5b5f6100ac606085018561101d565b5f816100ba576100ba611060565b919091013560f81c9150600990506100d360015f611088565b6100dd9190611088565b60ff166100ed606085018561101d565b90501461012a5760405162461bcd60e51b815260206004820152600b60248201526a0c8c2e8c240d8cadccee8d60ab1b6044820152606401610095565b818160ff161461016f5760405162461bcd60e51b815260206004820152601060248201526f30b1ba37b9103737ba1039b4b3b732b960811b6044820152606401610095565b61017c606084018461101d565b5f8161018a5761018a611060565b919091013560f81c905060026101a1836001611088565b6101ab91906110a7565b60ff16146101e85760405162461bcd60e51b815260206004820152600a6024820152693732bc3a1030b1ba37b960b11b6044820152606401610095565b5f806101f5600182611088565b60ff1690505b600961020860015f611088565b6102129190611088565b60ff1681101561039957600261022b606087018761101d565b8381811061023b5761023b611060565b9050013560f81c60f81b60f81c60ff1611156102865760405162461bcd60e51b815260206004820152600a602482015269677269642076616c756560b01b6044820152606401610095565b610293606087018761101d565b828181106102a3576102a3611060565b909101356001600160f81b03191690506102c0606087018761101d565b838181106102d0576102d0611060565b9050013560f81c60f81b6001600160f81b03191614610391575f6102f7606088018861101d565b8381811061030757610307611060565b9050013560f81c60f81b60f81c60ff16146103505760405162461bcd60e51b81526020600482015260096024820152686f766572777269746560b81b6044820152606401610095565b811561038c5760405162461bcd60e51b815260206004820152600b60248201526a74776f20616374696f6e7360a81b6044820152606401610095565b600191505b6001016101fb565b505f80806103e66103ad606089018961101d565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506107a492505050565b9194509250905082151561040060a0890160808a016110d4565b15151461043c5760405162461bcd60e51b815260206004820152600a60248201526966696e616c20666c616760b01b6044820152606401610095565b61051561044c60408901896110fa565b6104569080611118565b808060200260200160405190810160405280939291908181526020015f905b828210156104a157610492604083028601368190038101906111cc565b81526020019060010190610475565b50505050508980604001906104b691906110fa565b6104c09080611118565b808060200260200160405190810160405280939291908181526020015f905b8282101561050b576104fc604083028601368190038101906111cc565b815260200190600101906104df565b505050505061098f565b61056561052560408901896110fa565b610533906040810190610fd7565b61053c916112ba565b61054960408b018b6110fa565b610557906040810190610fd7565b610560916112ba565b610a34565b5f61057360408a018a6110fa565b610581906020810190610fd7565b61058a916113e7565b9050821561076b575f61059e836001611457565b9050815167ffffffffffffffff8111156105ba576105ba61115e565b6040519080825280602002602001820160405280156105ed57816020015b60608152602001906001900390816105d85790505b5091505f5b82518110156107685760408051600280825260608201835290916020830190803683370190505083828151811061062b5761062b611060565b602090810291909101015261064360408c018c6110fa565b610651906020810190610fd7565b8281811061066157610661611060565b90506020028101906106739190610fd7565b600181811061068457610684611060565b905060200201358b806040019061069b91906110fa565b6106a9906020810190610fd7565b838181106106b9576106b9611060565b90506020028101906106cb9190610fd7565b5f8181106106db576106db611060565b905060200201356106ec9190611470565b8382815181106106fe576106fe611060565b60200260200101518560ff168151811061071a5761071a611060565b6020026020010181815250505f83828151811061073957610739611060565b60200260200101518360ff168151811061075557610755611060565b60209081029190910101526001016105f2565b50505b61079861077b60408a018a6110fa565b610789906020810190610fd7565b610792916113e7565b82610ad4565b50505050505050505050565b60408051610160810182525f610100820181815260016101208401819052600261014085018190529184528451606081810187526003808352600460208481018290526005858b01819052818a019590955289518085018b52600680825260078284018190526008838e018190528c8e01939093528c518088018e528b815280850196909652858d01829052868c01959095528b518087018d52978852878301849052878c019490945260808a019690965289518085018b5287815280820195909552848a0186905260a089019490945288518084018a52878152808501829052808a019590955260c088019490945287519182018852938152908101919091529384015260e082019290925281908190815b6008811015610934575f806108e2888585600881106108d8576108d8611060565b6020020151610b74565b91509150811561092a575f1960ff82160161090a576001805f96509650965050505050610988565b60011960ff82160161092a57600180600196509650965050505050610988565b50506001016108b7565b505f5b855181101561097b575f60ff1686828151811061095657610956611060565b016020015160f81c14610973575f805f9450945094505050610988565b600101610937565b5060015f80935093509350505b9193909250565b80518251146109e05760405162461bcd60e51b815260206004820152601760248201527f41737365745b5d3a20756e657175616c206c656e6774680000000000000000006044820152606401610095565b5f5b8251811015610a2f57610a27838281518110610a0057610a00611060565b6020026020010151838381518110610a1a57610a1a611060565b6020026020010151610c4a565b6001016109e2565b505050565b8051825114610a855760405162461bcd60e51b815260206004820152601a60248201527f537562416c6c6f635b5d3a20756e657175616c206c656e6774680000000000006044820152606401610095565b5f5b8251811015610a2f57610acc838281518110610aa557610aa5611060565b6020026020010151838381518110610abf57610abf611060565b6020026020010151610cf9565b600101610a87565b8051825114610b255760405162461bcd60e51b815260206004820152601b60248201527f75696e743235365b5d5b5d3a20756e657175616c206c656e67746800000000006044820152606401610095565b5f5b8251811015610a2f57610b6c838281518110610b4557610b45611060565b6020026020010151838381518110610b5f57610b5f611060565b6020026020010151610d65565b600101610b27565b5f80808484826020020151610b8a60015f611088565b610b949190611088565b60ff1681518110610ba757610ba7611060565b01602001516001600160f81b031916905060015b6003811015610c38576001600160f81b0319821686868360038110610be257610be2611060565b6020020151610bf260015f611088565b610bfc9190611088565b60ff1681518110610c0f57610c0f611060565b01602001516001600160f81b03191614610c30575f80935093505050610c43565b600101610bbb565b506001925060f81c90505b9250929050565b8051825114610c945760405162461bcd60e51b8152602060048201526016602482015275105cdcd95d0e881d5b995c5d585b0818da185a5b925160521b6044820152606401610095565b80602001516001600160a01b031682602001516001600160a01b031614610cf55760405162461bcd60e51b815260206004820152601560248201527420b9b9b2ba1d103ab732b8bab0b6103437b63232b960591b6044820152606401610095565b5050565b8051825114610d415760405162461bcd60e51b815260206004820152601460248201527314dd58905b1b1bd8ce881d5b995c5d585b08125160621b6044820152606401610095565b610d5382602001518260200151610d65565b610cf582604001518260400151610e4a565b8051825114610db65760405162461bcd60e51b815260206004820152601960248201527f75696e743235365b5d3a20756e657175616c206c656e677468000000000000006044820152606401610095565b5f5b8251811015610a2f57818181518110610dd357610dd3611060565b6020026020010151838281518110610ded57610ded611060565b602002602001015114610e425760405162461bcd60e51b815260206004820152601760248201527f75696e743235365b5d3a20756e657175616c206974656d0000000000000000006044820152606401610095565b600101610db8565b8051825114610e9b5760405162461bcd60e51b815260206004820152601860248201527f75696e7431365b5d3a20756e657175616c206c656e67746800000000000000006044820152606401610095565b5f5b8251811015610a2f57818181518110610eb857610eb8611060565b602002602001015161ffff16838281518110610ed657610ed6611060565b602002602001015161ffff1614610f285760405162461bcd60e51b815260206004820152601660248201527575696e7431365b5d3a20756e657175616c206974656d60501b6044820152606401610095565b600101610e9d565b5f60a08284031215610f40575f80fd5b50919050565b5f805f8060808587031215610f59575f80fd5b843567ffffffffffffffff80821115610f70575f80fd5b9086019060c08289031215610f83575f80fd5b90945060208601359080821115610f98575f80fd5b610fa488838901610f30565b94506040870135915080821115610fb9575f80fd5b50610fc687828801610f30565b949793965093946060013593505050565b5f808335601e19843603018112610fec575f80fd5b83018035915067ffffffffffffffff821115611006575f80fd5b6020019150600581901b3603821315610c43575f80fd5b5f808335601e19843603018112611032575f80fd5b83018035915067ffffffffffffffff82111561104c575f80fd5b602001915036819003821315610c43575f80fd5b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b60ff81811683821601908111156110a1576110a1611074565b92915050565b5f60ff8316806110c557634e487b7160e01b5f52601260045260245ffd5b8060ff84160691505092915050565b5f602082840312156110e4575f80fd5b813580151581146110f3575f80fd5b9392505050565b5f8235605e1983360301811261110e575f80fd5b9190910192915050565b5f808335601e1984360301811261112d575f80fd5b83018035915067ffffffffffffffff821115611147575f80fd5b6020019150600681901b3603821315610c43575f80fd5b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff811182821017156111955761119561115e565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156111c4576111c461115e565b604052919050565b5f604082840312156111dc575f80fd5b6040516040810181811067ffffffffffffffff821117156111ff576111ff61115e565b6040528235815260208301356001600160a01b038116811461121f575f80fd5b60208201529392505050565b5f67ffffffffffffffff8211156112445761124461115e565b5060051b60200190565b5f82601f83011261125d575f80fd5b8135602061127261126d8361122b565b61119b565b8083825260208201915060208460051b870101935086841115611293575f80fd5b602086015b848110156112af5780358352918301918301611298565b509695505050505050565b5f6112c761126d8461122b565b83815260208082019190600586811b8601368111156112e4575f80fd5b865b818110156113da57803567ffffffffffffffff80821115611305575f80fd5b818a01915060608236031215611319575f80fd5b611321611172565b823581528683013582811115611335575f80fd5b6113413682860161124e565b888301525060408084013583811115611358575f80fd5b939093019236601f85011261136b575f80fd5b8335925061137b61126d8461122b565b83815292871b84018801928881019036851115611396575f80fd5b948901945b848610156113c357853561ffff811681146113b4575f80fd5b8252948901949089019061139b565b9183019190915250885250509483019483016112e6565b5092979650505050505050565b5f6113f461126d8461122b565b80848252602080830192508560051b850136811115611411575f80fd5b855b8181101561144b57803567ffffffffffffffff811115611431575f80fd5b61143d36828a0161124e565b865250938201938201611413565b50919695505050505050565b60ff82811682821603908111156110a1576110a1611074565b808201808211156110a1576110a161107456fea2646970667358221220ad528d1f14dc0abe757f06b3c986b06bad96d24446e822cc9cb032d08e54b35b64736f6c63430008170033", } // TicTacToeAppABI is the input ABI used to generate the binding from. diff --git a/app-channel/util.go b/app-channel/util.go index bbe65a2..a0be10a 100644 --- a/app-channel/util.go +++ b/app-channel/util.go @@ -61,7 +61,7 @@ func deployContracts(nodeURL string, chainID uint64, privateKey string) (adj, ah panic(err) } - const gasLimit = 2200000 // Must be sufficient for deploying TicTacToe.sol. + const gasLimit = 2200000 // Must be sufficient for deploying TicTacToeApp.sol. tops, err := cb.NewTransactor(context.TODO(), gasLimit, acc) if err != nil { panic(err) From 6204a6661d1ca94c6e136a19936a41642907ce00 Mon Sep 17 00:00:00 2001 From: Minh Huy Tran Date: Thu, 14 Dec 2023 01:54:20 +0100 Subject: [PATCH 06/16] update CI to Go 1.20 --- .github/workflows/ci.yml | 2 +- app-channel/go.mod | 2 +- collateralized-channels/go.mod | 49 +++- collateralized-channels/go.sum | 14 - multiledger-channel/go.mod | 2 +- multiledger-channel/go.sum | 33 +++ payment-channel-dot/go.mod | 26 +- payment-channel-dot/go.sum | 473 --------------------------------- payment-channel/go.mod | 2 +- simple-client/go.mod | 50 +++- simple-client/go.sum | 4 - 11 files changed, 135 insertions(+), 522 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f875458..9332fd6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,7 +12,7 @@ jobs: - uses: actions/checkout@v3 - uses: actions/setup-go@v3 with: - go-version: 1.17 + go-version: '1.20' - uses: actions/cache@v3 with: diff --git a/app-channel/go.mod b/app-channel/go.mod index 622cd61..075b148 100644 --- a/app-channel/go.mod +++ b/app-channel/go.mod @@ -1,6 +1,6 @@ module perun.network/perun-examples/app-channel -go 1.19 +go 1.20 require ( github.com/ethereum/go-ethereum v1.13.5 diff --git a/collateralized-channels/go.mod b/collateralized-channels/go.mod index 551046e..66766d3 100644 --- a/collateralized-channels/go.mod +++ b/collateralized-channels/go.mod @@ -1,12 +1,55 @@ module perun.network/perun-collateralized-channels -go 1.15 +go 1.20 require ( github.com/ethereum/go-ethereum v1.9.25 - github.com/miguelmota/go-ethereum-hdwallet v0.0.0-20200123000308-a60dcd172b4c github.com/pkg/errors v0.9.1 - github.com/sirupsen/logrus v1.7.0 github.com/stretchr/testify v1.7.0 perun.network/go-perun v0.6.0 ) + +require ( + github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 // indirect + github.com/VictoriaMetrics/fastcache v1.5.7 // indirect + github.com/aristanetworks/goarista v0.0.0-20190912214011-b54698eaaca6 // indirect + github.com/btcsuite/btcd v0.0.0-20190824003749-130ea5bddde3 // indirect + github.com/cespare/xxhash/v2 v2.1.1 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/deckarep/golang-set v0.0.0-20180603214616-504e848d77ea // indirect + github.com/edsrzf/mmap-go v1.0.0 // indirect + github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff // indirect + github.com/go-ole/go-ole v1.2.1 // indirect + github.com/go-stack/stack v1.8.0 // indirect + github.com/golang/protobuf v1.4.2 // indirect + github.com/golang/snappy v0.0.3-0.20201103224600-674baa8c7fc3 // indirect + github.com/google/uuid v1.0.0 // indirect + github.com/gorilla/websocket v1.4.1-0.20190629185528-ae1634f6a989 // indirect + github.com/hashicorp/golang-lru v0.5.4 // indirect + github.com/holiman/uint256 v1.1.1 // indirect + github.com/huin/goupnp v1.0.0 // indirect + github.com/jackpal/go-nat-pmp v1.0.2-0.20160603034137-1fa385a6f458 // indirect + github.com/karalabe/usb v0.0.0-20190919080040-51dc0efba356 // indirect + github.com/mattn/go-runewidth v0.0.4 // indirect + github.com/olekukonko/tablewriter v0.0.2-0.20190409134802-7e037d187b0c // indirect + github.com/pborman/uuid v1.2.0 // indirect + github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/prometheus/tsdb v0.6.2-0.20190402121629-4f204dcbc150 // indirect + github.com/rjeczalik/notify v0.9.2 // indirect + github.com/shirou/gopsutil v2.20.5+incompatible // indirect + github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4 // indirect + github.com/steakknife/bloomfilter v0.0.0-20180922174646-6819c0d2a570 // indirect + github.com/steakknife/hamming v0.0.0-20180906055917-c99c65617cd3 // indirect + github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca // indirect + github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef // indirect + github.com/wsddn/go-ecdh v0.0.0-20161211032359-48726bab9208 // indirect + golang.org/x/crypto v0.0.0-20201208171446-5f87f3452ae9 // indirect + golang.org/x/net v0.0.0-20200822124328-c89045814202 // indirect + golang.org/x/sync v0.0.0-20201207232520-09787c993a3a // indirect + golang.org/x/sys v0.0.0-20200824131525-c12d262b63d8 // indirect + golang.org/x/text v0.3.3 // indirect + google.golang.org/protobuf v1.23.0 // indirect + gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect + gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c // indirect +) diff --git a/collateralized-channels/go.sum b/collateralized-channels/go.sum index 1a12692..15caa27 100644 --- a/collateralized-channels/go.sum +++ b/collateralized-channels/go.sum @@ -25,13 +25,11 @@ github.com/VictoriaMetrics/fastcache v1.5.7/go.mod h1:ptDBkNMQI4RtmVo8VS/XwRY6Ro github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156 h1:eMwmnE/GDgah4HI848JfFxHt+iPb26b4zyfspmqY0/8= github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= github.com/allegro/bigcache v1.2.1 h1:hg1sY1raCwic3Vnsvje6TT7/pnZba83LeFck5NrFKSc= github.com/allegro/bigcache v1.2.1/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= github.com/aristanetworks/fsnotify v1.4.2/go.mod h1:D/rtu7LpjYM8tRJphJ0hUBYpjai8SfX+aSNsWDTq/Ks= github.com/aristanetworks/glog v0.0.0-20180419172825-c15b03b3054f/go.mod h1:KASm+qXFKs/xjSoWn30NrWBBvdTTQq+UjkhjEJHfSFA= -github.com/aristanetworks/goarista v0.0.0-20170210015632-ea17b1a17847 h1:rtI0fD4oG/8eVokGVPYJEW1F88p1ZNgXiEIs9thEE4A= github.com/aristanetworks/goarista v0.0.0-20170210015632-ea17b1a17847/go.mod h1:D/tb0zPVXnP7fmsLZjtdUhSsumbK/ij54UXjjVgMGxQ= github.com/aristanetworks/goarista v0.0.0-20190912214011-b54698eaaca6 h1:6bZNnQcA2fkzH9AhZXbp2nDqbWa4bBqFeUb70Zq1HBM= github.com/aristanetworks/goarista v0.0.0-20190912214011-b54698eaaca6/go.mod h1:Z4RTxGAuYhPzcq8+EdRM+R8M48Ssle2TsWtwRKa+vns= @@ -40,12 +38,10 @@ github.com/aws/aws-sdk-go v1.25.48/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpi github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/btcsuite/btcd v0.0.0-20171128150713-2e60448ffcc6 h1:Eey/GGQ/E5Xp1P2Lyx1qj007hLZfbi0+CoVeJruGCtI= github.com/btcsuite/btcd v0.0.0-20171128150713-2e60448ffcc6/go.mod h1:Dmm/EzmjnCiweXmzRIAiUWCInVmPgjkzgv5k4tVyXiQ= github.com/btcsuite/btcd v0.0.0-20190824003749-130ea5bddde3 h1:A/EVblehb75cUgXA5njHPn0kLAsykn6mJGz7rnmW5W0= github.com/btcsuite/btcd v0.0.0-20190824003749-130ea5bddde3/go.mod h1:3J08xEfcugPacsc34/LKRU2yO7YmuT8yt28J8k2+rrI= github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= -github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d h1:yJzD/yFppdVCf6ApMkVy8cUxV0XrxdP9rVf6D87/Mng= github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= @@ -54,7 +50,6 @@ github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtE github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= github.com/cespare/cp v0.1.0 h1:SE+dxFebS7Iik5LK0tsi1k9ZCxEaFX4AjQmoyA+1dJk= github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= -github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -76,7 +71,6 @@ github.com/dvyukov/go-fuzz v0.0.0-20200318091601-be3528f3a813/go.mod h1:11Gm+ccJ github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= -github.com/edsrzf/mmap-go v0.0.0-20160512033002-935e0e8a636c h1:JHHhtb9XWJrGNMcrVP6vyzO4dusgi/HnceHTgxSejUM= github.com/edsrzf/mmap-go v0.0.0-20160512033002-935e0e8a636c/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= github.com/edsrzf/mmap-go v1.0.0 h1:CEBF7HpRnUCSJgGUb5h1Gm7e3VkmVDrR8lvWVLtrOFw= github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= @@ -95,7 +89,6 @@ github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff h1:tY80oXqG github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= github.com/go-kit/kit v0.8.0 h1:Wz+5lgoB0kkuqLEc6NVmwRknTKP6dTGbSqvhZtBI/j0= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-logfmt/logfmt v0.3.0 h1:8HUsc87TaSWLKwrnumgC8/YconD2fJQsRJAsWaPg2ic= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0 h1:MP4Eh7ZCb31lleYCFuwm0oe4/YGak+5l1vA2NOE80nA= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= @@ -181,7 +174,6 @@ github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzp github.com/mattn/go-runewidth v0.0.4 h1:2BvfKmzob6Bmd4YsL0zygOqfdFnK7GR4QL06Do4/p7Y= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/miguelmota/go-ethereum-hdwallet v0.0.0-20200123000308-a60dcd172b4c h1:cbhK2JT4nl7k8frmCN98ttRdSGP75x9mDxDhlQ1kHQQ= github.com/miguelmota/go-ethereum-hdwallet v0.0.0-20200123000308-a60dcd172b4c/go.mod h1:Z4zI+CdJB1fyrZ1jfevFH6flNV9izrLZnQAeuD6Wkjk= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -210,7 +202,6 @@ github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1y github.com/openconfig/gnmi v0.0.0-20190823184014-89b2bf29312c/go.mod h1:t+O9It+LKzfOAhKTT5O0ehDix+MTqbtT0T9t+7zzOvc= github.com/openconfig/reference v0.0.0-20190727015836-8dfd928c9696/go.mod h1:ym2A+zigScwkSEb/cVQB0/ZMpU3rqiH6X7WRRsxgOGw= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/pborman/uuid v0.0.0-20170112150404-1b00554d8222 h1:goeTyGkArOZIVOMA0dQbyuPWGNQJZGPwPu/QS9GlpnA= github.com/pborman/uuid v0.0.0-20170112150404-1b00554d8222/go.mod h1:VyrYX9gd7irzKovcSS6BIIEwPRkP2Wm2m9ufcdFSJ34= github.com/pborman/uuid v1.2.0 h1:J7Q5mO4ysT1dv8hyrUGHb9+ooztCXu1D8MY8DZYsu3g= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= @@ -218,7 +209,6 @@ github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7 h1:oYW+YCJ1pachXTQm github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= github.com/pierrec/lz4 v0.0.0-20190327172049-315a67e90e41/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -239,15 +229,12 @@ github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDa github.com/prometheus/tsdb v0.6.2-0.20190402121629-4f204dcbc150 h1:ZeU+auZj1iNzN8iVhff6M38Mfu73FQiJve/GEXYJBjE= github.com/prometheus/tsdb v0.6.2-0.20190402121629-4f204dcbc150/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= -github.com/rjeczalik/notify v0.9.1 h1:CLCKso/QK1snAlnhNR/CNvNiFU2saUtjV0bx3EwNeCE= github.com/rjeczalik/notify v0.9.1/go.mod h1:rKwnCoCGeuQnwBtTSPL9Dad03Vh2n40ePRrjvIXnJho= github.com/rjeczalik/notify v0.9.2 h1:MiTWrPj55mNDHEiIX5YUSKefw/+lCQVoAFmD6oQm5w8= github.com/rjeczalik/notify v0.9.2/go.mod h1:aErll2f0sUX9PXZnVNyeiObbmTlk5jnMoCa4QEjJeqM= -github.com/rs/cors v0.0.0-20160617231935-a62a804a8a00 h1:8DPul/X0IT/1TNMIxoKLwdemEOBBHDC/K4EB16Cw5WE= github.com/rs/cors v0.0.0-20160617231935-a62a804a8a00/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= -github.com/rs/xhandler v0.0.0-20160618193221-ed27b6fd6521 h1:3hxavr+IHMsQBrYUPQM5v0CgENFktkkbg1sfpgM3h20= github.com/rs/xhandler v0.0.0-20160618193221-ed27b6fd6521/go.mod h1:RvLn4FgxWubrpZHtQLnOf6EwhN2hEMusxZOhcW9H3UQ= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= @@ -296,7 +283,6 @@ golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190909091759-094676da4a83/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201208171446-5f87f3452ae9 h1:sYNJzB4J8toYPQTM6pAkcmBRgw9SnQKP9oXCHfgy604= golang.org/x/crypto v0.0.0-20201208171446-5f87f3452ae9/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= diff --git a/multiledger-channel/go.mod b/multiledger-channel/go.mod index 957521a..7a48115 100644 --- a/multiledger-channel/go.mod +++ b/multiledger-channel/go.mod @@ -1,6 +1,6 @@ module perun.network/perun-examples/multiledger-channel -go 1.17 +go 1.20 require ( github.com/ethereum/go-ethereum v1.10.12 diff --git a/multiledger-channel/go.sum b/multiledger-channel/go.sum index 7cc63a9..92933df 100644 --- a/multiledger-channel/go.sum +++ b/multiledger-channel/go.sum @@ -37,6 +37,7 @@ github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 h1:fLjPD/aNc3UIOA6tDi6QXUemppXK3P9BI7mr2hd6gx8= github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= +github.com/VictoriaMetrics/fastcache v1.6.0 h1:C/3Oi3EiBCqufydp1neRZkqcwmEiuRT9c3fqvvgKm5o= github.com/VictoriaMetrics/fastcache v1.6.0/go.mod h1:0qHz5QP0GMX4pfmMA/zt5RgfNuXJrTP0zS7DqpHGGTw= github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= @@ -73,8 +74,11 @@ github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtE github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= github.com/c-bata/go-prompt v0.2.2/go.mod h1:VzqtzE2ksDBcdln8G7mk2RX9QyGjH+OVqOCSiVIqS34= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/cp v0.1.0 h1:SE+dxFebS7Iik5LK0tsi1k9ZCxEaFX4AjQmoyA+1dJk= github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= +github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= @@ -104,16 +108,19 @@ github.com/docker/docker v1.4.2-0.20180625184442-8e610b2b55bf/go.mod h1:eEKB0N0r github.com/dop251/goja v0.0.0-20211011172007-d99e4b8cbf48/go.mod h1:R9ET47fwRVRPZnOGvHxxhuZcbrMCuiqOz3Rlrh4KSnk= github.com/dop251/goja_nodejs v0.0.0-20210225215109-d91c329300e7/go.mod h1:hn7BA7c8pLvoGndExHudxTDKZ84Pyvv+90pbBjbTz0Y= github.com/eclipse/paho.mqtt.golang v1.2.0/go.mod h1:H9keYFcgq3Qr5OUJm/JZI/i6U7joQ8SYLhZwfeOo6Ts= +github.com/edsrzf/mmap-go v1.0.0 h1:CEBF7HpRnUCSJgGUb5h1Gm7e3VkmVDrR8lvWVLtrOFw= github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/ethereum/go-ethereum v1.10.12 h1:el/KddB3gLEsnNgGQ3SQuZuiZjwnFTYHe5TwUet5Om4= github.com/ethereum/go-ethereum v1.10.12/go.mod h1:W3yfrFyL9C1pHcwY5hmRHVDaorTiQxhYBkKyu5mEDHw= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5 h1:FtmdgXiUlNeRsoNMFlKLDt+S+6hbjVMEW6RGQ7aUf7c= github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff h1:tY80oXqGNY4FhTFhk+o9oFHGINQ/+vhlm8HFzi6znCI= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= github.com/getkin/kin-openapi v0.53.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= github.com/getkin/kin-openapi v0.61.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= @@ -157,6 +164,7 @@ github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golangci/lint-1 v0.0.0-20181222135242-d2cdd8c08219/go.mod h1:/X8TswGSh1pIozq4ZwCfxS0WA5JGXguxk94ar/4c87Y= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= @@ -183,13 +191,18 @@ github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB7 github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/graph-gophers/graphql-go v0.0.0-20201113091052-beb923fada29/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= +github.com/hashicorp/go-bexpr v0.1.10 h1:9kuI5PFotCboP3dkDYFr/wi0gg0QVbSNz5oFRpxn4uE= github.com/hashicorp/go-bexpr v0.1.10/go.mod h1:oxlubA2vC/gFVfX1A6JGp7ls7uCDlfJn732ehYYg+g0= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d h1:dg1dEPuWpEqDnvIw251EVy4zlP8gWbsGj4BsUKCRpYs= github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/holiman/bloomfilter/v2 v2.0.3 h1:73e0e/V0tCydx14a0SCYS/EWCxgwLZ18CZcZKVu0fao= github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= +github.com/holiman/uint256 v1.2.0 h1:gpSYcPLWGv4sG43I2mVLiDZCNDh/EpGjSk8tmtxitHM= github.com/holiman/uint256 v1.2.0/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/huin/goupnp v1.0.2 h1:RfGLP+h3mvisuWEyybxNq5Eft3NWhHLPeUN72kpKZoI= github.com/huin/goupnp v1.0.2/go.mod h1:0dxJBVBHqTMjIUMkESDTNgOOx/Mw5wYIfyFmdzSamkM= github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= @@ -205,6 +218,7 @@ github.com/influxdata/promql/v2 v2.12.0/go.mod h1:fxOPu+DY0bqCTCECchSRtWfc+0X19y github.com/influxdata/roaring v0.4.13-0.20180809181101-fc520f41fab6/go.mod h1:bSgUQ7q5ZLSO+bKBGqJiCBGAl+9DxyW63zLTujjUlOE= github.com/influxdata/tdigest v0.0.0-20181121200506-bf2b5ad3c0a9/go.mod h1:Js0mqiSBE6Ffsg94weZZ2c+v/ciT8QRHFOap7EKDrR0= github.com/influxdata/usage-client v0.0.0-20160829180054-6d3895376368/go.mod h1:Wbbw6tYNvwa5dlB6304Sd+82Z3f7PmVZHVKU637d4po= +github.com/jackpal/go-nat-pmp v1.0.2-0.20160603034137-1fa385a6f458 h1:6OvNmYgJyexcZ3pYbTI9jWx5tHo1Dee/tWbLMfPe2TA= github.com/jackpal/go-nat-pmp v1.0.2-0.20160603034137-1fa385a6f458/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= github.com/jedisct1/go-minisign v0.0.0-20190909160543-45766022959e/go.mod h1:G1CVv03EnqU1wYL2dFwXxW2An0az9JTl/ZsqXQeBlkU= github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= @@ -231,9 +245,11 @@ github.com/klauspost/pgzip v1.0.2-0.20170402124221-0bf5dcad4ada/go.mod h1:Ch1tH6 github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/labstack/echo/v4 v4.2.1/go.mod h1:AA49e0DZ8kk5jTOOCKNuPR6oTnBS0dYiM4FW1e6jwpg= @@ -246,19 +262,24 @@ github.com/matryer/moq v0.0.0-20190312154309-6cfb0558e1bd/go.mod h1:9ELz6aaclSIG github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.8 h1:c1ghPdyEDarC70ftn0y+A/Ee++9zz8ljHG1b13eJ0s8= github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-ieproxy v0.0.0-20190610004146-91bb50d98149/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= github.com/mattn/go-ieproxy v0.0.0-20190702010315-6dee0af9227d/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= +github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/mattn/go-tty v0.0.0-20180907095812-13ff1204f104/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/mitchellh/mapstructure v1.4.1 h1:CpVNEelQCZBooIPDn+AR3NpivK/TIKU8bDxdASFVQag= github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/pointerstructure v1.2.0 h1:O+i9nHnXS3l/9Wu7r4NrEdwA2VFTicjUEN1uBnDo34A= github.com/mitchellh/pointerstructure v1.2.0/go.mod h1:BRAsLI5zgXmw97Lf6s25bs8ohIXc3tViBH44KcwB2g4= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= @@ -268,6 +289,7 @@ github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= +github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= @@ -304,11 +326,13 @@ github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y8 github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/tsdb v0.7.1 h1:YZcsG11NqnK4czYLrWd9mpEuAJIHVQLwdrleYfszMAA= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/retailnext/hllpp v1.0.1-0.20180308014038-101a6d2f8b52/go.mod h1:RDpi1RftBQPUCDRw6SmxeaREsAaRKnOclghuzp/WRzc= github.com/rjeczalik/notify v0.9.1 h1:CLCKso/QK1snAlnhNR/CNvNiFU2saUtjV0bx3EwNeCE= github.com/rjeczalik/notify v0.9.1/go.mod h1:rKwnCoCGeuQnwBtTSPL9Dad03Vh2n40ePRrjvIXnJho= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/segmentio/kafka-go v0.1.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= @@ -326,8 +350,10 @@ github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasO github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4 h1:Gb2Tyox57NRNuZ2d3rmvB3pcmbu7O1RS3m8WRx7ilrg= github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.1 h1:2vfRuCMp5sSVIDSqO8oNnWJq7mPa6KVP3iPIwFBuy8A= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.2.0/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= @@ -336,12 +362,14 @@ github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81P github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= github.com/tklauser/go-sysconf v0.3.5 h1:uu3Xl4nkLzQfXNsWn15rPc/HQCJKObbt1dKJeWp3vU4= github.com/tklauser/go-sysconf v0.3.5/go.mod h1:MkWzOF4RMCshBAMXuhXJs64Rte09mITnppBXY/rYEFI= github.com/tklauser/numcpus v0.2.2 h1:oyhllyrScuYI6g+h/zUvNXNp1wy7x8qQy3t/piefldA= github.com/tklauser/numcpus v0.2.2/go.mod h1:x3qojaO3uyYt0i56EW/VUYs7uBvdl2fkfZFu0T9wgjM= +github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef h1:wHSqTBrZW24CsNJDfeh9Ex6Pm0Rcpc7qrgKBiL44vF4= github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= @@ -354,6 +382,7 @@ go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= 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/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= @@ -483,10 +512,12 @@ golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba h1:O8mE0/t419eoIwhTFpKVkHiTs/Igowgfkj25AcZrtiE= golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -565,6 +596,7 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2 gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= @@ -572,6 +604,7 @@ gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce h1:+JknDZhAj8YMt7 gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= gopkg.in/olebedev/go-duktape.v3 v3.0.0-20200619000410-60c24ae608a6/go.mod h1:uAJfkITjFhyEEuUfm7bsmCZRbW5WRq8s9EY8HZ6hCns= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/urfave/cli.v1 v1.20.0 h1:NdAVW6RYxDif9DhDHaAortIu956m2c0v+09AZBPTbE0= gopkg.in/urfave/cli.v1 v1.20.0/go.mod h1:vuBzUtMdQeixQj8LVd+/98pzhxNGQoyuPBlsXHOQNO0= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/payment-channel-dot/go.mod b/payment-channel-dot/go.mod index c6205cf..25ebac8 100644 --- a/payment-channel-dot/go.mod +++ b/payment-channel-dot/go.mod @@ -1,58 +1,38 @@ module perun.network/perun-examples/payment-channel -go 1.17 +go 1.20 require ( github.com/centrifuge/go-substrate-rpc-client/v3 v3.0.2 - github.com/ethereum/go-ethereum v1.10.12 github.com/perun-network/perun-polkadot-backend v0.0.0-20211122151932-1cf5c72ae46f github.com/pkg/errors v0.9.1 - github.com/spf13/viper v1.10.1 perun.network/go-perun v0.8.0 ) require ( github.com/ChainSafe/go-schnorrkel v0.0.0-20210318173838-ccb5cd955283 // indirect - github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 // indirect github.com/btcsuite/btcd v0.21.0-beta // indirect + github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/cosmos/go-bip39 v1.0.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/deckarep/golang-set v1.7.1 // indirect github.com/decred/base58 v1.0.3 // indirect github.com/decred/dcrd/crypto/blake256 v1.0.0 // indirect - github.com/fsnotify/fsnotify v1.5.1 // indirect - github.com/go-ole/go-ole v1.2.1 // indirect + github.com/ethereum/go-ethereum v1.10.12 // indirect github.com/go-stack/stack v1.8.0 // indirect - github.com/google/uuid v1.1.5 // indirect github.com/gorilla/websocket v1.4.2 // indirect github.com/gtank/merlin v0.1.1 // indirect github.com/gtank/ristretto255 v0.1.2 // indirect - github.com/hashicorp/hcl v1.0.0 // indirect - github.com/magiconair/properties v1.8.5 // indirect github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 // indirect - github.com/mitchellh/mapstructure v1.4.3 // indirect - github.com/pelletier/go-toml v1.9.4 // indirect github.com/pierrec/xxHash v0.1.5 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/rjeczalik/notify v0.9.1 // indirect github.com/rs/cors v1.8.0 // indirect - github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible // indirect github.com/sirupsen/logrus v1.8.1 // indirect - github.com/spf13/afero v1.6.0 // indirect - github.com/spf13/cast v1.4.1 // indirect - github.com/spf13/jwalterweatherman v1.1.0 // indirect - github.com/spf13/pflag v1.0.5 // indirect github.com/stretchr/testify v1.7.0 // indirect - github.com/subosito/gotenv v1.2.0 // indirect - github.com/tklauser/go-sysconf v0.3.5 // indirect - github.com/tklauser/numcpus v0.2.2 // indirect github.com/vedhavyas/go-subkey v1.0.2 // indirect golang.org/x/crypto v0.0.0-20210817164053-32db794688a5 // indirect golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect golang.org/x/sys v0.0.0-20211210111614-af8b64212486 // indirect - golang.org/x/text v0.3.7 // indirect - gopkg.in/ini.v1 v1.66.2 // indirect gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect - gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect ) diff --git a/payment-channel-dot/go.sum b/payment-channel-dot/go.sum index b683564..20d12fb 100644 --- a/payment-channel-dot/go.sum +++ b/payment-channel-dot/go.sum @@ -8,45 +8,14 @@ cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTj cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= cloud.google.com/go v0.51.0/go.mod h1:hWtGJ6gnXH+KgDv+V0zFGDvpi07n3z8ZNj3T1RW0Gcw= -cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= -cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= -cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= -cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= -cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= -cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= -cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= -cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= -cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= -cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= -cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= -cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= -cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= -cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= -cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= -cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= -cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= -cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= -cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= -cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= -cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= -cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= -cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= -cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= cloud.google.com/go/bigtable v1.2.0/go.mod h1:JcVAOl45lrTmQfLj7T6TxyMzIN/3FGGcFm+2xVAli2o= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= -cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/firestore v1.6.1/go.mod h1:asNXNOzBdyVQmEU+ggO8UPodTkEVFW5Qx+rwHnAz+EY= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= -cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= -cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= -cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= -cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= -cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= collectd.org v0.3.0/go.mod h1:A/8DzQBkF6abtvrT2j/AU/4tiBgJWYyh0y/oB/4MlWE= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/Azure/azure-pipeline-go v0.2.1/go.mod h1:UGSo8XybXnIGZ3epmeBw7Jdz+HiUVpqIlpz/HKHylF4= @@ -68,7 +37,6 @@ github.com/ChainSafe/go-schnorrkel v0.0.0-20201021020641-d3c6d3118d10/go.mod h1: github.com/ChainSafe/go-schnorrkel v0.0.0-20210318173838-ccb5cd955283 h1:bCAjrlKrO8Y9biIFMx2ejhXpG1x75mwKqbsL8dx5EOk= github.com/ChainSafe/go-schnorrkel v0.0.0-20210318173838-ccb5cd955283/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= -github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 h1:fLjPD/aNc3UIOA6tDi6QXUemppXK3P9BI7mr2hd6gx8= github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= @@ -78,20 +46,11 @@ github.com/VictoriaMetrics/fastcache v1.6.0/go.mod h1:0qHz5QP0GMX4pfmMA/zt5RgfNu github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= -github.com/allegro/bigcache v1.2.1/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= -github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/apache/arrow/go/arrow v0.0.0-20191024131854-af6fa24be0db/go.mod h1:VTxUBvSJ3s3eHAg65PNgrsn5BtqCRPdmyXh6rAfdxN0= github.com/aristanetworks/goarista v0.0.0-20170210015632-ea17b1a17847/go.mod h1:D/tb0zPVXnP7fmsLZjtdUhSsumbK/ij54UXjjVgMGxQ= -github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= -github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= -github.com/armon/go-metrics v0.3.10/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= -github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/aws/aws-sdk-go v1.25.48/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go-v2 v1.2.0/go.mod h1:zEQs02YRBw1DjK0PoJv3ygDYOFTre1ejlJWl8FwAuQo= github.com/aws/aws-sdk-go-v2/config v1.1.1/go.mod h1:0XsVy9lBI/BCXm+2Tuvt39YmdHwS5unDQmxZOYe8F5Y= @@ -104,8 +63,6 @@ github.com/aws/aws-sdk-go-v2/service/sts v1.1.1/go.mod h1:Wi0EBZwiz/K44YliU0EKxq github.com/aws/smithy-go v1.1.0/go.mod h1:EzMw8dbp/YJL4A5/sbhGddag+NPT7q084agLbB9LgIw= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= -github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40/go.mod h1:8rLXio+WjiTceGBHIoTvn60HIbs7Hm7bcHjyrSqYB9c= github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= github.com/btcsuite/btcd v0.0.0-20171128150713-2e60448ffcc6/go.mod h1:Dmm/EzmjnCiweXmzRIAiUWCInVmPgjkzgv5k4tVyXiQ= @@ -116,7 +73,6 @@ github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufo github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= github.com/btcsuite/btcutil v1.0.2/go.mod h1:j9HUFwoQRsZL3V4n+qG+CUnEGHOarIxfC3Le2Yhbcts= github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce h1:YtWJF7RHm2pYCvA5t0RPmAaLUhREsKuKd+SLhxFbFeQ= -github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce/go.mod h1:0DVlHczLPewLcPGEIeUEzfOJhqGPQ0mJJRDBtD307+o= github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= github.com/btcsuite/goleveldb v1.0.0/go.mod h1:QiK9vBlgftBg6rWQIj6wFzbPfRjiykIEhBH4obrXJ/I= @@ -126,12 +82,9 @@ github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtE github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= github.com/c-bata/go-prompt v0.2.2/go.mod h1:VzqtzE2ksDBcdln8G7mk2RX9QyGjH+OVqOCSiVIqS34= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/centrifuge/go-substrate-rpc-client/v3 v3.0.2 h1:SQNaOeTmW2y2fmJgR5a7KIozjaOYi34GxafQ4efGc5U= github.com/centrifuge/go-substrate-rpc-client/v3 v3.0.2/go.mod h1:ZYSX8OuIJgZ9aVdKLhIi1G4Rj42Ys4nZNsWW70yfCJc= -github.com/cespare/cp v0.1.0 h1:SE+dxFebS7Iik5LK0tsi1k9ZCxEaFX4AjQmoyA+1dJk= github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= -github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= @@ -139,25 +92,11 @@ github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XL github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= -github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cloudflare/cloudflare-go v0.10.2-0.20190916151808-a80f83b9add9/go.mod h1:1MxXX1Ux4x6mqPmjkUgTP1CdXIBXKX7T+Jk9Gxrmx+U= github.com/cloudflare/cloudflare-go v0.14.0/go.mod h1:EnwdgGMaFOruiPZRFSgn+TsQ3hQ7C/YWzIGLeu5c304= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= -github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211130200136-a8f946100490/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/consensys/bavard v0.1.8-0.20210406032232-f3452dc9b572/go.mod h1:Bpd0/3mZuaj6Sj+PqrmIquiOKy397AKGThQPaGzNXAQ= github.com/consensys/gnark-crypto v0.4.1-0.20210426202927-39ac3d4b3f1f/go.mod h1:815PAHg3wvysy0SyIqanF8gZ0Y1wjk/hrDHD/iT88+Q= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= @@ -193,36 +132,19 @@ github.com/eclipse/paho.mqtt.golang v1.2.0/go.mod h1:H9keYFcgq3Qr5OUJm/JZI/i6U7j github.com/edsrzf/mmap-go v0.0.0-20160512033002-935e0e8a636c/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= github.com/edsrzf/mmap-go v1.0.0 h1:CEBF7HpRnUCSJgGUb5h1Gm7e3VkmVDrR8lvWVLtrOFw= github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= -github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= -github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= -github.com/envoyproxy/go-control-plane v0.10.1/go.mod h1:AY7fTTXNdv/aJ2O5jwpxAPOWUZ7hQAEvzN5Pf27BkQQ= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/envoyproxy/protoc-gen-validate v0.6.2/go.mod h1:2t7qjJNvHPx8IjnBOzl9E9/baC+qXE/TeeyBRzgJDws= github.com/ethereum/go-ethereum v1.9.25/go.mod h1:vMkFiYLHI4tgPw4k2j4MHKoovchFE8plZ0M9VMk4/oM= github.com/ethereum/go-ethereum v1.10.4/go.mod h1:nEE0TP5MtxGzOMd7egIrbPJMQBnhVU3ELNxhBglIzhg= -github.com/ethereum/go-ethereum v1.10.8/go.mod h1:pJNuIUYfX5+JKzSD/BTdNsvJSZ1TJqmz0dVyXMAbf6M= -github.com/ethereum/go-ethereum v1.10.9/go.mod h1:CaTMQrv51WaAlD2eULQ3f03KiahDRO28fleQcKjWrrg= github.com/ethereum/go-ethereum v1.10.12 h1:el/KddB3gLEsnNgGQ3SQuZuiZjwnFTYHe5TwUet5Om4= github.com/ethereum/go-ethereum v1.10.12/go.mod h1:W3yfrFyL9C1pHcwY5hmRHVDaorTiQxhYBkKyu5mEDHw= github.com/fatih/color v1.3.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= -github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= github.com/fjl/memsize v0.0.0-20180418122429-ca190fb6ffbc/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= -github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5 h1:FtmdgXiUlNeRsoNMFlKLDt+S+6hbjVMEW6RGQ7aUf7c= github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/fsnotify/fsnotify v1.5.1 h1:mZcQUHVQUQWoPXXtuf9yuEXKudkV2sx1E06UadKWpgI= -github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= -github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff h1:tY80oXqGNY4FhTFhk+o9oFHGINQ/+vhlm8HFzi6znCI= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= github.com/getkin/kin-openapi v0.53.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= github.com/getkin/kin-openapi v0.61.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= @@ -234,9 +156,7 @@ github.com/glycerine/goconvey v0.0.0-20190410193231-58a59202ab31/go.mod h1:Ogl1T github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJpoZOs= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-ole/go-ole v1.2.1 h1:2lOsA72HgjxAuMlKpFiCbHTvu44PIVkZ5hqm3RSdI/E= @@ -250,44 +170,27 @@ github.com/go-sourcemap/sourcemap v2.1.3+incompatible/go.mod h1:F8jJfvm2KbVjc5Nq github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/geo v0.0.0-20190916061304-5b978397cfec/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= -github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= -github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= -github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3-0.20201103224600-674baa8c7fc3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= @@ -303,41 +206,18 @@ github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.1.1-0.20200604201612-c04b05f3adfa/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.5 h1:kxhtnfFVi+rYdOALN0B3k9UT86zVJKfBimRaciULW4I= github.com/google/uuid v1.1.5/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= -github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/websocket v1.4.1-0.20190629185528-ae1634f6a989/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= @@ -345,44 +225,17 @@ github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0U github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/graph-gophers/graphql-go v0.0.0-20191115155744-f33e81362277/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= github.com/graph-gophers/graphql-go v0.0.0-20201113091052-beb923fada29/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= -github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/gtank/merlin v0.1.1-0.20191105220539-8318aed1a79f/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= github.com/gtank/merlin v0.1.1 h1:eQ90iG7K9pOhtereWsmyRJ6RAwcP4tHTDBHXNg+u5is= github.com/gtank/merlin v0.1.1/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= github.com/gtank/ristretto255 v0.1.2 h1:JEqUCPA1NvLq5DwYtuzigd7ss8fwbYay9fi4/5uMzcc= github.com/gtank/ristretto255 v0.1.2/go.mod h1:Ph5OpO6c7xKUGROZfWVLiJf9icMDwUeIvY4OmlYW69o= -github.com/hashicorp/consul/api v1.12.0/go.mod h1:6pVBMo0ebnYdt2S3H87XhekM/HHrUoTD2XXb/VrZVy0= -github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms= -github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-bexpr v0.1.10 h1:9kuI5PFotCboP3dkDYFr/wi0gg0QVbSNz5oFRpxn4uE= github.com/hashicorp/go-bexpr v0.1.10/go.mod h1:oxlubA2vC/gFVfX1A6JGp7ls7uCDlfJn732ehYYg+g0= -github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= -github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -github.com/hashicorp/go-hclog v1.0.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= -github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= -github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= -github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= -github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= -github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= -github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d h1:dg1dEPuWpEqDnvIw251EVy4zlP8gWbsGj4BsUKCRpYs= github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= -github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= -github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc= -github.com/hashicorp/memberlist v0.3.0/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= -github.com/hashicorp/serf v0.9.6/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= github.com/holiman/bloomfilter/v2 v2.0.3 h1:73e0e/V0tCydx14a0SCYS/EWCxgwLZ18CZcZKVu0fao= github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= github.com/holiman/uint256 v1.1.1/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= @@ -391,12 +244,9 @@ github.com/holiman/uint256 v1.2.0/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25 github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/huin/goupnp v1.0.0/go.mod h1:n9v9KO1tAxYH82qOn+UTIFQDmx5n1Zxd/ClZDMX7Bnc= github.com/huin/goupnp v1.0.1-0.20210310174557-0ca763054c88/go.mod h1:nNs7wvRfN1eKaMknBydLNQU6146XQim8t4h+q90biWo= -github.com/huin/goupnp v1.0.2 h1:RfGLP+h3mvisuWEyybxNq5Eft3NWhHLPeUN72kpKZoI= github.com/huin/goupnp v1.0.2/go.mod h1:0dxJBVBHqTMjIUMkESDTNgOOx/Mw5wYIfyFmdzSamkM= github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= -github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/influxdata/flux v0.65.1/go.mod h1:J754/zds0vvpfwuq7Gc2wRdVwEodfpCFM7mYlOw2LqY= github.com/influxdata/influxdb v1.2.3-0.20180221223340-01288bdb0883/go.mod h1:qZna6X/4elxqT3yI9iZYdZrWWdeFOOprn86kgg4+IzY= @@ -410,7 +260,6 @@ github.com/influxdata/promql/v2 v2.12.0/go.mod h1:fxOPu+DY0bqCTCECchSRtWfc+0X19y github.com/influxdata/roaring v0.4.13-0.20180809181101-fc520f41fab6/go.mod h1:bSgUQ7q5ZLSO+bKBGqJiCBGAl+9DxyW63zLTujjUlOE= github.com/influxdata/tdigest v0.0.0-20181121200506-bf2b5ad3c0a9/go.mod h1:Js0mqiSBE6Ffsg94weZZ2c+v/ciT8QRHFOap7EKDrR0= github.com/influxdata/usage-client v0.0.0-20160829180054-6d3895376368/go.mod h1:Wbbw6tYNvwa5dlB6304Sd+82Z3f7PmVZHVKU637d4po= -github.com/jackpal/go-nat-pmp v1.0.2-0.20160603034137-1fa385a6f458 h1:6OvNmYgJyexcZ3pYbTI9jWx5tHo1Dee/tWbLMfPe2TA= github.com/jackpal/go-nat-pmp v1.0.2-0.20160603034137-1fa385a6f458/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= github.com/jedisct1/go-minisign v0.0.0-20190909160543-45766022959e/go.mod h1:G1CVv03EnqU1wYL2dFwXxW2An0az9JTl/ZsqXQeBlkU= github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= @@ -421,9 +270,6 @@ github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfC github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/jsternberg/zap-logfmt v1.0.0/go.mod h1:uvPs/4X51zdkcm5jXl5SYoN+4RK21K8mysFmDaM/h+o= @@ -435,7 +281,6 @@ github.com/jwilder/encoding v0.0.0-20170811194829-b4e1701a28ef/go.mod h1:Ct9fl0F github.com/karalabe/usb v0.0.0-20190919080040-51dc0efba356/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= github.com/karalabe/usb v0.0.0-20211005121534-4c5740d64559/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= -github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= github.com/klauspost/compress v1.4.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= @@ -443,10 +288,8 @@ github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5/go.mod h1:Pj4uuM52 github.com/klauspost/crc32 v0.0.0-20161016154125-cb6bfca970f6/go.mod h1:+ZoRqAPRLkC4NPOvfYeR5KNOrY6TD+/sAC3HXPZgDYg= github.com/klauspost/pgzip v1.0.2-0.20170402124221-0bf5dcad4ada/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= @@ -459,34 +302,21 @@ github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8= github.com/leodido/go-urn v1.1.0/go.mod h1:+cyI34gQWZcE1eQU7NVgKkkzdXDQHr1dBMtdAPozLkw= github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lyft/protoc-gen-star v0.5.3/go.mod h1:V0xaHgaf5oCCqmcxYcWiDfTiKsZsRc87/1qhoTACD8w= -github.com/magiconair/properties v1.8.5 h1:b6kJs+EmPFMYGkow9GiUyCyOvIwYetYJ3fSaWak/Gls= -github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/matryer/moq v0.0.0-20190312154309-6cfb0558e1bd/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.0/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40= -github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-ieproxy v0.0.0-20190610004146-91bb50d98149/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= github.com/mattn/go-ieproxy v0.0.0-20190702010315-6dee0af9227d/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= -github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.5-0.20180830101745-3fb116b82035/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= -github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= -github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= -github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0= @@ -494,27 +324,15 @@ github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/mattn/go-tty v0.0.0-20180907095812-13ff1204f104/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= -github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= -github.com/miguelmota/go-ethereum-hdwallet v0.1.1/go.mod h1:f9m9uXokAHA6WNoYOPjj4AqjJS5pquQRiYYj/XSyPYc= github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 h1:QRUSJEgZn2Snx0EmT/QLXibWjSUDjKWvXIT19NBVp94= github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= -github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/mapstructure v1.4.3 h1:OVowDSCllw/YjdLkam3/sm7wEtOy59d8ndGgCcyj8cs= -github.com/mitchellh/mapstructure v1.4.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/pointerstructure v1.2.0 h1:O+i9nHnXS3l/9Wu7r4NrEdwA2VFTicjUEN1uBnDo34A= github.com/mitchellh/pointerstructure v1.2.0/go.mod h1:BRAsLI5zgXmw97Lf6s25bs8ohIXc3tViBH44KcwB2g4= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae/go.mod h1:qAyveg+e4CE+eKJXWVjKXM4ck2QobLqTDytGJbLLhJg= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= @@ -536,12 +354,8 @@ github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1y github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/opentracing/opentracing-go v1.0.3-0.20180606204148-bd9c31933947/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/paulbellamy/ratecounter v0.2.0/go.mod h1:Hfx1hDpSGoqxkVVpBi/IlYD7kChlfo5C6hzIHwPqfFE= github.com/pborman/uuid v0.0.0-20170112150404-1b00554d8222/go.mod h1:VyrYX9gd7irzKovcSS6BIIEwPRkP2Wm2m9ufcdFSJ34= -github.com/pelletier/go-toml v1.9.4 h1:tjENF6MfZAg8e4ZmZTeWaWiT2vXtsoO6+iuOjFhECwM= -github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/perun-network/perun-polkadot-backend v0.0.0-20211122151932-1cf5c72ae46f h1:LouQjHI/DAlnK55c0g3ncGhzSuKt0srhhkwYKdMaHV8= github.com/perun-network/perun-polkadot-backend v0.0.0-20211122151932-1cf5c72ae46f/go.mod h1:KKADit6bdfKUM/OysZDSZmMYbGsY1FqjK1XTHtjFYZM= github.com/peterh/liner v1.0.1-0.20180619022028-8c1271fcf47f/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc= @@ -554,33 +368,25 @@ github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= github.com/pkg/term v0.0.0-20180730021639-bffc007b7fd5/go.mod h1:eCbImbZ95eXtAUIbLAuAVnBnwf83mjf6QIVH8SHYwqQ= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= -github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= -github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= -github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/tsdb v0.6.2-0.20190402121629-4f204dcbc150/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/prometheus/tsdb v0.7.1 h1:YZcsG11NqnK4czYLrWd9mpEuAJIHVQLwdrleYfszMAA= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/retailnext/hllpp v1.0.1-0.20180308014038-101a6d2f8b52/go.mod h1:RDpi1RftBQPUCDRw6SmxeaREsAaRKnOclghuzp/WRzc= github.com/rjeczalik/notify v0.9.1 h1:CLCKso/QK1snAlnhNR/CNvNiFU2saUtjV0bx3EwNeCE= github.com/rjeczalik/notify v0.9.1/go.mod h1:rKwnCoCGeuQnwBtTSPL9Dad03Vh2n40ePRrjvIXnJho= -github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rs/cors v0.0.0-20160617231935-a62a804a8a00/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= @@ -588,9 +394,6 @@ github.com/rs/cors v1.8.0 h1:P2KMzcFwrPoSjkF1WLRPsp3UMLyql8L4v9hQpVeK5so= github.com/rs/cors v1.8.0/go.mod h1:EBwu+T5AvHOcXwvZIkQFjUN6s8Czyqw12GL/Y0tUyRM= github.com/rs/xhandler v0.0.0-20160618193221-ed27b6fd6521/go.mod h1:RvLn4FgxWubrpZHtQLnOf6EwhN2hEMusxZOhcW9H3UQ= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/sagikazarmark/crypt v0.4.0/go.mod h1:ALv2SRj7GxYV4HO9elxH9nS6M9gW+xDNxqmyJ6RfDFM= -github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/segmentio/kafka-go v0.1.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= github.com/segmentio/kafka-go v0.2.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= @@ -599,27 +402,14 @@ github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible h1 github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= -github.com/spf13/afero v1.6.0 h1:xoax2sJ2DT8S8xA2paPFjDCScCNeWsg75VG0DLRreiY= -github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.4.1 h1:s0hze+J0196ZfEMTs80N7UlFt0BDuQ7Q+JDnHiMWKdA= -github.com/spf13/cast v1.4.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= -github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= -github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.10.1 h1:nuJZuYpG7gTj/XqiUwg8bA0cp1+M2mC3J4g5luUYBKk= -github.com/spf13/viper v1.10.1/go.mod h1:IGlFPqhNAPKRxohIzWpI5QEy4kuI7tcl5WvR+8qy1rU= -github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4 h1:Gb2Tyox57NRNuZ2d3rmvB3pcmbu7O1RS3m8WRx7ilrg= github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q= github.com/steakknife/bloomfilter v0.0.0-20180922174646-6819c0d2a570/go.mod h1:8OR4w3TdeIHIh1g6EMY5p0gVNOovcWC+1vpc7naMuAw= github.com/steakknife/hamming v0.0.0-20180906055917-c99c65617cd3/go.mod h1:hpGUWaI9xL8pRQCTXQgocU38Qw1g0Us7n5PxxTwTCYU= @@ -634,8 +424,6 @@ github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5 github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= -github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca/go.mod h1:u2MKkTVTVJWe5D1rCvame8WqhBd88EuIwODJZ1VHCPM= github.com/syndtr/goleveldb v1.0.1-0.20210305035536-64b5b1c73954/go.mod h1:u2MKkTVTVJWe5D1rCvame8WqhBd88EuIwODJZ1VHCPM= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= @@ -645,8 +433,6 @@ github.com/tklauser/go-sysconf v0.3.5 h1:uu3Xl4nkLzQfXNsWn15rPc/HQCJKObbt1dKJeWp github.com/tklauser/go-sysconf v0.3.5/go.mod h1:MkWzOF4RMCshBAMXuhXJs64Rte09mITnppBXY/rYEFI= github.com/tklauser/numcpus v0.2.2 h1:oyhllyrScuYI6g+h/zUvNXNp1wy7x8qQy3t/piefldA= github.com/tklauser/numcpus v0.2.2/go.mod h1:x3qojaO3uyYt0i56EW/VUYs7uBvdl2fkfZFu0T9wgjM= -github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= -github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef h1:wHSqTBrZW24CsNJDfeh9Ex6Pm0Rcpc7qrgKBiL44vF4= github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= @@ -660,38 +446,20 @@ github.com/vedhavyas/go-subkey v1.0.2/go.mod h1:T9SEs84XZxRULMZLWtIl48s9rBNE7h6G github.com/willf/bitset v1.1.3/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= github.com/wsddn/go-ecdh v0.0.0-20161211032359-48726bab9208/go.mod h1:IotVbo4F+mw0EzQ08zFqg7pK3FebNXpaMsRy2RT+Ees= github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= -github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -go.etcd.io/etcd/api/v3 v3.5.1/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= -go.etcd.io/etcd/client/pkg/v3 v3.5.1/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= -go.etcd.io/etcd/client/v2 v2.305.1/go.mod h1:pMEacxZW7o8pg4CrFE7pquyCJJzZvkvdD2RibOCCCGs= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= -go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= -go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= 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/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190909091759-094676da4a83/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= @@ -714,9 +482,6 @@ golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm0 golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= -golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= @@ -728,24 +493,15 @@ golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHl golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= -golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= golang.org/x/mobile v0.0.0-20200801112145-973feb4309de/go.mod h1:skQtrUTUwhdJvXM/2KKJzY8pDgNr9I/FOMqDVRPBUS4= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.1.1-0.20191209134235-331c550502dd/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -761,55 +517,21 @@ golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210220033124-5f55cee0dc0d/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= -golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -817,12 +539,9 @@ golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -832,7 +551,6 @@ golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -840,72 +558,33 @@ golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200107162124-548cf772de50/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200824131525-c12d262b63d8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200826173525-f9321e4c35a6/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201221093633-bc327ba9c2f0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210316164454-77fc1eacc6aa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210420205809-ac73e9fd8988/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211210111614-af8b64212486 h1:5hpz5aRr+W1erYCL5JRhSUBJRph7l9XkNveoExlrKYk= golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= @@ -913,13 +592,9 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba h1:O8mE0/t419eoIwhTFpKVkHiTs/Igowgfkj25AcZrtiE= golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -938,49 +613,17 @@ golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgw golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200108203644-89082a384178/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200117012304-6edc0a871e69/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= -golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -998,38 +641,11 @@ google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEn google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= -google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= -google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= -google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= -google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= -google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= -google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= -google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= -google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= -google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= -google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= -google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= -google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= -google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= -google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= -google.golang.org/api v0.59.0/go.mod h1:sT2boj7M9YJxZzgeZqXogmhfmRWDtPzT31xkieUbuZU= -google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= -google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= @@ -1044,96 +660,17 @@ google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvx google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200108215221-bd8f9a0ef82f/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= -google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= -google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= -google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= -google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= -google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= -google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= -google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= -google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= -google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211008145708-270636b82663/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211028162531-8db9c33dc351/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= -google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= -google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= -google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= -google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.43.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= -google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -1144,22 +681,17 @@ gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= gopkg.in/go-playground/validator.v9 v9.29.1/go.mod h1:+c9/zcJMFNgbLvly1L1V+PpxWdVbfP1avr/N00E2vyQ= -gopkg.in/ini.v1 v1.66.2 h1:XfR1dOYubytKy4Shzc2LHrrGhU0lDCfDGG1yLPmpgsI= -gopkg.in/ini.v1 v1.66.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce h1:+JknDZhAj8YMt7GC73Ei8pv4MzjDUNPHgQWJdtMAaDU= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= gopkg.in/olebedev/go-duktape.v3 v3.0.0-20200619000410-60c24ae608a6/go.mod h1:uAJfkITjFhyEEuUfm7bsmCZRbW5WRq8s9EY8HZ6hCns= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/urfave/cli.v1 v1.20.0 h1:NdAVW6RYxDif9DhDHaAortIu956m2c0v+09AZBPTbE0= gopkg.in/urfave/cli.v1 v1.20.0/go.mod h1:vuBzUtMdQeixQj8LVd+/98pzhxNGQoyuPBlsXHOQNO0= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= @@ -1170,13 +702,8 @@ honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= 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.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= -perun.network/go-perun v0.7.1-0.20211020134606-e5b280976a47/go.mod h1:lOQco9LlHcZozZetqOmcuegu6CDkXRJfV/GS+/fxcHE= perun.network/go-perun v0.8.0 h1:ltGjAlv4Ep1WlR4G7xsCuRTw6Tbb1x+otQiZ9Dh20PM= perun.network/go-perun v0.8.0/go.mod h1:VwcPIRO9hLyhHOjvl+8FZWtgh56c68E/miXGNPe2OdQ= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= -rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= -rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/payment-channel/go.mod b/payment-channel/go.mod index 66d2fda..7b17703 100644 --- a/payment-channel/go.mod +++ b/payment-channel/go.mod @@ -1,6 +1,6 @@ module perun.network/perun-examples/payment-channel -go 1.19 +go 1.20 require ( github.com/ethereum/go-ethereum v1.10.12 diff --git a/simple-client/go.mod b/simple-client/go.mod index f29cb86..9cc281a 100644 --- a/simple-client/go.mod +++ b/simple-client/go.mod @@ -1,9 +1,57 @@ module github.com/perun-network/perun-examples/simple-client -go 1.15 +go 1.20 require ( github.com/ethereum/go-ethereum v1.9.25 github.com/miguelmota/go-ethereum-hdwallet v0.0.0-20200123000308-a60dcd172b4c perun.network/go-perun v0.6.1-0.20210302085855-37f6187c1df8 ) + +require ( + github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 // indirect + github.com/VictoriaMetrics/fastcache v1.5.7 // indirect + github.com/aristanetworks/goarista v0.0.0-20190912214011-b54698eaaca6 // indirect + github.com/btcsuite/btcd v0.0.0-20190824003749-130ea5bddde3 // indirect + github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d // indirect + github.com/cespare/xxhash/v2 v2.1.1 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/deckarep/golang-set v0.0.0-20180603214616-504e848d77ea // indirect + github.com/edsrzf/mmap-go v1.0.0 // indirect + github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff // indirect + github.com/go-ole/go-ole v1.2.1 // indirect + github.com/go-stack/stack v1.8.0 // indirect + github.com/golang/protobuf v1.4.2 // indirect + github.com/golang/snappy v0.0.3-0.20201103224600-674baa8c7fc3 // indirect + github.com/google/uuid v1.0.0 // indirect + github.com/gorilla/websocket v1.4.1-0.20190629185528-ae1634f6a989 // indirect + github.com/hashicorp/golang-lru v0.5.4 // indirect + github.com/holiman/uint256 v1.1.1 // indirect + github.com/huin/goupnp v1.0.0 // indirect + github.com/jackpal/go-nat-pmp v1.0.2-0.20160603034137-1fa385a6f458 // indirect + github.com/karalabe/usb v0.0.0-20190919080040-51dc0efba356 // indirect + github.com/mattn/go-runewidth v0.0.4 // indirect + github.com/olekukonko/tablewriter v0.0.2-0.20190409134802-7e037d187b0c // indirect + github.com/pborman/uuid v1.2.0 // indirect + github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/prometheus/tsdb v0.6.2-0.20190402121629-4f204dcbc150 // indirect + github.com/rjeczalik/notify v0.9.2 // indirect + github.com/shirou/gopsutil v2.20.5+incompatible // indirect + github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4 // indirect + github.com/steakknife/bloomfilter v0.0.0-20180922174646-6819c0d2a570 // indirect + github.com/steakknife/hamming v0.0.0-20180906055917-c99c65617cd3 // indirect + github.com/stretchr/testify v1.6.1 // indirect + github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca // indirect + github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef // indirect + github.com/wsddn/go-ecdh v0.0.0-20161211032359-48726bab9208 // indirect + golang.org/x/crypto v0.0.0-20201208171446-5f87f3452ae9 // indirect + golang.org/x/net v0.0.0-20200822124328-c89045814202 // indirect + golang.org/x/sync v0.0.0-20201207232520-09787c993a3a // indirect + golang.org/x/sys v0.0.0-20200824131525-c12d262b63d8 // indirect + golang.org/x/text v0.3.3 // indirect + google.golang.org/protobuf v1.23.0 // indirect + gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect + gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c // indirect +) diff --git a/simple-client/go.sum b/simple-client/go.sum index 2f7a4a5..33353a0 100644 --- a/simple-client/go.sum +++ b/simple-client/go.sum @@ -51,7 +51,6 @@ github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtE github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= github.com/cespare/cp v0.1.0 h1:SE+dxFebS7Iik5LK0tsi1k9ZCxEaFX4AjQmoyA+1dJk= github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= -github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -285,7 +284,6 @@ golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190909091759-094676da4a83/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201208171446-5f87f3452ae9 h1:sYNJzB4J8toYPQTM6pAkcmBRgw9SnQKP9oXCHfgy604= golang.org/x/crypto v0.0.0-20201208171446-5f87f3452ae9/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= @@ -398,7 +396,5 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -perun.network/go-perun v0.6.1-0.20210120095724-92ce567916a0 h1:8uz7nMaXZ8B9TnEAIabJH0ur2DrdAJCqo946AZK4urQ= -perun.network/go-perun v0.6.1-0.20210120095724-92ce567916a0/go.mod h1:pBUGJDd6oBGaK5sHJcY7OfZvGhgEGC/6x2Ezv72X6Z4= perun.network/go-perun v0.6.1-0.20210302085855-37f6187c1df8 h1:5hQRTsin+aXhL08Aji6rdJSqu0j+ybbU5gl6Z9AigXE= perun.network/go-perun v0.6.1-0.20210302085855-37f6187c1df8/go.mod h1:pBUGJDd6oBGaK5sHJcY7OfZvGhgEGC/6x2Ezv72X6Z4= From f20adda461b289bbbf809affb89beda8f3b69ac2 Mon Sep 17 00:00:00 2001 From: Minh Huy Tran Date: Thu, 18 Jan 2024 17:33:15 +0700 Subject: [PATCH 07/16] refactor(collateralized):remove custom outdated perun client Signed-off-by: Minh Huy Tran --- collateralized-channels/perun/perun.go | 128 ------------------- collateralized-channels/perun/wallet.go | 144 ---------------------- collateralized-channels/perun/withdraw.go | 65 ---------- 3 files changed, 337 deletions(-) delete mode 100644 collateralized-channels/perun/perun.go delete mode 100644 collateralized-channels/perun/wallet.go delete mode 100644 collateralized-channels/perun/withdraw.go diff --git a/collateralized-channels/perun/perun.go b/collateralized-channels/perun/perun.go deleted file mode 100644 index 50f147f..0000000 --- a/collateralized-channels/perun/perun.go +++ /dev/null @@ -1,128 +0,0 @@ -// Copyright 2021 PolyCrypt GmbH, Germany -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package perun - -import ( - "crypto/ecdsa" - "fmt" - "time" - - "github.com/ethereum/go-ethereum/accounts" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/ethclient" - "github.com/pkg/errors" - "perun.network/go-perun/backend/ethereum/channel" - "perun.network/go-perun/backend/ethereum/wallet" - "perun.network/go-perun/client" - "perun.network/go-perun/wire" - "perun.network/go-perun/wire/net" - "perun.network/go-perun/wire/net/simple" -) - -type PeerWithAddress struct { - Peer wire.Address - Address string -} - -type ClientConfig struct { - PrivateKey *ecdsa.PrivateKey - Host string - ETHNodeURL string - AdjudicatorAddr common.Address - AssetHolderAddr common.Address - DialerTimeout time.Duration - PeerAddresses []PeerWithAddress -} - -type Client struct { - EthClient *ethclient.Client - PerunClient *client.Client - Bus *net.Bus - Listener net.Listener - ContractBackend channel.ContractInterface - Wallet *Wallet - Account *Account -} - -func SetupClient(cfg ClientConfig) (*Client, error) { - // Create wallet and account - w := createWallet(cfg.PrivateKey) - addr := wallet.AsWalletAddr(crypto.PubkeyToAddress(cfg.PrivateKey.PublicKey)) - pAccount, err := w.Unlock(addr) - if err != nil { - panic("failed to create account") - } - account := pAccount.(*Account) - - // Create Ethereum client and contract backend - ethClient, cb, err := createContractBackend(cfg.ETHNodeURL, w) - if err != nil { - return nil, errors.WithMessage(err, "creating contract backend") - } - - //REMARK - // A client should validate the smart contracts it is using them, if the - // given contract addresses come from an untrusted source. - - adjudicator := channel.NewAdjudicator(cb, cfg.AdjudicatorAddr, account.EthAddress(), account.EthAccount()) - - listener, bus, err := setupNetwork(account, cfg.Host, cfg.PeerAddresses, cfg.DialerTimeout) - if err != nil { - return nil, errors.WithMessage(err, "setting up network") - } - - funder := createFunder(cb, account.EthAccount(), cfg.AssetHolderAddr) - - c, err := client.New(account.Address(), bus, funder, adjudicator, w) - if err != nil { - return nil, errors.WithMessage(err, "creating client") - } - - return &Client{ethClient, c, bus, listener, cb, w, account}, nil -} - -func createContractBackend(nodeURL string, wallet *Wallet) (*ethclient.Client, channel.ContractBackend, error) { - client, err := ethclient.Dial(nodeURL) - if err != nil { - return nil, channel.ContractBackend{}, nil - } - - return client, channel.NewContractBackend(client, wallet), nil -} - -func setupNetwork(account wire.Account, host string, peerAddresses []PeerWithAddress, dialerTimeout time.Duration) (listener net.Listener, bus *net.Bus, err error) { - dialer := simple.NewTCPDialer(dialerTimeout) - - for _, pa := range peerAddresses { - dialer.Register(pa.Peer, pa.Address) - } - - listener, err = simple.NewTCPListener(host) - if err != nil { - err = fmt.Errorf("creating listener: %w", err) - return - } - - bus = net.NewBus(account, dialer) - return listener, bus, nil -} - -func createFunder(cb channel.ContractBackend, account accounts.Account, assetHolder common.Address) *channel.Funder { - ethDepositor := new(channel.ETHDepositor) - accounts := map[channel.Asset]accounts.Account{wallet.Address(assetHolder): account} - depositors := map[channel.Asset]channel.Depositor{wallet.Address(assetHolder): ethDepositor} - return channel.NewFunder(cb, accounts, depositors) -} diff --git a/collateralized-channels/perun/wallet.go b/collateralized-channels/perun/wallet.go deleted file mode 100644 index 3333673..0000000 --- a/collateralized-channels/perun/wallet.go +++ /dev/null @@ -1,144 +0,0 @@ -// Copyright 2021 PolyCrypt GmbH, Germany -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package perun - -import ( - "crypto/ecdsa" - "math/big" - - "github.com/ethereum/go-ethereum/accounts" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/crypto" - "github.com/pkg/errors" - "perun.network/go-perun/backend/ethereum/wallet" - pwallet "perun.network/go-perun/wallet" -) - -func createWallet(privateKeys ...*ecdsa.PrivateKey) *Wallet { - accounts := make(map[common.Address]*Account) - for _, k := range privateKeys { - acc := createAccount(k) - accounts[acc.EthAddress()] = acc - } - return &Wallet{accounts} -} - -func createAccount(k *ecdsa.PrivateKey) *Account { - return &Account{ - Account: accounts.Account{Address: crypto.PubkeyToAddress(k.PublicKey)}, - key: k, - } -} - -type Wallet struct { - accounts map[common.Address]*Account -} - -type Account struct { - accounts.Account - key *ecdsa.PrivateKey -} - -type Address wallet.Address - -func (w Wallet) Unlock(addr pwallet.Address) (pwallet.Account, error) { - pa, ok := addr.(*wallet.Address) - if !ok { - return nil, errors.New("casting address") - } - - a, ok := w.accounts[Address(*pa).EthAddress()] - if !ok { - return nil, errors.Errorf("getting account: %v", addr) - } - - return a, nil -} - -// LockAll is called by the framework when a Client shuts down. -func (w Wallet) LockAll() {} - -// IncrementUsage is called whenever a new channel is created or restored. -func (w Wallet) IncrementUsage(addr pwallet.Address) {} - -// DecrementUsage is called whenever a channel is settled. -func (w Wallet) DecrementUsage(addr pwallet.Address) {} - -// Contains returns whether the wallet contains the given account. -func (w Wallet) Contains(acc accounts.Account) bool { - _, ok := w.accounts[acc.Address] - return ok -} - -func (w *Wallet) NewTransactor(account accounts.Account) (*bind.TransactOpts, error) { - // 1337 is the default chain id for ganache-cli. - signer := types.NewEIP155Signer(big.NewInt(1337)) - - acc, ok := w.accounts[account.Address] - if !ok { - return nil, errors.New("account not found") - } - return &bind.TransactOpts{ - From: account.Address, - Signer: func(address common.Address, tx *types.Transaction) (*types.Transaction, error) { - if address != account.Address { - return nil, errors.New("not authorized to sign this account") - } - - signature, err := acc.SignHash(signer.Hash(tx).Bytes()) - if err != nil { - return nil, err - } - return tx.WithSignature(signer, signature) - }, - }, nil -} - -// Address returns the address of this account. -func (a Account) Address() pwallet.Address { - return wallet.AsWalletAddr(a.Account.Address) -} - -// SignData requests a signature from this account. -// It returns the signature or an error. -func (a Account) SignData(data []byte) ([]byte, error) { - hash := wallet.PrefixedHash(data) - sig, err := a.SignHash(hash) - if err != nil { - return nil, errors.Wrap(err, "SignHash") - } - sig[64] += 27 - return sig, nil -} - -func (a Account) SignHash(h []byte) ([]byte, error) { - return crypto.Sign(h, a.key) -} - -// EthAccount returns the corresponding Ethereum account. -func (a *Account) EthAccount() accounts.Account { - return a.Account -} - -// EthAddress returns the Ethereum address of this account. -func (a *Account) EthAddress() common.Address { - return a.Account.Address -} - -func (a Address) EthAddress() common.Address { - return common.Address(a) -} diff --git a/collateralized-channels/perun/withdraw.go b/collateralized-channels/perun/withdraw.go deleted file mode 100644 index 356e12b..0000000 --- a/collateralized-channels/perun/withdraw.go +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2021 PolyCrypt GmbH, Germany -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package perun - -import ( - "math/big" - - "github.com/ethereum/go-ethereum/accounts/abi" - "github.com/pkg/errors" - "perun.network/go-perun/backend/ethereum/wallet" - "perun.network/go-perun/channel" - pwallet "perun.network/go-perun/wallet" - "perun.network/perun-collateralized-channels/contracts/generated/collateralAssetHolderETH" -) - -func NewWithdrawalAuth(channelID channel.ID, acc pwallet.Account, receiver pwallet.Address, amount *big.Int) (collateralAssetHolderETH.AssetHolderWithdrawalAuth, []byte, error) { - auth := collateralAssetHolderETH.AssetHolderWithdrawalAuth{ - ChannelID: channelID, - Participant: wallet.AsEthAddr(acc.Address()), - Receiver: wallet.AsEthAddr(receiver), - Amount: amount, - } - enc, err := encodeAssetHolderWithdrawalAuth(auth) - if err != nil { - return collateralAssetHolderETH.AssetHolderWithdrawalAuth{}, nil, errors.WithMessage(err, "encoding withdrawal auth") - } - - sig, err := acc.SignData(enc) - return auth, sig, errors.WithMessage(err, "sign data") -} - -func encodeAssetHolderWithdrawalAuth(auth collateralAssetHolderETH.AssetHolderWithdrawalAuth) ([]byte, error) { - var ( - abiUint256, _ = abi.NewType("uint256", "", nil) - abiAddress, _ = abi.NewType("address", "", nil) - abiBytes32, _ = abi.NewType("bytes32", "", nil) - ) - - // encodeAssetHolderWithdrawalAuth encodes the AssetHolderWithdrawalAuth as with abi.encode() in the smart contracts. - args := abi.Arguments{ - {Type: abiBytes32}, - {Type: abiAddress}, - {Type: abiAddress}, - {Type: abiUint256}, - } - enc, err := args.Pack( - auth.ChannelID, - auth.Participant, - auth.Receiver, - auth.Amount, - ) - return enc, errors.WithStack(err) -} From 118d30bbc591740f30cc9256ae5abc9d7c783dcd Mon Sep 17 00:00:00 2001 From: Minh Huy Tran Date: Thu, 18 Jan 2024 17:35:15 +0700 Subject: [PATCH 08/16] refactor(collateralized): update app client to go-perun 0.10.6 Signed-off-by: Minh Huy Tran --- collateralized-channels/client/client.go | 177 +++++--- collateralized-channels/client/eth.go | 7 +- collateralized-channels/client/handle.go | 39 +- collateralized-channels/client/util.go | 105 +++-- collateralized-channels/client/withdraw.go | 65 +++ collateralized-channels/go.mod | 79 ++-- collateralized-channels/go.sum | 500 ++++++--------------- 7 files changed, 447 insertions(+), 525 deletions(-) create mode 100644 collateralized-channels/client/withdraw.go diff --git a/collateralized-channels/client/client.go b/collateralized-channels/client/client.go index 0d73d3a..b614313 100644 --- a/collateralized-channels/client/client.go +++ b/collateralized-channels/client/client.go @@ -4,7 +4,7 @@ // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // -// http://www.apache.org/licenses/LICENSE-2.0 +// http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, @@ -12,34 +12,40 @@ // See the License for the specific language governing permissions and // limitations under the License. +// Package client implements the client side of the collateralized channel. package client import ( + "fmt" "math/big" - "sync" "time" + "github.com/ethereum/go-ethereum/accounts" "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/ethclient" + ethchannel "github.com/perun-network/perun-eth-backend/channel" + ethwallet "github.com/perun-network/perun-eth-backend/wallet" + swallet "github.com/perun-network/perun-eth-backend/wallet/simple" + ethwire "github.com/perun-network/perun-eth-backend/wire" "github.com/pkg/errors" - ewallet "perun.network/go-perun/backend/ethereum/wallet" "perun.network/go-perun/channel" "perun.network/go-perun/client" "perun.network/go-perun/log" + "perun.network/go-perun/wallet" + "perun.network/go-perun/watcher/local" "perun.network/go-perun/wire" "perun.network/perun-collateralized-channels/app" "perun.network/perun-collateralized-channels/contracts/generated/collateralAssetHolderETH" - "perun.network/perun-collateralized-channels/perun" ) -type ClientConfig struct { - perun.ClientConfig - ChallengeDuration time.Duration - AppAddress common.Address - ContextTimeout time.Duration -} +const ( + chainID = 1337 // default chainID of Ganache + txFinalityDepth = 1 // Number of blocks required to confirm a transaction. +) +// PaymentAcceptancePolicy is a policy that decides whether a payment should be accepted. type PaymentAcceptancePolicy = func( amount *big.Int, collateral *big.Int, @@ -48,85 +54,140 @@ type PaymentAcceptancePolicy = func( hasOverdrawn bool, ) (ok bool) +// Channel represents an app channel. type Channel struct { *client.Channel state *channel.State } -type Client struct { - mu sync.Mutex - perunClient *perun.Client +// AppClient is an app channel client. +type AppClient struct { + perunClient *client.Client + account wallet.Address + walletAccount wallet.Account + transactor *swallet.Transactor + ethAcc accounts.Account + waddress wire.Address + ethClient *ethclient.Client assetHolderAddr common.Address + asset channel.Asset assetHolder *collateralAssetHolderETH.CollateralAssetHolderETH + contractBackend ethchannel.ContractInterface channels map[common.Address]*Channel challengeDuration time.Duration - appAddress common.Address + collateralApp *app.CollateralApp contextTimeout time.Duration updatePolicy PaymentAcceptancePolicy } -func SetupClient( - cfg ClientConfig, +// SetupAppClient creates a new app channel client. +func SetupAppClient( + bus wire.Bus, + w *swallet.Wallet, + acc common.Address, + assetHolderAddr common.Address, + eaddress *ethwallet.Address, // eaddress is the address of the Ethereum account to be used for signing transactions. + nodeURL string, // nodeURL is the URL of the blockchain node. + chainID uint64, // chainID is the identifier of the blockchain. + app *app.CollateralApp, updatePolicy PaymentAcceptancePolicy, -) (*Client, error) { - perunClient, err := perun.SetupClient(cfg.ClientConfig) + challengeDuration time.Duration, + contextTimeout time.Duration, + +) (*AppClient, error) { + // Create Ethereum client and contract backend. + ethClient, cb, tr, err := CreateContractBackend(nodeURL, chainID, w) if err != nil { - return nil, errors.WithMessage(err, "creating perun client") + return nil, errors.WithMessage(err, "creating contract backend") } - ah, err := collateralAssetHolderETH.NewCollateralAssetHolderETH(cfg.AssetHolderAddr, perunClient.ContractBackend) + walletAcc, err := w.Unlock(eaddress) if err != nil { - return nil, errors.WithMessage(err, "loading asset holder") + return nil, errors.WithMessage(err, "unlocking wallet") + } + + // Setup funder. + funder := ethchannel.NewFunder(cb) + dep := ethchannel.NewETHDepositor() + ethAcc := accounts.Account{Address: acc} + asset := ethchannel.NewAsset(big.NewInt(int64(chainID)), assetHolderAddr) + funder.RegisterAsset(*asset, dep, ethAcc) + + // Setup adjudicator. + adjudicator := ethchannel.NewAdjudicator(cb, assetHolderAddr, ethAcc.Address, ethAcc) + + // Setup dispute watcher. + watcher, err := local.NewWatcher(adjudicator) + if err != nil { + return nil, fmt.Errorf("intializing watcher: %w", err) + } + + // Setup client. + waddr := ðwire.Address{Address: eaddress} + perunClient, err := client.New(waddr, bus, funder, adjudicator, w, watcher) + if err != nil { + return nil, errors.WithMessage(err, "creating client") } - c := &Client{ - sync.Mutex{}, - perunClient, - cfg.AssetHolderAddr, - ah, - make(map[common.Address]*Channel), - cfg.ChallengeDuration, - cfg.AppAddress, - cfg.ContextTimeout, - updatePolicy, + ah, err := collateralAssetHolderETH.NewCollateralAssetHolderETH(assetHolderAddr, cb) + if err != nil { + return nil, errors.WithMessage(err, "loading asset holder") } - collateralApp := app.NewCollateralApp(ewallet.AsWalletAddr(cfg.AppAddress)) - channel.RegisterApp(collateralApp) + // Create client and start request handler. + c := &AppClient{ + perunClient: perunClient, + account: eaddress, + walletAccount: walletAcc, + transactor: tr, + ethAcc: ethAcc, + waddress: waddr, + ethClient: ethClient, + assetHolderAddr: assetHolderAddr, + asset: asset, + assetHolder: ah, + contractBackend: cb, + channels: make(map[common.Address]*Channel), + challengeDuration: challengeDuration, + collateralApp: app, + contextTimeout: contextTimeout, + updatePolicy: updatePolicy, + } - go c.perunClient.PerunClient.Handle(c, c) - go c.perunClient.Bus.Listen(c.perunClient.Listener) + channel.RegisterApp(app) + go perunClient.Handle(c, c) return c, nil } -func (c *Client) IncreaseCollateral(amount *big.Int) (err error) { +// IncreaseCollateral increases the collateral of the client. +func (c *AppClient) IncreaseCollateral(amount *big.Int) (err error) { return c.transactAndConfirm(func(tr *bind.TransactOpts) (*types.Transaction, error) { tr.Value = amount - fundingID := calcPeerCollateralID(c.Address()) + fundingID := calcPeerCollateralID(c.WalletAddress()) return c.assetHolder.Deposit(tr, fundingID, amount) }) } -func (c *Client) SendPayment(peer common.Address, amount *big.Int) (err error) { - c.mu.Lock() - defer c.mu.Unlock() - +// SendPayment sends a payment to the peer. +func (c *AppClient) SendPayment(peer common.Address, amount *big.Int) (err error) { ch, ok := c.channels[peer] if !ok { ctx := c.defaultContext() challengeDuration := uint64(c.challengeDuration.Seconds()) - collateralApp := app.NewCollateralApp(ewallet.AsWalletAddr(c.appAddress)) - peers := []wire.Address{c.perunClient.Account.Address(), ewallet.AsWalletAddr(peer)} + + participants := []wire.Address{c.waddress, ðwire.Address{Address: ethwallet.AsWalletAddr(peer)}} + fmt.Println("Participants: ", participants) if err != nil { return errors.WithMessage(err, "creating peers") } - withApp := client.WithApp(collateralApp, collateralApp.ZeroBalance()) - prop, err := client.NewLedgerChannelProposal(challengeDuration, c.PerunAddress(), zeroBalance(c.assetHolderAddr), peers, withApp) + withApp := client.WithApp(c.collateralApp, c.collateralApp.ZeroBalance()) + + prop, err := client.NewLedgerChannelProposal(challengeDuration, c.account, zeroBalance(c.asset), participants, withApp) if err != nil { return errors.WithMessage(err, "creating channel proposal") } - perunChannel, err := c.perunClient.PerunClient.ProposeChannel(ctx, prop) + perunChannel, err := c.perunClient.ProposeChannel(ctx, prop) if err != nil { return errors.WithMessage(err, "proposing channel") } @@ -135,12 +196,12 @@ func (c *Client) SendPayment(peer common.Address, amount *big.Int) (err error) { time.Sleep(1000 * time.Millisecond) // have to wait until other side has set up the channel, can be removed once updated to new go-perun version - return ch.UpdateBy(c.defaultContext(), func(s *channel.State) error { - return app.Transfer(ch.Params().Parts, s, c.Address(), peer, amount) + return ch.Update(c.defaultContext(), func(s *channel.State) { + app.Transfer(ch.Params().Parts, s, c.WalletAddress(), peer, amount) }) } -func (c *Client) onNewChannel(perunChannel *client.Channel) *Channel { +func (c *AppClient) onNewChannel(perunChannel *client.Channel) *Channel { ch := &Channel{perunChannel, perunChannel.State().Clone()} peer := peerAddress(ch.Channel) c.channels[peer] = ch @@ -153,10 +214,8 @@ func (c *Client) onNewChannel(perunChannel *client.Channel) *Channel { } -func (c *Client) IncreaseChannelCollateral(peer common.Address, amount *big.Int) (err error) { - c.mu.Lock() - defer c.mu.Unlock() - +// IncreaseChannelCollateral increases the collateral of the channel with the peer. +func (c *AppClient) IncreaseChannelCollateral(peer common.Address, amount *big.Int) (err error) { ch, ok := c.channels[peer] if !ok { return errors.WithMessage(err, "getting channel") @@ -164,16 +223,14 @@ func (c *Client) IncreaseChannelCollateral(peer common.Address, amount *big.Int) return c.transactAndConfirm(func(tr *bind.TransactOpts) (*types.Transaction, error) { tr.Value = amount - fundingID := calcChannelCollateralID(ch.ID(), c.Address()) + fundingID := calcChannelCollateralID(ch.ID(), c.WalletAddress()) return c.assetHolder.Deposit(tr, fundingID, amount) // return c.assetHolder.DepositIntoChannelCollateral(tr, ch.ID(), c.Address(), amount) }) } -func (c *Client) Settle(peer common.Address) (err error) { - c.mu.Lock() - defer c.mu.Unlock() - +// Settle settles the channel with the peer. +func (c *AppClient) Settle(peer common.Address) (err error) { ch, ok := c.channels[peer] if !ok { return errors.WithMessage(err, "getting channel") @@ -185,11 +242,11 @@ func (c *Client) Settle(peer common.Address) (err error) { } // Create withdrawal authentication - amount, err := app.ChannelBalance(ch.Params().Parts, ch.State().Data, c.Address()) + amount, err := app.ChannelBalance(ch.Params().Parts, ch.State().Data, c.WalletAddress()) if err != nil { return errors.WithMessage(err, "getting balance") } - auth, sig, err := perun.NewWithdrawalAuth(ch.ID(), c.perunClient.Account, c.PerunAddress(), amount) + auth, sig, err := NewWithdrawalAuth(ch.ID(), c.walletAccount, c.walletAccount.Address(), amount) if err != nil { return errors.WithMessage(err, "creating withdrawal authentication") } diff --git a/collateralized-channels/client/eth.go b/collateralized-channels/client/eth.go index 2d59e86..5f489f2 100644 --- a/collateralized-channels/client/eth.go +++ b/collateralized-channels/client/eth.go @@ -20,10 +20,9 @@ import ( "github.com/pkg/errors" ) -func (c *Client) transactAndConfirm(transact func(tr *bind.TransactOpts) (*types.Transaction, error)) (err error) { +func (c *AppClient) transactAndConfirm(transact func(tr *bind.TransactOpts) (*types.Transaction, error)) (err error) { ctx := c.defaultContext() - - tr, err := c.perunClient.Wallet.NewTransactor(c.perunClient.Account.Account) + tr, err := c.transactor.NewTransactor(c.ethAcc) tr.Context = ctx if err != nil { return errors.WithMessage(err, "creating transactor") @@ -34,7 +33,7 @@ func (c *Client) transactAndConfirm(transact func(tr *bind.TransactOpts) (*types return errors.WithMessage(err, "submitting transaction") } - receipt, err := bind.WaitMined(ctx, c.perunClient.ContractBackend, tx) + receipt, err := bind.WaitMined(ctx, c.contractBackend, tx) if err != nil { return errors.WithMessage(err, "awaiting transaction confirmation") } diff --git a/collateralized-channels/client/handle.go b/collateralized-channels/client/handle.go index df802ce..b64116c 100644 --- a/collateralized-channels/client/handle.go +++ b/collateralized-channels/client/handle.go @@ -18,8 +18,8 @@ import ( "math/big" "github.com/ethereum/go-ethereum/common" + "github.com/perun-network/perun-eth-backend/wallet" "github.com/pkg/errors" - "perun.network/go-perun/backend/ethereum/wallet" "perun.network/go-perun/channel" "perun.network/go-perun/client" "perun.network/go-perun/log" @@ -33,12 +33,10 @@ func peerAddress(ch *client.Channel) common.Address { return wallet.AsEthAddr(ch.Params().Parts[1-int(ch.Idx())]) } -func (c *Client) HandleProposal(proposal client.ChannelProposal, responder *client.ProposalResponder) { - c.mu.Lock() - defer c.mu.Unlock() - +// HandleProposal handles channel proposals. +func (c *AppClient) HandleProposal(proposal client.ChannelProposal, responder *client.ProposalResponder) { log.Tracef("incoming channel proposal: %v", proposal) - _proposal, ok := proposal.(*client.LedgerChannelProposal) + _proposal, ok := proposal.(*client.LedgerChannelProposalMsg) if !ok { responder.Reject(c.defaultContext(), "accepting only ledger channel proposals") return @@ -47,7 +45,7 @@ func (c *Client) HandleProposal(proposal client.ChannelProposal, responder *clie return } - accept := _proposal.Accept(c.PerunAddress(), client.WithRandomNonce()) + accept := _proposal.Accept(c.account, client.WithRandomNonce()) ch, err := responder.Accept(c.defaultContext(), accept) if err != nil { log.Errorf("accepting channel proposal: %v", err) @@ -57,30 +55,28 @@ func (c *Client) HandleProposal(proposal client.ChannelProposal, responder *clie c.onNewChannel(ch) } -func (c *Client) HandleUpdate(update client.ChannelUpdate, responder *client.UpdateResponder) { - c.mu.Lock() - defer c.mu.Unlock() - +// HandleUpdate handles channel updates. +func (c *AppClient) HandleUpdate(cur *channel.State, next client.ChannelUpdate, responder *client.UpdateResponder) { // Get channel and peer. - peer, ch, ok := c.peerWithChannelForChannelID(update.State.ID) + peer, ch, ok := c.peerWithChannelForChannelID(cur.ID) if !ok { responder.Reject(c.defaultContext(), "unknown channel") return } // Get current and proposed balances. - curData, ok := ch.state.Data.(app.CollateralAppData) + curData, ok := ch.state.Data.(*app.CollateralAppData) if !ok { responder.Reject(c.defaultContext(), "failed to parse current app data") return } - propData, ok := update.State.Data.(app.CollateralAppData) + propData, ok := next.State.Data.(*app.CollateralAppData) if !ok { responder.Reject(c.defaultContext(), "failed to parse proposed app data") return } - curBal, _ := curData.Balance(ch.Params().Parts, c.Address()) - propBal, _ := propData.Balance(ch.Params().Parts, c.Address()) + curBal, _ := curData.Balance(ch.Params().Parts, c.WalletAddress()) + propBal, _ := propData.Balance(ch.Params().Parts, c.WalletAddress()) // curPeerBal, _ := curData.Balance(ch.Params().Parts, peer) propPeerBal, _ := propData.Balance(ch.Params().Parts, peer) @@ -129,14 +125,13 @@ func (c *Client) HandleUpdate(update client.ChannelUpdate, responder *client.Upd if err != nil { log.Panicf("Failed to accept channel update: %v", err) } - ch.state = update.State.Clone() + ch.state = next.State.Clone() } -func (c *Client) HandleAdjudicatorEvent(e channel.AdjudicatorEvent) { +// HandleAdjudicatorEvent handles adjudicator events. +func (c *AppClient) HandleAdjudicatorEvent(e channel.AdjudicatorEvent) { switch e := e.(type) { case *channel.ConcludedEvent: - c.mu.Lock() - defer c.mu.Unlock() p, ch, ok := c.peerWithChannelForChannelID(e.ID()) if !ok { @@ -148,7 +143,7 @@ func (c *Client) HandleAdjudicatorEvent(e channel.AdjudicatorEvent) { } } -func (c *Client) peerWithChannelForChannelID(cID channel.ID) (common.Address, *Channel, bool) { +func (c *AppClient) peerWithChannelForChannelID(cID channel.ID) (common.Address, *Channel, bool) { for p, ch := range c.channels { if ch.ID() == cID { return p, ch, true @@ -157,7 +152,7 @@ func (c *Client) peerWithChannelForChannelID(cID channel.ID) (common.Address, *C return common.Address{}, nil, false } -func (c *Client) hasCollateralOverdrawnEvents(peer common.Address) (bool, error) { +func (c *AppClient) hasCollateralOverdrawnEvents(peer common.Address) (bool, error) { it, err := c.assetHolder.FilterCollateralOverdrawn(nil, []common.Address{peer}) if err != nil { return false, errors.WithMessage(err, "creating filter") diff --git a/collateralized-channels/client/util.go b/collateralized-channels/client/util.go index a1fa21e..4803966 100644 --- a/collateralized-channels/client/util.go +++ b/collateralized-channels/client/util.go @@ -22,54 +22,59 @@ import ( "github.com/ethereum/go-ethereum/accounts/abi" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/ethclient" + ethchannel "github.com/perun-network/perun-eth-backend/channel" + ethwallet "github.com/perun-network/perun-eth-backend/wallet" + swallet "github.com/perun-network/perun-eth-backend/wallet/simple" "github.com/pkg/errors" - ewallet "perun.network/go-perun/backend/ethereum/wallet" "perun.network/go-perun/channel" - "perun.network/go-perun/wallet" "perun.network/perun-collateralized-channels/app" ) -func zeroBalance(asset common.Address) *channel.Allocation { - return &channel.Allocation{ - Assets: []channel.Asset{ewallet.AsWalletAddr(asset)}, - Balances: [][]*big.Int{{big.NewInt(0), big.NewInt(0)}}, - } -} - -func (c *Client) PerunAddress() wallet.Address { - return c.perunClient.Account.Address() +func zeroBalance(asset channel.Asset) *channel.Allocation { + initAlloc := channel.NewAllocation(2, asset) + initAlloc.SetAssetBalances(asset, []channel.Bal{ + big.NewInt(0), // Our initial balance. + big.NewInt(0), // Peer's initial balance. + }) + return initAlloc } -func (c *Client) Address() common.Address { - return c.perunClient.Account.EthAddress() +// WalletAddress returns the wallet address of the client. +func (c *AppClient) WalletAddress() common.Address { + return common.Address(*c.account.(*ethwallet.Address)) } -func (c *Client) defaultContext() context.Context { +func (c *AppClient) defaultContext() context.Context { ctx, _ := context.WithTimeout(context.Background(), c.contextTimeout) return ctx } -func (c *Client) settle(ch *Channel) (err error) { - err = ch.UpdateBy(c.defaultContext(), func(s *channel.State) error { - s.IsFinal = true - return nil - }) - if err != nil { - return errors.WithMessage(err, "final update") +func (c *AppClient) settle(ch *Channel) (err error) { + // Finalize the channel to enable fast settlement. + if !ch.State().IsFinal { + err := ch.Update(context.TODO(), func(state *channel.State) { + state.IsFinal = true + }) + if err != nil { + return errors.WithMessage(err, "final update") + } } - err = ch.Register(c.defaultContext()) + err = ch.Settle(c.defaultContext(), false) if err != nil { - return errors.WithMessage(err, "registering") + return errors.WithMessage(err, "settling channel") + } - err = ch.Settle(c.defaultContext(), false) - return errors.WithMessage(err, "settling channel") + return ch.Close() } -func (ch *Channel) UpdateBy(ctx context.Context, update func(s *channel.State) error) error { - err := ch.Channel.UpdateBy(ctx, update) +// Update updates the channel state and the internal state. +func (ch *Channel) Update(ctx context.Context, update func(s *channel.State)) error { + err := ch.Channel.Update(ctx, update) if err != nil { return err } @@ -77,39 +82,41 @@ func (ch *Channel) UpdateBy(ctx context.Context, update func(s *channel.State) e return nil } -func (c *Client) Logf(format string, v ...interface{}) { - log.Printf("Client %v: %v", c.Address(), fmt.Sprintf(format, v...)) +// Logf logs a message with the client's address. +func (c *AppClient) Logf(format string, v ...interface{}) { + log.Printf("Client %v: %v", c.WalletAddress(), fmt.Sprintf(format, v...)) } -func (c *Client) OnChainBalance() (b *big.Int, err error) { - return c.perunClient.EthClient.BalanceAt(c.defaultContext(), c.Address(), nil) +// OnChainBalance returns the on-chain balance of the client. +func (c *AppClient) OnChainBalance() (b *big.Int, err error) { + return c.ethClient.BalanceAt(c.defaultContext(), c.WalletAddress(), nil) } -func (c *Client) PeerCollateral() (b *big.Int, err error) { - return c.peerCollateral(c.Address()) +// PeerCollateral returns the collateral of the peer. +func (c *AppClient) PeerCollateral() (b *big.Int, err error) { + return c.peerCollateral(c.WalletAddress()) } -func (c *Client) peerCollateral(peer common.Address) (b *big.Int, err error) { +func (c *AppClient) peerCollateral(peer common.Address) (b *big.Int, err error) { b, err = c.assetHolder.Holdings(nil, calcPeerCollateralID(peer)) return b, errors.WithMessage(err, "reading peer collateral") } -func (c *Client) ChannelFunding(peer common.Address) (b *big.Int, err error) { +// ChannelFunding returns the channel funding of the peer. +func (c *AppClient) ChannelFunding(peer common.Address) (b *big.Int, err error) { ch, ok := c.channels[peer] if !ok { return nil, errors.New("channel not found") } - b, err = c.assetHolder.Holdings(nil, calcChannelCollateralID(ch.ID(), c.Address())) + b, err = c.assetHolder.Holdings(nil, calcChannelCollateralID(ch.ID(), c.WalletAddress())) return b, errors.WithMessage(err, "reading peer collateral") } -func (c *Client) ChannelBalances() (balances map[common.Address]*big.Int, err error) { - c.mu.Lock() - defer c.mu.Unlock() - +// ChannelBalances returns the channel balances of the client. +func (c *AppClient) ChannelBalances() (balances map[common.Address]*big.Int, err error) { balances = make(map[common.Address]*big.Int) for p, ch := range c.channels { - bal, err := app.ChannelBalance(ch.Params().Parts, ch.State().Data, c.Address()) + bal, err := app.ChannelBalance(ch.Params().Parts, ch.State().Data, c.WalletAddress()) if err != nil { return nil, errors.WithMessagef(err, "reading channel balance: %v", ch) } @@ -145,3 +152,19 @@ func calcChannelCollateralID(channelID channel.ID, peer common.Address) [32]byte } return crypto.Keccak256Hash(bytes) } + +// CreateContractBackend creates a new contract backend. +func CreateContractBackend( + nodeURL string, + chainID uint64, + wallet *swallet.Wallet, +) (*ethclient.Client, ethchannel.ContractBackend, *swallet.Transactor, error) { + signer := types.LatestSignerForChainID(new(big.Int).SetUint64(chainID)) + transactor := swallet.NewTransactor(wallet, signer) + client, err := ethclient.Dial(nodeURL) + if err != nil { + return nil, ethchannel.ContractBackend{}, nil, nil + } + + return client, ethchannel.NewContractBackend(client, ethchannel.MakeChainID(big.NewInt(int64(chainID))), transactor, txFinalityDepth), transactor, nil +} diff --git a/collateralized-channels/client/withdraw.go b/collateralized-channels/client/withdraw.go new file mode 100644 index 0000000..35fb5ca --- /dev/null +++ b/collateralized-channels/client/withdraw.go @@ -0,0 +1,65 @@ +// Copyright 2021 PolyCrypt GmbH, Germany +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package client + +import ( + "math/big" + + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/perun-network/perun-eth-backend/wallet" + "github.com/pkg/errors" + "perun.network/go-perun/channel" + pwallet "perun.network/go-perun/wallet" + "perun.network/perun-collateralized-channels/contracts/generated/collateralAssetHolderETH" +) + +func NewWithdrawalAuth(channelID channel.ID, acc pwallet.Account, receiver pwallet.Address, amount *big.Int) (collateralAssetHolderETH.AssetHolderWithdrawalAuth, []byte, error) { + auth := collateralAssetHolderETH.AssetHolderWithdrawalAuth{ + ChannelID: channelID, + Participant: wallet.AsEthAddr(acc.Address()), + Receiver: wallet.AsEthAddr(receiver), + Amount: amount, + } + enc, err := encodeAssetHolderWithdrawalAuth(auth) + if err != nil { + return collateralAssetHolderETH.AssetHolderWithdrawalAuth{}, nil, errors.WithMessage(err, "encoding withdrawal auth") + } + + sig, err := acc.SignData(enc) + return auth, sig, errors.WithMessage(err, "sign data") +} + +func encodeAssetHolderWithdrawalAuth(auth collateralAssetHolderETH.AssetHolderWithdrawalAuth) ([]byte, error) { + var ( + abiUint256, _ = abi.NewType("uint256", "", nil) + abiAddress, _ = abi.NewType("address", "", nil) + abiBytes32, _ = abi.NewType("bytes32", "", nil) + ) + + // encodeAssetHolderWithdrawalAuth encodes the AssetHolderWithdrawalAuth as with abi.encode() in the smart contracts. + args := abi.Arguments{ + {Type: abiBytes32}, + {Type: abiAddress}, + {Type: abiAddress}, + {Type: abiUint256}, + } + enc, err := args.Pack( + auth.ChannelID, + auth.Participant, + auth.Receiver, + auth.Amount, + ) + return enc, errors.WithStack(err) +} diff --git a/collateralized-channels/go.mod b/collateralized-channels/go.mod index 66766d3..36ecbcc 100644 --- a/collateralized-channels/go.mod +++ b/collateralized-channels/go.mod @@ -3,53 +3,46 @@ module perun.network/perun-collateralized-channels go 1.20 require ( - github.com/ethereum/go-ethereum v1.9.25 + github.com/ethereum/go-ethereum v1.13.5 + github.com/perun-network/perun-eth-backend v0.1.0 github.com/pkg/errors v0.9.1 - github.com/stretchr/testify v1.7.0 - perun.network/go-perun v0.6.0 + github.com/stretchr/testify v1.8.4 + perun.network/go-perun v0.10.6 ) require ( - github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 // indirect - github.com/VictoriaMetrics/fastcache v1.5.7 // indirect - github.com/aristanetworks/goarista v0.0.0-20190912214011-b54698eaaca6 // indirect - github.com/btcsuite/btcd v0.0.0-20190824003749-130ea5bddde3 // indirect - github.com/cespare/xxhash/v2 v2.1.1 // indirect + github.com/Microsoft/go-winio v0.6.1 // indirect + github.com/StackExchange/wmi v1.2.1 // indirect + github.com/bits-and-blooms/bitset v1.7.0 // indirect + github.com/btcsuite/btcd v0.21.0-beta // indirect + github.com/btcsuite/btcd/btcec/v2 v2.2.0 // indirect + github.com/consensys/bavard v0.1.13 // indirect + github.com/consensys/gnark-crypto v0.12.1 // indirect + github.com/crate-crypto/go-kzg-4844 v0.7.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect - github.com/deckarep/golang-set v0.0.0-20180603214616-504e848d77ea // indirect - github.com/edsrzf/mmap-go v1.0.0 // indirect - github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff // indirect - github.com/go-ole/go-ole v1.2.1 // indirect - github.com/go-stack/stack v1.8.0 // indirect - github.com/golang/protobuf v1.4.2 // indirect - github.com/golang/snappy v0.0.3-0.20201103224600-674baa8c7fc3 // indirect - github.com/google/uuid v1.0.0 // indirect - github.com/gorilla/websocket v1.4.1-0.20190629185528-ae1634f6a989 // indirect - github.com/hashicorp/golang-lru v0.5.4 // indirect - github.com/holiman/uint256 v1.1.1 // indirect - github.com/huin/goupnp v1.0.0 // indirect - github.com/jackpal/go-nat-pmp v1.0.2-0.20160603034137-1fa385a6f458 // indirect - github.com/karalabe/usb v0.0.0-20190919080040-51dc0efba356 // indirect - github.com/mattn/go-runewidth v0.0.4 // indirect - github.com/olekukonko/tablewriter v0.0.2-0.20190409134802-7e037d187b0c // indirect - github.com/pborman/uuid v1.2.0 // indirect - github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7 // indirect + github.com/deckarep/golang-set/v2 v2.1.0 // indirect + github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 // indirect + github.com/ethereum/c-kzg-4844 v0.4.0 // indirect + github.com/fsnotify/fsnotify v1.6.0 // indirect + github.com/go-ole/go-ole v1.2.5 // indirect + github.com/go-stack/stack v1.8.1 // indirect + github.com/google/uuid v1.3.0 // indirect + github.com/gorilla/websocket v1.4.2 // indirect + github.com/holiman/uint256 v1.2.3 // indirect + github.com/mmcloughlin/addchain v0.4.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/prometheus/tsdb v0.6.2-0.20190402121629-4f204dcbc150 // indirect - github.com/rjeczalik/notify v0.9.2 // indirect - github.com/shirou/gopsutil v2.20.5+incompatible // indirect - github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4 // indirect - github.com/steakknife/bloomfilter v0.0.0-20180922174646-6819c0d2a570 // indirect - github.com/steakknife/hamming v0.0.0-20180906055917-c99c65617cd3 // indirect - github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca // indirect - github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef // indirect - github.com/wsddn/go-ecdh v0.0.0-20161211032359-48726bab9208 // indirect - golang.org/x/crypto v0.0.0-20201208171446-5f87f3452ae9 // indirect - golang.org/x/net v0.0.0-20200822124328-c89045814202 // indirect - golang.org/x/sync v0.0.0-20201207232520-09787c993a3a // indirect - golang.org/x/sys v0.0.0-20200824131525-c12d262b63d8 // indirect - golang.org/x/text v0.3.3 // indirect - google.golang.org/protobuf v1.23.0 // indirect - gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect - gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c // indirect + github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible // indirect + github.com/sirupsen/logrus v1.9.0 // indirect + github.com/supranational/blst v0.3.11 // indirect + github.com/tklauser/go-sysconf v0.3.12 // indirect + github.com/tklauser/numcpus v0.6.1 // indirect + golang.org/x/crypto v0.14.0 // indirect + golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect + golang.org/x/mod v0.12.0 // indirect + golang.org/x/sync v0.3.0 // indirect + golang.org/x/sys v0.13.0 // indirect + golang.org/x/tools v0.13.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + polycry.pt/poly-go v0.0.0-20220301085937-fb9d71b45a37 // indirect + rsc.io/tmplfunc v0.0.3 // indirect ) diff --git a/collateralized-channels/go.sum b/collateralized-channels/go.sum index 15caa27..b0b7f92 100644 --- a/collateralized-channels/go.sum +++ b/collateralized-channels/go.sum @@ -1,399 +1,189 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -github.com/Azure/azure-pipeline-go v0.2.1/go.mod h1:UGSo8XybXnIGZ3epmeBw7Jdz+HiUVpqIlpz/HKHylF4= -github.com/Azure/azure-pipeline-go v0.2.2/go.mod h1:4rQ/NZncSvGqNkkOsNpOU1tgoNuIlp9AfUH5G1tvCHc= -github.com/Azure/azure-storage-blob-go v0.7.0/go.mod h1:f9YQKtsG1nMisotuTPpO0tjNuEjKRYAcJU8/ydDI++4= -github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= -github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= -github.com/Azure/go-autorest/autorest/adal v0.8.0/go.mod h1:Z6vX6WXXuyieHAXwMj0S6HY6e6wcHn37qQMBQlvY3lc= -github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= -github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g= -github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= -github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= -github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM= -github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= -github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/DataDog/zstd v1.3.6-0.20190409195224-796139022798/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/Shopify/sarama v1.23.1/go.mod h1:XLH1GYJnLVE0XCr6KdJGVJRTwY30moWNJ4sERjXX6fs= -github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= -github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 h1:fLjPD/aNc3UIOA6tDi6QXUemppXK3P9BI7mr2hd6gx8= -github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= -github.com/VictoriaMetrics/fastcache v1.5.7 h1:4y6y0G8PRzszQUYIQHHssv/jgPHAb5qQuuDNdCbyAgw= -github.com/VictoriaMetrics/fastcache v1.5.7/go.mod h1:ptDBkNMQI4RtmVo8VS/XwRY6RoTu1dAWCbrk+6WsEM8= +github.com/DataDog/zstd v1.4.5 h1:EndNeuB0l9syBZhut0wns3gV1hL8zX8LIu6ZiVHWLIQ= +github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= +github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= +github.com/StackExchange/wmi v1.2.1 h1:VIkavFPXSjcnS+O8yTq7NI32k0R5Aj+v39y29VYDOSA= +github.com/StackExchange/wmi v1.2.1/go.mod h1:rcmrprowKIVzvc+NUiLncP2uuArMWLCbu9SBzvHz7e8= +github.com/VictoriaMetrics/fastcache v1.12.1 h1:i0mICQuojGDL3KblA7wUNlY5lOK6a4bwt3uRKnkZU40= github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= -github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= -github.com/allegro/bigcache v1.2.1 h1:hg1sY1raCwic3Vnsvje6TT7/pnZba83LeFck5NrFKSc= -github.com/allegro/bigcache v1.2.1/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= -github.com/aristanetworks/fsnotify v1.4.2/go.mod h1:D/rtu7LpjYM8tRJphJ0hUBYpjai8SfX+aSNsWDTq/Ks= -github.com/aristanetworks/glog v0.0.0-20180419172825-c15b03b3054f/go.mod h1:KASm+qXFKs/xjSoWn30NrWBBvdTTQq+UjkhjEJHfSFA= -github.com/aristanetworks/goarista v0.0.0-20170210015632-ea17b1a17847/go.mod h1:D/tb0zPVXnP7fmsLZjtdUhSsumbK/ij54UXjjVgMGxQ= -github.com/aristanetworks/goarista v0.0.0-20190912214011-b54698eaaca6 h1:6bZNnQcA2fkzH9AhZXbp2nDqbWa4bBqFeUb70Zq1HBM= -github.com/aristanetworks/goarista v0.0.0-20190912214011-b54698eaaca6/go.mod h1:Z4RTxGAuYhPzcq8+EdRM+R8M48Ssle2TsWtwRKa+vns= -github.com/aristanetworks/splunk-hec-go v0.3.3/go.mod h1:1VHO9r17b0K7WmOlLb9nTk/2YanvOEnLMUgsFrxBROc= -github.com/aws/aws-sdk-go v1.25.48/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= -github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/btcsuite/btcd v0.0.0-20171128150713-2e60448ffcc6/go.mod h1:Dmm/EzmjnCiweXmzRIAiUWCInVmPgjkzgv5k4tVyXiQ= -github.com/btcsuite/btcd v0.0.0-20190824003749-130ea5bddde3 h1:A/EVblehb75cUgXA5njHPn0kLAsykn6mJGz7rnmW5W0= -github.com/btcsuite/btcd v0.0.0-20190824003749-130ea5bddde3/go.mod h1:3J08xEfcugPacsc34/LKRU2yO7YmuT8yt28J8k2+rrI= +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= +github.com/bits-and-blooms/bitset v1.7.0 h1:YjAGVd3XmtK9ktAbX8Zg2g2PwLIMjGREZJHlV4j7NEo= +github.com/bits-and-blooms/bitset v1.7.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= +github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= +github.com/btcsuite/btcd v0.21.0-beta h1:At9hIZdJW0s9E/fAz28nrz6AmcNlSVucCH796ZteX1M= +github.com/btcsuite/btcd v0.21.0-beta/go.mod h1:ZSWyehm27aAuS9bvkATT+Xte3hjHZ+MRgMY/8NJ7K94= +github.com/btcsuite/btcd/btcec/v2 v2.2.0 h1:fzn1qaOt32TuLjFlkzYSsBC35Q3KUjT1SwPxiMSCF5k= +github.com/btcsuite/btcd/btcec/v2 v2.2.0/go.mod h1:U7MHm051Al6XmscBQ0BoNydpOTsFAn707034b5nY8zU= github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= +github.com/btcsuite/btcutil v1.0.2/go.mod h1:j9HUFwoQRsZL3V4n+qG+CUnEGHOarIxfC3Le2Yhbcts= github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= +github.com/btcsuite/goleveldb v1.0.0/go.mod h1:QiK9vBlgftBg6rWQIj6wFzbPfRjiykIEhBH4obrXJ/I= github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= +github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= github.com/cespare/cp v0.1.0 h1:SE+dxFebS7Iik5LK0tsi1k9ZCxEaFX4AjQmoyA+1dJk= -github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cloudflare/cloudflare-go v0.10.2-0.20190916151808-a80f83b9add9/go.mod h1:1MxXX1Ux4x6mqPmjkUgTP1CdXIBXKX7T+Jk9Gxrmx+U= -github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= +github.com/cockroachdb/errors v1.8.1 h1:A5+txlVZfOqFBDa4mGz2bUWSp0aHElvHX2bKkdbQu+Y= +github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f h1:o/kfcElHqOiXqcou5a3rIlMc7oJbMQkeLk0VQJ7zgqY= +github.com/cockroachdb/pebble v0.0.0-20230928194634-aa077af62593 h1:aPEJyR4rPBvDmeyi+l/FS/VtA00IWvjeFvjen1m1l1A= +github.com/cockroachdb/redact v1.0.8 h1:8QG/764wK+vmEYoOlfobpe12EQcS81ukx/a4hdVMxNw= +github.com/cockroachdb/sentry-go v0.6.1-cockroachdb.2 h1:IKgmqgMQlVJIZj19CdocBeSfSaiCbEBZGKODaixqtHM= +github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= +github.com/consensys/bavard v0.1.13 h1:oLhMLOFGTLdlda/kma4VOJazblc7IM5y5QPd2A/YjhQ= +github.com/consensys/bavard v0.1.13/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI= +github.com/consensys/gnark-crypto v0.12.1 h1:lHH39WuuFgVHONRl3J0LRBtuYdQTumFSDtJF7HpyG8M= +github.com/consensys/gnark-crypto v0.12.1/go.mod h1:v2Gy7L/4ZRosZ7Ivs+9SfUDr0f5UlG+EM5t7MPHiLuY= +github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= +github.com/crate-crypto/go-kzg-4844 v0.7.0 h1:C0vgZRk4q4EZ/JgPfzuSoxdCq3C3mOZMBShovmncxvA= +github.com/crate-crypto/go-kzg-4844 v0.7.0/go.mod h1:1kMhvPgI0Ky3yIa+9lFySEBUBXkYxeOi8ZF1sYioxhc= github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/deckarep/golang-set v0.0.0-20180603214616-504e848d77ea h1:j4317fAZh7X6GqbFowYdYdI0L9bwxL07jyPZIdepyZ0= -github.com/deckarep/golang-set v0.0.0-20180603214616-504e848d77ea/go.mod h1:93vsz/8Wt4joVM7c2AVqh+YRMiUSc14yDtF28KmMOgQ= -github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= -github.com/dlclark/regexp2 v1.2.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= -github.com/docker/docker v1.4.2-0.20180625184442-8e610b2b55bf/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/dop251/goja v0.0.0-20200721192441-a695b0cdd498/go.mod h1:Mw6PkjjMXWbTj+nnj4s3QPXq1jaT0s5pC0iFD4+BOAA= -github.com/dvyukov/go-fuzz v0.0.0-20200318091601-be3528f3a813/go.mod h1:11Gm+ccJnvAhCNLlf5+cS9KjtbaD5I5zaZpFMsTHWTw= -github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= -github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= -github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= -github.com/edsrzf/mmap-go v0.0.0-20160512033002-935e0e8a636c/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= -github.com/edsrzf/mmap-go v1.0.0 h1:CEBF7HpRnUCSJgGUb5h1Gm7e3VkmVDrR8lvWVLtrOFw= -github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= -github.com/elastic/gosigar v0.10.5/go.mod h1:cdorVVzy1fhmEqmtgqkoE3bYtCfSCkVyjTyCIo22xvs= -github.com/ethereum/go-ethereum v1.9.5/go.mod h1:PwpWDrCLZrV+tfrhqqF6kPknbISMHaJv9Ln3kPCZLwY= -github.com/ethereum/go-ethereum v1.9.25 h1:mMiw/zOOtCLdGLWfcekua0qPrJTe7FVIiHJ4IKNTfR0= -github.com/ethereum/go-ethereum v1.9.25/go.mod h1:vMkFiYLHI4tgPw4k2j4MHKoovchFE8plZ0M9VMk4/oM= -github.com/fatih/color v1.3.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fjl/memsize v0.0.0-20180418122429-ca190fb6ffbc h1:jtW8jbpkO4YirRSyepBOH8E+2HEw6/hKkBvFPwhUN8c= -github.com/fjl/memsize v0.0.0-20180418122429-ca190fb6ffbc/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= +github.com/deckarep/golang-set/v2 v2.1.0 h1:g47V4Or+DUdzbs8FxCCmgb6VYd+ptPAngjM6dtGktsI= +github.com/deckarep/golang-set/v2 v2.1.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4= +github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0= +github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 h1:YLtO71vCjJRCBcrPMtQ9nqBsqpA1m5sE92cU+pd5Mcc= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs= +github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= +github.com/ethereum/c-kzg-4844 v0.4.0 h1:3MS1s4JtA868KpJxroZoepdV0ZKBp3u/O5HcZ7R3nlY= +github.com/ethereum/c-kzg-4844 v0.4.0/go.mod h1:VewdlzQmpT5QSrVhbBuGoCdFJkpaJlO1aQputP83wc0= +github.com/ethereum/go-ethereum v1.13.5 h1:U6TCRciCqZRe4FPXmy1sMGxTfuk8P7u2UoinF3VbaFk= +github.com/ethereum/go-ethereum v1.13.5/go.mod h1:yMTu38GSuyxaYzQMViqNmQ1s3cE84abZexQmTgenWk0= +github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5 h1:FtmdgXiUlNeRsoNMFlKLDt+S+6hbjVMEW6RGQ7aUf7c= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= -github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/garyburd/redigo v1.6.0/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY= +github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= +github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff h1:tY80oXqGNY4FhTFhk+o9oFHGINQ/+vhlm8HFzi6znCI= -github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= -github.com/go-kit/kit v0.8.0 h1:Wz+5lgoB0kkuqLEc6NVmwRknTKP6dTGbSqvhZtBI/j0= -github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= -github.com/go-logfmt/logfmt v0.4.0 h1:MP4Eh7ZCb31lleYCFuwm0oe4/YGak+5l1vA2NOE80nA= -github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-ole/go-ole v1.2.1 h1:2lOsA72HgjxAuMlKpFiCbHTvu44PIVkZ5hqm3RSdI/E= -github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= -github.com/go-sourcemap/sourcemap v2.1.2+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= -github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/go-ole/go-ole v1.2.5 h1:t4MGB5xEDZvXI+0rMjjsfBsD7yAgp/s9ZDkL1JndXwY= +github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= +github.com/go-stack/stack v1.8.1 h1:ntEHSVwIt7PNXNpgPmVfMrNhLtgjlmnZha2kOpuRiDw= +github.com/go-stack/stack v1.8.1/go.mod h1:dcoOX6HbPZSZptuspn9bctJ+N/CnF5gGygcUP3XYfe4= +github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.3-0.20201103224600-674baa8c7fc3 h1:ur2rms48b3Ep1dxh7aUV2FZEQ8jEVO2F6ILKx8ofkAg= -github.com/golang/snappy v0.0.3-0.20201103224600-674baa8c7fc3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/gofuzz v1.1.1-0.20200604201612-c04b05f3adfa/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/uuid v1.0.0 h1:b4Gk+7WdP/d3HZH8EJsZpvV7EtDOgaZLtnaNGIu1adA= -github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/gorilla/websocket v1.4.1-0.20190629185528-ae1634f6a989 h1:giknQ4mEuDFmmHSrGcbargOuLHQGtywqo4mheITex54= -github.com/gorilla/websocket v1.4.1-0.20190629185528-ae1634f6a989/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/graph-gophers/graphql-go v0.0.0-20191115155744-f33e81362277/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= -github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/golang-lru v0.5.3/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= -github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= -github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= -github.com/holiman/uint256 v1.1.1 h1:4JywC80b+/hSfljFlEBLHrrh+CIONLDz9NuFl0af4Mw= -github.com/holiman/uint256 v1.1.1/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= +github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= +github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb h1:PBC98N2aIaM3XXiurYmW7fx4GZkL8feAMVq7nEjURHk= +github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= +github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= +github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/hashicorp/go-bexpr v0.1.10 h1:9kuI5PFotCboP3dkDYFr/wi0gg0QVbSNz5oFRpxn4uE= +github.com/holiman/billy v0.0.0-20230718173358-1c7e68d277a7 h1:3JQNjnMRil1yD0IfZKHF9GxxWKDJGj8I0IqOUol//sw= +github.com/holiman/bloomfilter/v2 v2.0.3 h1:73e0e/V0tCydx14a0SCYS/EWCxgwLZ18CZcZKVu0fao= +github.com/holiman/uint256 v1.2.3 h1:K8UWO1HUJpRMXBxbmaY1Y8IAMZC/RsKB+ArEnnK4l5o= +github.com/holiman/uint256 v1.2.3/go.mod h1:SC8Ryt4n+UBbPbIBKaG9zbbDlp4jOru9xFZmPzLUTxw= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/huin/goupnp v1.0.0 h1:wg75sLpL6DZqwHQN6E1Cfk6mtfzS45z8OV+ic+DtHRo= -github.com/huin/goupnp v1.0.0/go.mod h1:n9v9KO1tAxYH82qOn+UTIFQDmx5n1Zxd/ClZDMX7Bnc= -github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= -github.com/influxdata/influxdb v1.2.3-0.20180221223340-01288bdb0883/go.mod h1:qZna6X/4elxqT3yI9iZYdZrWWdeFOOprn86kgg4+IzY= -github.com/influxdata/influxdb1-client v0.0.0-20190809212627-fc22c7df067e/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= -github.com/jackpal/go-nat-pmp v1.0.1/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= -github.com/jackpal/go-nat-pmp v1.0.2-0.20160603034137-1fa385a6f458 h1:6OvNmYgJyexcZ3pYbTI9jWx5tHo1Dee/tWbLMfPe2TA= -github.com/jackpal/go-nat-pmp v1.0.2-0.20160603034137-1fa385a6f458/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= -github.com/jcmturner/gofork v0.0.0-20190328161633-dc7c13fece03/go.mod h1:MK8+TM0La+2rjBD4jE12Kj1pCCxK7d2LK/UM3ncEo0o= -github.com/jedisct1/go-minisign v0.0.0-20190909160543-45766022959e/go.mod h1:G1CVv03EnqU1wYL2dFwXxW2An0az9JTl/ZsqXQeBlkU= +github.com/huin/goupnp v1.3.0 h1:UvLUlWDNpoUdYzb2TCn+MuTWtcjXKSza2n6CBdQ0xXc= +github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= -github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/julienschmidt/httprouter v1.1.1-0.20170430222011-975b5c4c7c21/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/karalabe/hid v1.0.0/go.mod h1:Vr51f8rUOLYrfrWDFlV12GGQgM5AT8sVh+2fY4MPeu8= -github.com/karalabe/usb v0.0.0-20190919080040-51dc0efba356 h1:I/yrLt2WilKxlQKCM52clh5rGzTKpVctGT1lH4Dc8Jw= -github.com/karalabe/usb v0.0.0-20190919080040-51dc0efba356/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= -github.com/klauspost/cpuid v1.2.1/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= -github.com/klauspost/reedsolomon v1.9.2/go.mod h1:CwCi+NUr9pqSVktrkN+Ondf06rkhYZ/pcNv7fu+8Un4= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515 h1:T+h1c/A9Gawja4Y9mFVWj2vyii2bbUNDw3kt9VxK2EY= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= -github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= -github.com/mattn/go-colorable v0.1.0 h1:v2XXALHHh6zHfYTJ+cSkwtyffnaOyR1MXaA91mTrb8o= -github.com/mattn/go-colorable v0.1.0/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-ieproxy v0.0.0-20190610004146-91bb50d98149/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= -github.com/mattn/go-ieproxy v0.0.0-20190702010315-6dee0af9227d/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= -github.com/mattn/go-isatty v0.0.5-0.20180830101745-3fb116b82035 h1:USWjF42jDCSEeikX/G1g40ZWnsPXN5WkZ4jMHZWyBK4= -github.com/mattn/go-isatty v0.0.5-0.20180830101745-3fb116b82035/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.4 h1:2BvfKmzob6Bmd4YsL0zygOqfdFnK7GR4QL06Do4/p7Y= -github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/miguelmota/go-ethereum-hdwallet v0.0.0-20200123000308-a60dcd172b4c/go.mod h1:Z4zI+CdJB1fyrZ1jfevFH6flNV9izrLZnQAeuD6Wkjk= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= -github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= -github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78= -github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= -github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/olekukonko/tablewriter v0.0.2-0.20190409134802-7e037d187b0c h1:1RHs3tNxjXGHeul8z2t6H2N2TlAqpKe5yryJztRx4Jk= -github.com/olekukonko/tablewriter v0.0.2-0.20190409134802-7e037d187b0c/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= +github.com/klauspost/compress v1.15.15 h1:EF27CXIuDsYJ6mmvtBRlEuB2UVOqHG1tAXgZ7yIO+lw= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= +github.com/leanovate/gopter v0.2.9 h1:fQjYxZaynp97ozCzfOyOuAGOU4aU/z37zf/tOujFk7c= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= +github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU= +github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= +github.com/mitchellh/mapstructure v1.4.1 h1:CpVNEelQCZBooIPDn+AR3NpivK/TIKU8bDxdASFVQag= +github.com/mitchellh/pointerstructure v1.2.0 h1:O+i9nHnXS3l/9Wu7r4NrEdwA2VFTicjUEN1uBnDo34A= +github.com/mmcloughlin/addchain v0.4.0 h1:SobOdjm2xLj1KkXN5/n0xTIWyZA2+s99UCY1iPfkHRY= +github.com/mmcloughlin/addchain v0.4.0/go.mod h1:A86O+tHqZLMNO4w6ZZ4FlVQEadcoqkyU72HC5wJ4RlU= +github.com/mmcloughlin/profile v0.1.1/go.mod h1:IhHD7q1ooxgwTgjxQYkACGA77oFTDdFVejUS1/tS/qU= +github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.14.0 h1:2mOpI4JVVPBN+WQRa0WKH2eXR+Ey+uK4n7Zj0aYpIQA= -github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= +github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.10.1 h1:o0+MgICZLuZ7xjH7Vx6zS/zcu93/BEp1VwkIW1mEXCE= -github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/openconfig/gnmi v0.0.0-20190823184014-89b2bf29312c/go.mod h1:t+O9It+LKzfOAhKTT5O0ehDix+MTqbtT0T9t+7zzOvc= -github.com/openconfig/reference v0.0.0-20190727015836-8dfd928c9696/go.mod h1:ym2A+zigScwkSEb/cVQB0/ZMpU3rqiH6X7WRRsxgOGw= -github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/pborman/uuid v0.0.0-20170112150404-1b00554d8222/go.mod h1:VyrYX9gd7irzKovcSS6BIIEwPRkP2Wm2m9ufcdFSJ34= -github.com/pborman/uuid v1.2.0 h1:J7Q5mO4ysT1dv8hyrUGHb9+ooztCXu1D8MY8DZYsu3g= -github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= -github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7 h1:oYW+YCJ1pachXTQmzR3rNLYGGz4g/UgFcjb28p/viDM= -github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= -github.com/pierrec/lz4 v0.0.0-20190327172049-315a67e90e41/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= -github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/perun-network/perun-eth-backend v0.1.0 h1:MySwhdtz7MbwzIeGP5tJqdb6MZRBBKugzMt6nY5YLMs= +github.com/perun-network/perun-eth-backend v0.1.0/go.mod h1:yE+WLgaHzKVBRVsmXB2a9DWj55J8RSM2ippIes7DTns= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= -github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= -github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= -github.com/prometheus/tsdb v0.6.2-0.20190402121629-4f204dcbc150 h1:ZeU+auZj1iNzN8iVhff6M38Mfu73FQiJve/GEXYJBjE= -github.com/prometheus/tsdb v0.6.2-0.20190402121629-4f204dcbc150/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= -github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= -github.com/rjeczalik/notify v0.9.1/go.mod h1:rKwnCoCGeuQnwBtTSPL9Dad03Vh2n40ePRrjvIXnJho= -github.com/rjeczalik/notify v0.9.2 h1:MiTWrPj55mNDHEiIX5YUSKefw/+lCQVoAFmD6oQm5w8= -github.com/rjeczalik/notify v0.9.2/go.mod h1:aErll2f0sUX9PXZnVNyeiObbmTlk5jnMoCa4QEjJeqM= -github.com/rs/cors v0.0.0-20160617231935-a62a804a8a00/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= +github.com/prometheus/client_golang v1.12.0 h1:C+UIj/QWtmqY13Arb8kwMt5j34/0Z2iKamrJ+ryC0Gg= +github.com/prometheus/client_model v0.2.1-0.20210607210712-147c58e9608a h1:CmF68hwI0XsOQ5UwlBopMi2Ow4Pbg32akc4KIVCOm+Y= +github.com/prometheus/common v0.32.1 h1:hWIdL3N2HoUx3B8j3YN9mWor0qhY/NlEKZEaXxuIRh4= +github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU= +github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= +github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik= -github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= -github.com/rs/xhandler v0.0.0-20160618193221-ed27b6fd6521/go.mod h1:RvLn4FgxWubrpZHtQLnOf6EwhN2hEMusxZOhcW9H3UQ= -github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= -github.com/shirou/gopsutil v2.20.5+incompatible h1:tYH07UPoQt0OCQdgWWMgYHy3/a9bcxNpBIysykNIP7I= -github.com/shirou/gopsutil v2.20.5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.7.0 h1:ShrD1U9pZB12TX0cVy0DtePoCH97K8EtX+mg7ZARUtM= -github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4 h1:Gb2Tyox57NRNuZ2d3rmvB3pcmbu7O1RS3m8WRx7ilrg= -github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q= -github.com/steakknife/bloomfilter v0.0.0-20180922174646-6819c0d2a570 h1:gIlAHnH1vJb5vwEjIp5kBj/eu99p/bl0Ay2goiPe5xE= -github.com/steakknife/bloomfilter v0.0.0-20180922174646-6819c0d2a570/go.mod h1:8OR4w3TdeIHIh1g6EMY5p0gVNOovcWC+1vpc7naMuAw= -github.com/steakknife/hamming v0.0.0-20180906055917-c99c65617cd3 h1:njlZPzLwU639dk2kqnCPPv+wNjq7Xb6EfUxe/oX0/NM= -github.com/steakknife/hamming v0.0.0-20180906055917-c99c65617cd3/go.mod h1:hpGUWaI9xL8pRQCTXQgocU38Qw1g0Us7n5PxxTwTCYU= +github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= +github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible h1:Bn1aCHHRnjv4Bl16T8rcaFjYSrGrIZvpiGO6P3Q4GpU= +github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= +github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= +github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/status-im/keycard-go v0.2.0 h1:QDLFswOQu1r5jsycloeQh3bVU8n/NatHHaZobtDnDzA= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= +github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/syndtr/goleveldb v0.0.0-20180621010148-0d5a0ceb10cf/go.mod h1:Z4AUp2Km+PwemOoO/VB5AOx9XSsIItzFjoJlOSiYmn0= -github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca h1:Ld/zXl5t4+D69SiV4JoN7kkfvJdOWlPpfxrzxpLMoUk= -github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca/go.mod h1:u2MKkTVTVJWe5D1rCvame8WqhBd88EuIwODJZ1VHCPM= -github.com/templexxx/cpufeat v0.0.0-20180724012125-cef66df7f161/go.mod h1:wM7WEvslTq+iOEAMDLSzhVuOt5BRZ05WirO+b09GHQU= -github.com/templexxx/xor v0.0.0-20181023030647-4e92f724b73b/go.mod h1:5XA7W9S6mni3h5uvOC75dA3m9CCCaS83lltmc0ukdi4= -github.com/tjfoc/gmsm v1.0.1/go.mod h1:XxO4hdhhrzAd+G4CjDqaOkd0hUzmtPR/d3EiBBMn/wc= -github.com/tyler-smith/go-bip39 v0.0.0-20180618194314-52158e4697b8/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= -github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef h1:wHSqTBrZW24CsNJDfeh9Ex6Pm0Rcpc7qrgKBiL44vF4= -github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= -github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/wsddn/go-ecdh v0.0.0-20161211032359-48726bab9208 h1:1cngl9mPEoITZG8s8cVcUy5CeIBYhEESkOB7m6Gmkrk= -github.com/wsddn/go-ecdh v0.0.0-20161211032359-48726bab9208/go.mod h1:IotVbo4F+mw0EzQ08zFqg7pK3FebNXpaMsRy2RT+Ees= -github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I= -github.com/xdg/stringprep v1.0.0/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= -github.com/xtaci/kcp-go v5.4.5+incompatible/go.mod h1:bN6vIwHQbfHaHtFpEssmWsN45a+AZwO7eyRCmEIbtvE= -github.com/xtaci/lossyconn v0.0.0-20190602105132-8df528c0c9ae/go.mod h1:gXtu8J62kEgmN++bm9BVICuT/e8yiLI2KFobd/TRFsE= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/supranational/blst v0.3.11 h1:LyU6FolezeWAhvQk0k6O/d49jqgO52MSDDfYgbeoEm4= +github.com/supranational/blst v0.3.11/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= +github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= +github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU= +github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI= +github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk= +github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY= +github.com/tyler-smith/go-bip39 v1.1.0 h1:5eUemwrMargf3BSLRRCalXT93Ns6pQJIjYQN2nyfOP8= +github.com/urfave/cli/v2 v2.25.7 h1:VAzn5oq403l5pHjc4OhD54+XGO9cdKVL/7lDjF+iKUs= +github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= +go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI= golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190404164418-38d8ce5564a5/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190909091759-094676da4a83/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201208171446-5f87f3452ae9 h1:sYNJzB4J8toYPQTM6pAkcmBRgw9SnQKP9oXCHfgy604= -golang.org/x/crypto v0.0.0-20201208171446-5f87f3452ae9/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/exp v0.0.0-20190731235908-ec7cb31e5a56/go.mod h1:JhuoJpWY28nO4Vef9tZUw9qufEGTyX1+7lmHxV5q5G4= -golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= -golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= -golang.org/x/mobile v0.0.0-20200801112145-973feb4309de/go.mod h1:skQtrUTUwhdJvXM/2KKJzY8pDgNr9I/FOMqDVRPBUS4= -golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.1.1-0.20191209134235-331c550502dd/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= +golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= +golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g= +golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k= +golang.org/x/mod v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc= +golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181011144130-49bb7cea24b1/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190912160710-24e19bdeb0f2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190921015927-1a5e07d1ff72/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200822124328-c89045814202 h1:VvcQYSHwXgi7W+TpUR6A9g6Up98WAHf3f/ulnJ62IyA= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201207232520-09787c993a3a h1:DcqTD9SDLc+1P/r1EmRBwnVsrOwW+kk2vWf9n+1sGhs= -golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= +golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180926160741-c2ed4eda69e7/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190912141932-bc967efca4b8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200824131525-c12d262b63d8 h1:AvbQYmiaaaza3cW3QXRyPo5kYgpFIzOAfeAAN7m3qQ4= -golang.org/x/sys v0.0.0-20200824131525-c12d262b63d8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= +golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 h1:SvFZT6jyqRaOeXpc5h/JSfZenJ2O330aBsf7JfSUXmQ= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190912185636-87d9f09c5d89/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20200117012304-6edc0a871e69/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.23.0 h1:4MY060fB1DLGMB/7MBTLnwQUY6+F09GEiz6SsrNqyzM= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= -gopkg.in/bsm/ratelimit.v1 v1.0.0-20160220154919-db14e161995a/go.mod h1:KF9sEfUPAXdG8Oev9e99iLGnl2uJMjc5B+4y3O7x610= +golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= +golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= +golang.org/x/tools v0.13.0 h1:Iey4qkscZuv0VvIt8E0neZjtPVQFSc870HQ448QgEmQ= +golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= +google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/fatih/set.v0 v0.2.1/go.mod h1:5eLWEndGL4zGGemXWrKuts+wTJR0y+w+auqUJZbmyBg= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/jcmturner/aescts.v1 v1.0.1/go.mod h1:nsR8qBOg+OucoIW+WMhB3GspUQXq9XorLnQb9XtvcOo= -gopkg.in/jcmturner/dnsutils.v1 v1.0.1/go.mod h1:m3v+5svpVOhtFAP/wSz+yzh4Mc0Fg7eRhxkJMWSIz9Q= -gopkg.in/jcmturner/goidentity.v3 v3.0.0/go.mod h1:oG2kH0IvSYNIu80dVAyu/yoefjq1mNfM5bm88whjWx4= -gopkg.in/jcmturner/gokrb5.v7 v7.2.3/go.mod h1:l8VISx+WGYp+Fp7KRbsiUuXTTOnxIc3Tuvyavf11/WM= -gopkg.in/jcmturner/rpc.v1 v1.1.0/go.mod h1:YIdkC4XfD6GXbzje11McwsDuOlZQSb9W4vfLvuNnlv8= -gopkg.in/karalabe/cookiejar.v2 v2.0.0-20150724131613-8dcd6a7f4951/go.mod h1:owOxCRGGeAx1uugABik6K9oeNu1cgxP/R9ItzLDxNWA= -gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce h1:+JknDZhAj8YMt7GC73Ei8pv4MzjDUNPHgQWJdtMAaDU= -gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= -gopkg.in/olebedev/go-duktape.v3 v3.0.0-20200619000410-60c24ae608a6 h1:a6cXbcDDUkSBlpnkWV1bJ+vv3mOgQEltEJ2rPxroVu0= -gopkg.in/olebedev/go-duktape.v3 v3.0.0-20200619000410-60c24ae608a6/go.mod h1:uAJfkITjFhyEEuUfm7bsmCZRbW5WRq8s9EY8HZ6hCns= -gopkg.in/redis.v4 v4.2.4/go.mod h1:8KREHdypkCEojGKQcjMqAODMICIVwZAONWq8RowTITA= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= +gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/urfave/cli.v1 v1.20.0 h1:NdAVW6RYxDif9DhDHaAortIu956m2c0v+09AZBPTbE0= -gopkg.in/urfave/cli.v1 v1.20.0/go.mod h1:vuBzUtMdQeixQj8LVd+/98pzhxNGQoyuPBlsXHOQNO0= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU= -gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -perun.network/go-perun v0.6.0 h1:bnea9DkRRqRMfl2w5EWL69AoQgmWhcs1BAZO9TLMN8c= -perun.network/go-perun v0.6.0/go.mod h1:pBUGJDd6oBGaK5sHJcY7OfZvGhgEGC/6x2Ezv72X6Z4= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +perun.network/go-perun v0.10.6 h1:uj1e33yfCSfE75DK/uwjNp+TwvGG85Qhi6HuYQ9EPrQ= +perun.network/go-perun v0.10.6/go.mod h1:BGBZC3npkX457u87pjDd0NEIXr1a4dsH4H/YpLdGGe8= +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/tmplfunc v0.0.3 h1:53XFQh69AfOa8Tw0Jm7t+GV7KZhOi6jzsCzTtKbMvzU= +rsc.io/tmplfunc v0.0.3/go.mod h1:AG3sTPzElb1Io3Yg4voV9AGZJuleGAwaVRxL9M49PhA= From ddccb23bb206cafbf7624d73cd6fcf02c18ddd8b Mon Sep 17 00:00:00 2001 From: Minh Huy Tran Date: Thu, 18 Jan 2024 22:33:03 +0700 Subject: [PATCH 09/16] refactor(collateralized channel): update the main_test to go-perun 10.6 Signed-off-by: Minh Huy Tran --- collateralized-channels/app/app.go | 36 +- collateralized-channels/app/data.go | 50 + collateralized-channels/app/util.go | 12 +- collateralized-channels/contracts/generate.sh | 44 +- .../generated/adjudicator/adjudicator.go | 2350 ----------------- collateralized-channels/ganache/ganache.go | 5 +- collateralized-channels/main_test.go | 81 +- collateralized-channels/test_util.go | 46 +- 8 files changed, 177 insertions(+), 2447 deletions(-) create mode 100644 collateralized-channels/app/data.go delete mode 100644 collateralized-channels/contracts/generated/adjudicator/adjudicator.go diff --git a/collateralized-channels/app/app.go b/collateralized-channels/app/app.go index 00975b2..ff00d33 100644 --- a/collateralized-channels/app/app.go +++ b/collateralized-channels/app/app.go @@ -16,7 +16,6 @@ package app import ( "io" - "math/big" "github.com/pkg/errors" @@ -42,36 +41,21 @@ func (a *CollateralApp) Def() wallet.Address { return a.Addr } +func (a *CollateralApp) String() string { + return "CollateralApp" +} + +func (a *CollateralApp) NewData() channel.Data { + return &CollateralAppData{} +} + // DecodeData decodes the channel data. func (a *CollateralApp) DecodeData(r io.Reader) (channel.Data, error) { balances, err := readTupleInt256ArrayArray(r) if err != nil { return nil, errors.WithMessage(err, "reading (int256[][])") } - return CollateralAppData{balances: balances}, nil -} - -// CollateralAppData is the app data struct. -type CollateralAppData struct { - balances [][]*big.Int -} - -// Encode encodes app data onto an io.Writer. -func (d CollateralAppData) Encode(w io.Writer) (err error) { - err = writeTupleInt256ArrayArray(w, d.balances) - return errors.WithMessage(err, "writing (int256[][])") -} - -// Clone returns a deep copy of the app data. -func (d CollateralAppData) Clone() channel.Data { - balances := make([][]*big.Int, len(d.balances)) - for i := range balances { - balances[i] = make([]*big.Int, len(d.balances[i])) - for j := range balances[i] { - balances[i][j] = new(big.Int).Set(d.balances[i][j]) - } - } - return CollateralAppData{balances: balances} + return &CollateralAppData{balances: balances}, nil } // ValidTransition checks that the data of the `to` state is of type Invoice. @@ -84,7 +68,7 @@ func (a *CollateralApp) ValidTransition(_ *channel.Params, _, to *channel.State, // ValidInit checks that the initial state is valid. func (a *CollateralApp) ValidInit(p *channel.Params, s *channel.State) error { - d, ok := s.Data.(CollateralAppData) + d, ok := s.Data.(*CollateralAppData) if !ok { return errors.New("failed to cast app data") } else if len(d.balances) != len(s.Assets) { diff --git a/collateralized-channels/app/data.go b/collateralized-channels/app/data.go new file mode 100644 index 0000000..2e710cf --- /dev/null +++ b/collateralized-channels/app/data.go @@ -0,0 +1,50 @@ +package app + +import ( + "bytes" + "io" + "math/big" + + "github.com/pkg/errors" + "perun.network/go-perun/channel" +) + +// CollateralAppData is the app data struct. +type CollateralAppData struct { + balances [][]*big.Int +} + +func (d *CollateralAppData) MarshalBinary() ([]byte, error) { + var b bytes.Buffer + err := d.Encode(&b) + return b.Bytes(), err +} + +func (d *CollateralAppData) UnmarshalBinary(data []byte) error { + var err error + buffer := bytes.NewBuffer(data) + balances, err := readTupleInt256ArrayArray(buffer) + if err != nil { + return errors.WithMessage(err, "reading (int256[][])") + } + d.balances = balances + return nil +} + +// Encode encodes app data onto an io.Writer. +func (d CollateralAppData) Encode(w io.Writer) (err error) { + err = writeTupleInt256ArrayArray(w, d.balances) + return errors.WithMessage(err, "writing (int256[][])") +} + +// Clone returns a deep copy of the app data. +func (d CollateralAppData) Clone() channel.Data { + balances := make([][]*big.Int, len(d.balances)) + for i := range balances { + balances[i] = make([]*big.Int, len(d.balances[i])) + for j := range balances[i] { + balances[i][j] = new(big.Int).Set(d.balances[i][j]) + } + } + return &CollateralAppData{balances: balances} +} diff --git a/collateralized-channels/app/util.go b/collateralized-channels/app/util.go index da905a1..3711222 100644 --- a/collateralized-channels/app/util.go +++ b/collateralized-channels/app/util.go @@ -18,14 +18,14 @@ import ( "math/big" "github.com/ethereum/go-ethereum/common" + ethwallet "github.com/perun-network/perun-eth-backend/wallet" "github.com/pkg/errors" - ewallet "perun.network/go-perun/backend/ethereum/wallet" "perun.network/go-perun/channel" "perun.network/go-perun/wallet" ) func (a *CollateralApp) ZeroBalance() channel.Data { - return CollateralAppData{ + return &CollateralAppData{ [][]*big.Int{{big.NewInt(0), big.NewInt(0)}}, } } @@ -51,7 +51,7 @@ func Transfer(peers []wallet.Address, s *channel.State, from common.Address, to return errors.Errorf("unknown address: %v", from) } - d, ok := s.Data.(CollateralAppData) + d, ok := s.Data.(*CollateralAppData) if !ok { return errors.New("invalid type") } @@ -64,7 +64,7 @@ func Transfer(peers []wallet.Address, s *channel.State, from common.Address, to } func ChannelBalance(peers []wallet.Address, data channel.Data, account common.Address) (*big.Int, error) { - d, ok := data.(CollateralAppData) + d, ok := data.(*CollateralAppData) if !ok { return nil, errors.New("invalid type") } @@ -84,9 +84,9 @@ func (d CollateralAppData) Balance(peers []wallet.Address, account common.Addres } func peerIndex(peers []wallet.Address, addr common.Address) (int, bool) { - walletAddr := ewallet.AsWalletAddr(addr) + walletAddr := ethwallet.AsWalletAddr(addr) for i, p := range peers { - if p.Cmp(walletAddr) == 0 { + if p.Equal(walletAddr) { return i, true } } diff --git a/collateralized-channels/contracts/generate.sh b/collateralized-channels/contracts/generate.sh index 40f29d2..b8fc2ef 100644 --- a/collateralized-channels/contracts/generate.sh +++ b/collateralized-channels/contracts/generate.sh @@ -2,28 +2,50 @@ set -e -if [ -z "$ABIGEN" ] +# Define ABIGEN and SOLC default values. +ABIGEN=abigen +SOLC=solc + +echo 'Please ensure that solc v0.8.15+ and abigen 1.10.18+ are installed.' + +if ! $ABIGEN --version then - ABIGEN=abigen + echo "'abigen' not found. Please add to PATH or set ABIGEN='path_to_abigen'." + exit 1 fi -if [ -z "$SOLC" ] +if ! $SOLC --version then - SOLC=solc + echo "'solc' not found. Please add to PATH or set SOLC='path_to_solc'." + exit 1 fi +echo "Please ensure that the repository was cloned with submodules: 'git submodule update --init --recursive'." + # Generate golang bindings from solidity contract # Argument 1: solidity contract file # Argument 2: golang contract name (used for package and file) generate_bindings() { - CONTRACT_SOL_FILE=$1 - CONTRACT_GO_NAME=$2 - PKG=$CONTRACT_GO_NAME + FILE=$1 + PKG=$2 + CONTRACT=$FILE GENDIR=./generated/$PKG + + echo "Generating $PKG bindings..." + rm -r $GENDIR mkdir -p $GENDIR - $ABIGEN --pkg $PKG --sol $CONTRACT_SOL_FILE --out $GENDIR/$CONTRACT_GO_NAME.go --solc $SOLC + + # Compile and generate binary runtime + $SOLC --abi --bin --optimize $FILE.sol -o $GENDIR + + # Generate bindings. + $ABIGEN --pkg $PKG --abi $GENDIR/$FILE.abi --bin $GENDIR/$FILE.bin --out $GENDIR/$CONTRACT.go + + # Clean up .abi and .bin files + find $GENDIR -name "*.abi" -type f -delete + find $GENDIR -name "*.bin" -type f -delete } -generate_bindings ./Adjudicator.sol adjudicator -generate_bindings ./CollateralApp.sol collateralApp -generate_bindings ./CollateralAssetHolderETH.sol collateralAssetHolderETH +generate_bindings ./Adjudicator adjudicator +generate_bindings ./CollateralApp collateralApp +generate_bindings ./CollateralAssetHolderETH collateralAssetHolderETH diff --git a/collateralized-channels/contracts/generated/adjudicator/adjudicator.go b/collateralized-channels/contracts/generated/adjudicator/adjudicator.go deleted file mode 100644 index bde2930..0000000 --- a/collateralized-channels/contracts/generated/adjudicator/adjudicator.go +++ /dev/null @@ -1,2350 +0,0 @@ -// Code generated - DO NOT EDIT. -// This file is a generated binding and any manual changes will be lost. - -package adjudicator - -import ( - "math/big" - "strings" - - ethereum "github.com/ethereum/go-ethereum" - "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/ethereum/go-ethereum/event" -) - -// Reference imports to suppress errors if they are not otherwise used. -var ( - _ = big.NewInt - _ = strings.NewReader - _ = ethereum.NotFound - _ = bind.Bind - _ = common.Big1 - _ = types.BloomLookup - _ = event.NewSubscription -) - -// AssetHolderWithdrawalAuth is an auto generated low-level Go binding around an user-defined struct. -type AssetHolderWithdrawalAuth struct { - ChannelID [32]byte - Participant common.Address - Receiver common.Address - Amount *big.Int -} - -// ChannelAllocation is an auto generated low-level Go binding around an user-defined struct. -type ChannelAllocation struct { - Assets []common.Address - Balances [][]*big.Int - Locked []ChannelSubAlloc -} - -// ChannelParams is an auto generated low-level Go binding around an user-defined struct. -type ChannelParams struct { - ChallengeDuration *big.Int - Nonce *big.Int - App common.Address - Participants []common.Address -} - -// ChannelState is an auto generated low-level Go binding around an user-defined struct. -type ChannelState struct { - ChannelID [32]byte - Version uint64 - Outcome ChannelAllocation - AppData []byte - IsFinal bool -} - -// ChannelSubAlloc is an auto generated low-level Go binding around an user-defined struct. -type ChannelSubAlloc struct { - ID [32]byte - Balances []*big.Int -} - -// AdjudicatorABI is the input ABI used to generate the binding from. -const AdjudicatorABI = "[{\"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\":\"app\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"participants\",\"type\":\"address[]\"}],\"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\":\"app\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"participants\",\"type\":\"address[]\"}],\"internalType\":\"structChannel.Params\",\"name\":\"params\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"channelID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"balances\",\"type\":\"uint256[][]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"ID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"}],\"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\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"balances\",\"type\":\"uint256[][]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"ID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"}],\"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\":\"app\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"participants\",\"type\":\"address[]\"}],\"internalType\":\"structChannel.Params\",\"name\":\"params\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"channelID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"balances\",\"type\":\"uint256[][]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"ID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"}],\"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\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"balances\",\"type\":\"uint256[][]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"ID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"}],\"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\":\"app\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"participants\",\"type\":\"address[]\"}],\"internalType\":\"structChannel.Params\",\"name\":\"params\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"channelID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"balances\",\"type\":\"uint256[][]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"ID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"}],\"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\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"balances\",\"type\":\"uint256[][]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"ID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"}],\"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\":[{\"internalType\":\"uint256\",\"name\":\"challengeDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"app\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"participants\",\"type\":\"address[]\"}],\"internalType\":\"structChannel.Params\",\"name\":\"params\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"channelID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"balances\",\"type\":\"uint256[][]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"ID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"}],\"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\":\"register\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]" - -// AdjudicatorFuncSigs maps the 4-byte function signature to its string representation. -var AdjudicatorFuncSigs = map[string]string{ - "a1ee1592": "channelID((uint256,uint256,address,address[]))", - "8bba7507": "conclude((uint256,uint256,address,address[]),(bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),bytes,bool),(bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),bytes,bool)[])", - "6bbf706a": "concludeFinal((uint256,uint256,address,address[]),(bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),bytes,bool),bytes[])", - "11be1997": "disputes(bytes32)", - "a83a5cc5": "hashState((bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),bytes,bool))", - "36995831": "progress((uint256,uint256,address,address[]),(bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),bytes,bool),(bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),bytes,bool),uint256,bytes)", - "170e6715": "register((uint256,uint256,address,address[]),(bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),bytes,bool),bytes[])", -} - -// AdjudicatorBin is the compiled bytecode used for deploying new contracts. -var AdjudicatorBin = "0x608060405234801561001057600080fd5b506125f3806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80636bbf706a1161005b5780636bbf706a146100d85780638bba7507146100eb578063a1ee1592146100fe578063a83a5cc51461011e5761007d565b806311be199714610082578063170e6715146100b057806336995831146100c5575b600080fd5b610095610090366004611911565b610131565b6040516100a7969594939291906124d6565b60405180910390f35b6100c36100be366004611963565b610180565b005b6100c36100d3366004611af6565b610259565b6100c36100e6366004611963565b6103df565b6100c36100f9366004611a35565b61054d565b61011161010c366004611929565b610627565b6040516100a79190611e2b565b61011161012c366004611ba7565b610641565b600060208190529081526040902080546001909101546001600160401b0380831692600160401b8104821692600160801b82049092169160ff600160c01b8304811692600160c81b9004169086565b61018a838361064c565b610195838383610678565b61019d611434565b60006101ac8460000151610702565b9150915080156102465783602001516001600160401b031682604001516001600160401b0316106101f85760405162461bcd60e51b81526004016101ef90611ee9565b60405180910390fd5b608082015160ff161561021d5760405162461bcd60e51b81526004016101ef90611ff9565b81516001600160401b031642106102465760405162461bcd60e51b81526004016101ef906121a5565b61025285856000610793565b5050505050565b610261611434565b835161026c90610865565b608081015190915060ff166102aa5780516001600160401b03164210156102a55760405162461bcd60e51b81526004016101ef90612179565b6102fb565b608081015160ff16600114156102e35780516001600160401b031642106102a55760405162461bcd60e51b81526004016101ef90611e5f565b60405162461bcd60e51b81526004016101ef90611f72565b610304866108a8565b6103205760405162461bcd60e51b81526004016101ef90612410565b85606001515183106103445760405162461bcd60e51b81526004016101ef906120af565b61034e868561064c565b61035785610641565b8160a00151146103795760405162461bcd60e51b81526004016101ef90611f99565b6103a3610385856108ba565b838860600151868151811061039657fe5b60200260200101516108e3565b6103bf5760405162461bcd60e51b81526004016101ef90611ebe565b6103cb8686868661091e565b6103d786856001610793565b505050505050565b608082015115156001146104055760405162461bcd60e51b81526004016101ef90611f12565b6040808301510151511561042b5760405162461bcd60e51b81526004016101ef90611fc2565b610435838361064c565b610440838383610678565b610448611434565b60006104578460000151610702565b91509150801561048957608082015160ff16600214156104895760405162461bcd60e51b81526004016101ef906120de565b61049585856002610793565b61049e856108a8565b156105085784604001516001600160a01b031663abf66fa486866040518363ffffffff1660e01b81526004016104d592919061244a565b600060405180830381600087803b1580156104ef57600080fd5b505af1158015610503573d6000803e3d6000fd5b505050505b6040805160008082526020820190925260609161053b565b610528611469565b8152602001906001900390816105205790505b5090506103d785828860600151610a02565b610555611434565b825161056090610865565b608081015190915060ff166002141561058b5760405162461bcd60e51b81526004016101ef906120de565b610595848461064c565b61059f8383610c46565b6105a8846108a8565b156106125783604001516001600160a01b031663abf66fa485856040518363ffffffff1660e01b81526004016105df92919061244a565b600060405180830381600087803b1580156105f957600080fd5b505af115801561060d573d6000803e3d6000fd5b505050505b61062183838660600151610a02565b50505050565b600061063282610c84565b8051906020012090505b919050565b6000610632826108ba565b61065582610627565b8151146106745760405162461bcd60e51b81526004016101ef9061234e565b5050565b6060610683836108ba565b90508151846060015151146106aa5760405162461bcd60e51b81526004016101ef9061220b565b60005b8251811015610252576106de828483815181106106c657fe5b60200260200101518760600151848151811061039657fe5b6106fa5760405162461bcd60e51b81526004016101ef90611ebe565b6001016106ad565b61070a611434565b6000610714611434565b50505060008181526020818152604091829020825160c08101845281546001600160401b038082168352600160401b8204811694830194909452600160801b81049093169381019390935260ff600160c01b8304811615156060850152600160c81b90920490911660808301526001015460a082018190521515915091565b61079b611434565b60006107aa8460000151610702565b86516001600160401b0390811660208085019190915287015116604083015290925090506107d7856108a8565b151560608301528260028111156107ea57fe5b60ff1660808301526107fb84610641565b60a083015260808401511561081b576001600160401b0342168252610859565b80158061082f5750608082015160ff166001145b1561085957602082015161084d906001600160401b03421690610c97565b6001600160401b031682525b83516102529083610cec565b61086d611434565b610875611434565b600061088084610702565b91509150806108a15760405162461bcd60e51b81526004016101ef90612022565b5092915050565b604001516001600160a01b0316151590565b6060816040516020016108cd91906124c3565b6040516020818303038152906040529050919050565b6000806108f68580519060200120610de7565b905060006109048286610e38565b6001600160a01b0390811690851614925050509392505050565b82602001516001016001600160401b031682602001516001600160401b03161461095a5760405162461bcd60e51b81526004016101ef90612317565b60808301511561097c5760405162461bcd60e51b81526004016101ef9061204a565b61099483604001518360400151866060015151611023565b6040808501519051637614eebf60e11b81526001600160a01b0382169063ec29dd7e906109cb908890889088908890600401612478565b60006040518083038186803b1580156109e357600080fd5b505afa1580156109f7573d6000803e3d6000fd5b505050505050505050565b60408301515160005b815181101561025257606083516001600160401b0381118015610a2d57600080fd5b50604051908082528060200260200182016040528015610a57578160200160208202803683370190505b50905060005b8151811015610bbf578660400151602001518381518110610a7a57fe5b60200260200101518181518110610a8d57fe5b6020026020010151828281518110610aa157fe5b60200260200101818152505060005b8651811015610bb657610ac1611469565b878281518110610acd57fe5b60200260200101519050858581518110610ae357fe5b60200260200101516001600160a01b03168160400151600001518681518110610b0857fe5b60200260200101516001600160a01b031614610b365760405162461bcd60e51b81526004016101ef90612115565b6000848481518110610b4457fe5b6020026020010151905060008260400151602001518781518110610b6457fe5b60200260200101518581518110610b7757fe5b60200260200101519050610b94818361124b90919063ffffffff16565b868681518110610ba057fe5b6020908102919091010152505050600101610ab0565b50600101610a5d565b50828281518110610bcc57fe5b60200260200101516001600160a01b031663fc79a66d876000015186846040518463ffffffff1660e01b8152600401610c0793929190611e34565b600060405180830381600087803b158015610c2157600080fd5b505af1158015610c35573d6000803e3d6000fd5b505060019093019250610a0b915050565b610c4f826112ac565b6000610c5d83836000611385565b905081518114610c7f5760405162461bcd60e51b81526004016101ef90612142565b505050565b6060816040516020016108cd9190612437565b8082016001600160401b038084169082161015610ce6576040805162461bcd60e51b81526020600482015260086024820152676f766572666c6f7760c01b604482015290519081900360640190fd5b92915050565b600082815260208181526040918290208351815492850151858501516060870151608088015167ffffffffffffffff199096166001600160401b03808616919091176fffffffffffffffff00000000000000001916600160401b948216949094029390931767ffffffffffffffff60801b1916600160801b938316939093029290921760ff60c01b1916600160c01b921515929092029190911760ff60c81b1916600160c81b60ff86160217835560a0860151600190930192909255925185937f895ef5a5fc3efd313a300b006d6ce97ff0670dfe04f6eea90417edf924fa786b93610ddb9392909190612513565b60405180910390a25050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b60008151604114610e90576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115610f015760405162461bcd60e51b815260040180806020018281038252602281526020018061257a6022913960400191505060405180910390fd5b8060ff16601b14158015610f1957508060ff16601c14155b15610f555760405162461bcd60e51b815260040180806020018281038252602281526020018061259c6022913960400191505060405180910390fd5b600060018783868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015610fb1573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611019576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b9695505050505050565b8160200151518360200151511461104c5760405162461bcd60e51b81526004016101ef906123a2565b8151518351511461106f5760405162461bcd60e51b81526004016101ef9061207f565b604083015151156110925760405162461bcd60e51b81526004016101ef90612242565b604082015151156110b55760405162461bcd60e51b81526004016101ef90611f3b565b60005b8251518110156106215782518051829081106110d057fe5b60200260200101516001600160a01b0316846000015182815181106110f157fe5b60200260200101516001600160a01b03161461111f5760405162461bcd60e51b81526004016101ef90611e87565b600080838660200151848151811061113357fe5b602002602001015151146111595760405162461bcd60e51b81526004016101ef906123d9565b838560200151848151811061116a57fe5b602002602001015151146111905760405162461bcd60e51b81526004016101ef906122e0565b60005b84811015611221576111d8876020015185815181106111ae57fe5b602002602001015182815181106111c157fe5b60200260200101518461124b90919063ffffffff16565b9250611217866020015185815181106111ed57fe5b6020026020010151828151811061120057fe5b60200260200101518361124b90919063ffffffff16565b9150600101611193565b508082146112415760405162461bcd60e51b81526004016101ef906122a9565b50506001016110b8565b6000828201838110156112a5576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6112b4611434565b81516112bf90610865565b90506112ca82610641565b8160a00151146112ec5760405162461bcd60e51b81526004016101ef906121dc565b608081015160ff16600214156113025750611382565b608081015160ff16158015611318575080606001515b156113455760208101518151611339916001600160401b0390911690610c97565b6001600160401b031681525b80516001600160401b031642101561136f5760405162461bcd60e51b81526004016101ef90612279565b6002608082015281516106749082610cec565b50565b60408084015101516000908290825b8151811015611429576113a5611469565b8684815181106113b157fe5b6020026020010151905080600001518383815181106113cc57fe5b602002602001015160000151146113f55760405162461bcd60e51b81526004016101ef90612376565b6113fe816112ac565b604080820151015151600190940193156114205761141d818886611385565b93505b50600101611394565b509095945050505050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b6040805160a0810182526000808252602082015290810161148861149c565b815260606020820152600060409091015290565b60405180606001604052806060815260200160608152602001606081525090565b80356001600160a01b038116811461063c57600080fd5b600082601f8301126114e4578081fd5b81356114f76114f28261255c565b612539565b81815291506020808301908481018184028601820187101561151857600080fd5b60005b8481101561153e5761152c826114bd565b8452928201929082019060010161151b565b505050505092915050565b600082601f830112611559578081fd5b81356115676114f28261255c565b818152915060208083019084810160005b8481101561153e5761158f888484358a010161164f565b84529282019290820190600101611578565b600082601f8301126115b1578081fd5b81356115bf6114f28261255c565b818152915060208083019084810160005b8481101561153e5781358701604080601f19838c030112156115f157600080fd5b80518181016001600160401b03828210818311171561160c57fe5b81845284880135835292840135928084111561162757600080fd5b50506116378b878486010161164f565b818701528652505092820192908201906001016115d0565b600082601f83011261165f578081fd5b813561166d6114f28261255c565b81815291506020808301908481018184028601820187101561168e57600080fd5b60005b8481101561153e57813584529282019290820190600101611691565b8035801515811461063c57600080fd5b600082601f8301126116cd578081fd5b81356001600160401b038111156116e057fe5b6116f3601f8201601f1916602001612539565b915080825283602082850101111561170a57600080fd5b8060208401602084013760009082016020015292915050565b600060608284031215611734578081fd5b604051606081016001600160401b03828210818311171561175157fe5b81604052829350843591508082111561176957600080fd5b611775868387016114d4565b8352602085013591508082111561178b57600080fd5b61179786838701611549565b602084015260408501359150808211156117b057600080fd5b506117bd858286016115a1565b6040830152505092915050565b6000608082840312156117db578081fd5b604051608081016001600160401b0382821081831117156117f857fe5b816040528293508435835260208501356020840152611819604086016114bd565b6040840152606085013591508082111561183257600080fd5b5061183f858286016114d4565b6060830152505092915050565b600060a0828403121561185d578081fd5b60405160a081016001600160401b03828210818311171561187a57fe5b8160405282935084358352611891602086016118fa565b602084015260408501359150808211156118aa57600080fd5b6118b686838701611723565b604084015260608501359150808211156118cf57600080fd5b506118dc858286016116bd565b6060830152506118ee608084016116ad565b60808201525092915050565b80356001600160401b038116811461063c57600080fd5b600060208284031215611922578081fd5b5035919050565b60006020828403121561193a578081fd5b81356001600160401b0381111561194f578182fd5b61195b848285016117ca565b949350505050565b600080600060608486031215611977578182fd5b83356001600160401b038082111561198d578384fd5b611999878388016117ca565b94506020915081860135818111156119af578485fd5b6119bb8882890161184c565b9450506040860135818111156119cf578384fd5b86019050601f810187136119e1578283fd5b80356119ef6114f28261255c565b81815283810190838501865b84811015611a2457611a128c8884358901016116bd565b845292860192908601906001016119fb565b505080955050505050509250925092565b600080600060608486031215611a49578081fd5b83356001600160401b0380821115611a5f578283fd5b611a6b878388016117ca565b9450602091508186013581811115611a81578384fd5b611a8d8882890161184c565b945050604086013581811115611aa1578384fd5b86019050601f81018713611ab3578283fd5b8035611ac16114f28261255c565b81815283810190838501865b84811015611a2457611ae48c88843589010161184c565b84529286019290860190600101611acd565b600080600080600060a08688031215611b0d578283fd5b85356001600160401b0380821115611b23578485fd5b611b2f89838a016117ca565b96506020880135915080821115611b44578485fd5b611b5089838a0161184c565b95506040880135915080821115611b65578485fd5b611b7189838a0161184c565b9450606088013593506080880135915080821115611b8d578283fd5b50611b9a888289016116bd565b9150509295509295909350565b600060208284031215611bb8578081fd5b81356001600160401b03811115611bcd578182fd5b61195b8482850161184c565b6000815180845260208085019450808401835b83811015611c115781516001600160a01b031687529582019590820190600101611bec565b509495945050505050565b6000815180845260208085018081965082840281019150828601855b85811015611c765782840389528151805185528501516040868601819052611c6281870183611c83565b9a87019a9550505090840190600101611c38565b5091979650505050505050565b6000815180845260208085019450808401835b83811015611c1157815187529582019590820190600101611c96565b15159052565b60008151808452815b81811015611cdd57602081850181015186830182015201611cc1565b81811115611cee5782602083870101525b50601f01601f19169290920160200192915050565b6000815183526020820151602084015260018060a01b03604083015116604084015260608201516080606085015261195b6080850182611bd9565b60008151835260206001600160401b03818401511681850152604083015160a060408601528051606060a0870152611d7a610100870182611bd9565b83830151609f19888303810160c08a01528151808452929350908501918386019080870285018701885b82811015611dd257601f19878303018452611dc0828751611c83565b95890195938901939150600101611da4565b5060408701519750838b82030160e08c0152611dee8189611c1c565b97505050505050505060608301518482036060860152611e0e8282611cb8565b9150506080830151611e236080860182611cb2565b509392505050565b90815260200190565b600084825260606020830152611e4d6060830185611bd9565b82810360408401526110198185611c83565b6020808252600e908201526d1d1a5b595bdd5d081c185cdcd95960921b604082015260600190565b6020808252601a908201527f6173736574735b695d2061646472657373206d69736d61746368000000000000604082015260600190565b602080825260119082015270696e76616c6964207369676e617475726560781b604082015260600190565b6020808252600f908201526e34b73b30b634b2103b32b939b4b7b760891b604082015260600190565b6020808252600f908201526e1cdd185d19481b9bdd08199a5b985b608a1b604082015260600190565b60208082526019908201527f66756e6473206c6f636b656420696e206e657720737461746500000000000000604082015260600190565b6020808252600d908201526c696e76616c696420706861736560981b604082015260600190565b6020808252600f908201526e77726f6e67206f6c6420737461746560881b604082015260600190565b60208082526018908201527f63616e6e6f742068617665207375622d6368616e6e656c730000000000000000604082015260600190565b6020808252600f908201526e696e636f727265637420706861736560881b604082015260600190565b6020808252600e908201526d1b9bdd081c9959da5cdd195c995960921b604082015260600190565b6020808252818101527f63616e6e6f742070726f67726573732066726f6d2066696e616c207374617465604082015260600190565b6020808252601690820152750c2e6e6cae8e640d8cadccee8d040dad2e6dac2e8c6d60531b604082015260600190565b6020808252601590820152746163746f72496478206f7574206f662072616e676560581b604082015260600190565b60208082526019908201527f6368616e6e656c20616c726561647920636f6e636c7564656400000000000000604082015260600190565b6020808252601390820152720c2e6e6cae8e640c8de40dcdee840dac2e8c6d606b1b604082015260600190565b60208082526019908201527f77726f6e67206e756d626572206f662073756273746174657300000000000000604082015260600190565b6020808252601290820152711d1a5b595bdd5d081b9bdd081c185cdcd95960721b604082015260600190565b60208082526019908201527f72656675746174696f6e2074696d656f75742070617373656400000000000000604082015260600190565b602080825260159082015274696e76616c6964206368616e6e656c20737461746560581b604082015260600190565b6020808252601a908201527f7369676e617475726573206c656e677468206d69736d61746368000000000000604082015260600190565b60208082526019908201527f66756e6473206c6f636b656420696e206f6c6420737461746500000000000000604082015260600190565b6020808252601690820152751d1a5b595bdd5d081b9bdd081c185cdcd959081e595d60521b604082015260600190565b60208082526018908201527f73756d206f662062616c616e636573206d69736d617463680000000000000000604082015260600190565b6020808252601c908201527f6e65772062616c616e636573206c656e677468206d69736d6174636800000000604082015260600190565b6020808252601d908201527f76657273696f6e206d75737420696e6372656d656e74206279206f6e65000000604082015260600190565b6020808252600e908201526d696e76616c696420706172616d7360901b604082015260600190565b6020808252601290820152711a5b9d985b1a590818da185b9b995b08125160721b604082015260600190565b60208082526018908201527f62616c616e636573206c656e677468206d69736d617463680000000000000000604082015260600190565b6020808252601c908201527f6f6c642062616c616e636573206c656e677468206d69736d6174636800000000604082015260600190565b6020808252600d908201526c06d75737420686176652061707609c1b604082015260600190565b6000602082526112a56020830184611d03565b60006040825261245d6040830185611d03565b828103602084015261246f8185611d3e565b95945050505050565b60006080825261248b6080830187611d03565b828103602084015261249d8187611d3e565b905082810360408401526124b18186611d3e565b91505082606083015295945050505050565b6000602082526112a56020830184611d3e565b6001600160401b03968716815294861660208601529290941660408401521515606083015260ff909216608082015260a081019190915260c00190565b6001600160401b03938416815260ff929092166020830152909116604082015260600190565b6040518181016001600160401b038111828210171561255457fe5b604052919050565b60006001600160401b0382111561256f57fe5b506020908102019056fe45434453413a20696e76616c6964207369676e6174757265202773272076616c756545434453413a20696e76616c6964207369676e6174757265202776272076616c7565a264697066735822122010926c6e2f32eac3ede7d00824d7d1f4459b668d4460886212cacaa5ec55e9ac64736f6c63430007040033" - -// DeployAdjudicator deploys a new Ethereum contract, binding an instance of Adjudicator to it. -func DeployAdjudicator(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *Adjudicator, error) { - parsed, err := abi.JSON(strings.NewReader(AdjudicatorABI)) - if err != nil { - return common.Address{}, nil, nil, err - } - - address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(AdjudicatorBin), backend) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &Adjudicator{AdjudicatorCaller: AdjudicatorCaller{contract: contract}, AdjudicatorTransactor: AdjudicatorTransactor{contract: contract}, AdjudicatorFilterer: AdjudicatorFilterer{contract: contract}}, nil -} - -// Adjudicator is an auto generated Go binding around an Ethereum contract. -type Adjudicator struct { - AdjudicatorCaller // Read-only binding to the contract - AdjudicatorTransactor // Write-only binding to the contract - AdjudicatorFilterer // Log filterer for contract events -} - -// AdjudicatorCaller is an auto generated read-only Go binding around an Ethereum contract. -type AdjudicatorCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// AdjudicatorTransactor is an auto generated write-only Go binding around an Ethereum contract. -type AdjudicatorTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// AdjudicatorFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type AdjudicatorFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// AdjudicatorSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type AdjudicatorSession struct { - Contract *Adjudicator // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// AdjudicatorCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type AdjudicatorCallerSession struct { - Contract *AdjudicatorCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// AdjudicatorTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type AdjudicatorTransactorSession struct { - Contract *AdjudicatorTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// AdjudicatorRaw is an auto generated low-level Go binding around an Ethereum contract. -type AdjudicatorRaw struct { - Contract *Adjudicator // Generic contract binding to access the raw methods on -} - -// AdjudicatorCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type AdjudicatorCallerRaw struct { - Contract *AdjudicatorCaller // Generic read-only contract binding to access the raw methods on -} - -// AdjudicatorTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type AdjudicatorTransactorRaw struct { - Contract *AdjudicatorTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewAdjudicator creates a new instance of Adjudicator, bound to a specific deployed contract. -func NewAdjudicator(address common.Address, backend bind.ContractBackend) (*Adjudicator, error) { - contract, err := bindAdjudicator(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &Adjudicator{AdjudicatorCaller: AdjudicatorCaller{contract: contract}, AdjudicatorTransactor: AdjudicatorTransactor{contract: contract}, AdjudicatorFilterer: AdjudicatorFilterer{contract: contract}}, nil -} - -// NewAdjudicatorCaller creates a new read-only instance of Adjudicator, bound to a specific deployed contract. -func NewAdjudicatorCaller(address common.Address, caller bind.ContractCaller) (*AdjudicatorCaller, error) { - contract, err := bindAdjudicator(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &AdjudicatorCaller{contract: contract}, nil -} - -// NewAdjudicatorTransactor creates a new write-only instance of Adjudicator, bound to a specific deployed contract. -func NewAdjudicatorTransactor(address common.Address, transactor bind.ContractTransactor) (*AdjudicatorTransactor, error) { - contract, err := bindAdjudicator(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &AdjudicatorTransactor{contract: contract}, nil -} - -// NewAdjudicatorFilterer creates a new log filterer instance of Adjudicator, bound to a specific deployed contract. -func NewAdjudicatorFilterer(address common.Address, filterer bind.ContractFilterer) (*AdjudicatorFilterer, error) { - contract, err := bindAdjudicator(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &AdjudicatorFilterer{contract: contract}, nil -} - -// 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)) - if err != nil { - return nil, err - } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_Adjudicator *AdjudicatorRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _Adjudicator.Contract.AdjudicatorCaller.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_Adjudicator *AdjudicatorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _Adjudicator.Contract.AdjudicatorTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_Adjudicator *AdjudicatorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _Adjudicator.Contract.AdjudicatorTransactor.contract.Transact(opts, method, params...) -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_Adjudicator *AdjudicatorCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _Adjudicator.Contract.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_Adjudicator *AdjudicatorTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _Adjudicator.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_Adjudicator *AdjudicatorTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _Adjudicator.Contract.contract.Transact(opts, method, params...) -} - -// ChannelID is a free data retrieval call binding the contract method 0xa1ee1592. -// -// Solidity: function channelID((uint256,uint256,address,address[]) 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) - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// ChannelID is a free data retrieval call binding the contract method 0xa1ee1592. -// -// Solidity: function channelID((uint256,uint256,address,address[]) 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 0xa1ee1592. -// -// Solidity: function channelID((uint256,uint256,address,address[]) 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) -func (_Adjudicator *AdjudicatorCaller) Disputes(opts *bind.CallOpts, arg0 [32]byte) (struct { - Timeout uint64 - ChallengeDuration uint64 - Version uint64 - HasApp bool - Phase uint8 - StateHash [32]byte -}, error) { - var out []interface{} - err := _Adjudicator.contract.Call(opts, &out, "disputes", arg0) - - outstruct := new(struct { - Timeout uint64 - ChallengeDuration uint64 - Version uint64 - HasApp bool - Phase uint8 - StateHash [32]byte - }) - - outstruct.Timeout = out[0].(uint64) - outstruct.ChallengeDuration = out[1].(uint64) - outstruct.Version = out[2].(uint64) - outstruct.HasApp = out[3].(bool) - outstruct.Phase = out[4].(uint8) - outstruct.StateHash = out[5].([32]byte) - - return *outstruct, err - -} - -// 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) -func (_Adjudicator *AdjudicatorSession) Disputes(arg0 [32]byte) (struct { - Timeout uint64 - ChallengeDuration uint64 - Version uint64 - HasApp bool - Phase uint8 - StateHash [32]byte -}, 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) -func (_Adjudicator *AdjudicatorCallerSession) Disputes(arg0 [32]byte) (struct { - Timeout uint64 - ChallengeDuration uint64 - Version uint64 - HasApp bool - Phase uint8 - StateHash [32]byte -}, error) { - return _Adjudicator.Contract.Disputes(&_Adjudicator.CallOpts, arg0) -} - -// HashState is a free data retrieval call binding the contract method 0xa83a5cc5. -// -// Solidity: function hashState((bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),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) - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// HashState is a free data retrieval call binding the contract method 0xa83a5cc5. -// -// Solidity: function hashState((bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),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 0xa83a5cc5. -// -// Solidity: function hashState((bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),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 0x8bba7507. -// -// Solidity: function conclude((uint256,uint256,address,address[]) params, (bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),bytes,bool) state, (bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),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 0x8bba7507. -// -// Solidity: function conclude((uint256,uint256,address,address[]) params, (bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),bytes,bool) state, (bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),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 0x8bba7507. -// -// Solidity: function conclude((uint256,uint256,address,address[]) params, (bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),bytes,bool) state, (bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),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 0x6bbf706a. -// -// Solidity: function concludeFinal((uint256,uint256,address,address[]) params, (bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),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 0x6bbf706a. -// -// Solidity: function concludeFinal((uint256,uint256,address,address[]) params, (bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),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 0x6bbf706a. -// -// Solidity: function concludeFinal((uint256,uint256,address,address[]) params, (bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),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 0x36995831. -// -// Solidity: function progress((uint256,uint256,address,address[]) params, (bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),bytes,bool) stateOld, (bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),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 0x36995831. -// -// Solidity: function progress((uint256,uint256,address,address[]) params, (bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),bytes,bool) stateOld, (bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),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 0x36995831. -// -// Solidity: function progress((uint256,uint256,address,address[]) params, (bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),bytes,bool) stateOld, (bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),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 0x170e6715. -// -// Solidity: function register((uint256,uint256,address,address[]) params, (bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),bytes,bool) state, bytes[] sigs) returns() -func (_Adjudicator *AdjudicatorTransactor) Register(opts *bind.TransactOpts, params ChannelParams, state ChannelState, sigs [][]byte) (*types.Transaction, error) { - return _Adjudicator.contract.Transact(opts, "register", params, state, sigs) -} - -// Register is a paid mutator transaction binding the contract method 0x170e6715. -// -// Solidity: function register((uint256,uint256,address,address[]) params, (bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),bytes,bool) state, bytes[] sigs) returns() -func (_Adjudicator *AdjudicatorSession) Register(params ChannelParams, state ChannelState, sigs [][]byte) (*types.Transaction, error) { - return _Adjudicator.Contract.Register(&_Adjudicator.TransactOpts, params, state, sigs) -} - -// Register is a paid mutator transaction binding the contract method 0x170e6715. -// -// Solidity: function register((uint256,uint256,address,address[]) params, (bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),bytes,bool) state, bytes[] sigs) returns() -func (_Adjudicator *AdjudicatorTransactorSession) Register(params ChannelParams, state ChannelState, sigs [][]byte) (*types.Transaction, error) { - return _Adjudicator.Contract.Register(&_Adjudicator.TransactOpts, params, state, sigs) -} - -// AdjudicatorChannelUpdateIterator is returned from FilterChannelUpdate and is used to iterate over the raw logs and unpacked data for ChannelUpdate events raised by the Adjudicator contract. -type AdjudicatorChannelUpdateIterator struct { - Event *AdjudicatorChannelUpdate // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *AdjudicatorChannelUpdateIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(AdjudicatorChannelUpdate) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(AdjudicatorChannelUpdate) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *AdjudicatorChannelUpdateIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *AdjudicatorChannelUpdateIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// AdjudicatorChannelUpdate represents a ChannelUpdate event raised by the Adjudicator contract. -type AdjudicatorChannelUpdate struct { - ChannelID [32]byte - Version uint64 - Phase uint8 - Timeout uint64 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterChannelUpdate is a free log retrieval operation binding the contract event 0x895ef5a5fc3efd313a300b006d6ce97ff0670dfe04f6eea90417edf924fa786b. -// -// Solidity: event ChannelUpdate(bytes32 indexed channelID, uint64 version, uint8 phase, uint64 timeout) -func (_Adjudicator *AdjudicatorFilterer) FilterChannelUpdate(opts *bind.FilterOpts, channelID [][32]byte) (*AdjudicatorChannelUpdateIterator, error) { - - var channelIDRule []interface{} - for _, channelIDItem := range channelID { - channelIDRule = append(channelIDRule, channelIDItem) - } - - logs, sub, err := _Adjudicator.contract.FilterLogs(opts, "ChannelUpdate", channelIDRule) - if err != nil { - return nil, err - } - return &AdjudicatorChannelUpdateIterator{contract: _Adjudicator.contract, event: "ChannelUpdate", logs: logs, sub: sub}, nil -} - -// WatchChannelUpdate is a free log subscription operation binding the contract event 0x895ef5a5fc3efd313a300b006d6ce97ff0670dfe04f6eea90417edf924fa786b. -// -// Solidity: event ChannelUpdate(bytes32 indexed channelID, uint64 version, uint8 phase, uint64 timeout) -func (_Adjudicator *AdjudicatorFilterer) WatchChannelUpdate(opts *bind.WatchOpts, sink chan<- *AdjudicatorChannelUpdate, channelID [][32]byte) (event.Subscription, error) { - - var channelIDRule []interface{} - for _, channelIDItem := range channelID { - channelIDRule = append(channelIDRule, channelIDItem) - } - - logs, sub, err := _Adjudicator.contract.WatchLogs(opts, "ChannelUpdate", channelIDRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(AdjudicatorChannelUpdate) - if err := _Adjudicator.contract.UnpackLog(event, "ChannelUpdate", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseChannelUpdate is a log parse operation binding the contract event 0x895ef5a5fc3efd313a300b006d6ce97ff0670dfe04f6eea90417edf924fa786b. -// -// Solidity: event ChannelUpdate(bytes32 indexed channelID, uint64 version, uint8 phase, uint64 timeout) -func (_Adjudicator *AdjudicatorFilterer) ParseChannelUpdate(log types.Log) (*AdjudicatorChannelUpdate, error) { - event := new(AdjudicatorChannelUpdate) - if err := _Adjudicator.contract.UnpackLog(event, "ChannelUpdate", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// AppABI is the input ABI used to generate the binding from. -const AppABI = "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"challengeDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"app\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"participants\",\"type\":\"address[]\"}],\"internalType\":\"structChannel.Params\",\"name\":\"params\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"channelID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"balances\",\"type\":\"uint256[][]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"ID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"}],\"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\":\"onConclude\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"challengeDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"app\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"participants\",\"type\":\"address[]\"}],\"internalType\":\"structChannel.Params\",\"name\":\"params\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"channelID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"balances\",\"type\":\"uint256[][]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"ID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"}],\"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\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"balances\",\"type\":\"uint256[][]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"ID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"}],\"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\"}]" - -// AppFuncSigs maps the 4-byte function signature to its string representation. -var AppFuncSigs = map[string]string{ - "abf66fa4": "onConclude((uint256,uint256,address,address[]),(bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),bytes,bool))", - "ec29dd7e": "validTransition((uint256,uint256,address,address[]),(bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),bytes,bool),(bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),bytes,bool),uint256)", -} - -// App is an auto generated Go binding around an Ethereum contract. -type App struct { - AppCaller // Read-only binding to the contract - AppTransactor // Write-only binding to the contract - AppFilterer // Log filterer for contract events -} - -// AppCaller is an auto generated read-only Go binding around an Ethereum contract. -type AppCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// AppTransactor is an auto generated write-only Go binding around an Ethereum contract. -type AppTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// AppFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type AppFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// AppSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type AppSession struct { - Contract *App // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// AppCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type AppCallerSession struct { - Contract *AppCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// AppTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type AppTransactorSession struct { - Contract *AppTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// AppRaw is an auto generated low-level Go binding around an Ethereum contract. -type AppRaw struct { - Contract *App // Generic contract binding to access the raw methods on -} - -// AppCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type AppCallerRaw struct { - Contract *AppCaller // Generic read-only contract binding to access the raw methods on -} - -// AppTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type AppTransactorRaw struct { - Contract *AppTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewApp creates a new instance of App, bound to a specific deployed contract. -func NewApp(address common.Address, backend bind.ContractBackend) (*App, error) { - contract, err := bindApp(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &App{AppCaller: AppCaller{contract: contract}, AppTransactor: AppTransactor{contract: contract}, AppFilterer: AppFilterer{contract: contract}}, nil -} - -// NewAppCaller creates a new read-only instance of App, bound to a specific deployed contract. -func NewAppCaller(address common.Address, caller bind.ContractCaller) (*AppCaller, error) { - contract, err := bindApp(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &AppCaller{contract: contract}, nil -} - -// NewAppTransactor creates a new write-only instance of App, bound to a specific deployed contract. -func NewAppTransactor(address common.Address, transactor bind.ContractTransactor) (*AppTransactor, error) { - contract, err := bindApp(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &AppTransactor{contract: contract}, nil -} - -// NewAppFilterer creates a new log filterer instance of App, bound to a specific deployed contract. -func NewAppFilterer(address common.Address, filterer bind.ContractFilterer) (*AppFilterer, error) { - contract, err := bindApp(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &AppFilterer{contract: contract}, nil -} - -// bindApp binds a generic wrapper to an already deployed contract. -func bindApp(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(AppABI)) - if err != nil { - return nil, err - } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_App *AppRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _App.Contract.AppCaller.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_App *AppRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _App.Contract.AppTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_App *AppRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _App.Contract.AppTransactor.contract.Transact(opts, method, params...) -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_App *AppCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _App.Contract.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_App *AppTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _App.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_App *AppTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _App.Contract.contract.Transact(opts, method, params...) -} - -// ValidTransition is a free data retrieval call binding the contract method 0xec29dd7e. -// -// Solidity: function validTransition((uint256,uint256,address,address[]) params, (bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),bytes,bool) from, (bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),bytes,bool) to, uint256 actorIdx) pure returns() -func (_App *AppCaller) ValidTransition(opts *bind.CallOpts, params ChannelParams, from ChannelState, to ChannelState, actorIdx *big.Int) error { - var out []interface{} - err := _App.contract.Call(opts, &out, "validTransition", params, from, to, actorIdx) - - if err != nil { - return err - } - - return err - -} - -// ValidTransition is a free data retrieval call binding the contract method 0xec29dd7e. -// -// Solidity: function validTransition((uint256,uint256,address,address[]) params, (bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),bytes,bool) from, (bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),bytes,bool) to, uint256 actorIdx) pure returns() -func (_App *AppSession) ValidTransition(params ChannelParams, from ChannelState, to ChannelState, actorIdx *big.Int) error { - return _App.Contract.ValidTransition(&_App.CallOpts, params, from, to, actorIdx) -} - -// ValidTransition is a free data retrieval call binding the contract method 0xec29dd7e. -// -// Solidity: function validTransition((uint256,uint256,address,address[]) params, (bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),bytes,bool) from, (bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),bytes,bool) to, uint256 actorIdx) pure returns() -func (_App *AppCallerSession) ValidTransition(params ChannelParams, from ChannelState, to ChannelState, actorIdx *big.Int) error { - return _App.Contract.ValidTransition(&_App.CallOpts, params, from, to, actorIdx) -} - -// OnConclude is a paid mutator transaction binding the contract method 0xabf66fa4. -// -// Solidity: function onConclude((uint256,uint256,address,address[]) params, (bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),bytes,bool) state) returns() -func (_App *AppTransactor) OnConclude(opts *bind.TransactOpts, params ChannelParams, state ChannelState) (*types.Transaction, error) { - return _App.contract.Transact(opts, "onConclude", params, state) -} - -// OnConclude is a paid mutator transaction binding the contract method 0xabf66fa4. -// -// Solidity: function onConclude((uint256,uint256,address,address[]) params, (bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),bytes,bool) state) returns() -func (_App *AppSession) OnConclude(params ChannelParams, state ChannelState) (*types.Transaction, error) { - return _App.Contract.OnConclude(&_App.TransactOpts, params, state) -} - -// OnConclude is a paid mutator transaction binding the contract method 0xabf66fa4. -// -// Solidity: function onConclude((uint256,uint256,address,address[]) params, (bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),bytes,bool) state) returns() -func (_App *AppTransactorSession) OnConclude(params ChannelParams, state ChannelState) (*types.Transaction, error) { - return _App.Contract.OnConclude(&_App.TransactOpts, params, state) -} - -// AssetHolderABI is the input ABI used to generate the binding from. -const AssetHolderABI = "[{\"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\"}]" - -// AssetHolderFuncSigs maps the 4-byte function signature to its string representation. -var AssetHolderFuncSigs = map[string]string{ - "53c2ed8e": "adjudicator()", - "1de26e16": "deposit(bytes32,uint256)", - "ae9ee18c": "holdings(bytes32)", - "fc79a66d": "setOutcome(bytes32,address[],uint256[])", - "d945af1d": "settled(bytes32)", - "4ed4283c": "withdraw((bytes32,address,address,uint256),bytes)", -} - -// AssetHolder is an auto generated Go binding around an Ethereum contract. -type AssetHolder struct { - AssetHolderCaller // Read-only binding to the contract - AssetHolderTransactor // Write-only binding to the contract - AssetHolderFilterer // Log filterer for contract events -} - -// AssetHolderCaller is an auto generated read-only Go binding around an Ethereum contract. -type AssetHolderCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// AssetHolderTransactor is an auto generated write-only Go binding around an Ethereum contract. -type AssetHolderTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// AssetHolderFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type AssetHolderFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// AssetHolderSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type AssetHolderSession struct { - Contract *AssetHolder // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// AssetHolderCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type AssetHolderCallerSession struct { - Contract *AssetHolderCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// AssetHolderTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type AssetHolderTransactorSession struct { - Contract *AssetHolderTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// AssetHolderRaw is an auto generated low-level Go binding around an Ethereum contract. -type AssetHolderRaw struct { - Contract *AssetHolder // Generic contract binding to access the raw methods on -} - -// AssetHolderCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type AssetHolderCallerRaw struct { - Contract *AssetHolderCaller // Generic read-only contract binding to access the raw methods on -} - -// AssetHolderTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type AssetHolderTransactorRaw struct { - Contract *AssetHolderTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewAssetHolder creates a new instance of AssetHolder, bound to a specific deployed contract. -func NewAssetHolder(address common.Address, backend bind.ContractBackend) (*AssetHolder, error) { - contract, err := bindAssetHolder(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &AssetHolder{AssetHolderCaller: AssetHolderCaller{contract: contract}, AssetHolderTransactor: AssetHolderTransactor{contract: contract}, AssetHolderFilterer: AssetHolderFilterer{contract: contract}}, nil -} - -// NewAssetHolderCaller creates a new read-only instance of AssetHolder, bound to a specific deployed contract. -func NewAssetHolderCaller(address common.Address, caller bind.ContractCaller) (*AssetHolderCaller, error) { - contract, err := bindAssetHolder(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &AssetHolderCaller{contract: contract}, nil -} - -// NewAssetHolderTransactor creates a new write-only instance of AssetHolder, bound to a specific deployed contract. -func NewAssetHolderTransactor(address common.Address, transactor bind.ContractTransactor) (*AssetHolderTransactor, error) { - contract, err := bindAssetHolder(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &AssetHolderTransactor{contract: contract}, nil -} - -// NewAssetHolderFilterer creates a new log filterer instance of AssetHolder, bound to a specific deployed contract. -func NewAssetHolderFilterer(address common.Address, filterer bind.ContractFilterer) (*AssetHolderFilterer, error) { - contract, err := bindAssetHolder(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &AssetHolderFilterer{contract: contract}, nil -} - -// 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)) - if err != nil { - return nil, err - } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_AssetHolder *AssetHolderRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _AssetHolder.Contract.AssetHolderCaller.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_AssetHolder *AssetHolderRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _AssetHolder.Contract.AssetHolderTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_AssetHolder *AssetHolderRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _AssetHolder.Contract.AssetHolderTransactor.contract.Transact(opts, method, params...) -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_AssetHolder *AssetHolderCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _AssetHolder.Contract.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_AssetHolder *AssetHolderTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _AssetHolder.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_AssetHolder *AssetHolderTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _AssetHolder.Contract.contract.Transact(opts, method, params...) -} - -// Adjudicator is a free data retrieval call binding the contract method 0x53c2ed8e. -// -// Solidity: function adjudicator() view returns(address) -func (_AssetHolder *AssetHolderCaller) Adjudicator(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _AssetHolder.contract.Call(opts, &out, "adjudicator") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// Adjudicator is a free data retrieval call binding the contract method 0x53c2ed8e. -// -// Solidity: function adjudicator() view returns(address) -func (_AssetHolder *AssetHolderSession) Adjudicator() (common.Address, error) { - return _AssetHolder.Contract.Adjudicator(&_AssetHolder.CallOpts) -} - -// Adjudicator is a free data retrieval call binding the contract method 0x53c2ed8e. -// -// Solidity: function adjudicator() view returns(address) -func (_AssetHolder *AssetHolderCallerSession) Adjudicator() (common.Address, error) { - return _AssetHolder.Contract.Adjudicator(&_AssetHolder.CallOpts) -} - -// Holdings is a free data retrieval call binding the contract method 0xae9ee18c. -// -// Solidity: function holdings(bytes32 ) view returns(uint256) -func (_AssetHolder *AssetHolderCaller) Holdings(opts *bind.CallOpts, arg0 [32]byte) (*big.Int, error) { - var out []interface{} - err := _AssetHolder.contract.Call(opts, &out, "holdings", arg0) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// Holdings is a free data retrieval call binding the contract method 0xae9ee18c. -// -// Solidity: function holdings(bytes32 ) view returns(uint256) -func (_AssetHolder *AssetHolderSession) Holdings(arg0 [32]byte) (*big.Int, error) { - return _AssetHolder.Contract.Holdings(&_AssetHolder.CallOpts, arg0) -} - -// Holdings is a free data retrieval call binding the contract method 0xae9ee18c. -// -// Solidity: function holdings(bytes32 ) view returns(uint256) -func (_AssetHolder *AssetHolderCallerSession) Holdings(arg0 [32]byte) (*big.Int, error) { - return _AssetHolder.Contract.Holdings(&_AssetHolder.CallOpts, arg0) -} - -// Settled is a free data retrieval call binding the contract method 0xd945af1d. -// -// Solidity: function settled(bytes32 ) view returns(bool) -func (_AssetHolder *AssetHolderCaller) Settled(opts *bind.CallOpts, arg0 [32]byte) (bool, error) { - var out []interface{} - err := _AssetHolder.contract.Call(opts, &out, "settled", arg0) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// Settled is a free data retrieval call binding the contract method 0xd945af1d. -// -// Solidity: function settled(bytes32 ) view returns(bool) -func (_AssetHolder *AssetHolderSession) Settled(arg0 [32]byte) (bool, error) { - return _AssetHolder.Contract.Settled(&_AssetHolder.CallOpts, arg0) -} - -// Settled is a free data retrieval call binding the contract method 0xd945af1d. -// -// Solidity: function settled(bytes32 ) view returns(bool) -func (_AssetHolder *AssetHolderCallerSession) Settled(arg0 [32]byte) (bool, error) { - return _AssetHolder.Contract.Settled(&_AssetHolder.CallOpts, arg0) -} - -// Deposit is a paid mutator transaction binding the contract method 0x1de26e16. -// -// Solidity: function deposit(bytes32 fundingID, uint256 amount) payable returns() -func (_AssetHolder *AssetHolderTransactor) Deposit(opts *bind.TransactOpts, fundingID [32]byte, amount *big.Int) (*types.Transaction, error) { - return _AssetHolder.contract.Transact(opts, "deposit", fundingID, amount) -} - -// Deposit is a paid mutator transaction binding the contract method 0x1de26e16. -// -// Solidity: function deposit(bytes32 fundingID, uint256 amount) payable returns() -func (_AssetHolder *AssetHolderSession) Deposit(fundingID [32]byte, amount *big.Int) (*types.Transaction, error) { - return _AssetHolder.Contract.Deposit(&_AssetHolder.TransactOpts, fundingID, amount) -} - -// Deposit is a paid mutator transaction binding the contract method 0x1de26e16. -// -// Solidity: function deposit(bytes32 fundingID, uint256 amount) payable returns() -func (_AssetHolder *AssetHolderTransactorSession) Deposit(fundingID [32]byte, amount *big.Int) (*types.Transaction, error) { - return _AssetHolder.Contract.Deposit(&_AssetHolder.TransactOpts, fundingID, amount) -} - -// SetOutcome is a paid mutator transaction binding the contract method 0xfc79a66d. -// -// 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) { - return _AssetHolder.contract.Transact(opts, "setOutcome", channelID, parts, newBals) -} - -// SetOutcome is a paid mutator transaction binding the contract method 0xfc79a66d. -// -// 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) { - return _AssetHolder.Contract.SetOutcome(&_AssetHolder.TransactOpts, channelID, parts, newBals) -} - -// SetOutcome is a paid mutator transaction binding the contract method 0xfc79a66d. -// -// 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) { - return _AssetHolder.Contract.SetOutcome(&_AssetHolder.TransactOpts, channelID, parts, newBals) -} - -// Withdraw is a paid mutator transaction binding the contract method 0x4ed4283c. -// -// Solidity: function withdraw((bytes32,address,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. -// -// Solidity: function withdraw((bytes32,address,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. -// -// Solidity: function withdraw((bytes32,address,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) -} - -// AssetHolderDepositedIterator is returned from FilterDeposited and is used to iterate over the raw logs and unpacked data for Deposited events raised by the AssetHolder contract. -type AssetHolderDepositedIterator struct { - Event *AssetHolderDeposited // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *AssetHolderDepositedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(AssetHolderDeposited) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(AssetHolderDeposited) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *AssetHolderDepositedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *AssetHolderDepositedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// AssetHolderDeposited represents a Deposited event raised by the AssetHolder contract. -type AssetHolderDeposited struct { - FundingID [32]byte - Amount *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterDeposited is a free log retrieval operation binding the contract event 0xcd2fe07293de5928c5df9505b65a8d6506f8668dfe81af09090920687edc48a9. -// -// Solidity: event Deposited(bytes32 indexed fundingID, uint256 amount) -func (_AssetHolder *AssetHolderFilterer) FilterDeposited(opts *bind.FilterOpts, fundingID [][32]byte) (*AssetHolderDepositedIterator, error) { - - var fundingIDRule []interface{} - for _, fundingIDItem := range fundingID { - fundingIDRule = append(fundingIDRule, fundingIDItem) - } - - logs, sub, err := _AssetHolder.contract.FilterLogs(opts, "Deposited", fundingIDRule) - if err != nil { - return nil, err - } - return &AssetHolderDepositedIterator{contract: _AssetHolder.contract, event: "Deposited", logs: logs, sub: sub}, nil -} - -// WatchDeposited is a free log subscription operation binding the contract event 0xcd2fe07293de5928c5df9505b65a8d6506f8668dfe81af09090920687edc48a9. -// -// Solidity: event Deposited(bytes32 indexed fundingID, uint256 amount) -func (_AssetHolder *AssetHolderFilterer) WatchDeposited(opts *bind.WatchOpts, sink chan<- *AssetHolderDeposited, fundingID [][32]byte) (event.Subscription, error) { - - var fundingIDRule []interface{} - for _, fundingIDItem := range fundingID { - fundingIDRule = append(fundingIDRule, fundingIDItem) - } - - logs, sub, err := _AssetHolder.contract.WatchLogs(opts, "Deposited", fundingIDRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(AssetHolderDeposited) - if err := _AssetHolder.contract.UnpackLog(event, "Deposited", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseDeposited is a log parse operation binding the contract event 0xcd2fe07293de5928c5df9505b65a8d6506f8668dfe81af09090920687edc48a9. -// -// Solidity: event Deposited(bytes32 indexed fundingID, uint256 amount) -func (_AssetHolder *AssetHolderFilterer) ParseDeposited(log types.Log) (*AssetHolderDeposited, error) { - event := new(AssetHolderDeposited) - if err := _AssetHolder.contract.UnpackLog(event, "Deposited", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// AssetHolderOutcomeSetIterator is returned from FilterOutcomeSet and is used to iterate over the raw logs and unpacked data for OutcomeSet events raised by the AssetHolder contract. -type AssetHolderOutcomeSetIterator struct { - Event *AssetHolderOutcomeSet // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *AssetHolderOutcomeSetIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(AssetHolderOutcomeSet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(AssetHolderOutcomeSet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *AssetHolderOutcomeSetIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *AssetHolderOutcomeSetIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// AssetHolderOutcomeSet represents a OutcomeSet event raised by the AssetHolder contract. -type AssetHolderOutcomeSet struct { - ChannelID [32]byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterOutcomeSet is a free log retrieval operation binding the contract event 0xef898d6cd3395b6dfe67a3c1923e5c726c1b154e979fb0a25a9c41d0093168b8. -// -// Solidity: event OutcomeSet(bytes32 indexed channelID) -func (_AssetHolder *AssetHolderFilterer) FilterOutcomeSet(opts *bind.FilterOpts, channelID [][32]byte) (*AssetHolderOutcomeSetIterator, error) { - - var channelIDRule []interface{} - for _, channelIDItem := range channelID { - channelIDRule = append(channelIDRule, channelIDItem) - } - - logs, sub, err := _AssetHolder.contract.FilterLogs(opts, "OutcomeSet", channelIDRule) - if err != nil { - return nil, err - } - return &AssetHolderOutcomeSetIterator{contract: _AssetHolder.contract, event: "OutcomeSet", logs: logs, sub: sub}, nil -} - -// WatchOutcomeSet is a free log subscription operation binding the contract event 0xef898d6cd3395b6dfe67a3c1923e5c726c1b154e979fb0a25a9c41d0093168b8. -// -// Solidity: event OutcomeSet(bytes32 indexed channelID) -func (_AssetHolder *AssetHolderFilterer) WatchOutcomeSet(opts *bind.WatchOpts, sink chan<- *AssetHolderOutcomeSet, channelID [][32]byte) (event.Subscription, error) { - - var channelIDRule []interface{} - for _, channelIDItem := range channelID { - channelIDRule = append(channelIDRule, channelIDItem) - } - - logs, sub, err := _AssetHolder.contract.WatchLogs(opts, "OutcomeSet", channelIDRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(AssetHolderOutcomeSet) - if err := _AssetHolder.contract.UnpackLog(event, "OutcomeSet", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseOutcomeSet is a log parse operation binding the contract event 0xef898d6cd3395b6dfe67a3c1923e5c726c1b154e979fb0a25a9c41d0093168b8. -// -// Solidity: event OutcomeSet(bytes32 indexed channelID) -func (_AssetHolder *AssetHolderFilterer) ParseOutcomeSet(log types.Log) (*AssetHolderOutcomeSet, error) { - event := new(AssetHolderOutcomeSet) - if err := _AssetHolder.contract.UnpackLog(event, "OutcomeSet", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// AssetHolderWithdrawnIterator is returned from FilterWithdrawn and is used to iterate over the raw logs and unpacked data for Withdrawn events raised by the AssetHolder contract. -type AssetHolderWithdrawnIterator struct { - Event *AssetHolderWithdrawn // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *AssetHolderWithdrawnIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(AssetHolderWithdrawn) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(AssetHolderWithdrawn) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *AssetHolderWithdrawnIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *AssetHolderWithdrawnIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// AssetHolderWithdrawn represents a Withdrawn event raised by the AssetHolder contract. -type AssetHolderWithdrawn struct { - FundingID [32]byte - Amount *big.Int - Receiver common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterWithdrawn is a free log retrieval operation binding the contract event 0xd0b6e7d0170f56c62f87de6a8a47a0ccf41c86ffb5084d399d8eb62e823f2a81. -// -// Solidity: event Withdrawn(bytes32 indexed fundingID, uint256 amount, address receiver) -func (_AssetHolder *AssetHolderFilterer) FilterWithdrawn(opts *bind.FilterOpts, fundingID [][32]byte) (*AssetHolderWithdrawnIterator, error) { - - var fundingIDRule []interface{} - for _, fundingIDItem := range fundingID { - fundingIDRule = append(fundingIDRule, fundingIDItem) - } - - logs, sub, err := _AssetHolder.contract.FilterLogs(opts, "Withdrawn", fundingIDRule) - if err != nil { - return nil, err - } - return &AssetHolderWithdrawnIterator{contract: _AssetHolder.contract, event: "Withdrawn", logs: logs, sub: sub}, nil -} - -// WatchWithdrawn is a free log subscription operation binding the contract event 0xd0b6e7d0170f56c62f87de6a8a47a0ccf41c86ffb5084d399d8eb62e823f2a81. -// -// Solidity: event Withdrawn(bytes32 indexed fundingID, uint256 amount, address receiver) -func (_AssetHolder *AssetHolderFilterer) WatchWithdrawn(opts *bind.WatchOpts, sink chan<- *AssetHolderWithdrawn, fundingID [][32]byte) (event.Subscription, error) { - - var fundingIDRule []interface{} - for _, fundingIDItem := range fundingID { - fundingIDRule = append(fundingIDRule, fundingIDItem) - } - - logs, sub, err := _AssetHolder.contract.WatchLogs(opts, "Withdrawn", fundingIDRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(AssetHolderWithdrawn) - if err := _AssetHolder.contract.UnpackLog(event, "Withdrawn", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseWithdrawn is a log parse operation binding the contract event 0xd0b6e7d0170f56c62f87de6a8a47a0ccf41c86ffb5084d399d8eb62e823f2a81. -// -// Solidity: event Withdrawn(bytes32 indexed fundingID, uint256 amount, address receiver) -func (_AssetHolder *AssetHolderFilterer) ParseWithdrawn(log types.Log) (*AssetHolderWithdrawn, error) { - event := new(AssetHolderWithdrawn) - if err := _AssetHolder.contract.UnpackLog(event, "Withdrawn", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ChannelABI is the input ABI used to generate the binding from. -const ChannelABI = "[]" - -// ChannelBin is the compiled bytecode used for deploying new contracts. -var ChannelBin = "0x60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220766359a0ab2443f972680b1e01a450180ad90733b2b33c463cbf2c02159dd16c64736f6c63430007040033" - -// DeployChannel deploys a new Ethereum contract, binding an instance of Channel to it. -func DeployChannel(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *Channel, error) { - parsed, err := abi.JSON(strings.NewReader(ChannelABI)) - if err != nil { - return common.Address{}, nil, nil, err - } - - address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(ChannelBin), backend) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &Channel{ChannelCaller: ChannelCaller{contract: contract}, ChannelTransactor: ChannelTransactor{contract: contract}, ChannelFilterer: ChannelFilterer{contract: contract}}, nil -} - -// Channel is an auto generated Go binding around an Ethereum contract. -type Channel struct { - ChannelCaller // Read-only binding to the contract - ChannelTransactor // Write-only binding to the contract - ChannelFilterer // Log filterer for contract events -} - -// ChannelCaller is an auto generated read-only Go binding around an Ethereum contract. -type ChannelCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ChannelTransactor is an auto generated write-only Go binding around an Ethereum contract. -type ChannelTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ChannelFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type ChannelFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ChannelSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type ChannelSession struct { - Contract *Channel // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// ChannelCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type ChannelCallerSession struct { - Contract *ChannelCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// ChannelTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type ChannelTransactorSession struct { - Contract *ChannelTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// ChannelRaw is an auto generated low-level Go binding around an Ethereum contract. -type ChannelRaw struct { - Contract *Channel // Generic contract binding to access the raw methods on -} - -// ChannelCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type ChannelCallerRaw struct { - Contract *ChannelCaller // Generic read-only contract binding to access the raw methods on -} - -// ChannelTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type ChannelTransactorRaw struct { - Contract *ChannelTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewChannel creates a new instance of Channel, bound to a specific deployed contract. -func NewChannel(address common.Address, backend bind.ContractBackend) (*Channel, error) { - contract, err := bindChannel(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &Channel{ChannelCaller: ChannelCaller{contract: contract}, ChannelTransactor: ChannelTransactor{contract: contract}, ChannelFilterer: ChannelFilterer{contract: contract}}, nil -} - -// NewChannelCaller creates a new read-only instance of Channel, bound to a specific deployed contract. -func NewChannelCaller(address common.Address, caller bind.ContractCaller) (*ChannelCaller, error) { - contract, err := bindChannel(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &ChannelCaller{contract: contract}, nil -} - -// NewChannelTransactor creates a new write-only instance of Channel, bound to a specific deployed contract. -func NewChannelTransactor(address common.Address, transactor bind.ContractTransactor) (*ChannelTransactor, error) { - contract, err := bindChannel(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &ChannelTransactor{contract: contract}, nil -} - -// NewChannelFilterer creates a new log filterer instance of Channel, bound to a specific deployed contract. -func NewChannelFilterer(address common.Address, filterer bind.ContractFilterer) (*ChannelFilterer, error) { - contract, err := bindChannel(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &ChannelFilterer{contract: contract}, nil -} - -// bindChannel binds a generic wrapper to an already deployed contract. -func bindChannel(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(ChannelABI)) - if err != nil { - return nil, err - } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_Channel *ChannelRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _Channel.Contract.ChannelCaller.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_Channel *ChannelRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _Channel.Contract.ChannelTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_Channel *ChannelRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _Channel.Contract.ChannelTransactor.contract.Transact(opts, method, params...) -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_Channel *ChannelCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _Channel.Contract.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_Channel *ChannelTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _Channel.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_Channel *ChannelTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _Channel.Contract.contract.Transact(opts, method, params...) -} - -// ECDSAABI is the input ABI used to generate the binding from. -const ECDSAABI = "[]" - -// ECDSABin is the compiled bytecode used for deploying new contracts. -var ECDSABin = "0x60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220783a9abca4677c2f6d9982cbe6da39ab0e2de660423d2cca565ee52470051fe464736f6c63430007040033" - -// DeployECDSA deploys a new Ethereum contract, binding an instance of ECDSA to it. -func DeployECDSA(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *ECDSA, error) { - parsed, err := abi.JSON(strings.NewReader(ECDSAABI)) - if err != nil { - return common.Address{}, nil, nil, err - } - - address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(ECDSABin), backend) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &ECDSA{ECDSACaller: ECDSACaller{contract: contract}, ECDSATransactor: ECDSATransactor{contract: contract}, ECDSAFilterer: ECDSAFilterer{contract: contract}}, nil -} - -// ECDSA is an auto generated Go binding around an Ethereum contract. -type ECDSA struct { - ECDSACaller // Read-only binding to the contract - ECDSATransactor // Write-only binding to the contract - ECDSAFilterer // Log filterer for contract events -} - -// ECDSACaller is an auto generated read-only Go binding around an Ethereum contract. -type ECDSACaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ECDSATransactor is an auto generated write-only Go binding around an Ethereum contract. -type ECDSATransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ECDSAFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type ECDSAFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ECDSASession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type ECDSASession struct { - Contract *ECDSA // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// ECDSACallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type ECDSACallerSession struct { - Contract *ECDSACaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// ECDSATransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type ECDSATransactorSession struct { - Contract *ECDSATransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// ECDSARaw is an auto generated low-level Go binding around an Ethereum contract. -type ECDSARaw struct { - Contract *ECDSA // Generic contract binding to access the raw methods on -} - -// ECDSACallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type ECDSACallerRaw struct { - Contract *ECDSACaller // Generic read-only contract binding to access the raw methods on -} - -// ECDSATransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type ECDSATransactorRaw struct { - Contract *ECDSATransactor // Generic write-only contract binding to access the raw methods on -} - -// NewECDSA creates a new instance of ECDSA, bound to a specific deployed contract. -func NewECDSA(address common.Address, backend bind.ContractBackend) (*ECDSA, error) { - contract, err := bindECDSA(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &ECDSA{ECDSACaller: ECDSACaller{contract: contract}, ECDSATransactor: ECDSATransactor{contract: contract}, ECDSAFilterer: ECDSAFilterer{contract: contract}}, nil -} - -// NewECDSACaller creates a new read-only instance of ECDSA, bound to a specific deployed contract. -func NewECDSACaller(address common.Address, caller bind.ContractCaller) (*ECDSACaller, error) { - contract, err := bindECDSA(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &ECDSACaller{contract: contract}, nil -} - -// NewECDSATransactor creates a new write-only instance of ECDSA, bound to a specific deployed contract. -func NewECDSATransactor(address common.Address, transactor bind.ContractTransactor) (*ECDSATransactor, error) { - contract, err := bindECDSA(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &ECDSATransactor{contract: contract}, nil -} - -// NewECDSAFilterer creates a new log filterer instance of ECDSA, bound to a specific deployed contract. -func NewECDSAFilterer(address common.Address, filterer bind.ContractFilterer) (*ECDSAFilterer, error) { - contract, err := bindECDSA(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &ECDSAFilterer{contract: contract}, nil -} - -// bindECDSA binds a generic wrapper to an already deployed contract. -func bindECDSA(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(ECDSAABI)) - if err != nil { - return nil, err - } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_ECDSA *ECDSARaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _ECDSA.Contract.ECDSACaller.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_ECDSA *ECDSARaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _ECDSA.Contract.ECDSATransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_ECDSA *ECDSARaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _ECDSA.Contract.ECDSATransactor.contract.Transact(opts, method, params...) -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_ECDSA *ECDSACallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _ECDSA.Contract.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_ECDSA *ECDSATransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _ECDSA.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_ECDSA *ECDSATransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _ECDSA.Contract.contract.Transact(opts, method, params...) -} - -// SafeMathABI is the input ABI used to generate the binding from. -const SafeMathABI = "[]" - -// SafeMathBin is the compiled bytecode used for deploying new contracts. -var SafeMathBin = "0x60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212206c001d4b2db62b0acd57a4db217fef685da3b884b9d1c5c5e1a9bc7ecb574d9664736f6c63430007040033" - -// DeploySafeMath deploys a new Ethereum contract, binding an instance of SafeMath to it. -func DeploySafeMath(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *SafeMath, error) { - parsed, err := abi.JSON(strings.NewReader(SafeMathABI)) - if err != nil { - return common.Address{}, nil, nil, err - } - - address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(SafeMathBin), backend) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &SafeMath{SafeMathCaller: SafeMathCaller{contract: contract}, SafeMathTransactor: SafeMathTransactor{contract: contract}, SafeMathFilterer: SafeMathFilterer{contract: contract}}, nil -} - -// SafeMath is an auto generated Go binding around an Ethereum contract. -type SafeMath struct { - SafeMathCaller // Read-only binding to the contract - SafeMathTransactor // Write-only binding to the contract - SafeMathFilterer // Log filterer for contract events -} - -// SafeMathCaller is an auto generated read-only Go binding around an Ethereum contract. -type SafeMathCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// SafeMathTransactor is an auto generated write-only Go binding around an Ethereum contract. -type SafeMathTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// SafeMathFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type SafeMathFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// SafeMathSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type SafeMathSession struct { - Contract *SafeMath // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// SafeMathCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type SafeMathCallerSession struct { - Contract *SafeMathCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// SafeMathTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type SafeMathTransactorSession struct { - Contract *SafeMathTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// SafeMathRaw is an auto generated low-level Go binding around an Ethereum contract. -type SafeMathRaw struct { - Contract *SafeMath // Generic contract binding to access the raw methods on -} - -// SafeMathCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type SafeMathCallerRaw struct { - Contract *SafeMathCaller // Generic read-only contract binding to access the raw methods on -} - -// SafeMathTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type SafeMathTransactorRaw struct { - Contract *SafeMathTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewSafeMath creates a new instance of SafeMath, bound to a specific deployed contract. -func NewSafeMath(address common.Address, backend bind.ContractBackend) (*SafeMath, error) { - contract, err := bindSafeMath(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &SafeMath{SafeMathCaller: SafeMathCaller{contract: contract}, SafeMathTransactor: SafeMathTransactor{contract: contract}, SafeMathFilterer: SafeMathFilterer{contract: contract}}, nil -} - -// NewSafeMathCaller creates a new read-only instance of SafeMath, bound to a specific deployed contract. -func NewSafeMathCaller(address common.Address, caller bind.ContractCaller) (*SafeMathCaller, error) { - contract, err := bindSafeMath(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &SafeMathCaller{contract: contract}, nil -} - -// NewSafeMathTransactor creates a new write-only instance of SafeMath, bound to a specific deployed contract. -func NewSafeMathTransactor(address common.Address, transactor bind.ContractTransactor) (*SafeMathTransactor, error) { - contract, err := bindSafeMath(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &SafeMathTransactor{contract: contract}, nil -} - -// NewSafeMathFilterer creates a new log filterer instance of SafeMath, bound to a specific deployed contract. -func NewSafeMathFilterer(address common.Address, filterer bind.ContractFilterer) (*SafeMathFilterer, error) { - contract, err := bindSafeMath(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &SafeMathFilterer{contract: contract}, nil -} - -// bindSafeMath binds a generic wrapper to an already deployed contract. -func bindSafeMath(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(SafeMathABI)) - if err != nil { - return nil, err - } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_SafeMath *SafeMathRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _SafeMath.Contract.SafeMathCaller.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_SafeMath *SafeMathRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _SafeMath.Contract.SafeMathTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_SafeMath *SafeMathRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _SafeMath.Contract.SafeMathTransactor.contract.Transact(opts, method, params...) -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_SafeMath *SafeMathCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _SafeMath.Contract.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_SafeMath *SafeMathTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _SafeMath.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_SafeMath *SafeMathTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _SafeMath.Contract.contract.Transact(opts, method, params...) -} - -// SafeMath64ABI is the input ABI used to generate the binding from. -const SafeMath64ABI = "[]" - -// SafeMath64Bin is the compiled bytecode used for deploying new contracts. -var SafeMath64Bin = "0x60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220655e8ef18889473bb4785a3a6a69b2420dcddedfc73198e9cc1f816b9afe0a5a64736f6c63430007040033" - -// DeploySafeMath64 deploys a new Ethereum contract, binding an instance of SafeMath64 to it. -func DeploySafeMath64(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *SafeMath64, error) { - parsed, err := abi.JSON(strings.NewReader(SafeMath64ABI)) - if err != nil { - return common.Address{}, nil, nil, err - } - - address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(SafeMath64Bin), backend) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &SafeMath64{SafeMath64Caller: SafeMath64Caller{contract: contract}, SafeMath64Transactor: SafeMath64Transactor{contract: contract}, SafeMath64Filterer: SafeMath64Filterer{contract: contract}}, nil -} - -// SafeMath64 is an auto generated Go binding around an Ethereum contract. -type SafeMath64 struct { - SafeMath64Caller // Read-only binding to the contract - SafeMath64Transactor // Write-only binding to the contract - SafeMath64Filterer // Log filterer for contract events -} - -// SafeMath64Caller is an auto generated read-only Go binding around an Ethereum contract. -type SafeMath64Caller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// SafeMath64Transactor is an auto generated write-only Go binding around an Ethereum contract. -type SafeMath64Transactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// SafeMath64Filterer is an auto generated log filtering Go binding around an Ethereum contract events. -type SafeMath64Filterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// SafeMath64Session is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type SafeMath64Session struct { - Contract *SafeMath64 // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// SafeMath64CallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type SafeMath64CallerSession struct { - Contract *SafeMath64Caller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// SafeMath64TransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type SafeMath64TransactorSession struct { - Contract *SafeMath64Transactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// SafeMath64Raw is an auto generated low-level Go binding around an Ethereum contract. -type SafeMath64Raw struct { - Contract *SafeMath64 // Generic contract binding to access the raw methods on -} - -// SafeMath64CallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type SafeMath64CallerRaw struct { - Contract *SafeMath64Caller // Generic read-only contract binding to access the raw methods on -} - -// SafeMath64TransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type SafeMath64TransactorRaw struct { - Contract *SafeMath64Transactor // Generic write-only contract binding to access the raw methods on -} - -// NewSafeMath64 creates a new instance of SafeMath64, bound to a specific deployed contract. -func NewSafeMath64(address common.Address, backend bind.ContractBackend) (*SafeMath64, error) { - contract, err := bindSafeMath64(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &SafeMath64{SafeMath64Caller: SafeMath64Caller{contract: contract}, SafeMath64Transactor: SafeMath64Transactor{contract: contract}, SafeMath64Filterer: SafeMath64Filterer{contract: contract}}, nil -} - -// NewSafeMath64Caller creates a new read-only instance of SafeMath64, bound to a specific deployed contract. -func NewSafeMath64Caller(address common.Address, caller bind.ContractCaller) (*SafeMath64Caller, error) { - contract, err := bindSafeMath64(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &SafeMath64Caller{contract: contract}, nil -} - -// NewSafeMath64Transactor creates a new write-only instance of SafeMath64, bound to a specific deployed contract. -func NewSafeMath64Transactor(address common.Address, transactor bind.ContractTransactor) (*SafeMath64Transactor, error) { - contract, err := bindSafeMath64(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &SafeMath64Transactor{contract: contract}, nil -} - -// NewSafeMath64Filterer creates a new log filterer instance of SafeMath64, bound to a specific deployed contract. -func NewSafeMath64Filterer(address common.Address, filterer bind.ContractFilterer) (*SafeMath64Filterer, error) { - contract, err := bindSafeMath64(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &SafeMath64Filterer{contract: contract}, nil -} - -// bindSafeMath64 binds a generic wrapper to an already deployed contract. -func bindSafeMath64(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(SafeMath64ABI)) - if err != nil { - return nil, err - } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_SafeMath64 *SafeMath64Raw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _SafeMath64.Contract.SafeMath64Caller.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_SafeMath64 *SafeMath64Raw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _SafeMath64.Contract.SafeMath64Transactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_SafeMath64 *SafeMath64Raw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _SafeMath64.Contract.SafeMath64Transactor.contract.Transact(opts, method, params...) -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_SafeMath64 *SafeMath64CallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _SafeMath64.Contract.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_SafeMath64 *SafeMath64TransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _SafeMath64.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_SafeMath64 *SafeMath64TransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _SafeMath64.Contract.contract.Transact(opts, method, params...) -} - -// SigABI is the input ABI used to generate the binding from. -const SigABI = "[]" - -// SigBin is the compiled bytecode used for deploying new contracts. -var SigBin = "0x60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212201d87d50185a6082d7917bc44d122eefea79692c1e8b208242bfd808320a0b29364736f6c63430007040033" - -// DeploySig deploys a new Ethereum contract, binding an instance of Sig to it. -func DeploySig(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *Sig, error) { - parsed, err := abi.JSON(strings.NewReader(SigABI)) - if err != nil { - return common.Address{}, nil, nil, err - } - - address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(SigBin), backend) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &Sig{SigCaller: SigCaller{contract: contract}, SigTransactor: SigTransactor{contract: contract}, SigFilterer: SigFilterer{contract: contract}}, nil -} - -// Sig is an auto generated Go binding around an Ethereum contract. -type Sig struct { - SigCaller // Read-only binding to the contract - SigTransactor // Write-only binding to the contract - SigFilterer // Log filterer for contract events -} - -// SigCaller is an auto generated read-only Go binding around an Ethereum contract. -type SigCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// SigTransactor is an auto generated write-only Go binding around an Ethereum contract. -type SigTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// SigFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type SigFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// SigSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type SigSession struct { - Contract *Sig // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// SigCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type SigCallerSession struct { - Contract *SigCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// SigTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type SigTransactorSession struct { - Contract *SigTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// SigRaw is an auto generated low-level Go binding around an Ethereum contract. -type SigRaw struct { - Contract *Sig // Generic contract binding to access the raw methods on -} - -// SigCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type SigCallerRaw struct { - Contract *SigCaller // Generic read-only contract binding to access the raw methods on -} - -// SigTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type SigTransactorRaw struct { - Contract *SigTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewSig creates a new instance of Sig, bound to a specific deployed contract. -func NewSig(address common.Address, backend bind.ContractBackend) (*Sig, error) { - contract, err := bindSig(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &Sig{SigCaller: SigCaller{contract: contract}, SigTransactor: SigTransactor{contract: contract}, SigFilterer: SigFilterer{contract: contract}}, nil -} - -// NewSigCaller creates a new read-only instance of Sig, bound to a specific deployed contract. -func NewSigCaller(address common.Address, caller bind.ContractCaller) (*SigCaller, error) { - contract, err := bindSig(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &SigCaller{contract: contract}, nil -} - -// NewSigTransactor creates a new write-only instance of Sig, bound to a specific deployed contract. -func NewSigTransactor(address common.Address, transactor bind.ContractTransactor) (*SigTransactor, error) { - contract, err := bindSig(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &SigTransactor{contract: contract}, nil -} - -// NewSigFilterer creates a new log filterer instance of Sig, bound to a specific deployed contract. -func NewSigFilterer(address common.Address, filterer bind.ContractFilterer) (*SigFilterer, error) { - contract, err := bindSig(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &SigFilterer{contract: contract}, nil -} - -// bindSig binds a generic wrapper to an already deployed contract. -func bindSig(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(SigABI)) - if err != nil { - return nil, err - } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_Sig *SigRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _Sig.Contract.SigCaller.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_Sig *SigRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _Sig.Contract.SigTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_Sig *SigRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _Sig.Contract.SigTransactor.contract.Transact(opts, method, params...) -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_Sig *SigCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _Sig.Contract.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_Sig *SigTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _Sig.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_Sig *SigTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _Sig.Contract.contract.Transact(opts, method, params...) -} diff --git a/collateralized-channels/ganache/ganache.go b/collateralized-channels/ganache/ganache.go index a813445..8f9880a 100644 --- a/collateralized-channels/ganache/ganache.go +++ b/collateralized-channels/ganache/ganache.go @@ -67,11 +67,12 @@ func StartGanacheWithPrefundedAccounts(cfg GanacheConfig) (ganache *Ganache, err // Build ganache command line arguments var ganacheArgs []string ganacheArgs = append(ganacheArgs, "--port", fmt.Sprint(cfg.Port)) + ganacheArgs = append(ganacheArgs, "--wallet.accounts") for _, a := range accounts { key := hexutil.Encode(crypto.FromECDSA(a.PrivateKey)) - ganacheArgs = append(ganacheArgs, "--account", fmt.Sprintf("%v,%v", key, a.Amount)) + ganacheArgs = append(ganacheArgs, fmt.Sprintf("%v,%v", key, a.Amount)) } - ganacheArgs = append(ganacheArgs, fmt.Sprintf("--blockTime=%v", int(cfg.BlockTime.Seconds()))) + ganacheArgs = append(ganacheArgs, fmt.Sprintf("-b %v", int(cfg.BlockTime.Seconds()))) // Start command ganacheCmdTokens := strings.Split(cfg.Cmd, " ") diff --git a/collateralized-channels/main_test.go b/collateralized-channels/main_test.go index 92bf09a..aac03d7 100644 --- a/collateralized-channels/main_test.go +++ b/collateralized-channels/main_test.go @@ -15,7 +15,6 @@ package main import ( - "crypto/ecdsa" "fmt" "log" "math/big" @@ -24,12 +23,12 @@ import ( "time" "github.com/ethereum/go-ethereum/common" + ethwallet "github.com/perun-network/perun-eth-backend/wallet" "github.com/stretchr/testify/require" - "perun.network/go-perun/backend/ethereum/wallet" - "perun.network/perun-collateralized-channels/client" + "perun.network/go-perun/wire" + "perun.network/perun-collateralized-channels/app" "perun.network/perun-collateralized-channels/eth" "perun.network/perun-collateralized-channels/ganache" - "perun.network/perun-collateralized-channels/perun" ) // TestCollateralizedChannels is an end-to-end test of collateral channels. @@ -49,7 +48,7 @@ func TestCollateralizedChannels(t *testing.T) { // Ganache config ganacheCmd := os.Getenv("GANACHE_CMD") if len(ganacheCmd) == 0 { - ganacheCmd = "ganache-cli" + ganacheCmd = "ganache" } ganacheCfg := ganache.GanacheConfig{ Cmd: ganacheCmd, @@ -62,10 +61,10 @@ func TestCollateralizedChannels(t *testing.T) { // More test parameters var ( + chainID = 1337 // default chainID of Ganache defaultContextTimeout = 30 * time.Second collateralWithdrawalDelay = 10 * ganacheCfg.BlockTime - hostClient1 = "127.0.0.1:8546" - hostClient2 = "127.0.0.1:8547" + defaultChallengeDuration = collateralWithdrawalDelay / 2 collateralClient1 = eth.EthToWei(big.NewFloat(50)) payment1Client1ToClient2 = eth.EthToWei(big.NewFloat(5)) channelFundingClient1 = eth.EthToWei(big.NewFloat(25)) @@ -84,53 +83,32 @@ func TestCollateralizedChannels(t *testing.T) { deploymentKey := ganache.Accounts[0].PrivateKey contracts, err := deployContracts(nodeURL, deploymentKey, defaultContextTimeout, collateralWithdrawalDelay) require.NoError(err, "deploying contracts") - - // Helper function for client setup - genClientDef := func(privateKey *ecdsa.PrivateKey, host string, peerAddress common.Address, peerHost string) client.ClientConfig { - return client.ClientConfig{ - ClientConfig: perun.ClientConfig{ - PrivateKey: privateKey, - Host: host, - ETHNodeURL: nodeURL, - AdjudicatorAddr: contracts.AdjudicatorAddr, - AssetHolderAddr: contracts.AssetHolderAddr, - DialerTimeout: 1 * time.Second, - PeerAddresses: []perun.PeerWithAddress{ - { - Peer: wallet.AsWalletAddr(peerAddress), - Address: peerHost, - }, - }, - }, - ChallengeDuration: collateralWithdrawalDelay / 2, - AppAddress: contracts.AppAddr, - ContextTimeout: defaultContextTimeout, - } - } + app := app.NewCollateralApp(ethwallet.AsWalletAddr(contracts.AppAddr)) log.Print("Setting up clients...") + bus := wire.NewLocalBus() // Message bus used for off-chain communication. + // Setup Client1 - clientDef1 := genClientDef( - ganache.Accounts[1].PrivateKey, hostClient1, - ganache.Accounts[2].Address(), hostClient2, - ) paymentAcceptancePolicy1 := func( amount, collateral, funding, balance *big.Int, hasOverdrawn bool, ) (ok bool) { return true } - c1, err := client.SetupClient( - clientDef1, + c1, err := setupClient( + bus, + nodeURL, + uint64(chainID), // Convert chainID to uint64 + contracts.AssetHolderAddr, + ganache.Accounts[1].PrivateKey, + app, paymentAcceptancePolicy1, + defaultChallengeDuration, + defaultContextTimeout, ) require.NoError(err, "Client1 setup") // Setup Client2 - clientDef2 := genClientDef(ganache. - Accounts[2].PrivateKey, hostClient2, - ganache.Accounts[1].Address(), hostClient1, - ) paymentAcceptancePolicy2 := func( amount, collateral, funding, balance *big.Int, hasOverdrawn bool, @@ -145,15 +123,22 @@ func TestCollateralizedChannels(t *testing.T) { // We accept all other payments. return true } - c2, err := client.SetupClient( - clientDef2, + c2, err := setupClient( + bus, + nodeURL, + uint64(chainID), // Convert chainID to uint64 + contracts.AssetHolderAddr, + ganache.Accounts[2].PrivateKey, + app, paymentAcceptancePolicy2, + defaultChallengeDuration, + defaultContextTimeout, ) require.NoError(err, "Client2 setup") e := &Environment{map[common.Address]string{ - c1.Address(): "Client1", - c2.Address(): "Client2", + c1.WalletAddress(): "Client1", + c2.WalletAddress(): "Client2", }} e.logAccountBalance(c1, c2) log.Print("Setup done.") @@ -166,26 +151,26 @@ func TestCollateralizedChannels(t *testing.T) { // Send payment from Client1 to Client2 log.Printf("Client1: Sending %v to Client2...", toEth(payment1Client1ToClient2)) - err = c1.SendPayment(c2.Address(), payment1Client1ToClient2) // open unfunded channel, handle channel proposal, transfer amount, handle update + err = c1.SendPayment(c2.WalletAddress(), payment1Client1ToClient2) // open unfunded channel, handle channel proposal, transfer amount, handle update require.NoError(err, "Client1 sending payment to Client2") e.logChannelBalances(c1, c2) // Client1 deposits channel funding log.Printf("Client1: Depositing %v as channel funding...", toEth(channelFundingClient1)) - err = c1.IncreaseChannelCollateral(c2.Address(), channelFundingClient1) + err = c1.IncreaseChannelCollateral(c2.WalletAddress(), channelFundingClient1) require.NoError(err, "Client1 increasing channel funding") e.logAccountBalance(c1) e.logChannelBalances(c1) // Client1 sends another payment to Client2 log.Printf("Client1: Sending %v to Client2...", toEth(payment2Client1ToClient2)) - err = c1.SendPayment(c2.Address(), payment2Client1ToClient2) // send another payment + err = c1.SendPayment(c2.WalletAddress(), payment2Client1ToClient2) // send another payment require.NoError(err, "Client1 sending another payment to Client2") e.logChannelBalances(c1, c2) // Client2 settles the channel and withdraws the received payments log.Print("Client2: Settling channel...") - err = c2.Settle(c1.Address()) // c2 settles channel with c1 + err = c2.Settle(c1.WalletAddress()) // c2 settles channel with c1 require.NoError(err, "Client2 settling the channel") e.logAccountBalance(c2) diff --git a/collateralized-channels/test_util.go b/collateralized-channels/test_util.go index 4fe3909..db84e27 100644 --- a/collateralized-channels/test_util.go +++ b/collateralized-channels/test_util.go @@ -23,9 +23,15 @@ import ( "time" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/crypto" "github.com/pkg/errors" + "perun.network/go-perun/wire" + "perun.network/perun-collateralized-channels/app" "perun.network/perun-collateralized-channels/client" "perun.network/perun-collateralized-channels/eth" + + ethwallet "github.com/perun-network/perun-eth-backend/wallet" + swallet "github.com/perun-network/perun-eth-backend/wallet/simple" ) type Environment struct { @@ -40,7 +46,7 @@ func (e *Environment) ClientName(clientAddr common.Address) string { return name } -func (e *Environment) logAccountBalance(clients ...*client.Client) { +func (e *Environment) logAccountBalance(clients ...*client.AppClient) { for _, c := range clients { globalBalance, err := c.OnChainBalance() if err != nil { @@ -50,11 +56,11 @@ func (e *Environment) logAccountBalance(clients ...*client.Client) { if err != nil { log.Fatal(err) } - log.Printf("%v: Account Balance: Global=%v, Locked as Collateral=%v", e.ClientName(c.Address()), toEth(globalBalance), toEth(collateralBalance)) + log.Printf("%v: Account Balance: Global=%v, Locked as Collateral=%v", e.ClientName(c.WalletAddress()), toEth(globalBalance), toEth(collateralBalance)) } } -func (l *Environment) logChannelBalances(clients ...*client.Client) { +func (l *Environment) logChannelBalances(clients ...*client.AppClient) { for _, c := range clients { channelBalances, err := c.ChannelBalances() if err != nil { @@ -62,7 +68,7 @@ func (l *Environment) logChannelBalances(clients ...*client.Client) { } var b strings.Builder - fmt.Fprintf(&b, "%v: ", l.ClientName(c.Address())) + fmt.Fprintf(&b, "%v: ", l.ClientName(c.WalletAddress())) for peer, bal := range channelBalances { balCollateral, err := c.ChannelFunding(peer) if err != nil { @@ -123,3 +129,35 @@ func deployContracts(nodeURL string, deploymentKey *ecdsa.PrivateKey, contextTim type ContractAddresses struct { AdjudicatorAddr, AssetHolderAddr, AppAddr common.Address } + +func setupClient( + bus wire.Bus, + nodeURL string, + chainID uint64, + assetHolderAddr common.Address, + privateKey *ecdsa.PrivateKey, + app *app.CollateralApp, + updatePolicy client.PaymentAcceptancePolicy, + challengeDuration time.Duration, + contextTimeout time.Duration, + +) (*client.AppClient, error) { + w := swallet.NewWallet(privateKey) + acc := crypto.PubkeyToAddress(privateKey.PublicKey) + eaddr := ethwallet.AsWalletAddr(acc) + + // Create and start client. + return client.SetupAppClient( + bus, + w, + acc, + assetHolderAddr, + eaddr, + nodeURL, + chainID, + app, + updatePolicy, + challengeDuration, + contextTimeout, + ) +} From f984ee775900758c59376f62246ff091cb37b8eb Mon Sep 17 00:00:00 2001 From: Minh Huy Tran Date: Thu, 18 Jan 2024 22:39:58 +0700 Subject: [PATCH 10/16] revert(collateralized): revert contracts to original, wait for future update Signed-off-by: Minh Huy Tran --- .../generated/adjudicator/adjudicator.go | 2350 +++++++++++++++++ .../contracts/perun-eth-contracts | 2 +- 2 files changed, 2351 insertions(+), 1 deletion(-) create mode 100644 collateralized-channels/contracts/generated/adjudicator/adjudicator.go diff --git a/collateralized-channels/contracts/generated/adjudicator/adjudicator.go b/collateralized-channels/contracts/generated/adjudicator/adjudicator.go new file mode 100644 index 0000000..bde2930 --- /dev/null +++ b/collateralized-channels/contracts/generated/adjudicator/adjudicator.go @@ -0,0 +1,2350 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package adjudicator + +import ( + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "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/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription +) + +// AssetHolderWithdrawalAuth is an auto generated low-level Go binding around an user-defined struct. +type AssetHolderWithdrawalAuth struct { + ChannelID [32]byte + Participant common.Address + Receiver common.Address + Amount *big.Int +} + +// ChannelAllocation is an auto generated low-level Go binding around an user-defined struct. +type ChannelAllocation struct { + Assets []common.Address + Balances [][]*big.Int + Locked []ChannelSubAlloc +} + +// ChannelParams is an auto generated low-level Go binding around an user-defined struct. +type ChannelParams struct { + ChallengeDuration *big.Int + Nonce *big.Int + App common.Address + Participants []common.Address +} + +// ChannelState is an auto generated low-level Go binding around an user-defined struct. +type ChannelState struct { + ChannelID [32]byte + Version uint64 + Outcome ChannelAllocation + AppData []byte + IsFinal bool +} + +// ChannelSubAlloc is an auto generated low-level Go binding around an user-defined struct. +type ChannelSubAlloc struct { + ID [32]byte + Balances []*big.Int +} + +// AdjudicatorABI is the input ABI used to generate the binding from. +const AdjudicatorABI = "[{\"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\":\"app\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"participants\",\"type\":\"address[]\"}],\"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\":\"app\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"participants\",\"type\":\"address[]\"}],\"internalType\":\"structChannel.Params\",\"name\":\"params\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"channelID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"balances\",\"type\":\"uint256[][]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"ID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"}],\"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\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"balances\",\"type\":\"uint256[][]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"ID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"}],\"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\":\"app\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"participants\",\"type\":\"address[]\"}],\"internalType\":\"structChannel.Params\",\"name\":\"params\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"channelID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"balances\",\"type\":\"uint256[][]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"ID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"}],\"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\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"balances\",\"type\":\"uint256[][]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"ID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"}],\"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\":\"app\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"participants\",\"type\":\"address[]\"}],\"internalType\":\"structChannel.Params\",\"name\":\"params\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"channelID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"balances\",\"type\":\"uint256[][]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"ID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"}],\"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\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"balances\",\"type\":\"uint256[][]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"ID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"}],\"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\":[{\"internalType\":\"uint256\",\"name\":\"challengeDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"app\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"participants\",\"type\":\"address[]\"}],\"internalType\":\"structChannel.Params\",\"name\":\"params\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"channelID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"balances\",\"type\":\"uint256[][]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"ID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"}],\"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\":\"register\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]" + +// AdjudicatorFuncSigs maps the 4-byte function signature to its string representation. +var AdjudicatorFuncSigs = map[string]string{ + "a1ee1592": "channelID((uint256,uint256,address,address[]))", + "8bba7507": "conclude((uint256,uint256,address,address[]),(bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),bytes,bool),(bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),bytes,bool)[])", + "6bbf706a": "concludeFinal((uint256,uint256,address,address[]),(bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),bytes,bool),bytes[])", + "11be1997": "disputes(bytes32)", + "a83a5cc5": "hashState((bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),bytes,bool))", + "36995831": "progress((uint256,uint256,address,address[]),(bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),bytes,bool),(bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),bytes,bool),uint256,bytes)", + "170e6715": "register((uint256,uint256,address,address[]),(bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),bytes,bool),bytes[])", +} + +// AdjudicatorBin is the compiled bytecode used for deploying new contracts. +var AdjudicatorBin = "0x608060405234801561001057600080fd5b506125f3806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80636bbf706a1161005b5780636bbf706a146100d85780638bba7507146100eb578063a1ee1592146100fe578063a83a5cc51461011e5761007d565b806311be199714610082578063170e6715146100b057806336995831146100c5575b600080fd5b610095610090366004611911565b610131565b6040516100a7969594939291906124d6565b60405180910390f35b6100c36100be366004611963565b610180565b005b6100c36100d3366004611af6565b610259565b6100c36100e6366004611963565b6103df565b6100c36100f9366004611a35565b61054d565b61011161010c366004611929565b610627565b6040516100a79190611e2b565b61011161012c366004611ba7565b610641565b600060208190529081526040902080546001909101546001600160401b0380831692600160401b8104821692600160801b82049092169160ff600160c01b8304811692600160c81b9004169086565b61018a838361064c565b610195838383610678565b61019d611434565b60006101ac8460000151610702565b9150915080156102465783602001516001600160401b031682604001516001600160401b0316106101f85760405162461bcd60e51b81526004016101ef90611ee9565b60405180910390fd5b608082015160ff161561021d5760405162461bcd60e51b81526004016101ef90611ff9565b81516001600160401b031642106102465760405162461bcd60e51b81526004016101ef906121a5565b61025285856000610793565b5050505050565b610261611434565b835161026c90610865565b608081015190915060ff166102aa5780516001600160401b03164210156102a55760405162461bcd60e51b81526004016101ef90612179565b6102fb565b608081015160ff16600114156102e35780516001600160401b031642106102a55760405162461bcd60e51b81526004016101ef90611e5f565b60405162461bcd60e51b81526004016101ef90611f72565b610304866108a8565b6103205760405162461bcd60e51b81526004016101ef90612410565b85606001515183106103445760405162461bcd60e51b81526004016101ef906120af565b61034e868561064c565b61035785610641565b8160a00151146103795760405162461bcd60e51b81526004016101ef90611f99565b6103a3610385856108ba565b838860600151868151811061039657fe5b60200260200101516108e3565b6103bf5760405162461bcd60e51b81526004016101ef90611ebe565b6103cb8686868661091e565b6103d786856001610793565b505050505050565b608082015115156001146104055760405162461bcd60e51b81526004016101ef90611f12565b6040808301510151511561042b5760405162461bcd60e51b81526004016101ef90611fc2565b610435838361064c565b610440838383610678565b610448611434565b60006104578460000151610702565b91509150801561048957608082015160ff16600214156104895760405162461bcd60e51b81526004016101ef906120de565b61049585856002610793565b61049e856108a8565b156105085784604001516001600160a01b031663abf66fa486866040518363ffffffff1660e01b81526004016104d592919061244a565b600060405180830381600087803b1580156104ef57600080fd5b505af1158015610503573d6000803e3d6000fd5b505050505b6040805160008082526020820190925260609161053b565b610528611469565b8152602001906001900390816105205790505b5090506103d785828860600151610a02565b610555611434565b825161056090610865565b608081015190915060ff166002141561058b5760405162461bcd60e51b81526004016101ef906120de565b610595848461064c565b61059f8383610c46565b6105a8846108a8565b156106125783604001516001600160a01b031663abf66fa485856040518363ffffffff1660e01b81526004016105df92919061244a565b600060405180830381600087803b1580156105f957600080fd5b505af115801561060d573d6000803e3d6000fd5b505050505b61062183838660600151610a02565b50505050565b600061063282610c84565b8051906020012090505b919050565b6000610632826108ba565b61065582610627565b8151146106745760405162461bcd60e51b81526004016101ef9061234e565b5050565b6060610683836108ba565b90508151846060015151146106aa5760405162461bcd60e51b81526004016101ef9061220b565b60005b8251811015610252576106de828483815181106106c657fe5b60200260200101518760600151848151811061039657fe5b6106fa5760405162461bcd60e51b81526004016101ef90611ebe565b6001016106ad565b61070a611434565b6000610714611434565b50505060008181526020818152604091829020825160c08101845281546001600160401b038082168352600160401b8204811694830194909452600160801b81049093169381019390935260ff600160c01b8304811615156060850152600160c81b90920490911660808301526001015460a082018190521515915091565b61079b611434565b60006107aa8460000151610702565b86516001600160401b0390811660208085019190915287015116604083015290925090506107d7856108a8565b151560608301528260028111156107ea57fe5b60ff1660808301526107fb84610641565b60a083015260808401511561081b576001600160401b0342168252610859565b80158061082f5750608082015160ff166001145b1561085957602082015161084d906001600160401b03421690610c97565b6001600160401b031682525b83516102529083610cec565b61086d611434565b610875611434565b600061088084610702565b91509150806108a15760405162461bcd60e51b81526004016101ef90612022565b5092915050565b604001516001600160a01b0316151590565b6060816040516020016108cd91906124c3565b6040516020818303038152906040529050919050565b6000806108f68580519060200120610de7565b905060006109048286610e38565b6001600160a01b0390811690851614925050509392505050565b82602001516001016001600160401b031682602001516001600160401b03161461095a5760405162461bcd60e51b81526004016101ef90612317565b60808301511561097c5760405162461bcd60e51b81526004016101ef9061204a565b61099483604001518360400151866060015151611023565b6040808501519051637614eebf60e11b81526001600160a01b0382169063ec29dd7e906109cb908890889088908890600401612478565b60006040518083038186803b1580156109e357600080fd5b505afa1580156109f7573d6000803e3d6000fd5b505050505050505050565b60408301515160005b815181101561025257606083516001600160401b0381118015610a2d57600080fd5b50604051908082528060200260200182016040528015610a57578160200160208202803683370190505b50905060005b8151811015610bbf578660400151602001518381518110610a7a57fe5b60200260200101518181518110610a8d57fe5b6020026020010151828281518110610aa157fe5b60200260200101818152505060005b8651811015610bb657610ac1611469565b878281518110610acd57fe5b60200260200101519050858581518110610ae357fe5b60200260200101516001600160a01b03168160400151600001518681518110610b0857fe5b60200260200101516001600160a01b031614610b365760405162461bcd60e51b81526004016101ef90612115565b6000848481518110610b4457fe5b6020026020010151905060008260400151602001518781518110610b6457fe5b60200260200101518581518110610b7757fe5b60200260200101519050610b94818361124b90919063ffffffff16565b868681518110610ba057fe5b6020908102919091010152505050600101610ab0565b50600101610a5d565b50828281518110610bcc57fe5b60200260200101516001600160a01b031663fc79a66d876000015186846040518463ffffffff1660e01b8152600401610c0793929190611e34565b600060405180830381600087803b158015610c2157600080fd5b505af1158015610c35573d6000803e3d6000fd5b505060019093019250610a0b915050565b610c4f826112ac565b6000610c5d83836000611385565b905081518114610c7f5760405162461bcd60e51b81526004016101ef90612142565b505050565b6060816040516020016108cd9190612437565b8082016001600160401b038084169082161015610ce6576040805162461bcd60e51b81526020600482015260086024820152676f766572666c6f7760c01b604482015290519081900360640190fd5b92915050565b600082815260208181526040918290208351815492850151858501516060870151608088015167ffffffffffffffff199096166001600160401b03808616919091176fffffffffffffffff00000000000000001916600160401b948216949094029390931767ffffffffffffffff60801b1916600160801b938316939093029290921760ff60c01b1916600160c01b921515929092029190911760ff60c81b1916600160c81b60ff86160217835560a0860151600190930192909255925185937f895ef5a5fc3efd313a300b006d6ce97ff0670dfe04f6eea90417edf924fa786b93610ddb9392909190612513565b60405180910390a25050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b60008151604114610e90576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115610f015760405162461bcd60e51b815260040180806020018281038252602281526020018061257a6022913960400191505060405180910390fd5b8060ff16601b14158015610f1957508060ff16601c14155b15610f555760405162461bcd60e51b815260040180806020018281038252602281526020018061259c6022913960400191505060405180910390fd5b600060018783868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015610fb1573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611019576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b9695505050505050565b8160200151518360200151511461104c5760405162461bcd60e51b81526004016101ef906123a2565b8151518351511461106f5760405162461bcd60e51b81526004016101ef9061207f565b604083015151156110925760405162461bcd60e51b81526004016101ef90612242565b604082015151156110b55760405162461bcd60e51b81526004016101ef90611f3b565b60005b8251518110156106215782518051829081106110d057fe5b60200260200101516001600160a01b0316846000015182815181106110f157fe5b60200260200101516001600160a01b03161461111f5760405162461bcd60e51b81526004016101ef90611e87565b600080838660200151848151811061113357fe5b602002602001015151146111595760405162461bcd60e51b81526004016101ef906123d9565b838560200151848151811061116a57fe5b602002602001015151146111905760405162461bcd60e51b81526004016101ef906122e0565b60005b84811015611221576111d8876020015185815181106111ae57fe5b602002602001015182815181106111c157fe5b60200260200101518461124b90919063ffffffff16565b9250611217866020015185815181106111ed57fe5b6020026020010151828151811061120057fe5b60200260200101518361124b90919063ffffffff16565b9150600101611193565b508082146112415760405162461bcd60e51b81526004016101ef906122a9565b50506001016110b8565b6000828201838110156112a5576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6112b4611434565b81516112bf90610865565b90506112ca82610641565b8160a00151146112ec5760405162461bcd60e51b81526004016101ef906121dc565b608081015160ff16600214156113025750611382565b608081015160ff16158015611318575080606001515b156113455760208101518151611339916001600160401b0390911690610c97565b6001600160401b031681525b80516001600160401b031642101561136f5760405162461bcd60e51b81526004016101ef90612279565b6002608082015281516106749082610cec565b50565b60408084015101516000908290825b8151811015611429576113a5611469565b8684815181106113b157fe5b6020026020010151905080600001518383815181106113cc57fe5b602002602001015160000151146113f55760405162461bcd60e51b81526004016101ef90612376565b6113fe816112ac565b604080820151015151600190940193156114205761141d818886611385565b93505b50600101611394565b509095945050505050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b6040805160a0810182526000808252602082015290810161148861149c565b815260606020820152600060409091015290565b60405180606001604052806060815260200160608152602001606081525090565b80356001600160a01b038116811461063c57600080fd5b600082601f8301126114e4578081fd5b81356114f76114f28261255c565b612539565b81815291506020808301908481018184028601820187101561151857600080fd5b60005b8481101561153e5761152c826114bd565b8452928201929082019060010161151b565b505050505092915050565b600082601f830112611559578081fd5b81356115676114f28261255c565b818152915060208083019084810160005b8481101561153e5761158f888484358a010161164f565b84529282019290820190600101611578565b600082601f8301126115b1578081fd5b81356115bf6114f28261255c565b818152915060208083019084810160005b8481101561153e5781358701604080601f19838c030112156115f157600080fd5b80518181016001600160401b03828210818311171561160c57fe5b81845284880135835292840135928084111561162757600080fd5b50506116378b878486010161164f565b818701528652505092820192908201906001016115d0565b600082601f83011261165f578081fd5b813561166d6114f28261255c565b81815291506020808301908481018184028601820187101561168e57600080fd5b60005b8481101561153e57813584529282019290820190600101611691565b8035801515811461063c57600080fd5b600082601f8301126116cd578081fd5b81356001600160401b038111156116e057fe5b6116f3601f8201601f1916602001612539565b915080825283602082850101111561170a57600080fd5b8060208401602084013760009082016020015292915050565b600060608284031215611734578081fd5b604051606081016001600160401b03828210818311171561175157fe5b81604052829350843591508082111561176957600080fd5b611775868387016114d4565b8352602085013591508082111561178b57600080fd5b61179786838701611549565b602084015260408501359150808211156117b057600080fd5b506117bd858286016115a1565b6040830152505092915050565b6000608082840312156117db578081fd5b604051608081016001600160401b0382821081831117156117f857fe5b816040528293508435835260208501356020840152611819604086016114bd565b6040840152606085013591508082111561183257600080fd5b5061183f858286016114d4565b6060830152505092915050565b600060a0828403121561185d578081fd5b60405160a081016001600160401b03828210818311171561187a57fe5b8160405282935084358352611891602086016118fa565b602084015260408501359150808211156118aa57600080fd5b6118b686838701611723565b604084015260608501359150808211156118cf57600080fd5b506118dc858286016116bd565b6060830152506118ee608084016116ad565b60808201525092915050565b80356001600160401b038116811461063c57600080fd5b600060208284031215611922578081fd5b5035919050565b60006020828403121561193a578081fd5b81356001600160401b0381111561194f578182fd5b61195b848285016117ca565b949350505050565b600080600060608486031215611977578182fd5b83356001600160401b038082111561198d578384fd5b611999878388016117ca565b94506020915081860135818111156119af578485fd5b6119bb8882890161184c565b9450506040860135818111156119cf578384fd5b86019050601f810187136119e1578283fd5b80356119ef6114f28261255c565b81815283810190838501865b84811015611a2457611a128c8884358901016116bd565b845292860192908601906001016119fb565b505080955050505050509250925092565b600080600060608486031215611a49578081fd5b83356001600160401b0380821115611a5f578283fd5b611a6b878388016117ca565b9450602091508186013581811115611a81578384fd5b611a8d8882890161184c565b945050604086013581811115611aa1578384fd5b86019050601f81018713611ab3578283fd5b8035611ac16114f28261255c565b81815283810190838501865b84811015611a2457611ae48c88843589010161184c565b84529286019290860190600101611acd565b600080600080600060a08688031215611b0d578283fd5b85356001600160401b0380821115611b23578485fd5b611b2f89838a016117ca565b96506020880135915080821115611b44578485fd5b611b5089838a0161184c565b95506040880135915080821115611b65578485fd5b611b7189838a0161184c565b9450606088013593506080880135915080821115611b8d578283fd5b50611b9a888289016116bd565b9150509295509295909350565b600060208284031215611bb8578081fd5b81356001600160401b03811115611bcd578182fd5b61195b8482850161184c565b6000815180845260208085019450808401835b83811015611c115781516001600160a01b031687529582019590820190600101611bec565b509495945050505050565b6000815180845260208085018081965082840281019150828601855b85811015611c765782840389528151805185528501516040868601819052611c6281870183611c83565b9a87019a9550505090840190600101611c38565b5091979650505050505050565b6000815180845260208085019450808401835b83811015611c1157815187529582019590820190600101611c96565b15159052565b60008151808452815b81811015611cdd57602081850181015186830182015201611cc1565b81811115611cee5782602083870101525b50601f01601f19169290920160200192915050565b6000815183526020820151602084015260018060a01b03604083015116604084015260608201516080606085015261195b6080850182611bd9565b60008151835260206001600160401b03818401511681850152604083015160a060408601528051606060a0870152611d7a610100870182611bd9565b83830151609f19888303810160c08a01528151808452929350908501918386019080870285018701885b82811015611dd257601f19878303018452611dc0828751611c83565b95890195938901939150600101611da4565b5060408701519750838b82030160e08c0152611dee8189611c1c565b97505050505050505060608301518482036060860152611e0e8282611cb8565b9150506080830151611e236080860182611cb2565b509392505050565b90815260200190565b600084825260606020830152611e4d6060830185611bd9565b82810360408401526110198185611c83565b6020808252600e908201526d1d1a5b595bdd5d081c185cdcd95960921b604082015260600190565b6020808252601a908201527f6173736574735b695d2061646472657373206d69736d61746368000000000000604082015260600190565b602080825260119082015270696e76616c6964207369676e617475726560781b604082015260600190565b6020808252600f908201526e34b73b30b634b2103b32b939b4b7b760891b604082015260600190565b6020808252600f908201526e1cdd185d19481b9bdd08199a5b985b608a1b604082015260600190565b60208082526019908201527f66756e6473206c6f636b656420696e206e657720737461746500000000000000604082015260600190565b6020808252600d908201526c696e76616c696420706861736560981b604082015260600190565b6020808252600f908201526e77726f6e67206f6c6420737461746560881b604082015260600190565b60208082526018908201527f63616e6e6f742068617665207375622d6368616e6e656c730000000000000000604082015260600190565b6020808252600f908201526e696e636f727265637420706861736560881b604082015260600190565b6020808252600e908201526d1b9bdd081c9959da5cdd195c995960921b604082015260600190565b6020808252818101527f63616e6e6f742070726f67726573732066726f6d2066696e616c207374617465604082015260600190565b6020808252601690820152750c2e6e6cae8e640d8cadccee8d040dad2e6dac2e8c6d60531b604082015260600190565b6020808252601590820152746163746f72496478206f7574206f662072616e676560581b604082015260600190565b60208082526019908201527f6368616e6e656c20616c726561647920636f6e636c7564656400000000000000604082015260600190565b6020808252601390820152720c2e6e6cae8e640c8de40dcdee840dac2e8c6d606b1b604082015260600190565b60208082526019908201527f77726f6e67206e756d626572206f662073756273746174657300000000000000604082015260600190565b6020808252601290820152711d1a5b595bdd5d081b9bdd081c185cdcd95960721b604082015260600190565b60208082526019908201527f72656675746174696f6e2074696d656f75742070617373656400000000000000604082015260600190565b602080825260159082015274696e76616c6964206368616e6e656c20737461746560581b604082015260600190565b6020808252601a908201527f7369676e617475726573206c656e677468206d69736d61746368000000000000604082015260600190565b60208082526019908201527f66756e6473206c6f636b656420696e206f6c6420737461746500000000000000604082015260600190565b6020808252601690820152751d1a5b595bdd5d081b9bdd081c185cdcd959081e595d60521b604082015260600190565b60208082526018908201527f73756d206f662062616c616e636573206d69736d617463680000000000000000604082015260600190565b6020808252601c908201527f6e65772062616c616e636573206c656e677468206d69736d6174636800000000604082015260600190565b6020808252601d908201527f76657273696f6e206d75737420696e6372656d656e74206279206f6e65000000604082015260600190565b6020808252600e908201526d696e76616c696420706172616d7360901b604082015260600190565b6020808252601290820152711a5b9d985b1a590818da185b9b995b08125160721b604082015260600190565b60208082526018908201527f62616c616e636573206c656e677468206d69736d617463680000000000000000604082015260600190565b6020808252601c908201527f6f6c642062616c616e636573206c656e677468206d69736d6174636800000000604082015260600190565b6020808252600d908201526c06d75737420686176652061707609c1b604082015260600190565b6000602082526112a56020830184611d03565b60006040825261245d6040830185611d03565b828103602084015261246f8185611d3e565b95945050505050565b60006080825261248b6080830187611d03565b828103602084015261249d8187611d3e565b905082810360408401526124b18186611d3e565b91505082606083015295945050505050565b6000602082526112a56020830184611d3e565b6001600160401b03968716815294861660208601529290941660408401521515606083015260ff909216608082015260a081019190915260c00190565b6001600160401b03938416815260ff929092166020830152909116604082015260600190565b6040518181016001600160401b038111828210171561255457fe5b604052919050565b60006001600160401b0382111561256f57fe5b506020908102019056fe45434453413a20696e76616c6964207369676e6174757265202773272076616c756545434453413a20696e76616c6964207369676e6174757265202776272076616c7565a264697066735822122010926c6e2f32eac3ede7d00824d7d1f4459b668d4460886212cacaa5ec55e9ac64736f6c63430007040033" + +// DeployAdjudicator deploys a new Ethereum contract, binding an instance of Adjudicator to it. +func DeployAdjudicator(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *Adjudicator, error) { + parsed, err := abi.JSON(strings.NewReader(AdjudicatorABI)) + if err != nil { + return common.Address{}, nil, nil, err + } + + address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(AdjudicatorBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &Adjudicator{AdjudicatorCaller: AdjudicatorCaller{contract: contract}, AdjudicatorTransactor: AdjudicatorTransactor{contract: contract}, AdjudicatorFilterer: AdjudicatorFilterer{contract: contract}}, nil +} + +// Adjudicator is an auto generated Go binding around an Ethereum contract. +type Adjudicator struct { + AdjudicatorCaller // Read-only binding to the contract + AdjudicatorTransactor // Write-only binding to the contract + AdjudicatorFilterer // Log filterer for contract events +} + +// AdjudicatorCaller is an auto generated read-only Go binding around an Ethereum contract. +type AdjudicatorCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// AdjudicatorTransactor is an auto generated write-only Go binding around an Ethereum contract. +type AdjudicatorTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// AdjudicatorFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type AdjudicatorFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// AdjudicatorSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type AdjudicatorSession struct { + Contract *Adjudicator // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// AdjudicatorCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type AdjudicatorCallerSession struct { + Contract *AdjudicatorCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// AdjudicatorTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type AdjudicatorTransactorSession struct { + Contract *AdjudicatorTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// AdjudicatorRaw is an auto generated low-level Go binding around an Ethereum contract. +type AdjudicatorRaw struct { + Contract *Adjudicator // Generic contract binding to access the raw methods on +} + +// AdjudicatorCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type AdjudicatorCallerRaw struct { + Contract *AdjudicatorCaller // Generic read-only contract binding to access the raw methods on +} + +// AdjudicatorTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type AdjudicatorTransactorRaw struct { + Contract *AdjudicatorTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewAdjudicator creates a new instance of Adjudicator, bound to a specific deployed contract. +func NewAdjudicator(address common.Address, backend bind.ContractBackend) (*Adjudicator, error) { + contract, err := bindAdjudicator(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &Adjudicator{AdjudicatorCaller: AdjudicatorCaller{contract: contract}, AdjudicatorTransactor: AdjudicatorTransactor{contract: contract}, AdjudicatorFilterer: AdjudicatorFilterer{contract: contract}}, nil +} + +// NewAdjudicatorCaller creates a new read-only instance of Adjudicator, bound to a specific deployed contract. +func NewAdjudicatorCaller(address common.Address, caller bind.ContractCaller) (*AdjudicatorCaller, error) { + contract, err := bindAdjudicator(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &AdjudicatorCaller{contract: contract}, nil +} + +// NewAdjudicatorTransactor creates a new write-only instance of Adjudicator, bound to a specific deployed contract. +func NewAdjudicatorTransactor(address common.Address, transactor bind.ContractTransactor) (*AdjudicatorTransactor, error) { + contract, err := bindAdjudicator(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &AdjudicatorTransactor{contract: contract}, nil +} + +// NewAdjudicatorFilterer creates a new log filterer instance of Adjudicator, bound to a specific deployed contract. +func NewAdjudicatorFilterer(address common.Address, filterer bind.ContractFilterer) (*AdjudicatorFilterer, error) { + contract, err := bindAdjudicator(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &AdjudicatorFilterer{contract: contract}, nil +} + +// 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)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_Adjudicator *AdjudicatorRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _Adjudicator.Contract.AdjudicatorCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_Adjudicator *AdjudicatorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Adjudicator.Contract.AdjudicatorTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_Adjudicator *AdjudicatorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _Adjudicator.Contract.AdjudicatorTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_Adjudicator *AdjudicatorCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _Adjudicator.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_Adjudicator *AdjudicatorTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Adjudicator.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_Adjudicator *AdjudicatorTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _Adjudicator.Contract.contract.Transact(opts, method, params...) +} + +// ChannelID is a free data retrieval call binding the contract method 0xa1ee1592. +// +// Solidity: function channelID((uint256,uint256,address,address[]) 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) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// ChannelID is a free data retrieval call binding the contract method 0xa1ee1592. +// +// Solidity: function channelID((uint256,uint256,address,address[]) 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 0xa1ee1592. +// +// Solidity: function channelID((uint256,uint256,address,address[]) 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) +func (_Adjudicator *AdjudicatorCaller) Disputes(opts *bind.CallOpts, arg0 [32]byte) (struct { + Timeout uint64 + ChallengeDuration uint64 + Version uint64 + HasApp bool + Phase uint8 + StateHash [32]byte +}, error) { + var out []interface{} + err := _Adjudicator.contract.Call(opts, &out, "disputes", arg0) + + outstruct := new(struct { + Timeout uint64 + ChallengeDuration uint64 + Version uint64 + HasApp bool + Phase uint8 + StateHash [32]byte + }) + + outstruct.Timeout = out[0].(uint64) + outstruct.ChallengeDuration = out[1].(uint64) + outstruct.Version = out[2].(uint64) + outstruct.HasApp = out[3].(bool) + outstruct.Phase = out[4].(uint8) + outstruct.StateHash = out[5].([32]byte) + + return *outstruct, err + +} + +// 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) +func (_Adjudicator *AdjudicatorSession) Disputes(arg0 [32]byte) (struct { + Timeout uint64 + ChallengeDuration uint64 + Version uint64 + HasApp bool + Phase uint8 + StateHash [32]byte +}, 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) +func (_Adjudicator *AdjudicatorCallerSession) Disputes(arg0 [32]byte) (struct { + Timeout uint64 + ChallengeDuration uint64 + Version uint64 + HasApp bool + Phase uint8 + StateHash [32]byte +}, error) { + return _Adjudicator.Contract.Disputes(&_Adjudicator.CallOpts, arg0) +} + +// HashState is a free data retrieval call binding the contract method 0xa83a5cc5. +// +// Solidity: function hashState((bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),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) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// HashState is a free data retrieval call binding the contract method 0xa83a5cc5. +// +// Solidity: function hashState((bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),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 0xa83a5cc5. +// +// Solidity: function hashState((bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),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 0x8bba7507. +// +// Solidity: function conclude((uint256,uint256,address,address[]) params, (bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),bytes,bool) state, (bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),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 0x8bba7507. +// +// Solidity: function conclude((uint256,uint256,address,address[]) params, (bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),bytes,bool) state, (bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),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 0x8bba7507. +// +// Solidity: function conclude((uint256,uint256,address,address[]) params, (bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),bytes,bool) state, (bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),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 0x6bbf706a. +// +// Solidity: function concludeFinal((uint256,uint256,address,address[]) params, (bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),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 0x6bbf706a. +// +// Solidity: function concludeFinal((uint256,uint256,address,address[]) params, (bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),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 0x6bbf706a. +// +// Solidity: function concludeFinal((uint256,uint256,address,address[]) params, (bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),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 0x36995831. +// +// Solidity: function progress((uint256,uint256,address,address[]) params, (bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),bytes,bool) stateOld, (bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),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 0x36995831. +// +// Solidity: function progress((uint256,uint256,address,address[]) params, (bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),bytes,bool) stateOld, (bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),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 0x36995831. +// +// Solidity: function progress((uint256,uint256,address,address[]) params, (bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),bytes,bool) stateOld, (bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),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 0x170e6715. +// +// Solidity: function register((uint256,uint256,address,address[]) params, (bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),bytes,bool) state, bytes[] sigs) returns() +func (_Adjudicator *AdjudicatorTransactor) Register(opts *bind.TransactOpts, params ChannelParams, state ChannelState, sigs [][]byte) (*types.Transaction, error) { + return _Adjudicator.contract.Transact(opts, "register", params, state, sigs) +} + +// Register is a paid mutator transaction binding the contract method 0x170e6715. +// +// Solidity: function register((uint256,uint256,address,address[]) params, (bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),bytes,bool) state, bytes[] sigs) returns() +func (_Adjudicator *AdjudicatorSession) Register(params ChannelParams, state ChannelState, sigs [][]byte) (*types.Transaction, error) { + return _Adjudicator.Contract.Register(&_Adjudicator.TransactOpts, params, state, sigs) +} + +// Register is a paid mutator transaction binding the contract method 0x170e6715. +// +// Solidity: function register((uint256,uint256,address,address[]) params, (bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),bytes,bool) state, bytes[] sigs) returns() +func (_Adjudicator *AdjudicatorTransactorSession) Register(params ChannelParams, state ChannelState, sigs [][]byte) (*types.Transaction, error) { + return _Adjudicator.Contract.Register(&_Adjudicator.TransactOpts, params, state, sigs) +} + +// AdjudicatorChannelUpdateIterator is returned from FilterChannelUpdate and is used to iterate over the raw logs and unpacked data for ChannelUpdate events raised by the Adjudicator contract. +type AdjudicatorChannelUpdateIterator struct { + Event *AdjudicatorChannelUpdate // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *AdjudicatorChannelUpdateIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(AdjudicatorChannelUpdate) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(AdjudicatorChannelUpdate) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *AdjudicatorChannelUpdateIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AdjudicatorChannelUpdateIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AdjudicatorChannelUpdate represents a ChannelUpdate event raised by the Adjudicator contract. +type AdjudicatorChannelUpdate struct { + ChannelID [32]byte + Version uint64 + Phase uint8 + Timeout uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterChannelUpdate is a free log retrieval operation binding the contract event 0x895ef5a5fc3efd313a300b006d6ce97ff0670dfe04f6eea90417edf924fa786b. +// +// Solidity: event ChannelUpdate(bytes32 indexed channelID, uint64 version, uint8 phase, uint64 timeout) +func (_Adjudicator *AdjudicatorFilterer) FilterChannelUpdate(opts *bind.FilterOpts, channelID [][32]byte) (*AdjudicatorChannelUpdateIterator, error) { + + var channelIDRule []interface{} + for _, channelIDItem := range channelID { + channelIDRule = append(channelIDRule, channelIDItem) + } + + logs, sub, err := _Adjudicator.contract.FilterLogs(opts, "ChannelUpdate", channelIDRule) + if err != nil { + return nil, err + } + return &AdjudicatorChannelUpdateIterator{contract: _Adjudicator.contract, event: "ChannelUpdate", logs: logs, sub: sub}, nil +} + +// WatchChannelUpdate is a free log subscription operation binding the contract event 0x895ef5a5fc3efd313a300b006d6ce97ff0670dfe04f6eea90417edf924fa786b. +// +// Solidity: event ChannelUpdate(bytes32 indexed channelID, uint64 version, uint8 phase, uint64 timeout) +func (_Adjudicator *AdjudicatorFilterer) WatchChannelUpdate(opts *bind.WatchOpts, sink chan<- *AdjudicatorChannelUpdate, channelID [][32]byte) (event.Subscription, error) { + + var channelIDRule []interface{} + for _, channelIDItem := range channelID { + channelIDRule = append(channelIDRule, channelIDItem) + } + + logs, sub, err := _Adjudicator.contract.WatchLogs(opts, "ChannelUpdate", channelIDRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(AdjudicatorChannelUpdate) + if err := _Adjudicator.contract.UnpackLog(event, "ChannelUpdate", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseChannelUpdate is a log parse operation binding the contract event 0x895ef5a5fc3efd313a300b006d6ce97ff0670dfe04f6eea90417edf924fa786b. +// +// Solidity: event ChannelUpdate(bytes32 indexed channelID, uint64 version, uint8 phase, uint64 timeout) +func (_Adjudicator *AdjudicatorFilterer) ParseChannelUpdate(log types.Log) (*AdjudicatorChannelUpdate, error) { + event := new(AdjudicatorChannelUpdate) + if err := _Adjudicator.contract.UnpackLog(event, "ChannelUpdate", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// AppABI is the input ABI used to generate the binding from. +const AppABI = "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"challengeDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"app\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"participants\",\"type\":\"address[]\"}],\"internalType\":\"structChannel.Params\",\"name\":\"params\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"channelID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"balances\",\"type\":\"uint256[][]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"ID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"}],\"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\":\"onConclude\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"challengeDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"app\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"participants\",\"type\":\"address[]\"}],\"internalType\":\"structChannel.Params\",\"name\":\"params\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"channelID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"balances\",\"type\":\"uint256[][]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"ID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"}],\"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\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"balances\",\"type\":\"uint256[][]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"ID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"}],\"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\"}]" + +// AppFuncSigs maps the 4-byte function signature to its string representation. +var AppFuncSigs = map[string]string{ + "abf66fa4": "onConclude((uint256,uint256,address,address[]),(bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),bytes,bool))", + "ec29dd7e": "validTransition((uint256,uint256,address,address[]),(bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),bytes,bool),(bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),bytes,bool),uint256)", +} + +// App is an auto generated Go binding around an Ethereum contract. +type App struct { + AppCaller // Read-only binding to the contract + AppTransactor // Write-only binding to the contract + AppFilterer // Log filterer for contract events +} + +// AppCaller is an auto generated read-only Go binding around an Ethereum contract. +type AppCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// AppTransactor is an auto generated write-only Go binding around an Ethereum contract. +type AppTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// AppFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type AppFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// AppSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type AppSession struct { + Contract *App // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// AppCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type AppCallerSession struct { + Contract *AppCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// AppTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type AppTransactorSession struct { + Contract *AppTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// AppRaw is an auto generated low-level Go binding around an Ethereum contract. +type AppRaw struct { + Contract *App // Generic contract binding to access the raw methods on +} + +// AppCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type AppCallerRaw struct { + Contract *AppCaller // Generic read-only contract binding to access the raw methods on +} + +// AppTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type AppTransactorRaw struct { + Contract *AppTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewApp creates a new instance of App, bound to a specific deployed contract. +func NewApp(address common.Address, backend bind.ContractBackend) (*App, error) { + contract, err := bindApp(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &App{AppCaller: AppCaller{contract: contract}, AppTransactor: AppTransactor{contract: contract}, AppFilterer: AppFilterer{contract: contract}}, nil +} + +// NewAppCaller creates a new read-only instance of App, bound to a specific deployed contract. +func NewAppCaller(address common.Address, caller bind.ContractCaller) (*AppCaller, error) { + contract, err := bindApp(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &AppCaller{contract: contract}, nil +} + +// NewAppTransactor creates a new write-only instance of App, bound to a specific deployed contract. +func NewAppTransactor(address common.Address, transactor bind.ContractTransactor) (*AppTransactor, error) { + contract, err := bindApp(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &AppTransactor{contract: contract}, nil +} + +// NewAppFilterer creates a new log filterer instance of App, bound to a specific deployed contract. +func NewAppFilterer(address common.Address, filterer bind.ContractFilterer) (*AppFilterer, error) { + contract, err := bindApp(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &AppFilterer{contract: contract}, nil +} + +// bindApp binds a generic wrapper to an already deployed contract. +func bindApp(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(AppABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_App *AppRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _App.Contract.AppCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_App *AppRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _App.Contract.AppTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_App *AppRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _App.Contract.AppTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_App *AppCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _App.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_App *AppTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _App.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_App *AppTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _App.Contract.contract.Transact(opts, method, params...) +} + +// ValidTransition is a free data retrieval call binding the contract method 0xec29dd7e. +// +// Solidity: function validTransition((uint256,uint256,address,address[]) params, (bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),bytes,bool) from, (bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),bytes,bool) to, uint256 actorIdx) pure returns() +func (_App *AppCaller) ValidTransition(opts *bind.CallOpts, params ChannelParams, from ChannelState, to ChannelState, actorIdx *big.Int) error { + var out []interface{} + err := _App.contract.Call(opts, &out, "validTransition", params, from, to, actorIdx) + + if err != nil { + return err + } + + return err + +} + +// ValidTransition is a free data retrieval call binding the contract method 0xec29dd7e. +// +// Solidity: function validTransition((uint256,uint256,address,address[]) params, (bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),bytes,bool) from, (bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),bytes,bool) to, uint256 actorIdx) pure returns() +func (_App *AppSession) ValidTransition(params ChannelParams, from ChannelState, to ChannelState, actorIdx *big.Int) error { + return _App.Contract.ValidTransition(&_App.CallOpts, params, from, to, actorIdx) +} + +// ValidTransition is a free data retrieval call binding the contract method 0xec29dd7e. +// +// Solidity: function validTransition((uint256,uint256,address,address[]) params, (bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),bytes,bool) from, (bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),bytes,bool) to, uint256 actorIdx) pure returns() +func (_App *AppCallerSession) ValidTransition(params ChannelParams, from ChannelState, to ChannelState, actorIdx *big.Int) error { + return _App.Contract.ValidTransition(&_App.CallOpts, params, from, to, actorIdx) +} + +// OnConclude is a paid mutator transaction binding the contract method 0xabf66fa4. +// +// Solidity: function onConclude((uint256,uint256,address,address[]) params, (bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),bytes,bool) state) returns() +func (_App *AppTransactor) OnConclude(opts *bind.TransactOpts, params ChannelParams, state ChannelState) (*types.Transaction, error) { + return _App.contract.Transact(opts, "onConclude", params, state) +} + +// OnConclude is a paid mutator transaction binding the contract method 0xabf66fa4. +// +// Solidity: function onConclude((uint256,uint256,address,address[]) params, (bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),bytes,bool) state) returns() +func (_App *AppSession) OnConclude(params ChannelParams, state ChannelState) (*types.Transaction, error) { + return _App.Contract.OnConclude(&_App.TransactOpts, params, state) +} + +// OnConclude is a paid mutator transaction binding the contract method 0xabf66fa4. +// +// Solidity: function onConclude((uint256,uint256,address,address[]) params, (bytes32,uint64,(address[],uint256[][],(bytes32,uint256[])[]),bytes,bool) state) returns() +func (_App *AppTransactorSession) OnConclude(params ChannelParams, state ChannelState) (*types.Transaction, error) { + return _App.Contract.OnConclude(&_App.TransactOpts, params, state) +} + +// AssetHolderABI is the input ABI used to generate the binding from. +const AssetHolderABI = "[{\"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\"}]" + +// AssetHolderFuncSigs maps the 4-byte function signature to its string representation. +var AssetHolderFuncSigs = map[string]string{ + "53c2ed8e": "adjudicator()", + "1de26e16": "deposit(bytes32,uint256)", + "ae9ee18c": "holdings(bytes32)", + "fc79a66d": "setOutcome(bytes32,address[],uint256[])", + "d945af1d": "settled(bytes32)", + "4ed4283c": "withdraw((bytes32,address,address,uint256),bytes)", +} + +// AssetHolder is an auto generated Go binding around an Ethereum contract. +type AssetHolder struct { + AssetHolderCaller // Read-only binding to the contract + AssetHolderTransactor // Write-only binding to the contract + AssetHolderFilterer // Log filterer for contract events +} + +// AssetHolderCaller is an auto generated read-only Go binding around an Ethereum contract. +type AssetHolderCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// AssetHolderTransactor is an auto generated write-only Go binding around an Ethereum contract. +type AssetHolderTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// AssetHolderFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type AssetHolderFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// AssetHolderSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type AssetHolderSession struct { + Contract *AssetHolder // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// AssetHolderCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type AssetHolderCallerSession struct { + Contract *AssetHolderCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// AssetHolderTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type AssetHolderTransactorSession struct { + Contract *AssetHolderTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// AssetHolderRaw is an auto generated low-level Go binding around an Ethereum contract. +type AssetHolderRaw struct { + Contract *AssetHolder // Generic contract binding to access the raw methods on +} + +// AssetHolderCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type AssetHolderCallerRaw struct { + Contract *AssetHolderCaller // Generic read-only contract binding to access the raw methods on +} + +// AssetHolderTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type AssetHolderTransactorRaw struct { + Contract *AssetHolderTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewAssetHolder creates a new instance of AssetHolder, bound to a specific deployed contract. +func NewAssetHolder(address common.Address, backend bind.ContractBackend) (*AssetHolder, error) { + contract, err := bindAssetHolder(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &AssetHolder{AssetHolderCaller: AssetHolderCaller{contract: contract}, AssetHolderTransactor: AssetHolderTransactor{contract: contract}, AssetHolderFilterer: AssetHolderFilterer{contract: contract}}, nil +} + +// NewAssetHolderCaller creates a new read-only instance of AssetHolder, bound to a specific deployed contract. +func NewAssetHolderCaller(address common.Address, caller bind.ContractCaller) (*AssetHolderCaller, error) { + contract, err := bindAssetHolder(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &AssetHolderCaller{contract: contract}, nil +} + +// NewAssetHolderTransactor creates a new write-only instance of AssetHolder, bound to a specific deployed contract. +func NewAssetHolderTransactor(address common.Address, transactor bind.ContractTransactor) (*AssetHolderTransactor, error) { + contract, err := bindAssetHolder(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &AssetHolderTransactor{contract: contract}, nil +} + +// NewAssetHolderFilterer creates a new log filterer instance of AssetHolder, bound to a specific deployed contract. +func NewAssetHolderFilterer(address common.Address, filterer bind.ContractFilterer) (*AssetHolderFilterer, error) { + contract, err := bindAssetHolder(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &AssetHolderFilterer{contract: contract}, nil +} + +// 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)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_AssetHolder *AssetHolderRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _AssetHolder.Contract.AssetHolderCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_AssetHolder *AssetHolderRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _AssetHolder.Contract.AssetHolderTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_AssetHolder *AssetHolderRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _AssetHolder.Contract.AssetHolderTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_AssetHolder *AssetHolderCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _AssetHolder.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_AssetHolder *AssetHolderTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _AssetHolder.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_AssetHolder *AssetHolderTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _AssetHolder.Contract.contract.Transact(opts, method, params...) +} + +// Adjudicator is a free data retrieval call binding the contract method 0x53c2ed8e. +// +// Solidity: function adjudicator() view returns(address) +func (_AssetHolder *AssetHolderCaller) Adjudicator(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _AssetHolder.contract.Call(opts, &out, "adjudicator") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Adjudicator is a free data retrieval call binding the contract method 0x53c2ed8e. +// +// Solidity: function adjudicator() view returns(address) +func (_AssetHolder *AssetHolderSession) Adjudicator() (common.Address, error) { + return _AssetHolder.Contract.Adjudicator(&_AssetHolder.CallOpts) +} + +// Adjudicator is a free data retrieval call binding the contract method 0x53c2ed8e. +// +// Solidity: function adjudicator() view returns(address) +func (_AssetHolder *AssetHolderCallerSession) Adjudicator() (common.Address, error) { + return _AssetHolder.Contract.Adjudicator(&_AssetHolder.CallOpts) +} + +// Holdings is a free data retrieval call binding the contract method 0xae9ee18c. +// +// Solidity: function holdings(bytes32 ) view returns(uint256) +func (_AssetHolder *AssetHolderCaller) Holdings(opts *bind.CallOpts, arg0 [32]byte) (*big.Int, error) { + var out []interface{} + err := _AssetHolder.contract.Call(opts, &out, "holdings", arg0) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// Holdings is a free data retrieval call binding the contract method 0xae9ee18c. +// +// Solidity: function holdings(bytes32 ) view returns(uint256) +func (_AssetHolder *AssetHolderSession) Holdings(arg0 [32]byte) (*big.Int, error) { + return _AssetHolder.Contract.Holdings(&_AssetHolder.CallOpts, arg0) +} + +// Holdings is a free data retrieval call binding the contract method 0xae9ee18c. +// +// Solidity: function holdings(bytes32 ) view returns(uint256) +func (_AssetHolder *AssetHolderCallerSession) Holdings(arg0 [32]byte) (*big.Int, error) { + return _AssetHolder.Contract.Holdings(&_AssetHolder.CallOpts, arg0) +} + +// Settled is a free data retrieval call binding the contract method 0xd945af1d. +// +// Solidity: function settled(bytes32 ) view returns(bool) +func (_AssetHolder *AssetHolderCaller) Settled(opts *bind.CallOpts, arg0 [32]byte) (bool, error) { + var out []interface{} + err := _AssetHolder.contract.Call(opts, &out, "settled", arg0) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// Settled is a free data retrieval call binding the contract method 0xd945af1d. +// +// Solidity: function settled(bytes32 ) view returns(bool) +func (_AssetHolder *AssetHolderSession) Settled(arg0 [32]byte) (bool, error) { + return _AssetHolder.Contract.Settled(&_AssetHolder.CallOpts, arg0) +} + +// Settled is a free data retrieval call binding the contract method 0xd945af1d. +// +// Solidity: function settled(bytes32 ) view returns(bool) +func (_AssetHolder *AssetHolderCallerSession) Settled(arg0 [32]byte) (bool, error) { + return _AssetHolder.Contract.Settled(&_AssetHolder.CallOpts, arg0) +} + +// Deposit is a paid mutator transaction binding the contract method 0x1de26e16. +// +// Solidity: function deposit(bytes32 fundingID, uint256 amount) payable returns() +func (_AssetHolder *AssetHolderTransactor) Deposit(opts *bind.TransactOpts, fundingID [32]byte, amount *big.Int) (*types.Transaction, error) { + return _AssetHolder.contract.Transact(opts, "deposit", fundingID, amount) +} + +// Deposit is a paid mutator transaction binding the contract method 0x1de26e16. +// +// Solidity: function deposit(bytes32 fundingID, uint256 amount) payable returns() +func (_AssetHolder *AssetHolderSession) Deposit(fundingID [32]byte, amount *big.Int) (*types.Transaction, error) { + return _AssetHolder.Contract.Deposit(&_AssetHolder.TransactOpts, fundingID, amount) +} + +// Deposit is a paid mutator transaction binding the contract method 0x1de26e16. +// +// Solidity: function deposit(bytes32 fundingID, uint256 amount) payable returns() +func (_AssetHolder *AssetHolderTransactorSession) Deposit(fundingID [32]byte, amount *big.Int) (*types.Transaction, error) { + return _AssetHolder.Contract.Deposit(&_AssetHolder.TransactOpts, fundingID, amount) +} + +// SetOutcome is a paid mutator transaction binding the contract method 0xfc79a66d. +// +// 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) { + return _AssetHolder.contract.Transact(opts, "setOutcome", channelID, parts, newBals) +} + +// SetOutcome is a paid mutator transaction binding the contract method 0xfc79a66d. +// +// 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) { + return _AssetHolder.Contract.SetOutcome(&_AssetHolder.TransactOpts, channelID, parts, newBals) +} + +// SetOutcome is a paid mutator transaction binding the contract method 0xfc79a66d. +// +// 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) { + return _AssetHolder.Contract.SetOutcome(&_AssetHolder.TransactOpts, channelID, parts, newBals) +} + +// Withdraw is a paid mutator transaction binding the contract method 0x4ed4283c. +// +// Solidity: function withdraw((bytes32,address,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. +// +// Solidity: function withdraw((bytes32,address,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. +// +// Solidity: function withdraw((bytes32,address,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) +} + +// AssetHolderDepositedIterator is returned from FilterDeposited and is used to iterate over the raw logs and unpacked data for Deposited events raised by the AssetHolder contract. +type AssetHolderDepositedIterator struct { + Event *AssetHolderDeposited // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *AssetHolderDepositedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(AssetHolderDeposited) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(AssetHolderDeposited) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *AssetHolderDepositedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AssetHolderDepositedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AssetHolderDeposited represents a Deposited event raised by the AssetHolder contract. +type AssetHolderDeposited struct { + FundingID [32]byte + Amount *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterDeposited is a free log retrieval operation binding the contract event 0xcd2fe07293de5928c5df9505b65a8d6506f8668dfe81af09090920687edc48a9. +// +// Solidity: event Deposited(bytes32 indexed fundingID, uint256 amount) +func (_AssetHolder *AssetHolderFilterer) FilterDeposited(opts *bind.FilterOpts, fundingID [][32]byte) (*AssetHolderDepositedIterator, error) { + + var fundingIDRule []interface{} + for _, fundingIDItem := range fundingID { + fundingIDRule = append(fundingIDRule, fundingIDItem) + } + + logs, sub, err := _AssetHolder.contract.FilterLogs(opts, "Deposited", fundingIDRule) + if err != nil { + return nil, err + } + return &AssetHolderDepositedIterator{contract: _AssetHolder.contract, event: "Deposited", logs: logs, sub: sub}, nil +} + +// WatchDeposited is a free log subscription operation binding the contract event 0xcd2fe07293de5928c5df9505b65a8d6506f8668dfe81af09090920687edc48a9. +// +// Solidity: event Deposited(bytes32 indexed fundingID, uint256 amount) +func (_AssetHolder *AssetHolderFilterer) WatchDeposited(opts *bind.WatchOpts, sink chan<- *AssetHolderDeposited, fundingID [][32]byte) (event.Subscription, error) { + + var fundingIDRule []interface{} + for _, fundingIDItem := range fundingID { + fundingIDRule = append(fundingIDRule, fundingIDItem) + } + + logs, sub, err := _AssetHolder.contract.WatchLogs(opts, "Deposited", fundingIDRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(AssetHolderDeposited) + if err := _AssetHolder.contract.UnpackLog(event, "Deposited", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseDeposited is a log parse operation binding the contract event 0xcd2fe07293de5928c5df9505b65a8d6506f8668dfe81af09090920687edc48a9. +// +// Solidity: event Deposited(bytes32 indexed fundingID, uint256 amount) +func (_AssetHolder *AssetHolderFilterer) ParseDeposited(log types.Log) (*AssetHolderDeposited, error) { + event := new(AssetHolderDeposited) + if err := _AssetHolder.contract.UnpackLog(event, "Deposited", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// AssetHolderOutcomeSetIterator is returned from FilterOutcomeSet and is used to iterate over the raw logs and unpacked data for OutcomeSet events raised by the AssetHolder contract. +type AssetHolderOutcomeSetIterator struct { + Event *AssetHolderOutcomeSet // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *AssetHolderOutcomeSetIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(AssetHolderOutcomeSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(AssetHolderOutcomeSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *AssetHolderOutcomeSetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AssetHolderOutcomeSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AssetHolderOutcomeSet represents a OutcomeSet event raised by the AssetHolder contract. +type AssetHolderOutcomeSet struct { + ChannelID [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOutcomeSet is a free log retrieval operation binding the contract event 0xef898d6cd3395b6dfe67a3c1923e5c726c1b154e979fb0a25a9c41d0093168b8. +// +// Solidity: event OutcomeSet(bytes32 indexed channelID) +func (_AssetHolder *AssetHolderFilterer) FilterOutcomeSet(opts *bind.FilterOpts, channelID [][32]byte) (*AssetHolderOutcomeSetIterator, error) { + + var channelIDRule []interface{} + for _, channelIDItem := range channelID { + channelIDRule = append(channelIDRule, channelIDItem) + } + + logs, sub, err := _AssetHolder.contract.FilterLogs(opts, "OutcomeSet", channelIDRule) + if err != nil { + return nil, err + } + return &AssetHolderOutcomeSetIterator{contract: _AssetHolder.contract, event: "OutcomeSet", logs: logs, sub: sub}, nil +} + +// WatchOutcomeSet is a free log subscription operation binding the contract event 0xef898d6cd3395b6dfe67a3c1923e5c726c1b154e979fb0a25a9c41d0093168b8. +// +// Solidity: event OutcomeSet(bytes32 indexed channelID) +func (_AssetHolder *AssetHolderFilterer) WatchOutcomeSet(opts *bind.WatchOpts, sink chan<- *AssetHolderOutcomeSet, channelID [][32]byte) (event.Subscription, error) { + + var channelIDRule []interface{} + for _, channelIDItem := range channelID { + channelIDRule = append(channelIDRule, channelIDItem) + } + + logs, sub, err := _AssetHolder.contract.WatchLogs(opts, "OutcomeSet", channelIDRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(AssetHolderOutcomeSet) + if err := _AssetHolder.contract.UnpackLog(event, "OutcomeSet", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseOutcomeSet is a log parse operation binding the contract event 0xef898d6cd3395b6dfe67a3c1923e5c726c1b154e979fb0a25a9c41d0093168b8. +// +// Solidity: event OutcomeSet(bytes32 indexed channelID) +func (_AssetHolder *AssetHolderFilterer) ParseOutcomeSet(log types.Log) (*AssetHolderOutcomeSet, error) { + event := new(AssetHolderOutcomeSet) + if err := _AssetHolder.contract.UnpackLog(event, "OutcomeSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// AssetHolderWithdrawnIterator is returned from FilterWithdrawn and is used to iterate over the raw logs and unpacked data for Withdrawn events raised by the AssetHolder contract. +type AssetHolderWithdrawnIterator struct { + Event *AssetHolderWithdrawn // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *AssetHolderWithdrawnIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(AssetHolderWithdrawn) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(AssetHolderWithdrawn) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *AssetHolderWithdrawnIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AssetHolderWithdrawnIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AssetHolderWithdrawn represents a Withdrawn event raised by the AssetHolder contract. +type AssetHolderWithdrawn struct { + FundingID [32]byte + Amount *big.Int + Receiver common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawn is a free log retrieval operation binding the contract event 0xd0b6e7d0170f56c62f87de6a8a47a0ccf41c86ffb5084d399d8eb62e823f2a81. +// +// Solidity: event Withdrawn(bytes32 indexed fundingID, uint256 amount, address receiver) +func (_AssetHolder *AssetHolderFilterer) FilterWithdrawn(opts *bind.FilterOpts, fundingID [][32]byte) (*AssetHolderWithdrawnIterator, error) { + + var fundingIDRule []interface{} + for _, fundingIDItem := range fundingID { + fundingIDRule = append(fundingIDRule, fundingIDItem) + } + + logs, sub, err := _AssetHolder.contract.FilterLogs(opts, "Withdrawn", fundingIDRule) + if err != nil { + return nil, err + } + return &AssetHolderWithdrawnIterator{contract: _AssetHolder.contract, event: "Withdrawn", logs: logs, sub: sub}, nil +} + +// WatchWithdrawn is a free log subscription operation binding the contract event 0xd0b6e7d0170f56c62f87de6a8a47a0ccf41c86ffb5084d399d8eb62e823f2a81. +// +// Solidity: event Withdrawn(bytes32 indexed fundingID, uint256 amount, address receiver) +func (_AssetHolder *AssetHolderFilterer) WatchWithdrawn(opts *bind.WatchOpts, sink chan<- *AssetHolderWithdrawn, fundingID [][32]byte) (event.Subscription, error) { + + var fundingIDRule []interface{} + for _, fundingIDItem := range fundingID { + fundingIDRule = append(fundingIDRule, fundingIDItem) + } + + logs, sub, err := _AssetHolder.contract.WatchLogs(opts, "Withdrawn", fundingIDRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(AssetHolderWithdrawn) + if err := _AssetHolder.contract.UnpackLog(event, "Withdrawn", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseWithdrawn is a log parse operation binding the contract event 0xd0b6e7d0170f56c62f87de6a8a47a0ccf41c86ffb5084d399d8eb62e823f2a81. +// +// Solidity: event Withdrawn(bytes32 indexed fundingID, uint256 amount, address receiver) +func (_AssetHolder *AssetHolderFilterer) ParseWithdrawn(log types.Log) (*AssetHolderWithdrawn, error) { + event := new(AssetHolderWithdrawn) + if err := _AssetHolder.contract.UnpackLog(event, "Withdrawn", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ChannelABI is the input ABI used to generate the binding from. +const ChannelABI = "[]" + +// ChannelBin is the compiled bytecode used for deploying new contracts. +var ChannelBin = "0x60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220766359a0ab2443f972680b1e01a450180ad90733b2b33c463cbf2c02159dd16c64736f6c63430007040033" + +// DeployChannel deploys a new Ethereum contract, binding an instance of Channel to it. +func DeployChannel(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *Channel, error) { + parsed, err := abi.JSON(strings.NewReader(ChannelABI)) + if err != nil { + return common.Address{}, nil, nil, err + } + + address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(ChannelBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &Channel{ChannelCaller: ChannelCaller{contract: contract}, ChannelTransactor: ChannelTransactor{contract: contract}, ChannelFilterer: ChannelFilterer{contract: contract}}, nil +} + +// Channel is an auto generated Go binding around an Ethereum contract. +type Channel struct { + ChannelCaller // Read-only binding to the contract + ChannelTransactor // Write-only binding to the contract + ChannelFilterer // Log filterer for contract events +} + +// ChannelCaller is an auto generated read-only Go binding around an Ethereum contract. +type ChannelCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ChannelTransactor is an auto generated write-only Go binding around an Ethereum contract. +type ChannelTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ChannelFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ChannelFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ChannelSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type ChannelSession struct { + Contract *Channel // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ChannelCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type ChannelCallerSession struct { + Contract *ChannelCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// ChannelTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type ChannelTransactorSession struct { + Contract *ChannelTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ChannelRaw is an auto generated low-level Go binding around an Ethereum contract. +type ChannelRaw struct { + Contract *Channel // Generic contract binding to access the raw methods on +} + +// ChannelCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ChannelCallerRaw struct { + Contract *ChannelCaller // Generic read-only contract binding to access the raw methods on +} + +// ChannelTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ChannelTransactorRaw struct { + Contract *ChannelTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewChannel creates a new instance of Channel, bound to a specific deployed contract. +func NewChannel(address common.Address, backend bind.ContractBackend) (*Channel, error) { + contract, err := bindChannel(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &Channel{ChannelCaller: ChannelCaller{contract: contract}, ChannelTransactor: ChannelTransactor{contract: contract}, ChannelFilterer: ChannelFilterer{contract: contract}}, nil +} + +// NewChannelCaller creates a new read-only instance of Channel, bound to a specific deployed contract. +func NewChannelCaller(address common.Address, caller bind.ContractCaller) (*ChannelCaller, error) { + contract, err := bindChannel(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ChannelCaller{contract: contract}, nil +} + +// NewChannelTransactor creates a new write-only instance of Channel, bound to a specific deployed contract. +func NewChannelTransactor(address common.Address, transactor bind.ContractTransactor) (*ChannelTransactor, error) { + contract, err := bindChannel(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ChannelTransactor{contract: contract}, nil +} + +// NewChannelFilterer creates a new log filterer instance of Channel, bound to a specific deployed contract. +func NewChannelFilterer(address common.Address, filterer bind.ContractFilterer) (*ChannelFilterer, error) { + contract, err := bindChannel(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ChannelFilterer{contract: contract}, nil +} + +// bindChannel binds a generic wrapper to an already deployed contract. +func bindChannel(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(ChannelABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_Channel *ChannelRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _Channel.Contract.ChannelCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_Channel *ChannelRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Channel.Contract.ChannelTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_Channel *ChannelRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _Channel.Contract.ChannelTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_Channel *ChannelCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _Channel.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_Channel *ChannelTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Channel.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_Channel *ChannelTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _Channel.Contract.contract.Transact(opts, method, params...) +} + +// ECDSAABI is the input ABI used to generate the binding from. +const ECDSAABI = "[]" + +// ECDSABin is the compiled bytecode used for deploying new contracts. +var ECDSABin = "0x60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220783a9abca4677c2f6d9982cbe6da39ab0e2de660423d2cca565ee52470051fe464736f6c63430007040033" + +// DeployECDSA deploys a new Ethereum contract, binding an instance of ECDSA to it. +func DeployECDSA(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *ECDSA, error) { + parsed, err := abi.JSON(strings.NewReader(ECDSAABI)) + if err != nil { + return common.Address{}, nil, nil, err + } + + address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(ECDSABin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ECDSA{ECDSACaller: ECDSACaller{contract: contract}, ECDSATransactor: ECDSATransactor{contract: contract}, ECDSAFilterer: ECDSAFilterer{contract: contract}}, nil +} + +// ECDSA is an auto generated Go binding around an Ethereum contract. +type ECDSA struct { + ECDSACaller // Read-only binding to the contract + ECDSATransactor // Write-only binding to the contract + ECDSAFilterer // Log filterer for contract events +} + +// ECDSACaller is an auto generated read-only Go binding around an Ethereum contract. +type ECDSACaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ECDSATransactor is an auto generated write-only Go binding around an Ethereum contract. +type ECDSATransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ECDSAFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ECDSAFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ECDSASession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type ECDSASession struct { + Contract *ECDSA // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ECDSACallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type ECDSACallerSession struct { + Contract *ECDSACaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// ECDSATransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type ECDSATransactorSession struct { + Contract *ECDSATransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ECDSARaw is an auto generated low-level Go binding around an Ethereum contract. +type ECDSARaw struct { + Contract *ECDSA // Generic contract binding to access the raw methods on +} + +// ECDSACallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ECDSACallerRaw struct { + Contract *ECDSACaller // Generic read-only contract binding to access the raw methods on +} + +// ECDSATransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ECDSATransactorRaw struct { + Contract *ECDSATransactor // Generic write-only contract binding to access the raw methods on +} + +// NewECDSA creates a new instance of ECDSA, bound to a specific deployed contract. +func NewECDSA(address common.Address, backend bind.ContractBackend) (*ECDSA, error) { + contract, err := bindECDSA(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ECDSA{ECDSACaller: ECDSACaller{contract: contract}, ECDSATransactor: ECDSATransactor{contract: contract}, ECDSAFilterer: ECDSAFilterer{contract: contract}}, nil +} + +// NewECDSACaller creates a new read-only instance of ECDSA, bound to a specific deployed contract. +func NewECDSACaller(address common.Address, caller bind.ContractCaller) (*ECDSACaller, error) { + contract, err := bindECDSA(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ECDSACaller{contract: contract}, nil +} + +// NewECDSATransactor creates a new write-only instance of ECDSA, bound to a specific deployed contract. +func NewECDSATransactor(address common.Address, transactor bind.ContractTransactor) (*ECDSATransactor, error) { + contract, err := bindECDSA(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ECDSATransactor{contract: contract}, nil +} + +// NewECDSAFilterer creates a new log filterer instance of ECDSA, bound to a specific deployed contract. +func NewECDSAFilterer(address common.Address, filterer bind.ContractFilterer) (*ECDSAFilterer, error) { + contract, err := bindECDSA(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ECDSAFilterer{contract: contract}, nil +} + +// bindECDSA binds a generic wrapper to an already deployed contract. +func bindECDSA(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(ECDSAABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ECDSA *ECDSARaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ECDSA.Contract.ECDSACaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ECDSA *ECDSARaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ECDSA.Contract.ECDSATransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ECDSA *ECDSARaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ECDSA.Contract.ECDSATransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ECDSA *ECDSACallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ECDSA.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ECDSA *ECDSATransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ECDSA.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ECDSA *ECDSATransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ECDSA.Contract.contract.Transact(opts, method, params...) +} + +// SafeMathABI is the input ABI used to generate the binding from. +const SafeMathABI = "[]" + +// SafeMathBin is the compiled bytecode used for deploying new contracts. +var SafeMathBin = "0x60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212206c001d4b2db62b0acd57a4db217fef685da3b884b9d1c5c5e1a9bc7ecb574d9664736f6c63430007040033" + +// DeploySafeMath deploys a new Ethereum contract, binding an instance of SafeMath to it. +func DeploySafeMath(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *SafeMath, error) { + parsed, err := abi.JSON(strings.NewReader(SafeMathABI)) + if err != nil { + return common.Address{}, nil, nil, err + } + + address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(SafeMathBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &SafeMath{SafeMathCaller: SafeMathCaller{contract: contract}, SafeMathTransactor: SafeMathTransactor{contract: contract}, SafeMathFilterer: SafeMathFilterer{contract: contract}}, nil +} + +// SafeMath is an auto generated Go binding around an Ethereum contract. +type SafeMath struct { + SafeMathCaller // Read-only binding to the contract + SafeMathTransactor // Write-only binding to the contract + SafeMathFilterer // Log filterer for contract events +} + +// SafeMathCaller is an auto generated read-only Go binding around an Ethereum contract. +type SafeMathCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// SafeMathTransactor is an auto generated write-only Go binding around an Ethereum contract. +type SafeMathTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// SafeMathFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type SafeMathFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// SafeMathSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type SafeMathSession struct { + Contract *SafeMath // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// SafeMathCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type SafeMathCallerSession struct { + Contract *SafeMathCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// SafeMathTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type SafeMathTransactorSession struct { + Contract *SafeMathTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// SafeMathRaw is an auto generated low-level Go binding around an Ethereum contract. +type SafeMathRaw struct { + Contract *SafeMath // Generic contract binding to access the raw methods on +} + +// SafeMathCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type SafeMathCallerRaw struct { + Contract *SafeMathCaller // Generic read-only contract binding to access the raw methods on +} + +// SafeMathTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type SafeMathTransactorRaw struct { + Contract *SafeMathTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewSafeMath creates a new instance of SafeMath, bound to a specific deployed contract. +func NewSafeMath(address common.Address, backend bind.ContractBackend) (*SafeMath, error) { + contract, err := bindSafeMath(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &SafeMath{SafeMathCaller: SafeMathCaller{contract: contract}, SafeMathTransactor: SafeMathTransactor{contract: contract}, SafeMathFilterer: SafeMathFilterer{contract: contract}}, nil +} + +// NewSafeMathCaller creates a new read-only instance of SafeMath, bound to a specific deployed contract. +func NewSafeMathCaller(address common.Address, caller bind.ContractCaller) (*SafeMathCaller, error) { + contract, err := bindSafeMath(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &SafeMathCaller{contract: contract}, nil +} + +// NewSafeMathTransactor creates a new write-only instance of SafeMath, bound to a specific deployed contract. +func NewSafeMathTransactor(address common.Address, transactor bind.ContractTransactor) (*SafeMathTransactor, error) { + contract, err := bindSafeMath(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &SafeMathTransactor{contract: contract}, nil +} + +// NewSafeMathFilterer creates a new log filterer instance of SafeMath, bound to a specific deployed contract. +func NewSafeMathFilterer(address common.Address, filterer bind.ContractFilterer) (*SafeMathFilterer, error) { + contract, err := bindSafeMath(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &SafeMathFilterer{contract: contract}, nil +} + +// bindSafeMath binds a generic wrapper to an already deployed contract. +func bindSafeMath(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(SafeMathABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_SafeMath *SafeMathRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _SafeMath.Contract.SafeMathCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_SafeMath *SafeMathRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _SafeMath.Contract.SafeMathTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_SafeMath *SafeMathRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _SafeMath.Contract.SafeMathTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_SafeMath *SafeMathCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _SafeMath.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_SafeMath *SafeMathTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _SafeMath.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_SafeMath *SafeMathTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _SafeMath.Contract.contract.Transact(opts, method, params...) +} + +// SafeMath64ABI is the input ABI used to generate the binding from. +const SafeMath64ABI = "[]" + +// SafeMath64Bin is the compiled bytecode used for deploying new contracts. +var SafeMath64Bin = "0x60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220655e8ef18889473bb4785a3a6a69b2420dcddedfc73198e9cc1f816b9afe0a5a64736f6c63430007040033" + +// DeploySafeMath64 deploys a new Ethereum contract, binding an instance of SafeMath64 to it. +func DeploySafeMath64(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *SafeMath64, error) { + parsed, err := abi.JSON(strings.NewReader(SafeMath64ABI)) + if err != nil { + return common.Address{}, nil, nil, err + } + + address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(SafeMath64Bin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &SafeMath64{SafeMath64Caller: SafeMath64Caller{contract: contract}, SafeMath64Transactor: SafeMath64Transactor{contract: contract}, SafeMath64Filterer: SafeMath64Filterer{contract: contract}}, nil +} + +// SafeMath64 is an auto generated Go binding around an Ethereum contract. +type SafeMath64 struct { + SafeMath64Caller // Read-only binding to the contract + SafeMath64Transactor // Write-only binding to the contract + SafeMath64Filterer // Log filterer for contract events +} + +// SafeMath64Caller is an auto generated read-only Go binding around an Ethereum contract. +type SafeMath64Caller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// SafeMath64Transactor is an auto generated write-only Go binding around an Ethereum contract. +type SafeMath64Transactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// SafeMath64Filterer is an auto generated log filtering Go binding around an Ethereum contract events. +type SafeMath64Filterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// SafeMath64Session is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type SafeMath64Session struct { + Contract *SafeMath64 // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// SafeMath64CallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type SafeMath64CallerSession struct { + Contract *SafeMath64Caller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// SafeMath64TransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type SafeMath64TransactorSession struct { + Contract *SafeMath64Transactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// SafeMath64Raw is an auto generated low-level Go binding around an Ethereum contract. +type SafeMath64Raw struct { + Contract *SafeMath64 // Generic contract binding to access the raw methods on +} + +// SafeMath64CallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type SafeMath64CallerRaw struct { + Contract *SafeMath64Caller // Generic read-only contract binding to access the raw methods on +} + +// SafeMath64TransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type SafeMath64TransactorRaw struct { + Contract *SafeMath64Transactor // Generic write-only contract binding to access the raw methods on +} + +// NewSafeMath64 creates a new instance of SafeMath64, bound to a specific deployed contract. +func NewSafeMath64(address common.Address, backend bind.ContractBackend) (*SafeMath64, error) { + contract, err := bindSafeMath64(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &SafeMath64{SafeMath64Caller: SafeMath64Caller{contract: contract}, SafeMath64Transactor: SafeMath64Transactor{contract: contract}, SafeMath64Filterer: SafeMath64Filterer{contract: contract}}, nil +} + +// NewSafeMath64Caller creates a new read-only instance of SafeMath64, bound to a specific deployed contract. +func NewSafeMath64Caller(address common.Address, caller bind.ContractCaller) (*SafeMath64Caller, error) { + contract, err := bindSafeMath64(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &SafeMath64Caller{contract: contract}, nil +} + +// NewSafeMath64Transactor creates a new write-only instance of SafeMath64, bound to a specific deployed contract. +func NewSafeMath64Transactor(address common.Address, transactor bind.ContractTransactor) (*SafeMath64Transactor, error) { + contract, err := bindSafeMath64(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &SafeMath64Transactor{contract: contract}, nil +} + +// NewSafeMath64Filterer creates a new log filterer instance of SafeMath64, bound to a specific deployed contract. +func NewSafeMath64Filterer(address common.Address, filterer bind.ContractFilterer) (*SafeMath64Filterer, error) { + contract, err := bindSafeMath64(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &SafeMath64Filterer{contract: contract}, nil +} + +// bindSafeMath64 binds a generic wrapper to an already deployed contract. +func bindSafeMath64(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(SafeMath64ABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_SafeMath64 *SafeMath64Raw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _SafeMath64.Contract.SafeMath64Caller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_SafeMath64 *SafeMath64Raw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _SafeMath64.Contract.SafeMath64Transactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_SafeMath64 *SafeMath64Raw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _SafeMath64.Contract.SafeMath64Transactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_SafeMath64 *SafeMath64CallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _SafeMath64.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_SafeMath64 *SafeMath64TransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _SafeMath64.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_SafeMath64 *SafeMath64TransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _SafeMath64.Contract.contract.Transact(opts, method, params...) +} + +// SigABI is the input ABI used to generate the binding from. +const SigABI = "[]" + +// SigBin is the compiled bytecode used for deploying new contracts. +var SigBin = "0x60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212201d87d50185a6082d7917bc44d122eefea79692c1e8b208242bfd808320a0b29364736f6c63430007040033" + +// DeploySig deploys a new Ethereum contract, binding an instance of Sig to it. +func DeploySig(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *Sig, error) { + parsed, err := abi.JSON(strings.NewReader(SigABI)) + if err != nil { + return common.Address{}, nil, nil, err + } + + address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(SigBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &Sig{SigCaller: SigCaller{contract: contract}, SigTransactor: SigTransactor{contract: contract}, SigFilterer: SigFilterer{contract: contract}}, nil +} + +// Sig is an auto generated Go binding around an Ethereum contract. +type Sig struct { + SigCaller // Read-only binding to the contract + SigTransactor // Write-only binding to the contract + SigFilterer // Log filterer for contract events +} + +// SigCaller is an auto generated read-only Go binding around an Ethereum contract. +type SigCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// SigTransactor is an auto generated write-only Go binding around an Ethereum contract. +type SigTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// SigFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type SigFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// SigSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type SigSession struct { + Contract *Sig // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// SigCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type SigCallerSession struct { + Contract *SigCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// SigTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type SigTransactorSession struct { + Contract *SigTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// SigRaw is an auto generated low-level Go binding around an Ethereum contract. +type SigRaw struct { + Contract *Sig // Generic contract binding to access the raw methods on +} + +// SigCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type SigCallerRaw struct { + Contract *SigCaller // Generic read-only contract binding to access the raw methods on +} + +// SigTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type SigTransactorRaw struct { + Contract *SigTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewSig creates a new instance of Sig, bound to a specific deployed contract. +func NewSig(address common.Address, backend bind.ContractBackend) (*Sig, error) { + contract, err := bindSig(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &Sig{SigCaller: SigCaller{contract: contract}, SigTransactor: SigTransactor{contract: contract}, SigFilterer: SigFilterer{contract: contract}}, nil +} + +// NewSigCaller creates a new read-only instance of Sig, bound to a specific deployed contract. +func NewSigCaller(address common.Address, caller bind.ContractCaller) (*SigCaller, error) { + contract, err := bindSig(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &SigCaller{contract: contract}, nil +} + +// NewSigTransactor creates a new write-only instance of Sig, bound to a specific deployed contract. +func NewSigTransactor(address common.Address, transactor bind.ContractTransactor) (*SigTransactor, error) { + contract, err := bindSig(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &SigTransactor{contract: contract}, nil +} + +// NewSigFilterer creates a new log filterer instance of Sig, bound to a specific deployed contract. +func NewSigFilterer(address common.Address, filterer bind.ContractFilterer) (*SigFilterer, error) { + contract, err := bindSig(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &SigFilterer{contract: contract}, nil +} + +// bindSig binds a generic wrapper to an already deployed contract. +func bindSig(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(SigABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_Sig *SigRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _Sig.Contract.SigCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_Sig *SigRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Sig.Contract.SigTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_Sig *SigRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _Sig.Contract.SigTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_Sig *SigCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _Sig.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_Sig *SigTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Sig.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_Sig *SigTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _Sig.Contract.contract.Transact(opts, method, params...) +} diff --git a/collateralized-channels/contracts/perun-eth-contracts b/collateralized-channels/contracts/perun-eth-contracts index db60933..01699bf 160000 --- a/collateralized-channels/contracts/perun-eth-contracts +++ b/collateralized-channels/contracts/perun-eth-contracts @@ -1 +1 @@ -Subproject commit db60933c80763270d675662a2a3616c489811c1c +Subproject commit 01699bf3e63695a6c6cf8142d0a54c91c97aaa34 From f9e43d3263724d458580b6b515222336363b9922 Mon Sep 17 00:00:00 2001 From: Minh Huy Tran Date: Thu, 18 Jan 2024 22:43:11 +0700 Subject: [PATCH 11/16] refactor(CI): comment out collateralized channel CI test, smart contracts still need update Signed-off-by: Minh Huy Tran --- .github/workflows/ci.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9332fd6..17dbd2b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -72,10 +72,10 @@ jobs: go run . docker stop ganache - - name: Collateralized Channels - working-directory: collateralized-channels - env: - GANACHE_CMD: "docker run --name ganache --rm --publish 8545:8545 ${{ env.ganache-image }}" - run: | - go test -v -timeout 60s . - docker stop ganache || true # Cleanup + # - name: Collateralized Channels + # working-directory: collateralized-channels + # env: + # GANACHE_CMD: "docker run --name ganache --rm --publish 8545:8545 ${{ env.ganache-image }}" + # run: | + # go test -v -timeout 60s . + # docker stop ganache || true # Cleanup From ba555aa867eb7ce360030c1fe2f412695a7deeb0 Mon Sep 17 00:00:00 2001 From: Minh Huy Tran Date: Thu, 18 Apr 2024 18:29:23 +0200 Subject: [PATCH 12/16] update payment-channel-dot Signed-off-by: Minh Huy Tran --- payment-channel-dot/README.md | 18 +- payment-channel-dot/client/address.go | 60 ++++ payment-channel-dot/client/channel.go | 10 +- payment-channel-dot/client/client.go | 26 +- payment-channel-dot/client/handle.go | 15 +- payment-channel-dot/client/util.go | 7 +- payment-channel-dot/go.mod | 39 ++- payment-channel-dot/go.sum | 487 +++----------------------- payment-channel-dot/main.go | 9 +- payment-channel-dot/util.go | 13 +- 10 files changed, 193 insertions(+), 491 deletions(-) create mode 100644 payment-channel-dot/client/address.go diff --git a/payment-channel-dot/README.md b/payment-channel-dot/README.md index 58f7880..b9f6364 100644 --- a/payment-channel-dot/README.md +++ b/payment-channel-dot/README.md @@ -4,11 +4,22 @@ This demo connects to our [Pallet] that runs on a [Polkadot Node] by using our [ ## Example Walkthrough -In a first terminal, start a development [Polkadot Node]: +In another terminal, clone and start a local [Polkadot Node]: + +**WARNING**: only working with a newer version of Polkadot Node from branch `update_substrate` + +To build the Polkadot Node, you need [Rust Developer Environment]. + ```sh -docker run --rm -it -p 9944:9944 ghcr.io/perun-network/polkadot-test-node +git clone git@github.com:perun-network/perun-polkadot-node.git + +cd perun-polkadot-node/node + +cargo run --release -- --dev --tmp ``` +Wait around 10 seconds for the Node to start-up. + In a second terminal, run the demo ```sh cd payment-channel-dot/ @@ -18,4 +29,5 @@ go run . [Pallet]: https://github.com/perun-network/perun-polkadot-pallet/ [Polkadot Node]: https://github.com/perun-network/perun-polkadot-node -[Polkadot Backend]: https://github.com/perun-network/perun-polkadot-backend \ No newline at end of file +[Polkadot Backend]: https://github.com/perun-network/perun-polkadot-backend +[Rust Developer Environment]: https://github.com/perun-network/perun-polkadot-node/blob/update_substrate/node/doc/rust-setup.md \ No newline at end of file diff --git a/payment-channel-dot/client/address.go b/payment-channel-dot/client/address.go new file mode 100644 index 0000000..8ae298d --- /dev/null +++ b/payment-channel-dot/client/address.go @@ -0,0 +1,60 @@ +// Copyright 2022 - See NOTICE file for copyright holders. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package client + +import ( + wallet "github.com/perun-network/perun-polkadot-backend/wallet/sr25519" + + "perun.network/go-perun/wire" +) + +// Address is a wrapper for wallet.Address. +type Address struct { + *wallet.Address +} + +// NewAddress returns a new address. +func NewAddress() *Address { + return &Address{} +} + +// Equal returns whether the two addresses are equal. +func (a Address) Equal(b wire.Address) bool { + bTyped, ok := b.(*Address) + if !ok { + panic("wrong type") + } + return a.Address.Equal(bTyped.Address) +} + +// Cmp compares the byte representation of two addresses. For `a.Cmp(b)` +// returns -1 if a < b, 0 if a == b, 1 if a > b. +func (a Address) Cmp(b wire.Address) int { + bTyped, ok := b.(*Address) + if !ok { + panic("wrong type") + } + return a.Address.Cmp(bTyped.Address) +} + +// MarshalBinay returns the binary representation of the address. +func (a Address) MarshalBinay() ([]byte, error) { + return a.Address.MarshalBinary() +} + +// UnmarshalBinary decodes the binary representation of the address. +func (a *Address) UnmarshalBinary(data []byte) error { + return a.Address.UnmarshalBinary(data) +} diff --git a/payment-channel-dot/client/channel.go b/payment-channel-dot/client/channel.go index 835a440..dc2600b 100644 --- a/payment-channel-dot/client/channel.go +++ b/payment-channel-dot/client/channel.go @@ -26,12 +26,11 @@ func newPaymentChannel(ch *client.Channel, currency channel.Asset) *PaymentChann func (c PaymentChannel) SendPayment(amount float64) { // Transfer the given amount from us to peer. // Use UpdateBy to update the channel state. - err := c.ch.UpdateBy(context.TODO(), func(state *channel.State) error { // We use context.TODO to keep the code simple. + err := c.ch.Update(context.TODO(), func(state *channel.State) { // We use context.TODO to keep the code simple. plancks := DotToPlanck(big.NewFloat(amount)) actor := c.ch.Idx() peer := 1 - actor state.Allocation.TransferBalance(actor, peer, c.currency, plancks) - return nil }) if err != nil { panic(err) // We panic on error to keep the code simple. @@ -39,12 +38,11 @@ func (c PaymentChannel) SendPayment(amount float64) { } // Settle settles the payment channel and withdraws the funds. -func (c PaymentChannel) Settle() { +func (c PaymentChannel) Settle(secondary bool) { // Finalize the channel to enable fast settlement. if !c.ch.State().IsFinal { - err := c.ch.UpdateBy(context.TODO(), func(state *channel.State) error { + err := c.ch.Update(context.TODO(), func(state *channel.State) { state.IsFinal = true - return nil }) if err != nil { panic(err) @@ -52,7 +50,7 @@ func (c PaymentChannel) Settle() { } // Settle concludes the channel and withdraws the funds. - err := c.ch.Settle(context.TODO(), false) + err := c.ch.Settle(context.TODO(), secondary) if err != nil { panic(err) } diff --git a/payment-channel-dot/client/client.go b/payment-channel-dot/client/client.go index bfa6187..5df7ac5 100644 --- a/payment-channel-dot/client/client.go +++ b/payment-channel-dot/client/client.go @@ -17,12 +17,13 @@ package client import ( "context" "fmt" - "github.com/centrifuge/go-substrate-rpc-client/v3/types" + "math/big" + + "github.com/centrifuge/go-substrate-rpc-client/v4/types" dotchannel "github.com/perun-network/perun-polkadot-backend/channel" "github.com/perun-network/perun-polkadot-backend/channel/pallet" dot "github.com/perun-network/perun-polkadot-backend/pkg/substrate" dotwallet "github.com/perun-network/perun-polkadot-backend/wallet/sr25519" - "math/big" "perun.network/go-perun/channel" "perun.network/go-perun/client" "perun.network/go-perun/wallet" @@ -35,8 +36,9 @@ import ( // PaymentClient is a payment channel client. type PaymentClient struct { - perunClient *client.Client // The core Perun client. - account wallet.Address // The account we use for on-chain and off-chain transactions. + perunClient *client.Client // The core Perun client. + account wallet.Account // The account we use for on-chain and off-chain transactions. + waddress wire.Address currency channel.Asset // The currency we expect to get paid in. channels chan *PaymentChannel // Accepted payment channels. } @@ -47,11 +49,11 @@ func SetupPaymentClient( w *dotwallet.Wallet, // w is the wallet used to resolve addresses to accounts for channels. acc wallet.Account, // acc is the account to be used for signing transactions. nodeURL string, // nodeURL is the URL of the blockchain node. - networkId dot.NetworkID, // networkId is the identifier of the blockchain. + networkID dot.NetworkID, // networkId is the identifier of the blockchain. queryDepth types.BlockNumber, // queryDepth is the number of blocks being evaluated when looking for events. ) (*PaymentClient, error) { // Connect to backend. - api, err := dot.NewAPI(nodeURL, networkId) + api, err := dot.NewAPI(nodeURL, networkID) if err != nil { panic(err) } @@ -68,7 +70,8 @@ func SetupPaymentClient( } // Setup Perun client. - waddr := dotwallet.AsAddr(acc.Address()) + waddr := &Address{Address: dotwallet.AsAddr(acc.Address())} + perunClient, err := client.New(waddr, bus, funder, adj, w, watcher) if err != nil { return nil, errors.WithMessage(err, "creating client") @@ -77,8 +80,9 @@ func SetupPaymentClient( // Create client and start request handler. c := &PaymentClient{ perunClient: perunClient, - account: waddr, - currency: &dotchannel.Asset, + account: acc, + waddress: waddr, + currency: dotchannel.Asset, channels: make(chan *PaymentChannel, 1), } @@ -91,7 +95,7 @@ func (c *PaymentClient) OpenChannel(peer wire.Address, amount float64) *PaymentC // We define the channel participants. The proposer has always index 0. Here // we use the on-chain addresses as off-chain addresses, but we could also // use different ones. - participants := []wire.Address{c.account, peer} + participants := []wire.Address{c.WireAddress(), peer} // We create an initial allocation which defines the starting balances. initBal := DotToPlanck(big.NewFloat(amount)) @@ -105,7 +109,7 @@ func (c *PaymentClient) OpenChannel(peer wire.Address, amount float64) *PaymentC challengeDuration := uint64(10) // On-chain challenge duration in seconds. proposal, err := client.NewLedgerChannelProposal( challengeDuration, - c.account, + c.account.Address(), initAlloc, participants, ) diff --git a/payment-channel-dot/client/handle.go b/payment-channel-dot/client/handle.go index bea1870..f343bf3 100644 --- a/payment-channel-dot/client/handle.go +++ b/payment-channel-dot/client/handle.go @@ -18,17 +18,18 @@ import ( "context" "fmt" "log" + "perun.network/go-perun/channel" "perun.network/go-perun/client" ) // HandleProposal is the callback for incoming channel proposals. func (c *PaymentClient) HandleProposal(p client.ChannelProposal, r *client.ProposalResponder) { - lcp, err := func() (*client.LedgerChannelProposal, error) { + lcp, err := func() (*client.LedgerChannelProposalMsg, error) { // Ensure that we got a ledger channel proposal. - lcp, ok := p.(*client.LedgerChannelProposal) + lcp, ok := p.(*client.LedgerChannelProposalMsg) if !ok { - return nil, fmt.Errorf("Invalid proposal type: %T\n", p) + return nil, fmt.Errorf("invalid proposal type: %T", p) } // Check that we have the correct number of participants. @@ -38,8 +39,8 @@ func (c *PaymentClient) HandleProposal(p client.ChannelProposal, r *client.Propo // Check that the channel has the expected assets and funding balances. const assetIdx, clientIdx, peerIdx = 0, 0, 1 - if err := channel.AssetsAssertEqual(lcp.InitBals.Assets, []channel.Asset{c.currency}); err != nil { - return nil, fmt.Errorf("Invalid assets: %v\n", err) + if err := channel.AssertAssetsEqual(lcp.InitBals.Assets, []channel.Asset{c.currency}); err != nil { + return nil, fmt.Errorf("invalid assets: %v", err) } else if lcp.FundingAgreement[assetIdx][clientIdx].Cmp(lcp.FundingAgreement[assetIdx][peerIdx]) != 0 { return nil, fmt.Errorf("Invalid funding balance") } @@ -51,7 +52,7 @@ func (c *PaymentClient) HandleProposal(p client.ChannelProposal, r *client.Propo // Create a channel accept message and send it. accept := lcp.Accept( - c.account, // The account we use in the channel. + c.account.Address(), // The account we use in the channel. client.WithRandomNonce(), // Our share of the channel nonce. ) ch, err := r.Accept(context.TODO(), accept) @@ -71,7 +72,7 @@ func (c *PaymentClient) HandleProposal(p client.ChannelProposal, r *client.Propo func (c *PaymentClient) HandleUpdate(cur *channel.State, next client.ChannelUpdate, r *client.UpdateResponder) { // We accept every update that increases our balance. err := func() error { - err := channel.AssetsAssertEqual(cur.Assets, next.State.Assets) + err := channel.AssertAssetsEqual(cur.Assets, next.State.Assets) if err != nil { return fmt.Errorf("Invalid assets: %v", err) } diff --git a/payment-channel-dot/client/util.go b/payment-channel-dot/client/util.go index b10d6e4..3ccc625 100644 --- a/payment-channel-dot/client/util.go +++ b/payment-channel-dot/client/util.go @@ -15,20 +15,21 @@ package client import ( - dot "github.com/perun-network/perun-polkadot-backend/pkg/substrate" "math/big" + + dot "github.com/perun-network/perun-polkadot-backend/pkg/substrate" "perun.network/go-perun/wallet" "perun.network/go-perun/wire" ) // WalletAddress returns the wallet address of the client. func (c *PaymentClient) WalletAddress() wallet.Address { - return c.account + return c.account.Address() } // WireAddress returns the wire address of the client. func (c *PaymentClient) WireAddress() wire.Address { - return c.account + return c.waddress } // DotToPlanck converts a given amount in Dot to Planck. diff --git a/payment-channel-dot/go.mod b/payment-channel-dot/go.mod index 25ebac8..384b6c1 100644 --- a/payment-channel-dot/go.mod +++ b/payment-channel-dot/go.mod @@ -1,38 +1,43 @@ module perun.network/perun-examples/payment-channel -go 1.20 +go 1.21 + +toolchain go1.21.4 require ( - github.com/centrifuge/go-substrate-rpc-client/v3 v3.0.2 - github.com/perun-network/perun-polkadot-backend v0.0.0-20211122151932-1cf5c72ae46f + github.com/centrifuge/go-substrate-rpc-client/v4 v4.2.1 + github.com/perun-network/perun-polkadot-backend v0.2.1-0.20240411100708-029d9632b748 github.com/pkg/errors v0.9.1 - perun.network/go-perun v0.8.0 + perun.network/go-perun v0.10.6 ) require ( - github.com/ChainSafe/go-schnorrkel v0.0.0-20210318173838-ccb5cd955283 // indirect + github.com/ChainSafe/go-schnorrkel v1.1.0 // indirect github.com/btcsuite/btcd v0.21.0-beta // indirect - github.com/cespare/xxhash/v2 v2.1.2 // indirect + github.com/btcsuite/btcd/btcec/v2 v2.2.0 // indirect github.com/cosmos/go-bip39 v1.0.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect - github.com/deckarep/golang-set v1.7.1 // indirect - github.com/decred/base58 v1.0.3 // indirect + github.com/deckarep/golang-set v1.8.0 // indirect + github.com/decred/base58 v1.0.4 // indirect github.com/decred/dcrd/crypto/blake256 v1.0.0 // indirect - github.com/ethereum/go-ethereum v1.10.12 // indirect - github.com/go-stack/stack v1.8.0 // indirect - github.com/gorilla/websocket v1.4.2 // indirect + github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 // indirect + github.com/ethereum/go-ethereum v1.10.20 // indirect + github.com/go-stack/stack v1.8.1 // indirect + github.com/gorilla/websocket v1.5.0 // indirect github.com/gtank/merlin v0.1.1 // indirect github.com/gtank/ristretto255 v0.1.2 // indirect - github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 // indirect + github.com/mimoo/StrobeGo v0.0.0-20220103164710-9a04d6ca976b // indirect github.com/pierrec/xxHash v0.1.5 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/rs/cors v1.8.0 // indirect + github.com/rs/cors v1.8.2 // indirect github.com/sirupsen/logrus v1.8.1 // indirect - github.com/stretchr/testify v1.7.0 // indirect + github.com/stretchr/testify v1.7.2 // indirect github.com/vedhavyas/go-subkey v1.0.2 // indirect - golang.org/x/crypto v0.0.0-20210817164053-32db794688a5 // indirect + github.com/vedhavyas/go-subkey/v2 v2.0.0 // indirect + golang.org/x/crypto v0.7.0 // indirect golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect - golang.org/x/sys v0.0.0-20211210111614-af8b64212486 // indirect + golang.org/x/sys v0.6.0 // indirect gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect - gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + polycry.pt/poly-go v0.0.0-20220301085937-fb9d71b45a37 // indirect ) diff --git a/payment-channel-dot/go.sum b/payment-channel-dot/go.sum index 20d12fb..c0cc200 100644 --- a/payment-channel-dot/go.sum +++ b/payment-channel-dot/go.sum @@ -1,23 +1,3 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.43.0/go.mod h1:BOSR3VbTLkk6FDC/TcffxP4NF/FFBGA5ku+jvKOP7pg= -cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= -cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= -cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= -cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= -cloud.google.com/go v0.51.0/go.mod h1:hWtGJ6gnXH+KgDv+V0zFGDvpi07n3z8ZNj3T1RW0Gcw= -cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= -cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= -cloud.google.com/go/bigtable v1.2.0/go.mod h1:JcVAOl45lrTmQfLj7T6TxyMzIN/3FGGcFm+2xVAli2o= -cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= -cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= -cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= -cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= -cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= -collectd.org v0.3.0/go.mod h1:A/8DzQBkF6abtvrT2j/AU/4tiBgJWYyh0y/oB/4MlWE= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/Azure/azure-pipeline-go v0.2.1/go.mod h1:UGSo8XybXnIGZ3epmeBw7Jdz+HiUVpqIlpz/HKHylF4= github.com/Azure/azure-pipeline-go v0.2.2/go.mod h1:4rQ/NZncSvGqNkkOsNpOU1tgoNuIlp9AfUH5G1tvCHc= github.com/Azure/azure-storage-blob-go v0.7.0/go.mod h1:f9YQKtsG1nMisotuTPpO0tjNuEjKRYAcJU8/ydDI++4= @@ -34,45 +14,30 @@ github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbt github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/ChainSafe/go-schnorrkel v0.0.0-20201021020641-d3c6d3118d10/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= -github.com/ChainSafe/go-schnorrkel v0.0.0-20210318173838-ccb5cd955283 h1:bCAjrlKrO8Y9biIFMx2ejhXpG1x75mwKqbsL8dx5EOk= -github.com/ChainSafe/go-schnorrkel v0.0.0-20210318173838-ccb5cd955283/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= -github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= +github.com/ChainSafe/go-schnorrkel v1.1.0 h1:rZ6EU+CZFCjB4sHUE1jIu8VDoB/wRKZxoe1tkcO71Wk= +github.com/ChainSafe/go-schnorrkel v1.1.0/go.mod h1:ABkENxiP+cvjFiByMIZ9LYbRoNNLeBLiakC1XeTFxfE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 h1:fLjPD/aNc3UIOA6tDi6QXUemppXK3P9BI7mr2hd6gx8= github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= github.com/VictoriaMetrics/fastcache v1.5.7/go.mod h1:ptDBkNMQI4RtmVo8VS/XwRY6RoTu1dAWCbrk+6WsEM8= -github.com/VictoriaMetrics/fastcache v1.6.0 h1:C/3Oi3EiBCqufydp1neRZkqcwmEiuRT9c3fqvvgKm5o= -github.com/VictoriaMetrics/fastcache v1.6.0/go.mod h1:0qHz5QP0GMX4pfmMA/zt5RgfNuXJrTP0zS7DqpHGGTw= github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= -github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= -github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= -github.com/apache/arrow/go/arrow v0.0.0-20191024131854-af6fa24be0db/go.mod h1:VTxUBvSJ3s3eHAg65PNgrsn5BtqCRPdmyXh6rAfdxN0= github.com/aristanetworks/goarista v0.0.0-20170210015632-ea17b1a17847/go.mod h1:D/tb0zPVXnP7fmsLZjtdUhSsumbK/ij54UXjjVgMGxQ= github.com/aws/aws-sdk-go v1.25.48/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go-v2 v1.2.0/go.mod h1:zEQs02YRBw1DjK0PoJv3ygDYOFTre1ejlJWl8FwAuQo= -github.com/aws/aws-sdk-go-v2/config v1.1.1/go.mod h1:0XsVy9lBI/BCXm+2Tuvt39YmdHwS5unDQmxZOYe8F5Y= -github.com/aws/aws-sdk-go-v2/credentials v1.1.1/go.mod h1:mM2iIjwl7LULWtS6JCACyInboHirisUUdkBPoTHMOUo= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.0.2/go.mod h1:3hGg3PpiEjHnrkrlasTfxFqUsZ2GCk/fMUn4CbKgSkM= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.0.2/go.mod h1:45MfaXZ0cNbeuT0KQ1XJylq8A6+OpVV2E5kvY/Kq+u8= -github.com/aws/aws-sdk-go-v2/service/route53 v1.1.1/go.mod h1:rLiOUrPLW/Er5kRcQ7NkwbjlijluLsrIbu/iyl35RO4= -github.com/aws/aws-sdk-go-v2/service/sso v1.1.1/go.mod h1:SuZJxklHxLAXgLTc1iFXbEWkXs7QRTQpCLGaKIprQW0= -github.com/aws/aws-sdk-go-v2/service/sts v1.1.1/go.mod h1:Wi0EBZwiz/K44YliU0EKxqTCJGUfYTWXrrBwkq736bM= -github.com/aws/smithy-go v1.1.0/go.mod h1:EzMw8dbp/YJL4A5/sbhGddag+NPT7q084agLbB9LgIw= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= -github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40/go.mod h1:8rLXio+WjiTceGBHIoTvn60HIbs7Hm7bcHjyrSqYB9c= -github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= github.com/btcsuite/btcd v0.0.0-20171128150713-2e60448ffcc6/go.mod h1:Dmm/EzmjnCiweXmzRIAiUWCInVmPgjkzgv5k4tVyXiQ= github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= github.com/btcsuite/btcd v0.21.0-beta h1:At9hIZdJW0s9E/fAz28nrz6AmcNlSVucCH796ZteX1M= github.com/btcsuite/btcd v0.21.0-beta/go.mod h1:ZSWyehm27aAuS9bvkATT+Xte3hjHZ+MRgMY/8NJ7K94= +github.com/btcsuite/btcd/btcec/v2 v2.2.0 h1:fzn1qaOt32TuLjFlkzYSsBC35Q3KUjT1SwPxiMSCF5k= +github.com/btcsuite/btcd/btcec/v2 v2.2.0/go.mod h1:U7MHm051Al6XmscBQ0BoNydpOTsFAn707034b5nY8zU= github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= github.com/btcsuite/btcutil v1.0.2/go.mod h1:j9HUFwoQRsZL3V4n+qG+CUnEGHOarIxfC3Le2Yhbcts= github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce h1:YtWJF7RHm2pYCvA5t0RPmAaLUhREsKuKd+SLhxFbFeQ= +github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce/go.mod h1:0DVlHczLPewLcPGEIeUEzfOJhqGPQ0mJJRDBtD307+o= github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= github.com/btcsuite/goleveldb v1.0.0/go.mod h1:QiK9vBlgftBg6rWQIj6wFzbPfRjiykIEhBH4obrXJ/I= @@ -80,269 +45,117 @@ github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= -github.com/c-bata/go-prompt v0.2.2/go.mod h1:VzqtzE2ksDBcdln8G7mk2RX9QyGjH+OVqOCSiVIqS34= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/centrifuge/go-substrate-rpc-client/v3 v3.0.2 h1:SQNaOeTmW2y2fmJgR5a7KIozjaOYi34GxafQ4efGc5U= -github.com/centrifuge/go-substrate-rpc-client/v3 v3.0.2/go.mod h1:ZYSX8OuIJgZ9aVdKLhIi1G4Rj42Ys4nZNsWW70yfCJc= +github.com/centrifuge/go-substrate-rpc-client/v4 v4.2.1 h1:io49TJ8IOIlzipioJc9pJlrjgdJvqktpUWYxVY5AUjE= +github.com/centrifuge/go-substrate-rpc-client/v4 v4.2.1/go.mod h1:k61SBXqYmnZO4frAJyH3iuqjolYrYsq79r8EstmklDY= github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= -github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cloudflare/cloudflare-go v0.10.2-0.20190916151808-a80f83b9add9/go.mod h1:1MxXX1Ux4x6mqPmjkUgTP1CdXIBXKX7T+Jk9Gxrmx+U= -github.com/cloudflare/cloudflare-go v0.14.0/go.mod h1:EnwdgGMaFOruiPZRFSgn+TsQ3hQ7C/YWzIGLeu5c304= -github.com/consensys/bavard v0.1.8-0.20210406032232-f3452dc9b572/go.mod h1:Bpd0/3mZuaj6Sj+PqrmIquiOKy397AKGThQPaGzNXAQ= -github.com/consensys/gnark-crypto v0.4.1-0.20210426202927-39ac3d4b3f1f/go.mod h1:815PAHg3wvysy0SyIqanF8gZ0Y1wjk/hrDHD/iT88+Q= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= -github.com/dave/jennifer v1.2.0/go.mod h1:fIb+770HOpJ2fmN9EPPKOqm1vMGhB+TwXKMZhrIygKg= github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/deckarep/golang-set v0.0.0-20180603214616-504e848d77ea/go.mod h1:93vsz/8Wt4joVM7c2AVqh+YRMiUSc14yDtF28KmMOgQ= -github.com/deckarep/golang-set v1.7.1 h1:SCQV0S6gTtp6itiFrTqI+pfmJ4LN85S1YzhDf9rTHJQ= -github.com/deckarep/golang-set v1.7.1/go.mod h1:93vsz/8Wt4joVM7c2AVqh+YRMiUSc14yDtF28KmMOgQ= -github.com/decred/base58 v1.0.3 h1:KGZuh8d1WEMIrK0leQRM47W85KqCAdl2N+uagbctdDI= +github.com/deckarep/golang-set v1.8.0 h1:sk9/l/KqpunDwP7pSjUg0keiOOLEnOBHzykLrsPppp4= +github.com/deckarep/golang-set v1.8.0/go.mod h1:5nI87KwE7wgsBU1F4GKAw2Qod7p5kyS383rP6+o6qqo= github.com/decred/base58 v1.0.3/go.mod h1:pXP9cXCfM2sFLb2viz2FNIdeMWmZDBKG3ZBYbiSM78E= +github.com/decred/base58 v1.0.4 h1:QJC6B0E0rXOPA8U/kw2rP+qiRJsUaE2Er+pYb3siUeA= +github.com/decred/base58 v1.0.4/go.mod h1:jJswKPEdvpFpvf7dsDvFZyLT22xZ9lWqEByX38oGd9E= github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0= github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 h1:YLtO71vCjJRCBcrPMtQ9nqBsqpA1m5sE92cU+pd5Mcc= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs= github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= -github.com/deepmap/oapi-codegen v1.6.0/go.mod h1:ryDa9AgbELGeB+YEXE1dR53yAjHwFvE9iAUlWl9Al3M= -github.com/deepmap/oapi-codegen v1.8.2/go.mod h1:YLgSKSDv/bZQB7N4ws6luhozi3cEdRktEqrX88CvjIw= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-bitstream v0.0.0-20180413035011-3522498ce2c8/go.mod h1:VMaSuZ+SZcx/wljOQKvp5srsbCiKDEb6K2wC4+PiBmQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/dlclark/regexp2 v1.2.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= -github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= github.com/docker/docker v1.4.2-0.20180625184442-8e610b2b55bf/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/dop251/goja v0.0.0-20200721192441-a695b0cdd498/go.mod h1:Mw6PkjjMXWbTj+nnj4s3QPXq1jaT0s5pC0iFD4+BOAA= -github.com/dop251/goja v0.0.0-20211011172007-d99e4b8cbf48/go.mod h1:R9ET47fwRVRPZnOGvHxxhuZcbrMCuiqOz3Rlrh4KSnk= -github.com/dop251/goja_nodejs v0.0.0-20210225215109-d91c329300e7/go.mod h1:hn7BA7c8pLvoGndExHudxTDKZ84Pyvv+90pbBjbTz0Y= github.com/dvyukov/go-fuzz v0.0.0-20200318091601-be3528f3a813/go.mod h1:11Gm+ccJnvAhCNLlf5+cS9KjtbaD5I5zaZpFMsTHWTw= -github.com/eclipse/paho.mqtt.golang v1.2.0/go.mod h1:H9keYFcgq3Qr5OUJm/JZI/i6U7joQ8SYLhZwfeOo6Ts= github.com/edsrzf/mmap-go v0.0.0-20160512033002-935e0e8a636c/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= -github.com/edsrzf/mmap-go v1.0.0 h1:CEBF7HpRnUCSJgGUb5h1Gm7e3VkmVDrR8lvWVLtrOFw= -github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/ethereum/go-ethereum v1.9.25/go.mod h1:vMkFiYLHI4tgPw4k2j4MHKoovchFE8plZ0M9VMk4/oM= -github.com/ethereum/go-ethereum v1.10.4/go.mod h1:nEE0TP5MtxGzOMd7egIrbPJMQBnhVU3ELNxhBglIzhg= -github.com/ethereum/go-ethereum v1.10.12 h1:el/KddB3gLEsnNgGQ3SQuZuiZjwnFTYHe5TwUet5Om4= -github.com/ethereum/go-ethereum v1.10.12/go.mod h1:W3yfrFyL9C1pHcwY5hmRHVDaorTiQxhYBkKyu5mEDHw= +github.com/ethereum/go-ethereum v1.10.20 h1:75IW830ClSS40yrQC1ZCMZCt5I+zU16oqId2SiQwdQ4= +github.com/ethereum/go-ethereum v1.10.20/go.mod h1:LWUN82TCHGpxB3En5HVmLLzPD7YSrEUFmFfN1nKkVN0= github.com/fatih/color v1.3.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fjl/memsize v0.0.0-20180418122429-ca190fb6ffbc/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= -github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= -github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= -github.com/getkin/kin-openapi v0.53.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= -github.com/getkin/kin-openapi v0.61.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= -github.com/gin-gonic/gin v1.5.0/go.mod h1:Nd6IXA8m5kNZdNEHMBd93KT+mdY3+bewLgRvmCsR2Do= -github.com/glycerine/go-unsnap-stream v0.0.0-20180323001048-9f0cb55181dd/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE= -github.com/glycerine/goconvey v0.0.0-20190410193231-58a59202ab31/go.mod h1:Ogl1Tioa0aV7gstGFO7KhffUsb9M4ydbEbbxpcEDc24= -github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJpoZOs= -github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= -github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-ole/go-ole v1.2.1 h1:2lOsA72HgjxAuMlKpFiCbHTvu44PIVkZ5hqm3RSdI/E= github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= -github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-playground/locales v0.12.1/go.mod h1:IUMDtCfWo/w/mtMfIE/IG2K+Ey3ygWanZIBtBW0W2TM= -github.com/go-playground/universal-translator v0.16.0/go.mod h1:1AnU7NaIRDWWzGEKwgtJRd2xk99HeFyHw3yid4rvQIY= github.com/go-sourcemap/sourcemap v2.1.2+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= -github.com/go-sourcemap/sourcemap v2.1.3+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= -github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= -github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/go-stack/stack v1.8.1 h1:ntEHSVwIt7PNXNpgPmVfMrNhLtgjlmnZha2kOpuRiDw= +github.com/go-stack/stack v1.8.1/go.mod h1:dcoOX6HbPZSZptuspn9bctJ+N/CnF5gGygcUP3XYfe4= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= -github.com/golang/geo v0.0.0-20190916061304-5b978397cfec/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3-0.20201103224600-674baa8c7fc3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= -github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golangci/lint-1 v0.0.0-20181222135242-d2cdd8c08219/go.mod h1:/X8TswGSh1pIozq4ZwCfxS0WA5JGXguxk94ar/4c87Y= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/flatbuffers v1.11.0/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gofuzz v1.1.1-0.20200604201612-c04b05f3adfa h1:Q75Upo5UN4JbPFURXZ8nLKYUvF85dyFRop/vQ0Rv+64= github.com/google/gofuzz v1.1.1-0.20200604201612-c04b05f3adfa/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/uuid v1.1.5 h1:kxhtnfFVi+rYdOALN0B3k9UT86zVJKfBimRaciULW4I= -github.com/google/uuid v1.1.5/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/websocket v1.4.1-0.20190629185528-ae1634f6a989/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= -github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= +github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/graph-gophers/graphql-go v0.0.0-20191115155744-f33e81362277/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= -github.com/graph-gophers/graphql-go v0.0.0-20201113091052-beb923fada29/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= github.com/gtank/merlin v0.1.1-0.20191105220539-8318aed1a79f/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= github.com/gtank/merlin v0.1.1 h1:eQ90iG7K9pOhtereWsmyRJ6RAwcP4tHTDBHXNg+u5is= github.com/gtank/merlin v0.1.1/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= github.com/gtank/ristretto255 v0.1.2 h1:JEqUCPA1NvLq5DwYtuzigd7ss8fwbYay9fi4/5uMzcc= github.com/gtank/ristretto255 v0.1.2/go.mod h1:Ph5OpO6c7xKUGROZfWVLiJf9icMDwUeIvY4OmlYW69o= -github.com/hashicorp/go-bexpr v0.1.10/go.mod h1:oxlubA2vC/gFVfX1A6JGp7ls7uCDlfJn732ehYYg+g0= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= -github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d h1:dg1dEPuWpEqDnvIw251EVy4zlP8gWbsGj4BsUKCRpYs= -github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= -github.com/holiman/bloomfilter/v2 v2.0.3 h1:73e0e/V0tCydx14a0SCYS/EWCxgwLZ18CZcZKVu0fao= -github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= github.com/holiman/uint256 v1.1.1/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= -github.com/holiman/uint256 v1.2.0 h1:gpSYcPLWGv4sG43I2mVLiDZCNDh/EpGjSk8tmtxitHM= -github.com/holiman/uint256 v1.2.0/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/huin/goupnp v1.0.0/go.mod h1:n9v9KO1tAxYH82qOn+UTIFQDmx5n1Zxd/ClZDMX7Bnc= -github.com/huin/goupnp v1.0.1-0.20210310174557-0ca763054c88/go.mod h1:nNs7wvRfN1eKaMknBydLNQU6146XQim8t4h+q90biWo= -github.com/huin/goupnp v1.0.2/go.mod h1:0dxJBVBHqTMjIUMkESDTNgOOx/Mw5wYIfyFmdzSamkM= github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= -github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/influxdata/flux v0.65.1/go.mod h1:J754/zds0vvpfwuq7Gc2wRdVwEodfpCFM7mYlOw2LqY= github.com/influxdata/influxdb v1.2.3-0.20180221223340-01288bdb0883/go.mod h1:qZna6X/4elxqT3yI9iZYdZrWWdeFOOprn86kgg4+IzY= -github.com/influxdata/influxdb v1.8.3/go.mod h1:JugdFhsvvI8gadxOI6noqNeeBHvWNTbfYGtiAn+2jhI= -github.com/influxdata/influxdb-client-go/v2 v2.4.0/go.mod h1:vLNHdxTJkIf2mSLvGrpj8TCcISApPoXkaxP8g9uRlW8= -github.com/influxdata/influxql v1.1.1-0.20200828144457-65d3ef77d385/go.mod h1:gHp9y86a/pxhjJ+zMjNXiQAA197Xk9wLxaz+fGG+kWk= -github.com/influxdata/line-protocol v0.0.0-20180522152040-32c6aa80de5e/go.mod h1:4kt73NQhadE3daL3WhR5EJ/J2ocX0PZzwxQ0gXJ7oFE= -github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= -github.com/influxdata/line-protocol v0.0.0-20210311194329-9aa0e372d097/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= -github.com/influxdata/promql/v2 v2.12.0/go.mod h1:fxOPu+DY0bqCTCECchSRtWfc+0X19ybifQhZoQNF5D8= -github.com/influxdata/roaring v0.4.13-0.20180809181101-fc520f41fab6/go.mod h1:bSgUQ7q5ZLSO+bKBGqJiCBGAl+9DxyW63zLTujjUlOE= -github.com/influxdata/tdigest v0.0.0-20181121200506-bf2b5ad3c0a9/go.mod h1:Js0mqiSBE6Ffsg94weZZ2c+v/ciT8QRHFOap7EKDrR0= -github.com/influxdata/usage-client v0.0.0-20160829180054-6d3895376368/go.mod h1:Wbbw6tYNvwa5dlB6304Sd+82Z3f7PmVZHVKU637d4po= github.com/jackpal/go-nat-pmp v1.0.2-0.20160603034137-1fa385a6f458/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= github.com/jedisct1/go-minisign v0.0.0-20190909160543-45766022959e/go.mod h1:G1CVv03EnqU1wYL2dFwXxW2An0az9JTl/ZsqXQeBlkU= github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= -github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= -github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/jsternberg/zap-logfmt v1.0.0/go.mod h1:uvPs/4X51zdkcm5jXl5SYoN+4RK21K8mysFmDaM/h+o= -github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.1.1-0.20170430222011-975b5c4c7c21/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= -github.com/jwilder/encoding v0.0.0-20170811194829-b4e1701a28ef/go.mod h1:Ct9fl0F6iIOGgxJ5npU/IUOhOhqlVrGjyIZc8/MagT0= github.com/karalabe/usb v0.0.0-20190919080040-51dc0efba356/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= -github.com/karalabe/usb v0.0.0-20211005121534-4c5740d64559/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= -github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= -github.com/klauspost/compress v1.4.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= -github.com/klauspost/crc32 v0.0.0-20161016154125-cb6bfca970f6/go.mod h1:+ZoRqAPRLkC4NPOvfYeR5KNOrY6TD+/sAC3HXPZgDYg= -github.com/klauspost/pgzip v1.0.2-0.20170402124221-0bf5dcad4ada/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= +github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= -github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= -github.com/labstack/echo/v4 v4.2.1/go.mod h1:AA49e0DZ8kk5jTOOCKNuPR6oTnBS0dYiM4FW1e6jwpg= -github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= -github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8= -github.com/leodido/go-urn v1.1.0/go.mod h1:+cyI34gQWZcE1eQU7NVgKkkzdXDQHr1dBMtdAPozLkw= -github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/matryer/moq v0.0.0-20190312154309-6cfb0558e1bd/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.0/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-ieproxy v0.0.0-20190610004146-91bb50d98149/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= github.com/mattn/go-ieproxy v0.0.0-20190702010315-6dee0af9227d/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= -github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.5-0.20180830101745-3fb116b82035/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= -github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0= -github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= -github.com/mattn/go-tty v0.0.0-20180907095812-13ff1204f104/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= -github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 h1:QRUSJEgZn2Snx0EmT/QLXibWjSUDjKWvXIT19NBVp94= -github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= -github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/pointerstructure v1.2.0/go.mod h1:BRAsLI5zgXmw97Lf6s25bs8ohIXc3tViBH44KcwB2g4= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae/go.mod h1:qAyveg+e4CE+eKJXWVjKXM4ck2QobLqTDytGJbLLhJg= -github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mimoo/StrobeGo v0.0.0-20220103164710-9a04d6ca976b h1:QrHweqAtyJ9EwCaGHBu1fghwxIPiopAHV06JlXrMHjk= +github.com/mimoo/StrobeGo v0.0.0-20220103164710-9a04d6ca976b/go.mod h1:xxLb2ip6sSUts3g1irPVHyk/DGslwQsNOo9I7smJfNU= github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/olekukonko/tablewriter v0.0.2-0.20190409134802-7e037d187b0c/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= -github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= @@ -351,114 +164,76 @@ github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5 github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/opentracing/opentracing-go v1.0.3-0.20180606204148-bd9c31933947/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/paulbellamy/ratecounter v0.2.0/go.mod h1:Hfx1hDpSGoqxkVVpBi/IlYD7kChlfo5C6hzIHwPqfFE= github.com/pborman/uuid v0.0.0-20170112150404-1b00554d8222/go.mod h1:VyrYX9gd7irzKovcSS6BIIEwPRkP2Wm2m9ufcdFSJ34= -github.com/perun-network/perun-polkadot-backend v0.0.0-20211122151932-1cf5c72ae46f h1:LouQjHI/DAlnK55c0g3ncGhzSuKt0srhhkwYKdMaHV8= -github.com/perun-network/perun-polkadot-backend v0.0.0-20211122151932-1cf5c72ae46f/go.mod h1:KKADit6bdfKUM/OysZDSZmMYbGsY1FqjK1XTHtjFYZM= -github.com/peterh/liner v1.0.1-0.20180619022028-8c1271fcf47f/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc= +github.com/perun-network/perun-polkadot-backend v0.2.1-0.20240411100708-029d9632b748 h1:nKTTy/mgfMza0x/qJ3ydzyAVwJfyPs/br6OOeP4IeTw= +github.com/perun-network/perun-polkadot-backend v0.2.1-0.20240411100708-029d9632b748/go.mod h1:qBlduBvrtUUz86dcqxEzgTID7psZ000WyucSWO2M6Qk= +github.com/perun-network/perun-polkadot-backend v0.2.1-0.20240411110854-aa70731ff402 h1:TcD8Elq1V5pD7iSI8pAQ7rxUhpUCcGCHsfEeA7Hyr68= +github.com/perun-network/perun-polkadot-backend v0.2.1-0.20240411110854-aa70731ff402/go.mod h1:qBlduBvrtUUz86dcqxEzgTID7psZ000WyucSWO2M6Qk= +github.com/perun-network/perun-polkadot-backend v0.2.1-0.20240411111432-5bccd6f20096 h1:rK2QInr3++ygFsLAsF51QeWGdBsa24/jMVoy5KFfw9E= +github.com/perun-network/perun-polkadot-backend v0.2.1-0.20240411111432-5bccd6f20096/go.mod h1:qBlduBvrtUUz86dcqxEzgTID7psZ000WyucSWO2M6Qk= +github.com/perun-network/perun-polkadot-backend v0.2.1-0.20240411111704-55ddf14c5120 h1:ICur8MDnChbo/+lWAnXvIYNh/wXaisAKED86dQuT9mw= +github.com/perun-network/perun-polkadot-backend v0.2.1-0.20240411111704-55ddf14c5120/go.mod h1:qBlduBvrtUUz86dcqxEzgTID7psZ000WyucSWO2M6Qk= +github.com/perun-network/perun-polkadot-backend v0.2.1-0.20240411112746-dcbe505e1b76 h1:UAi+Qyxkm00WDO1rp8xNDi4Bupl/Mlytg3+lauWK8J4= +github.com/perun-network/perun-polkadot-backend v0.2.1-0.20240411112746-dcbe505e1b76/go.mod h1:qBlduBvrtUUz86dcqxEzgTID7psZ000WyucSWO2M6Qk= +github.com/perun-network/perun-polkadot-backend v0.2.1-0.20240411114920-37b11e7a1c40 h1:rwgnx1gMPL5NmcGFfsNnTQUX2zTp5bqLq2WmdImSvW4= +github.com/perun-network/perun-polkadot-backend v0.2.1-0.20240411114920-37b11e7a1c40/go.mod h1:qBlduBvrtUUz86dcqxEzgTID7psZ000WyucSWO2M6Qk= github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= -github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= -github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pierrec/xxHash v0.1.5 h1:n/jBpwTHiER4xYvK3/CdPVnLDPchj8eTJFFLUb4QHBo= github.com/pierrec/xxHash v0.1.5/go.mod h1:w2waW5Zoa/Wc4Yqe0wgrIYAGKqRMf7czn2HNKXmuL+I= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/term v0.0.0-20180730021639-bffc007b7fd5/go.mod h1:eCbImbZ95eXtAUIbLAuAVnBnwf83mjf6QIVH8SHYwqQ= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/tsdb v0.6.2-0.20190402121629-4f204dcbc150/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= -github.com/prometheus/tsdb v0.7.1 h1:YZcsG11NqnK4czYLrWd9mpEuAJIHVQLwdrleYfszMAA= -github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= -github.com/retailnext/hllpp v1.0.1-0.20180308014038-101a6d2f8b52/go.mod h1:RDpi1RftBQPUCDRw6SmxeaREsAaRKnOclghuzp/WRzc= -github.com/rjeczalik/notify v0.9.1 h1:CLCKso/QK1snAlnhNR/CNvNiFU2saUtjV0bx3EwNeCE= github.com/rjeczalik/notify v0.9.1/go.mod h1:rKwnCoCGeuQnwBtTSPL9Dad03Vh2n40ePRrjvIXnJho= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rs/cors v0.0.0-20160617231935-a62a804a8a00/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= -github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= -github.com/rs/cors v1.8.0 h1:P2KMzcFwrPoSjkF1WLRPsp3UMLyql8L4v9hQpVeK5so= -github.com/rs/cors v1.8.0/go.mod h1:EBwu+T5AvHOcXwvZIkQFjUN6s8Czyqw12GL/Y0tUyRM= +github.com/rs/cors v1.8.2 h1:KCooALfAYGs415Cwu5ABvv9n9509fSiG5SQJn/AQo4U= +github.com/rs/cors v1.8.2/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/rs/xhandler v0.0.0-20160618193221-ed27b6fd6521/go.mod h1:RvLn4FgxWubrpZHtQLnOf6EwhN2hEMusxZOhcW9H3UQ= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/segmentio/kafka-go v0.1.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= -github.com/segmentio/kafka-go v0.2.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= -github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/shirou/gopsutil v2.20.5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible h1:Bn1aCHHRnjv4Bl16T8rcaFjYSrGrIZvpiGO6P3Q4GpU= github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q= github.com/steakknife/bloomfilter v0.0.0-20180922174646-6819c0d2a570/go.mod h1:8OR4w3TdeIHIh1g6EMY5p0gVNOovcWC+1vpc7naMuAw= github.com/steakknife/hamming v0.0.0-20180906055917-c99c65617cd3/go.mod h1:hpGUWaI9xL8pRQCTXQgocU38Qw1g0Us7n5PxxTwTCYU= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1 h1:2vfRuCMp5sSVIDSqO8oNnWJq7mPa6KVP3iPIwFBuy8A= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.2.0/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.2 h1:4jaiDzPyXQvSd7D0EjG45355tLlV3VOECpq10pLC+8s= +github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca/go.mod h1:u2MKkTVTVJWe5D1rCvame8WqhBd88EuIwODJZ1VHCPM= -github.com/syndtr/goleveldb v1.0.1-0.20210305035536-64b5b1c73954/go.mod h1:u2MKkTVTVJWe5D1rCvame8WqhBd88EuIwODJZ1VHCPM= -github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= -github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= -github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= github.com/tklauser/go-sysconf v0.3.5 h1:uu3Xl4nkLzQfXNsWn15rPc/HQCJKObbt1dKJeWp3vU4= github.com/tklauser/go-sysconf v0.3.5/go.mod h1:MkWzOF4RMCshBAMXuhXJs64Rte09mITnppBXY/rYEFI= github.com/tklauser/numcpus v0.2.2 h1:oyhllyrScuYI6g+h/zUvNXNp1wy7x8qQy3t/piefldA= github.com/tklauser/numcpus v0.2.2/go.mod h1:x3qojaO3uyYt0i56EW/VUYs7uBvdl2fkfZFu0T9wgjM= github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= -github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= -github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= -github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= -github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= github.com/vedhavyas/go-subkey v1.0.2 h1:EW6U+1us4k38AtrBfFOEZTpW9FcF/cIUOxw/pHbNNQ0= github.com/vedhavyas/go-subkey v1.0.2/go.mod h1:T9SEs84XZxRULMZLWtIl48s9rBNE7h6GnkqTgJR8+MU= -github.com/willf/bitset v1.1.3/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= +github.com/vedhavyas/go-subkey/v2 v2.0.0 h1:LemDIsrVtRSOkp0FA8HxP6ynfKjeOj3BY2U9UNfeDMA= +github.com/vedhavyas/go-subkey/v2 v2.0.0/go.mod h1:95aZ+XDCWAUUynjlmi7BtPExjXgXxByE0WfBwbmIRH4= github.com/wsddn/go-ecdh v0.0.0-20161211032359-48726bab9208/go.mod h1:IotVbo4F+mw0EzQ08zFqg7pK3FebNXpaMsRy2RT+Ees= -github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -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/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190909091759-094676da4a83/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= @@ -466,205 +241,59 @@ golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20210817164053-32db794688a5 h1:HWj/xjIHfjYU5nVXpTM0s39J9CbLn7Cc5a7IC5rwsMQ= -golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/crypto v0.7.0 h1:AvwMYaRytfdeVt3u6mLaxYtErKYjxA2OXjJ1HHq6t3A= +golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= golang.org/x/exp v0.0.0-20190731235908-ec7cb31e5a56/go.mod h1:JhuoJpWY28nO4Vef9tZUw9qufEGTyX1+7lmHxV5q5G4= -golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= -golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= -golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= -golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= golang.org/x/mobile v0.0.0-20200801112145-973feb4309de/go.mod h1:skQtrUTUwhdJvXM/2KKJzY8pDgNr9I/FOMqDVRPBUS4= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.1.1-0.20191209134235-331c550502dd/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181011144130-49bb7cea24b1/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210220033124-5f55cee0dc0d/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200107162124-548cf772de50/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200824131525-c12d262b63d8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200826173525-f9321e4c35a6/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201221093633-bc327ba9c2f0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210316164454-77fc1eacc6aa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210420205809-ac73e9fd8988/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211210111614-af8b64212486 h1:5hpz5aRr+W1erYCL5JRhSUBJRph7l9XkNveoExlrKYk= -golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200108203644-89082a384178/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200117012304-6edc0a871e69/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= -gonum.org/v1/gonum v0.0.0-20181121035319-3f7ecaa7e8ca/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= -gonum.org/v1/gonum v0.6.0/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU= -gonum.org/v1/netlib v0.0.0-20181029234149-ec6d1f5cefe6/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= -gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= -gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= -google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= -google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190716160619-c506a9f90610/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200108215221-bd8f9a0ef82f/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -677,10 +306,7 @@ gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= -gopkg.in/go-playground/validator.v9 v9.29.1/go.mod h1:+c9/zcJMFNgbLvly1L1V+PpxWdVbfP1avr/N00E2vyQ= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce h1:+JknDZhAj8YMt7GC73Ei8pv4MzjDUNPHgQWJdtMAaDU= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= gopkg.in/olebedev/go-duktape.v3 v3.0.0-20200619000410-60c24ae608a6/go.mod h1:uAJfkITjFhyEEuUfm7bsmCZRbW5WRq8s9EY8HZ6hCns= @@ -688,22 +314,13 @@ gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWD gopkg.in/urfave/cli.v1 v1.20.0/go.mod h1:vuBzUtMdQeixQj8LVd+/98pzhxNGQoyuPBlsXHOQNO0= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -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.8.0 h1:ltGjAlv4Ep1WlR4G7xsCuRTw6Tbb1x+otQiZ9Dh20PM= -perun.network/go-perun v0.8.0/go.mod h1:VwcPIRO9hLyhHOjvl+8FZWtgh56c68E/miXGNPe2OdQ= -rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= +perun.network/go-perun v0.10.6 h1:uj1e33yfCSfE75DK/uwjNp+TwvGG85Qhi6HuYQ9EPrQ= +perun.network/go-perun v0.10.6/go.mod h1:BGBZC3npkX457u87pjDd0NEIXr1a4dsH4H/YpLdGGe8= +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= diff --git a/payment-channel-dot/main.go b/payment-channel-dot/main.go index 296d6de..4ef4fea 100644 --- a/payment-channel-dot/main.go +++ b/payment-channel-dot/main.go @@ -16,13 +16,14 @@ package main import ( "log" + "perun.network/go-perun/wire" ) const ( chainURL = "ws://127.0.0.1:9944" networkID = 42 - blockQueryDepth = 100 + blockQueryDepth = 10 // Private keys. keyAlice = "0xe5be9a5092b81bca64be81d212e7f2f9eba183bb7a90954f7b76361f6edb5c0a" @@ -54,8 +55,8 @@ func main() { chAlice.SendPayment(25000) log.Println("Settling channel.") - chAlice.Settle() // Conclude and withdraw. - chBob.Settle() // Withdraw. + chAlice.Settle(false) // Conclude and withdraw. + chBob.Settle(false) // Withdraw. // Print balances after transactions. l.LogBalances(alice.WalletAddress(), bob.WalletAddress()) @@ -63,4 +64,6 @@ func main() { // Cleanup. alice.Shutdown() bob.Shutdown() + + log.Println("Done.") } diff --git a/payment-channel-dot/util.go b/payment-channel-dot/util.go index 813b1ed..84b349c 100644 --- a/payment-channel-dot/util.go +++ b/payment-channel-dot/util.go @@ -15,13 +15,14 @@ package main import ( - "github.com/centrifuge/go-substrate-rpc-client/v3/types" + "github.com/centrifuge/go-substrate-rpc-client/v4/types" "github.com/perun-network/perun-polkadot-backend/pkg/sr25519" dot "github.com/perun-network/perun-polkadot-backend/pkg/substrate" "perun.network/go-perun/wallet" - dotwallet "github.com/perun-network/perun-polkadot-backend/wallet/sr25519" "log" + + dotwallet "github.com/perun-network/perun-polkadot-backend/wallet/sr25519" "perun.network/go-perun/wire" "perun.network/perun-examples/payment-channel/client" ) @@ -30,7 +31,7 @@ import ( func setupPaymentClient( bus wire.Bus, nodeURL string, - networkId dot.NetworkID, + networkID dot.NetworkID, queryDepth types.BlockNumber, privateKey string, ) *client.PaymentClient { @@ -48,7 +49,7 @@ func setupPaymentClient( w, acc, nodeURL, - networkId, + networkID, queryDepth, ) if err != nil { @@ -64,8 +65,8 @@ type balanceLogger struct { } // newBalanceLogger creates a new balance logger for the specified ledger. -func newBalanceLogger(nodeURL string, networkId dot.NetworkID) balanceLogger { - api, err := dot.NewAPI(nodeURL, networkId) +func newBalanceLogger(nodeURL string, networkID dot.NetworkID) balanceLogger { + api, err := dot.NewAPI(nodeURL, networkID) if err != nil { panic(err) } From e08ec2ce9653a24af9523a6b2747ed4838b0acad Mon Sep 17 00:00:00 2001 From: Minh Huy Tran Date: Tue, 23 Apr 2024 13:05:40 +0200 Subject: [PATCH 13/16] feat: update Polkadot Node container version Signed-off-by: Minh Huy Tran --- .github/workflows/ci.yml | 2 +- payment-channel-dot/README.md | 12 ++---------- payment-channel-dot/go.mod | 2 -- payment-channel-dot/go.sum | 10 ---------- 4 files changed, 3 insertions(+), 23 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 17dbd2b..39f2804 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -53,7 +53,7 @@ jobs: - name: Payment Channel DOT working-directory: payment-channel-dot run: | - docker run --name polkadot --detach --rm -it -p 9944:9944 ghcr.io/perun-network/polkadot-test-node + docker run --name polkadot --detach --rm -it -p 9944:9944 ghcr.io/perun-network/polkadot-test-node:0.4.0 sleep 5 go run . docker stop polkadot diff --git a/payment-channel-dot/README.md b/payment-channel-dot/README.md index b9f6364..9e0b88a 100644 --- a/payment-channel-dot/README.md +++ b/payment-channel-dot/README.md @@ -4,18 +4,10 @@ This demo connects to our [Pallet] that runs on a [Polkadot Node] by using our [ ## Example Walkthrough -In another terminal, clone and start a local [Polkadot Node]: - -**WARNING**: only working with a newer version of Polkadot Node from branch `update_substrate` - -To build the Polkadot Node, you need [Rust Developer Environment]. +In another terminal, start a local development [Polkadot Node]: ```sh -git clone git@github.com:perun-network/perun-polkadot-node.git - -cd perun-polkadot-node/node - -cargo run --release -- --dev --tmp +docker run --rm -it -p 9944:9944 ghcr.io/perun-network/polkadot-test-node:0.4.0 ``` Wait around 10 seconds for the Node to start-up. diff --git a/payment-channel-dot/go.mod b/payment-channel-dot/go.mod index 384b6c1..e4b3c41 100644 --- a/payment-channel-dot/go.mod +++ b/payment-channel-dot/go.mod @@ -2,8 +2,6 @@ module perun.network/perun-examples/payment-channel go 1.21 -toolchain go1.21.4 - require ( github.com/centrifuge/go-substrate-rpc-client/v4 v4.2.1 github.com/perun-network/perun-polkadot-backend v0.2.1-0.20240411100708-029d9632b748 diff --git a/payment-channel-dot/go.sum b/payment-channel-dot/go.sum index c0cc200..5b6fb9a 100644 --- a/payment-channel-dot/go.sum +++ b/payment-channel-dot/go.sum @@ -168,16 +168,6 @@ github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFSt github.com/pborman/uuid v0.0.0-20170112150404-1b00554d8222/go.mod h1:VyrYX9gd7irzKovcSS6BIIEwPRkP2Wm2m9ufcdFSJ34= github.com/perun-network/perun-polkadot-backend v0.2.1-0.20240411100708-029d9632b748 h1:nKTTy/mgfMza0x/qJ3ydzyAVwJfyPs/br6OOeP4IeTw= github.com/perun-network/perun-polkadot-backend v0.2.1-0.20240411100708-029d9632b748/go.mod h1:qBlduBvrtUUz86dcqxEzgTID7psZ000WyucSWO2M6Qk= -github.com/perun-network/perun-polkadot-backend v0.2.1-0.20240411110854-aa70731ff402 h1:TcD8Elq1V5pD7iSI8pAQ7rxUhpUCcGCHsfEeA7Hyr68= -github.com/perun-network/perun-polkadot-backend v0.2.1-0.20240411110854-aa70731ff402/go.mod h1:qBlduBvrtUUz86dcqxEzgTID7psZ000WyucSWO2M6Qk= -github.com/perun-network/perun-polkadot-backend v0.2.1-0.20240411111432-5bccd6f20096 h1:rK2QInr3++ygFsLAsF51QeWGdBsa24/jMVoy5KFfw9E= -github.com/perun-network/perun-polkadot-backend v0.2.1-0.20240411111432-5bccd6f20096/go.mod h1:qBlduBvrtUUz86dcqxEzgTID7psZ000WyucSWO2M6Qk= -github.com/perun-network/perun-polkadot-backend v0.2.1-0.20240411111704-55ddf14c5120 h1:ICur8MDnChbo/+lWAnXvIYNh/wXaisAKED86dQuT9mw= -github.com/perun-network/perun-polkadot-backend v0.2.1-0.20240411111704-55ddf14c5120/go.mod h1:qBlduBvrtUUz86dcqxEzgTID7psZ000WyucSWO2M6Qk= -github.com/perun-network/perun-polkadot-backend v0.2.1-0.20240411112746-dcbe505e1b76 h1:UAi+Qyxkm00WDO1rp8xNDi4Bupl/Mlytg3+lauWK8J4= -github.com/perun-network/perun-polkadot-backend v0.2.1-0.20240411112746-dcbe505e1b76/go.mod h1:qBlduBvrtUUz86dcqxEzgTID7psZ000WyucSWO2M6Qk= -github.com/perun-network/perun-polkadot-backend v0.2.1-0.20240411114920-37b11e7a1c40 h1:rwgnx1gMPL5NmcGFfsNnTQUX2zTp5bqLq2WmdImSvW4= -github.com/perun-network/perun-polkadot-backend v0.2.1-0.20240411114920-37b11e7a1c40/go.mod h1:qBlduBvrtUUz86dcqxEzgTID7psZ000WyucSWO2M6Qk= github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= github.com/pierrec/xxHash v0.1.5 h1:n/jBpwTHiER4xYvK3/CdPVnLDPchj8eTJFFLUb4QHBo= github.com/pierrec/xxHash v0.1.5/go.mod h1:w2waW5Zoa/Wc4Yqe0wgrIYAGKqRMf7czn2HNKXmuL+I= From 13c62cfbf7526a123f2b3308acd81ab9762f84f4 Mon Sep 17 00:00:00 2001 From: Minh Huy Tran Date: Mon, 29 Apr 2024 10:44:15 +0200 Subject: [PATCH 14/16] chore: update polkadot backend version Signed-off-by: Minh Huy Tran --- payment-channel-dot/client/util.go | 4 ++-- payment-channel-dot/go.mod | 2 +- payment-channel-dot/go.sum | 2 ++ 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/payment-channel-dot/client/util.go b/payment-channel-dot/client/util.go index 3ccc625..5cd5185 100644 --- a/payment-channel-dot/client/util.go +++ b/payment-channel-dot/client/util.go @@ -34,12 +34,12 @@ func (c *PaymentClient) WireAddress() wire.Address { // DotToPlanck converts a given amount in Dot to Planck. func DotToPlanck(d *big.Float) *big.Int { - plankFloat := new(big.Float).Mul(d, new(big.Float).SetFloat64(dot.PlankPerDot)) + plankFloat := new(big.Float).Mul(d, new(big.Float).SetFloat64(dot.PlanckPerDot)) plank, _ := plankFloat.Int(nil) return plank } // PlanckToDot converts a given amount in Planck to Dot. func PlanckToDot(d *big.Int) *dot.Dot { - return dot.NewDotFromPlank(d) + return dot.NewDotFromPlanck(d) } diff --git a/payment-channel-dot/go.mod b/payment-channel-dot/go.mod index e4b3c41..65d6b0e 100644 --- a/payment-channel-dot/go.mod +++ b/payment-channel-dot/go.mod @@ -4,7 +4,7 @@ go 1.21 require ( github.com/centrifuge/go-substrate-rpc-client/v4 v4.2.1 - github.com/perun-network/perun-polkadot-backend v0.2.1-0.20240411100708-029d9632b748 + github.com/perun-network/perun-polkadot-backend v0.2.1-0.20240425071359-589d0ae7df6d github.com/pkg/errors v0.9.1 perun.network/go-perun v0.10.6 ) diff --git a/payment-channel-dot/go.sum b/payment-channel-dot/go.sum index 5b6fb9a..8d23c7c 100644 --- a/payment-channel-dot/go.sum +++ b/payment-channel-dot/go.sum @@ -168,6 +168,8 @@ github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFSt github.com/pborman/uuid v0.0.0-20170112150404-1b00554d8222/go.mod h1:VyrYX9gd7irzKovcSS6BIIEwPRkP2Wm2m9ufcdFSJ34= github.com/perun-network/perun-polkadot-backend v0.2.1-0.20240411100708-029d9632b748 h1:nKTTy/mgfMza0x/qJ3ydzyAVwJfyPs/br6OOeP4IeTw= github.com/perun-network/perun-polkadot-backend v0.2.1-0.20240411100708-029d9632b748/go.mod h1:qBlduBvrtUUz86dcqxEzgTID7psZ000WyucSWO2M6Qk= +github.com/perun-network/perun-polkadot-backend v0.2.1-0.20240425071359-589d0ae7df6d h1:XNERW32C3qi24oSPsC7WdRc9VNqWlTQAlgDUiCagsZs= +github.com/perun-network/perun-polkadot-backend v0.2.1-0.20240425071359-589d0ae7df6d/go.mod h1:cddzrhZ0iFylrhVsGyxdiiPrXwWMLMunoa3AtWfX/Qk= github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= github.com/pierrec/xxHash v0.1.5 h1:n/jBpwTHiER4xYvK3/CdPVnLDPchj8eTJFFLUb4QHBo= github.com/pierrec/xxHash v0.1.5/go.mod h1:w2waW5Zoa/Wc4Yqe0wgrIYAGKqRMf7czn2HNKXmuL+I= From 317e16bb327d3e2a352542cc41f1abfc2723c783 Mon Sep 17 00:00:00 2001 From: Ilja von Hoessle Date: Tue, 20 Aug 2024 13:15:42 +0200 Subject: [PATCH 15/16] chore(go.mod, go.sum): Update go-perun dependency to v0.10.6 for the multiledger-channel demo --- .github/workflows/ci.yml | 8 -------- multiledger-channel/go.mod | 4 ++-- multiledger-channel/go.sum | 7 ++++--- 3 files changed, 6 insertions(+), 13 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 39f2804..1e07dcd 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -71,11 +71,3 @@ jobs: sleep 5 go run . docker stop ganache - - # - name: Collateralized Channels - # working-directory: collateralized-channels - # env: - # GANACHE_CMD: "docker run --name ganache --rm --publish 8545:8545 ${{ env.ganache-image }}" - # run: | - # go test -v -timeout 60s . - # docker stop ganache || true # Cleanup diff --git a/multiledger-channel/go.mod b/multiledger-channel/go.mod index 7a48115..94ae9d3 100644 --- a/multiledger-channel/go.mod +++ b/multiledger-channel/go.mod @@ -6,7 +6,7 @@ require ( github.com/ethereum/go-ethereum v1.10.12 github.com/perun-network/perun-eth-backend v0.1.0 github.com/pkg/errors v0.9.1 - perun.network/go-perun v0.10.5 + perun.network/go-perun v0.10.6 ) require ( @@ -16,7 +16,7 @@ require ( github.com/deckarep/golang-set v0.0.0-20180603214616-504e848d77ea // indirect github.com/go-ole/go-ole v1.2.1 // indirect github.com/go-stack/stack v1.8.0 // indirect - github.com/google/uuid v1.1.5 // indirect + github.com/google/uuid v1.6.0 // indirect github.com/gorilla/websocket v1.4.2 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/rjeczalik/notify v0.9.1 // indirect diff --git a/multiledger-channel/go.sum b/multiledger-channel/go.sum index 92933df..3f9b0bb 100644 --- a/multiledger-channel/go.sum +++ b/multiledger-channel/go.sum @@ -182,8 +182,9 @@ github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OI github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/uuid v1.1.5 h1:kxhtnfFVi+rYdOALN0B3k9UT86zVJKfBimRaciULW4I= github.com/google/uuid v1.1.5/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= @@ -622,8 +623,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.10.5 h1:bIaAoLLh8R+RXdPh+MkCJcbtumsFkNvoVAJwb60JKjg= -perun.network/go-perun v0.10.5/go.mod h1:BGBZC3npkX457u87pjDd0NEIXr1a4dsH4H/YpLdGGe8= +perun.network/go-perun v0.10.6 h1:uj1e33yfCSfE75DK/uwjNp+TwvGG85Qhi6HuYQ9EPrQ= +perun.network/go-perun v0.10.6/go.mod h1:BGBZC3npkX457u87pjDd0NEIXr1a4dsH4H/YpLdGGe8= 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 9c4c65ea09bd37ab84982fe02ed3f387019a4d14 Mon Sep 17 00:00:00 2001 From: Hendrik Amler Date: Tue, 10 Sep 2024 21:17:29 +0200 Subject: [PATCH 16/16] add: stellar payment example Signed-off-by: Hendrik Amler --- .github/workflows/ci.yml | 15 +- payment-channel-xlm/Dockerfile | 18 + payment-channel-xlm/README.md | 23 ++ payment-channel-xlm/client/channel.go | 89 +++++ payment-channel-xlm/client/client.go | 118 ++++++ payment-channel-xlm/client/handle.go | 120 +++++++ payment-channel-xlm/go.mod | 33 ++ payment-channel-xlm/go.sum | 127 +++++++ payment-channel-xlm/main.go | 106 ++++++ payment-channel-xlm/quickstart.sh | 63 ++++ payment-channel-xlm/testdata/docker/build.sh | 7 + .../perun_soroban_multi_contract.wasm | Bin 0 -> 23664 bytes .../testdata/perun_soroban_token.wasm | Bin 0 -> 7347 bytes payment-channel-xlm/util/setup.go | 337 ++++++++++++++++++ payment-channel-xlm/util/token.go | 240 +++++++++++++ 15 files changed, 1295 insertions(+), 1 deletion(-) create mode 100644 payment-channel-xlm/Dockerfile create mode 100644 payment-channel-xlm/README.md create mode 100644 payment-channel-xlm/client/channel.go create mode 100644 payment-channel-xlm/client/client.go create mode 100644 payment-channel-xlm/client/handle.go create mode 100644 payment-channel-xlm/go.mod create mode 100644 payment-channel-xlm/go.sum create mode 100644 payment-channel-xlm/main.go create mode 100644 payment-channel-xlm/quickstart.sh create mode 100644 payment-channel-xlm/testdata/docker/build.sh create mode 100644 payment-channel-xlm/testdata/perun_soroban_multi_contract.wasm create mode 100644 payment-channel-xlm/testdata/perun_soroban_token.wasm create mode 100644 payment-channel-xlm/util/setup.go create mode 100644 payment-channel-xlm/util/token.go diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1e07dcd..4d16170 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,7 +12,7 @@ jobs: - uses: actions/checkout@v3 - uses: actions/setup-go@v3 with: - go-version: '1.20' + go-version: '1.22' - uses: actions/cache@v3 with: @@ -71,3 +71,16 @@ jobs: sleep 5 go run . docker stop ganache + + - name: Payment Channel XLM + working-directory: payment-channel-xlm + run: | + chmod +x ./testdata/docker/build.sh + ./testdata/docker/build.sh + + chmod +x ./quickstart.sh + ./quickstart.sh standalone & + + sleep 30 + go run ./ + diff --git a/payment-channel-xlm/Dockerfile b/payment-channel-xlm/Dockerfile new file mode 100644 index 0000000..cadb8e4 --- /dev/null +++ b/payment-channel-xlm/Dockerfile @@ -0,0 +1,18 @@ +# Based on Preview 7 +# https://soroban.stellar.org/docs/reference/releases + +FROM ubuntu:20.04 + +RUN apt update && apt install -y curl + +RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > rust_install.sh +RUN sh rust_install.sh -y +RUN echo $PATH +ENV PATH="$PATH:/root/.cargo/bin" +RUN rustup target add wasm32-unknown-unknown + +RUN apt install -y build-essential +# WORKDIR / +RUN mkdir /workspace +WORKDIR /workspace +ENV IS_USING_DOCKER=true diff --git a/payment-channel-xlm/README.md b/payment-channel-xlm/README.md new file mode 100644 index 0000000..2dd5c13 --- /dev/null +++ b/payment-channel-xlm/README.md @@ -0,0 +1,23 @@ +

Perun Stellar Example

+ +This example shows how to set up a payment channel on Stellar, which utilizes the [go-perun](https://github.com/perun-network/go-perun) channel library, and also the [Stellar payment channel backend](https://github.com/perun-network/perun-stellar-backend). + +# Setup + +Spin up the local Stellar blockchain, serving as a local testnet for demonstration purposes. + +``` + $ ./quickstart.sh standalone +``` + +This will start the Stellar, Horizon and Soroban nodes in the background. This is the platform on which we deploy the Stellar Asset Contract (SAC), and the Perun Payment Channel contract. This allows us to create and utilize L2 channels on Stellar for any customized Stellar asset tokens. + +# Using the example + +You can start the demo by simply running + +``` + $ go run main.go +``` + +The accounts for Alice and Bob used in the example are generated randomly and funded at the initialization stage of the demo. \ No newline at end of file diff --git a/payment-channel-xlm/client/channel.go b/payment-channel-xlm/client/channel.go new file mode 100644 index 0000000..81433af --- /dev/null +++ b/payment-channel-xlm/client/channel.go @@ -0,0 +1,89 @@ +package client + +import ( + "context" + "math/big" + + "perun.network/go-perun/channel" + "perun.network/go-perun/client" +) + +type PaymentChannel struct { + ch *client.Channel + currencies []channel.Asset +} + +func (c *PaymentChannel) GetChannel() *client.Channel { + return c.ch +} +func (c *PaymentChannel) GetChannelParams() *channel.Params { + return c.ch.Params() +} + +func (c *PaymentChannel) GetChannelState() *channel.State { + return c.ch.State() +} + +func newPaymentChannel(ch *client.Channel, currencies []channel.Asset) *PaymentChannel { + return &PaymentChannel{ + ch: ch, + currencies: currencies, + } +} + +// SendPayment sends a payment to the channel peer. +func (c PaymentChannel) SendPayment(amount int64, assetIdx int) { + // Transfer the given amount from us to peer. + // Use UpdateBy to update the channel state. + err := c.ch.Update(context.TODO(), func(state *channel.State) { + icp := big.NewInt(amount) + actor := c.ch.Idx() + peer := 1 - actor + state.Allocation.TransferBalance(actor, peer, c.currencies[assetIdx], icp) + }) + if err != nil { + panic(err) + } +} + +// PerformSwap performs a swap by "swapping" the balances of the two +// participants for both assets. +func (c PaymentChannel) PerformSwap() { + err := c.ch.Update(context.TODO(), func(state *channel.State) { // We use context.TODO to keep the code simple. + // We simply swap the balances for the two assets. + state.Balances = channel.Balances{ + {state.Balances[0][1], state.Balances[0][0]}, + {state.Balances[1][1], state.Balances[1][0]}, + } + + // Set the state to final because we do not expect any other updates + // than this swap. + state.IsFinal = true + }) + if err != nil { + panic(err) // We panic on error to keep the code simple. + } +} + +// Settle settles the payment channel and withdraws the funds. +func (c PaymentChannel) Settle() { + // If the channel is not finalized: Finalize the channel to enable fast settlement. + + if !c.ch.State().IsFinal { + err := c.ch.Update(context.TODO(), func(state *channel.State) { + state.IsFinal = true + }) + if err != nil { + panic(err) + } + } + + // Settle concludes the channel and withdraws the funds. + err := c.ch.Settle(context.TODO(), false) + if err != nil { + panic(err) + } + + // Close frees up channel resources. + c.ch.Close() +} diff --git a/payment-channel-xlm/client/client.go b/payment-channel-xlm/client/client.go new file mode 100644 index 0000000..70a9da3 --- /dev/null +++ b/payment-channel-xlm/client/client.go @@ -0,0 +1,118 @@ +package client + +import ( + "fmt" + "log" + "math/big" + + "perun.network/go-perun/wire/net/simple" + + "context" + "errors" + + pchannel "perun.network/go-perun/channel" + pclient "perun.network/go-perun/client" + "perun.network/go-perun/watcher/local" + "perun.network/go-perun/wire" + "perun.network/perun-stellar-backend/channel" + "perun.network/perun-stellar-backend/wallet" +) + +type PaymentClient struct { + perunClient *pclient.Client + account *wallet.Account + currencies []pchannel.Asset + channels chan *PaymentChannel + Channel *PaymentChannel + wAddr wire.Address + balance *big.Int +} + +func SetupPaymentClient( + w *wallet.EphemeralWallet, + acc *wallet.Account, + stellarTokenIDs []pchannel.Asset, + bus *wire.LocalBus, + funder *channel.Funder, + adj *channel.Adjudicator, + +) (*PaymentClient, error) { + watcher, err := local.NewWatcher(adj) + if err != nil { + return nil, fmt.Errorf("intializing watcher: %w", err) + } + // Setup Perun client. + wireAddr := simple.NewAddress(acc.Address().String()) + perunClient, err := pclient.New(wireAddr, bus, funder, adj, w, watcher) + if err != nil { + return nil, errors.New("creating client") + } + + c := &PaymentClient{ + perunClient: perunClient, + account: acc, + currencies: stellarTokenIDs, + channels: make(chan *PaymentChannel, 1), + wAddr: wireAddr, + balance: big.NewInt(0), + } + + go perunClient.Handle(c, c) + return c, nil +} + +// startWatching starts the dispute watcher for the specified channel. +func (c *PaymentClient) startWatching(ch *pclient.Channel) { + go func() { + err := ch.Watch(c) + if err != nil { + log.Printf("watcher returned with error: %v", err) + } + }() +} + +func (c *PaymentClient) OpenChannel(peer wire.Address, balances pchannel.Balances) { + // We define the channel participants. The proposer has always index 0. Here + // we use the on-chain addresses as off-chain addresses, but we could also + // use different ones. + + participants := []wire.Address{c.WireAddress(), peer} + + initAlloc := pchannel.NewAllocation(2, c.currencies...) + initAlloc.Balances = balances + + // Prepare the channel proposal by defining the channel parameters. + challengeDuration := uint64(10) // On-chain challenge duration in seconds. + proposal, err := pclient.NewLedgerChannelProposal( + challengeDuration, + c.account.Address(), + initAlloc, + participants, + ) + if err != nil { + panic(err) + } + + // Send the proposal. + ch, err := c.perunClient.ProposeChannel(context.TODO(), proposal) + if err != nil { + panic(err) + } + + // Start the on-chain event watcher. It automatically handles disputes. + c.startWatching(ch) + c.Channel = newPaymentChannel(ch, c.currencies) +} + +func (p *PaymentClient) WireAddress() wire.Address { + return p.wAddr +} + +func (c *PaymentClient) AcceptedChannel() *PaymentChannel { + return <-c.channels +} + +// Shutdown gracefully shuts down the client. +func (c *PaymentClient) Shutdown() { + c.perunClient.Close() +} diff --git a/payment-channel-xlm/client/handle.go b/payment-channel-xlm/client/handle.go new file mode 100644 index 0000000..a1d7eee --- /dev/null +++ b/payment-channel-xlm/client/handle.go @@ -0,0 +1,120 @@ +package client + +import ( + "context" + "errors" + "fmt" + "log" + "math/big" + "time" + + "perun.network/go-perun/channel" + "perun.network/go-perun/client" +) + +// HandleProposal is the callback for incoming channel proposals. +func (c *PaymentClient) HandleProposal(p client.ChannelProposal, r *client.ProposalResponder) { + lcp, err := func() (*client.LedgerChannelProposalMsg, error) { + // Ensure that we got a ledger channel proposal. + lcp, ok := p.(*client.LedgerChannelProposalMsg) + if !ok { + return nil, errors.New("invalid proposal type: expected *client.LedgerChannelProposalMsg") + } + + // Check that we have the correct number of participants. + if lcp.NumPeers() != 2 { + return nil, fmt.Errorf("invalid number of participants: %d", lcp.NumPeers()) + } + + // Check that the channel has the expected assets and funding balances. + const assetIdx, clientIdx, peerIdx = 0, 0, 1 + + pAssets := make([]channel.Asset, len(c.currencies)) + for i, asset := range c.currencies { + pAssets[i] = channel.Asset(asset) + } + + if err := channel.AssertAssetsEqual(lcp.InitBals.Assets, pAssets); err != nil { + return nil, fmt.Errorf("invalid assets: %v", err) + } else if lcp.FundingAgreement[assetIdx][clientIdx].Cmp(big.NewInt(0)) == 0 && lcp.FundingAgreement[assetIdx][peerIdx].Cmp(big.NewInt(0)) == 0 { + return nil, errors.New("invalid funding balance: both client and peer cannot have zero funding") + } + return lcp, nil + }() + if err != nil { + errReject := r.Reject(context.TODO(), err.Error()) + if errReject != nil { + // Log the error or take other action as needed + log.Printf("error rejecting proposal: %v\n", errReject) + } + } + + // Create a channel accept message and send it. + accept := lcp.Accept( + c.account.Address(), // The account we use in the channel. + client.WithRandomNonce(), // Our share of the channel nonce. + ) + ch, err := r.Accept(context.TODO(), accept) + if err != nil { + log.Printf("error accepting channel proposal: %v\n", err) + return + } + + // Start the on-chain event watcher. It automatically handles disputes. + c.startWatching(ch) + + // Store channel. + c.channels <- newPaymentChannel(ch, c.currencies) + +} + +// HandleUpdate is the callback for incoming channel updates. +func (c *PaymentClient) HandleUpdate(cur *channel.State, next client.ChannelUpdate, r *client.UpdateResponder) { + // We accept every update that increases our balance. + err := func() error { + err := channel.AssertAssetsEqual(cur.Assets, next.State.Assets) + if err != nil { + return fmt.Errorf("invalid assets: %v", err) + } + + receiverIdx := 1 - next.ActorIdx // This works because we are in a two-party channel. + // curBal0 := cur.Allocation.Balance(receiverIdx, c.currencies[0]) + // nextBal0 := next.State.Allocation.Balance(receiverIdx, c.currencies[0]) + // if nextBal0.Cmp(curBal0) < 0 { + // return fmt.Errorf("Invalid balance: %v", nextBal0) + // } + for _, currency := range c.currencies { + curBal := cur.Allocation.Balance(receiverIdx, currency) + nextBal := next.State.Allocation.Balance(receiverIdx, currency) + if nextBal.Cmp(curBal) < 0 { + return fmt.Errorf("invalid balance for asset %v: %v", currency, nextBal) + } + } + + return nil + }() + if err != nil { + r.Reject(context.TODO(), err.Error()) //nolint:errcheck // It's OK if rejection fails. + } + + // Send the acceptance message. + err = r.Accept(context.TODO()) + if err != nil { + panic(err) + } +} + +// HandleAdjudicatorEvent is the callback for smart contract events. +func (c *PaymentClient) HandleAdjudicatorEvent(e channel.AdjudicatorEvent) { + log.Printf("Adjudicator event: type = %T, client = %v", e, c.account.Address()) +} + +func (c *PaymentClient) GetChannel() (*PaymentChannel, error) { + select { + case channel := <-c.channels: + c.channels <- channel // Put the channel back into the channels channel. + return channel, nil + case <-time.After(time.Second): // Set a timeout duration (e.g., 1 second). + return nil, errors.New("no channel available") + } +} diff --git a/payment-channel-xlm/go.mod b/payment-channel-xlm/go.mod new file mode 100644 index 0000000..77b17f2 --- /dev/null +++ b/payment-channel-xlm/go.mod @@ -0,0 +1,33 @@ +module perun.network/perun-examples/payment-channel-xlm + +go 1.22 + +require ( + perun.network/go-perun v0.11.0 + perun.network/perun-stellar-backend v0.2.1-0.20240718123359-71880f44c57e +) + +require ( + github.com/creachadair/jrpc2 v1.1.0 // indirect + github.com/creachadair/mds v0.0.1 // indirect + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/go-chi/chi v4.1.2+incompatible // indirect + github.com/go-errors/errors v1.5.1 // indirect + github.com/google/uuid v1.6.0 // indirect + github.com/gorilla/schema v1.2.0 // indirect + github.com/manucorporat/sse v0.0.0-20160126180136-ee05b128a739 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect + github.com/segmentio/go-loggly v0.5.1-0.20171222203950-eb91657e62b2 // indirect + github.com/sirupsen/logrus v1.9.3 // indirect + github.com/stellar/go v0.0.0-20240426134303-a387ffb88fd5 // indirect + github.com/stellar/go-xdr v0.0.0-20231122183749-b53fb00bcac2 // indirect + github.com/stretchr/objx v0.5.1 // indirect + github.com/stretchr/testify v1.8.4 // indirect + golang.org/x/crypto v0.21.0 // indirect + golang.org/x/exp v0.0.0-20231006140011-7918f672742d // indirect + golang.org/x/sync v0.6.0 // indirect + golang.org/x/sys v0.18.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + polycry.pt/poly-go v0.0.0-20220301085937-fb9d71b45a37 // indirect +) diff --git a/payment-channel-xlm/go.sum b/payment-channel-xlm/go.sum new file mode 100644 index 0000000..c00ef9b --- /dev/null +++ b/payment-channel-xlm/go.sum @@ -0,0 +1,127 @@ +github.com/ajg/form v0.0.0-20160822230020-523a5da1a92f h1:zvClvFQwU++UpIUBGC8YmDlfhUrweEy1R1Fj1gu5iIM= +github.com/ajg/form v0.0.0-20160822230020-523a5da1a92f/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= +github.com/andybalholm/brotli v1.0.4 h1:V7DdXeJtZscaqfNuAdSRuRFzuiKlHSC/Zh3zl9qY3JY= +github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= +github.com/creachadair/jrpc2 v1.1.0 h1:SgpJf0v1rVCZx68+4APv6dgsTFsIHlpgFD1NlQAWA0A= +github.com/creachadair/jrpc2 v1.1.0/go.mod h1:5jN7MKwsm8qvgfTsTzLX3JIfidsAkZ1c8DZSQmp+g38= +github.com/creachadair/mds v0.0.1 h1:2nX6Sww4dXpScx3b6aYjH1n7iuEH715+jj+cKkKw9BY= +github.com/creachadair/mds v0.0.1/go.mod h1:caBACU+n1Q/rZ252FTzfnG0/H+ZUi+UnIQtEOraMv/g= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/fatih/structs v1.0.0 h1:BrX964Rv5uQ3wwS+KRUAJCBBw5PQmgJfJ6v4yly5QwU= +github.com/fatih/structs v1.0.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= +github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= +github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= +github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= +github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= +github.com/gavv/monotime v0.0.0-20161010190848-47d58efa6955 h1:gmtGRvSexPU4B1T/yYo0sLOKzER1YT+b4kPxPpm0Ty4= +github.com/gavv/monotime v0.0.0-20161010190848-47d58efa6955/go.mod h1:vmp8DIyckQMXOPl0AQVHt+7n5h7Gb7hS6CUydiV8QeA= +github.com/go-chi/chi v4.1.2+incompatible h1:fGFk2Gmi/YKXk0OmGfBh0WgmN3XB8lVnEyNz34tQRec= +github.com/go-chi/chi v4.1.2+incompatible/go.mod h1:eB3wogJHnLi3x/kFX2A+IbTBlXxmMeXJVKy9tTv1XzQ= +github.com/go-errors/errors v1.5.1 h1:ZwEMSLRCapFLflTpT7NKaAc7ukJ8ZPEjzlxt8rPN8bk= +github.com/go-errors/errors v1.5.1/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-querystring v0.0.0-20160401233042-9235644dd9e5 h1:oERTZ1buOUYlpmKaqlO5fYmz8cZ1rYu5DieJzF4ZVmU= +github.com/google/go-querystring v0.0.0-20160401233042-9235644dd9e5/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/gorilla/schema v1.2.0 h1:YufUaxZYCKGFuAq3c96BOhjgd5nmXiOY9NGzF247Tsc= +github.com/gorilla/schema v1.2.0/go.mod h1:kgLaKoK1FELgZqMAVxx/5cbj0kT+57qxUrAlIO2eleU= +github.com/imkira/go-interpol v1.1.0 h1:KIiKr0VSG2CUW1hl1jpiyuzuJeKUUpC8iM1AIE7N1Vk= +github.com/imkira/go-interpol v1.1.0/go.mod h1:z0h2/2T3XF8kyEPpRgJ3kmNv+C43p+I/CoI+jC3w2iA= +github.com/jarcoal/httpmock v0.0.0-20161210151336-4442edb3db31 h1:Aw95BEvxJ3K6o9GGv5ppCd1P8hkeIeEJ30FO+OhOJpM= +github.com/jarcoal/httpmock v0.0.0-20161210151336-4442edb3db31/go.mod h1:ks+b9deReOc7jgqp+e7LuFiCBH6Rm5hL32cLcEAArb4= +github.com/klauspost/compress v1.17.0 h1:Rnbp4K9EjcDuVuHtd0dgA4qNuv9yKDYKK1ulpJwgrqM= +github.com/klauspost/compress v1.17.0/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/manucorporat/sse v0.0.0-20160126180136-ee05b128a739 h1:ykXz+pRRTibcSjG1yRhpdSHInF8yZY/mfn+Rz2Nd1rE= +github.com/manucorporat/sse v0.0.0-20160126180136-ee05b128a739/go.mod h1:zUx1mhth20V3VKgL5jbd1BSQcW4Fy6Qs4PZvQwRFwzM= +github.com/moul/http2curl v0.0.0-20161031194548-4e24498b31db h1:eZgFHVkk9uOTaOQLC6tgjkzdp7Ays8eEVecBcfHZlJQ= +github.com/moul/http2curl v0.0.0-20161031194548-4e24498b31db/go.mod h1:8UbvGypXm98wA/IqH45anm5Y2Z6ep6O31QGOAZ3H0fQ= +github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= +github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= +github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= +github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= +github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI= +github.com/onsi/gomega v1.27.10/go.mod h1:RsS8tutOdbdgzbPtzzATp12yT7kM5I5aElG3evPbQ0M= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/segmentio/go-loggly v0.5.1-0.20171222203950-eb91657e62b2 h1:S4OC0+OBKz6mJnzuHioeEat74PuQ4Sgvbf8eus695sc= +github.com/segmentio/go-loggly v0.5.1-0.20171222203950-eb91657e62b2/go.mod h1:8zLRYR5npGjaOXgPSKat5+oOh+UHd8OdbS18iqX9F6Y= +github.com/sergi/go-diff v0.0.0-20161205080420-83532ca1c1ca h1:oR/RycYTFTVXzND5r4FdsvbnBn0HJXSVeNAnwaTXRwk= +github.com/sergi/go-diff v0.0.0-20161205080420-83532ca1c1ca/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= +github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= +github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/stellar/go v0.0.0-20240426134303-a387ffb88fd5 h1:acTkI/sflfu0qZ7lh1oH8G5qdNJhSU6TJIONQe0IZ7k= +github.com/stellar/go v0.0.0-20240426134303-a387ffb88fd5/go.mod h1:akvnE6X/mbM4XFwlbF9D1/Wtgh65neAf5FXXQdcFjmY= +github.com/stellar/go-xdr v0.0.0-20231122183749-b53fb00bcac2 h1:OzCVd0SV5qE3ZcDeSFCmOWLZfEWZ3Oe8KtmSOYKEVWE= +github.com/stellar/go-xdr v0.0.0-20231122183749-b53fb00bcac2/go.mod h1:yoxyU/M8nl9LKeWIoBrbDPQ7Cy+4jxRcWcOayZ4BMps= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/objx v0.5.1 h1:4VhoImhV/Bm0ToFkXFi8hXNXwpDRZ/ynw3amt82mzq0= +github.com/stretchr/objx v0.5.1/go.mod h1:/iHQpkQwBD6DLUmQ4pE+s1TXdob1mORJ4/UFdrifcy0= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= +github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/valyala/fasthttp v1.34.0 h1:d3AAQJ2DRcxJYHm7OXNXtXt2as1vMDfxeIcFvhmGGm4= +github.com/valyala/fasthttp v1.34.0/go.mod h1:epZA5N+7pY6ZaEKRmstzOuYJx9HI8DI1oaCGZpdH4h0= +github.com/xdrpp/goxdr v0.1.1 h1:E1B2c6E8eYhOVyd7yEpOyopzTPirUeF6mVOfXfGyJyc= +github.com/xdrpp/goxdr v0.1.1/go.mod h1:dXo1scL/l6s7iME1gxHWo2XCppbHEKZS7m/KyYWkNzA= +github.com/xeipuuv/gojsonpointer v0.0.0-20151027082146-e0fe6f683076 h1:KM4T3G70MiR+JtqplcYkNVoNz7pDwYaBxWBXQK804So= +github.com/xeipuuv/gojsonpointer v0.0.0-20151027082146-e0fe6f683076/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= +github.com/xeipuuv/gojsonreference v0.0.0-20150808065054-e02fc20de94c h1:XZWnr3bsDQWAZg4Ne+cPoXRPILrNlPNQfxBuwLl43is= +github.com/xeipuuv/gojsonreference v0.0.0-20150808065054-e02fc20de94c/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= +github.com/xeipuuv/gojsonschema v0.0.0-20161231055540-f06f290571ce h1:cVSRGH8cOveJNwFEEZLXtB+XMnRqKLjUP6V/ZFYQCXI= +github.com/xeipuuv/gojsonschema v0.0.0-20161231055540-f06f290571ce/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs= +github.com/yalp/jsonpath v0.0.0-20150812003900-31a79c7593bb h1:06WAhQa+mYv7BiOk13B/ywyTlkoE/S7uu6TBKU6FHnE= +github.com/yalp/jsonpath v0.0.0-20150812003900-31a79c7593bb/go.mod h1:/LWChgwKmvncFJFHJ7Gvn9wZArjbV5/FppcK2fKk/tI= +github.com/yudai/gojsondiff v0.0.0-20170107030110-7b1b7adf999d h1:yJIizrfO599ot2kQ6Af1enICnwBD3XoxgX3MrMwot2M= +github.com/yudai/gojsondiff v0.0.0-20170107030110-7b1b7adf999d/go.mod h1:AY32+k2cwILAkW1fbgxQ5mUmMiZFgLIV+FBNExI05xg= +github.com/yudai/golcs v0.0.0-20150405163532-d1c525dea8ce h1:888GrqRxabUce7lj4OaoShPxodm3kXOMpSa85wdYzfY= +github.com/yudai/golcs v0.0.0-20150405163532-d1c525dea8ce/go.mod h1:lgjkn3NuSvDfVJdfcVVdX+jpBxNmX4rDAzaS45IcYoM= +go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI= +go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= +golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA= +golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= +golang.org/x/exp v0.0.0-20231006140011-7918f672742d h1:jtJma62tbqLibJ5sFQz8bKtEM8rJBtfilJ2qTU199MI= +golang.org/x/exp v0.0.0-20231006140011-7918f672742d/go.mod h1:ldy0pHrwJyGW56pPQzzkH36rKxoZW1tw7ZJpeKx+hdo= +golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs= +golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= +golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= +golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= +golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/gavv/httpexpect.v1 v1.0.0-20170111145843-40724cf1e4a0 h1:r5ptJ1tBxVAeqw4CrYWhXIMr0SybY3CDHuIbCg5CFVw= +gopkg.in/gavv/httpexpect.v1 v1.0.0-20170111145843-40724cf1e4a0/go.mod h1:WtiW9ZA1LdaWqtQRo1VbIL/v4XZ8NDta+O/kSpGgVek= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +perun.network/go-perun v0.11.0 h1:25aL0MsyXQ2rHziOnMwJMe70K6NTCbopZMwX67qxt/k= +perun.network/go-perun v0.11.0/go.mod h1:pY/1pJ2OMlCQgEbnfGh9wVfRMJtqN0iAKsiJBLH0/Gc= +perun.network/perun-stellar-backend v0.2.1-0.20240718123359-71880f44c57e h1:ol2v47C/tqq7PvaDTJsevtkQnK1NFb/cU51VoaSdPF4= +perun.network/perun-stellar-backend v0.2.1-0.20240718123359-71880f44c57e/go.mod h1:QN9OM1aOwg/mMnjNs+Fzezqzvkh4Cji0RPY1rGhjl1c= +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= diff --git a/payment-channel-xlm/main.go b/payment-channel-xlm/main.go new file mode 100644 index 0000000..1f6cfa5 --- /dev/null +++ b/payment-channel-xlm/main.go @@ -0,0 +1,106 @@ +// Copyright 2024 PolyCrypt GmbH +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +package main + +import ( + "log" + "math/big" + + "perun.network/perun-examples/payment-channel-xlm/client" + "perun.network/perun-examples/payment-channel-xlm/util" + + "perun.network/go-perun/channel" + "perun.network/go-perun/wire" +) + +func main() { + // Initialize setup (replaces the test setup) + log.Println("Starting initial setup") + setup, err := util.NewExampleSetup() + if err != nil { + panic(err) + } + + payment_example(setup) +} + +func payment_example(setup *util.Setup) { + log.Println("Creating Accounts for Alice and Bob") + accAlice := setup.GetAccounts()[0] + accBob := setup.GetAccounts()[1] + wAlice := setup.GetWallets()[0] + wBob := setup.GetWallets()[1] + funderAlice := setup.GetFunders()[0] + funderBob := setup.GetFunders()[1] + adjAlice := setup.GetAdjudicators()[0] + adjBob := setup.GetAdjudicators()[1] + + log.Println("Initializing a connection between Alice and Bob") + bus := wire.NewLocalBus() + log.Println("Setup payment clients for Alice and Bob") + alicePerun, err := client.SetupPaymentClient(wAlice, accAlice, setup.GetTokenAsset(), bus, funderAlice, adjAlice) + if err != nil { + panic(err) + } + bobPerun, err := client.SetupPaymentClient(wBob, accBob, setup.GetTokenAsset(), bus, funderBob, adjBob) + if err != nil { + panic(err) + } + + log.Println("Setting initial balances") + balances := channel.Balances{ + {big.NewInt(1000), big.NewInt(100)}, + {big.NewInt(0), big.NewInt(1000)}, + } + + log.Println("Alice opens a channel with Bob") + alicePerun.OpenChannel(bobPerun.WireAddress(), balances) + aliceChannel := alicePerun.Channel + bobChannel := bobPerun.AcceptedChannel() + + printBalances(alicePerun.Channel.GetChannelState().Balances) + + log.Println("Alice sends payment to Bob") + + aliceChannel.SendPayment(500, 1) + printBalances(alicePerun.Channel.GetChannelState().Balances) + + log.Println("Bob sends payment to Alice") + + bobChannel.SendPayment(250, 1) + printBalances(alicePerun.Channel.GetChannelState().Balances) + + log.Println("Channel is being settled") + aliceChannel.Settle() + bobChannel.Settle() + + alicePerun.Shutdown() + bobPerun.Shutdown() + + log.Println("Done") +} + +func printBalances(balances channel.Balances) { + log.Println("Channel Balances:") + + // Manually print for Asset 1 + log.Printf("Asset 1:\n") + log.Printf(" Alice: %s\n", balances[0][0].String()) + log.Printf(" Bob: %s\n", balances[0][1].String()) + + // Manually print for Asset 2 + log.Printf("Asset 2:\n") + log.Printf(" Alice: %s\n", balances[1][0].String()) + log.Printf(" Bob: %s\n", balances[1][1].String()) +} diff --git a/payment-channel-xlm/quickstart.sh b/payment-channel-xlm/quickstart.sh new file mode 100644 index 0000000..229017c --- /dev/null +++ b/payment-channel-xlm/quickstart.sh @@ -0,0 +1,63 @@ +#!/bin/bash + +set -e + +case "$1" in +standalone) + echo "Using standalone network" + ARGS="--local" + ;; +futurenet) + echo "Using Futurenet network" + ARGS="--futurenet" + ;; +*) + echo "Usage: $0 standalone|futurenet" + exit 1 + ;; +esac + +# this is set to the quickstart `soroban-dev` image annointed as the release +# for a given Soroban Release, it is captured on Soroban Releases - https://soroban.stellar.org/docs/reference/releases +QUICKSTART_SOROBAN_DOCKER_SHA=stellar/quickstart:latest@sha256:1a82b17a4fae853d24189dd25d4e6b774fa7a1b6356a993e618c6e9bd2f3e04c + +shift + +# Run the soroban-preview container +# Remember to do: +# make build-docker + +echo "Creating docker soroban network" +(docker network inspect soroban-network -f '{{.Id}}' 2>/dev/null) \ + || docker network create soroban-network + +echo "Searching for a previous soroban-preview docker container" +containerID=$(docker ps --filter="name=soroban-preview" --all --quiet) +if [[ ${containerID} ]]; then + echo "Start removing soroban-preview container." + docker rm --force soroban-preview + echo "Finished removing soroban-preview container." +else + echo "No previous soroban-preview container was found" +fi + +currentDir=$(pwd) +docker run -d \ + --volume ${currentDir}:/workspace \ + --name soroban-preview \ + -p 8001:8000 \ + --ipc=host \ + --network soroban-network \ + soroban-preview:10 + +# Run the stellar quickstart image + +docker run --rm \ + --name stellar \ + --pull always \ + --network soroban-network \ + -p 8000:8000 \ + "$QUICKSTART_SOROBAN_DOCKER_SHA" \ + $ARGS \ + --enable-soroban-rpc \ + "$@" # Pass through args from the CLI diff --git a/payment-channel-xlm/testdata/docker/build.sh b/payment-channel-xlm/testdata/docker/build.sh new file mode 100644 index 0000000..8f9f02d --- /dev/null +++ b/payment-channel-xlm/testdata/docker/build.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +# Build image and tag it with image name and version +docker build . \ + --tag soroban-preview:10 \ + --force-rm \ + --rm diff --git a/payment-channel-xlm/testdata/perun_soroban_multi_contract.wasm b/payment-channel-xlm/testdata/perun_soroban_multi_contract.wasm new file mode 100644 index 0000000000000000000000000000000000000000..05701f50851a6b9e15273cbc2c2b7d954d058725 GIT binary patch literal 23664 zcmb_^3y>Vgd0x-VzHT4D;6Vl=DW`WNmkuR7_TC3jv2Kn81?WLS6iG8oIk>&M0d5a> zyNBI95O84JfdDB;6cxmgZCVm-B$h==A{EN7(2-Jx5?i4{*B!?9T2Ts7GF${r@vqRc$RhN-1aUh8cHl%~_lA)}(RHJLhNI z^Ze_bmqy_-g-f}yc3#amYZ!6X)J$p(qe@mPfnrv!;Rb=7pGlwRh1|n3OidFGTE)ej zv*!MS^EzkNnN%+R9>d==PDOc64S!wy<;ZDg2qQ}}zGSbDsT4+rF+OKkaZXiMopB~q z8mmUIb`B#cT%Qn_+@*%Q+-ngd%gzDZU3RJ}gMCM_s^*Mid>$}U-hs(%E;o=bcsaLN z%;id1*V~fan)UHtHaoB_=cT>vJ5p}Sb6vG#C#mWC&W-`)IH|O=;^cB^&r#bluk+TN zaDDxnDy*sSo9{R6`lD#G>rOGV94$ARXI+(QtVDG+kvhIwpH~Ocb4!g@q~20E-e}H6 z$4u`ZWan$GmDP5nej@i^t-UbctUjpTTB^=An(bp;SF4{;Q-u>z``FwK`Buj{KkbxV zcS<|cuQ(T{pI3L6ly>}eeAG1mu3VI6J$LsrWw)SlbHdA^aVI=g@Re5nM>yBNz`unj z9M@U%&cA^xRj5w}&Ku=YJ6i4bauc3!u67ZKjQM~Qes295rhD26J^zzjT6Q^Kl|8M7 z)L=Pf=4$^b-kk7up`S9qJOhd7gde&>v zKTyHFucW3`Ijx;1w}7XvQwU$a46r&C<`&6Yob{K8g(`q@X;K7xlOk!LpjGHEYT(5A zzTLPmp!|Ptmi(;axNBYNxG`pisyH-{fn$5;fs7aWZ!1aHo${o6N6FEy?69a^?Ja^t z+{y!LWv{3T1-a{A&uXj&bhTJd;#)sKDCC!IN`uMgtAymww6=oP=`uR2s&a$YOhj3Cj6?p zqomNyghv;{SDaH}{)p}W&YBsx2?MzO%eMQvca+lT9$GA?i;&Pv_zqqxRODMPS6)H|Dmdk6Zt2tP>NOc%e%SIg*pbqHOD5KPp znOG|Z(T5OfG*Axe2n3M|Cj#nl(b9xBi2+=lobW2)vkzT^!eoI8WINl@8Rh>L5yy6z z8desKif;fJen*y5ZLz$oxlVXZb#)HB!ukD&2=Qp)r-WMW6eZ$GvNv!s+i=_sGq`|O zdD9n3Tc_-hq0V&fa@m1SdSEIWK)WdTfyV%Cw2wMh_;CfeYWfxXQP5>{!Q6~6*T2MN zh1(q`)@v(L?B`aXFffKG=t_sXK}>}we0?((pk#=``eqiSPKIQ>!4(;-v;az}0M?DF;pv_T| zECHuQPGPnnGDQyung(GN>2I${Y#E~=iS0^ZSU~DjOooo)XfGy2OcDR*h`~*TAHwOR zHgh_^wy6y@f zUUoXd7~|*v3+@0Za{NblHSN5csNJI&trC-@Q!Y-qF5$S-A%`QciYz_xn$hG}?tQ##_zwEy*RoE%egS)+o|LbP@UiCF6$j2ChJQZ2wEQW)f zMOgM1&f=g_rA#5Fz~-! z*wJ+CC|`o3+-OL(5ud@$#K#pC?}V)7q0 ze!=raIu0wH{e4GPJ6*iL-GxI%C%NQn>a4BQ{2lLMAP6~h9N%93mB zMZYcas8yDEWNpkmQGa)e+jp6l1%qIMpa+A7RSCv{o8&FHsnCGMS{O%jJ6I&+%oQ1D zuIQD`6^*-G(cN?z_hSG=BOrD>4n$$JFN>Kd?7(ev4`c5$W8$LRSg{bGI5s(9A|~0J z{|U}CsTt&rL4_HC4zoKL2cnEQ;g-7T0q<(aYDdYgo1uL>m2sfnjD-_<+Dly*g=4-9 zu~5bwx^5m_Q{qHB{e z`|l@BgDpVh6V z^3lVYa%gZS?BM?fw>78g+xROa0Cs*6Ew_FiE%(00acuq^TkQTUTWtRnTkL<8?GHiN z=@0(dxBv7{GHCw%!zKThyZD&o%YT$3Hx+a#^xEO$7q6`=Mr;(5@TJ(XXeF-Yv`3Lk z<_5~BfIH<*`9DuU!DdMdc)(~4NeaScTP&ICcwyr zsV3lJ1unv`TW^j4LZ=R@hslGqL;%{|@BFQEtMiBhV6qvcGDmINtJa+oJUg#L=OB6< zyI?hJh7^WLpq{``1X*}5T-+ZFl=GyL1#!VC!6;HG3F3l)Shvc0ztO;5)K#(g2EvMlO zEArr1n!-WTn29gC1c^xz6Tu!oyx`vIyv(iQqsOPd-htz@#>b3L7$2_xTs=qX9OcE& zfAi_Dx;=;a)x=>6{$uQww`$-2Ag`wN-?PL%MF#=0C) ziA4{98gNf0`wOz-`I#o8BBk>k&<{v_O?Ar0b4{j5_Fi`2ZmfHOmDXw4lb|%M?$xEE zH#0Ktg#p?B zTD5g|F?QUAkGZ`jt#UF*o15Vav`t~o7W6VgC{MP*PS@1A-Xe;py@$1j+*GF?z9g;* zJ=9eSm!vAAQ`+-?fykB-q@+#V33h?L0#z#b3IumqmO0!ha3*4qu22AhcXDH=AkR~?uz zw1`S_Y!O>97DS=g@qdx$(B7cyLojh~7g!A0ipL=h2>*pSDHz@X6f6<(VO~xOnaluH z*V-FgzUu^%LJC-kfV>b{HtfA1-fQnATYHRqrp8^3#@p|F5BC0pPFO(fgri+X`bc@l z<@;bWjU_>s1{+QsiJzD>WOQQ9kmHFVL;fd*42mT-O!oFaEHYB$2?m3bE`kF8ltVXh zWHN9t;&w*3!x^)|3L3y?x(M(yXaJpACx9O{xV)dZAoct%TOj)Zkl~>Ej_o}P1|3xY z4?RNtHb-Ik{*Ep3SGWqSVSE@sW?}wh7A(Jp_ z?i#;G$C`$SaF8T;3`Zq7cw`bnjJup2T)qr0%ejBl6UT?`KWG0Ddr$Y`g|Gf`#@hLf zhl4c#Cgq_J;sHScg@eAJ%?lIeO@g+oxs)f#LML*17OLu4RdrbINJLJeNvH!>pjF8E zSu8sXa2iS9=_d6zv(zWzBF3jkDkRG#u!sop39c z?p2>;fKxEnPdU^h41U6~T7)$&)Y^v;O%-em54>nH0zAgr?JWf9b3sO@?m-T^4Nx)~ zHErSqj(!r`iO6P*--1zb81h2`9g6F-Z0RU}!u_1%PI zL7>ecrK;&aVWy0^y8?I}sk9-D!xR`$nQ`f8iO-z4i*q-Ft4|3SSd8o@C_!<5Ae6p8 zJ}Q9^lFZGJ0bicxX+WoEkXMjTPqQVGXoY@k8SXsA8_065vITpX2p&|AOOMt%Kx}t~ zJw{<{LELqF_e_9X25KY+UkPB2U_In946KI?&IHJEUb3D0X(GO2J4YE_!kEak!?YJ< z0FOUKJ8`YgBs}s*%Ib|UsVBb?xkkoz%7`^`Ov%ioR{O)#AU^%|&K)1Q|FrQz<1@y` zi%-^jsH7#>c%q~w@DRx%+JSB3BcKg+cCX(`pdg$Gg1(T?#Lk?hg*QN|;p?yTIP|OH zNTp;-Qg;8N8GXL%+~KL!7f~A>q=5~;WQ(S6ruDyOz5a97>mv#fua77|y#7^3ygv0U z_U@>78n3VE^`(9k-?F76!1cw`8w4f&7t3yq6aojp9l+v>_3)V3Yop*4$K49?-S2!5 z(*8^I>{uak4$qDdWv}|hj%Uw=C3E+~PAL;^G1r%IZT(|Wr=j*KjrIXEI0IJM+J#J7 z(7B%eN>J(q*5xgT*|!qZnX(V8VTsDy5V{v7GTfqzeElF*-d4;OutRs<0}Mby5}~BG zCLi4p)Kv!Lj^4(+eme(1@*P;-O%=M!{p&8@E&zg^4^OW>theL8o#*rp1MOU}Q}4Lv znRCGn4_};C?~&763kUPs1)jYw@C~?Go87ZKbG_wo6BfH0JJ{Wr!0twa-427D(naP7 zMZGo78n)`4`o@R#4SL7J;GI*<6*ef5QLh2IA)9n;RI}Y)g4GaMxTh|wrN5%HG3%v& zMrS&Gc=T;LRbu$6w@E!nf~#woNP`NmCBYS3galU-GQq%HMW2jMhK`fLRvxB z93e1(;fc5@d`V>W80;>TOMS$-RXytBm{dnpyxz}o1exz+iy#xOL!iNR2nO&Pf&mRWKd1<{d;(+^Upg42d1 zA#8cA3RNb*ll?a>RDGi>d*AxA&;H5pfA;U<_(cjLeZ?vlP8XSbvS3A9(JksRmg$tQ zNEjgy<2RvDOq-Z0*DGK3lL6TYOpvR;U->FN?RCmmiLAz)E~#3bSZ1>-R({heR{lq> zVih{hwp+zQjNaok`>I&1UfDVp-Z!{c=S&?7?hMs5Jb-xZ3Q~XMrBZ7dsdd{pY#onw zoH$!crfQ6XZeVLbrv-XOyv_-G)GZ?L30=yj7CEX zoiTSObP$bS&O_j^@=Q>mLD&w5nX)N$xC0$i>~_MPeBuLRasygqq)j8D4xZ5HM|A!Y zYIlX3gM6&YHh*Qg3ghLB<#-8>F;TZvWd*JSN2KmH_8Ev7UX-_Q67wHGyph#uTe8gc zlq{2B1Wry$VdoxR8;`vbh&+V{vL z4i*->uT))!q1?EaohIp?cFW2z;%At5gPAylaZF`aJ~wQMDQeJFH+gHU45kz!m$zeg z+7G~S@rvf}@~s+}WWL-4dxzTEHi`L_1Rr3fsV(qzKYD7;C~mvJtUwhmz|6$3xDDQK zK$8nnO$Z6#OX&sn0u^W34>yZJ2HT;&sS)YZG2l|70Cc@6jkP*`N6D4xsXa>JDdXBZ z8Rqf@L@of>TsXr=ICwiHF|=ZaJTt`iBi-<=r@~B|mkuwB?Iy21TsHxOkAk+hL4lXm zsiq|aLX9v52nEPc>ZE2x6(Tag*PRAXhJ_nKi5B!C5=1T)uDx9_nc*8$sc?l&uDdlZ zJ6q%0Y%PkjVQV>A*3b<;lz`Bnw!#7xvgt+a7fu}}SF(7w7#Mh%0*da$T|5Ltder3% zxi#pfL~Gs9CooCDLvJxWcPhx93%tIQ59r<(QWFnIWSw&}I z_QP|FK~}^pcLj0%*pfVfcMyXo^O-c$_in3fsjqoBn34IGVycwNwTpTU0Gw*`L zpaF|;Iw+HjtG!BZNx2Gdv*JOE(Igxk66Tx+3TPI2h4+rcyuk#+{KDg+*#!YWvs0)7 zu0axbrYvF%uqn3DWOB&2)j1Uh-e?DC*?}R8=wFudIT^0`>TO!X}o-vdIscqQ&|adQsI?9 zP&C?UhzcA5#=$E$99Yx}rv)?NZZTy&$V|Wd8SlJKpL-Je^2#gTsqlZQI%Lpkhu`3% zsKxzC-KuDR&(kV>bZrUd(oF21q5!sxEvH}k{D0YhA9#>~PT^sZ7@f?M*!F)YveKXd zcmdud!FXcd)T?b^03Z3ieHZ|LCJ z!?=rQ&Crf@)19mEWWe0=>?K(mm2iqd}PWfNt4t&#QC+LO77h{zU^Rx>9KJM;81F(3*iWT3q z{~yf?zV-@-ht=c2){QUk!6hCpy#>uB{yU^`7cXkz(YAX#z#xyyO`y1oD;#><#rs{j z8pIV}@p8i#6)wSPF{NM{h9(#N7q|&tR)W=YW!HzgyV|X;_HUIyhi4cCc$~rPYqD*c%b}$_51N9MA)cHr-Oc+LjO>pd7QOe^*QQ1hF?zfW%fY zvHQ=N!09@~7So90|8@D@Jzvc4YyC8ka#V~$m*3{x-xmdP`=$8RUhNciLv~@L+;-rE zU*`J|i%^qsmst~D(C-eYo|zwef8We6bq7@8g*4J9o7ux}dd6=;1fdD3AhpF+@CNLl zG{**^6TB&EH+#_NarYLOAQ)^u#vFv5z>}6YqCroa!JVeDCXBi$I>xAnkuc;5K`S1Z z@Vyx5Um6w^Uh@?uMlfK=e9Df;MR@;|rwyo+Eh5mkgYys(J(wsD3y zlf*k3d^-gp85@|G@C z7K0Lw8eXJX;J-{kk0umRUFfhdfUJX_4X-JWyG3jvv@{8^VMs4r!YnQZ#U7aGbzy>L z0&^Fd!Z_kSlug5(L=b$$NpZ1}1s&QWx(qd_Z_-(Kn7e?pFg1e+x&wgh>!T(lhDUPY z^l)~V2-fy(tcSQ?@qfHZO_dHmM~w)#vXe+l3!itLoD>Xzu}>S1SD@%aRfx-z$Q1%) z5vUcI$^mX_)P}t&95f^Rf&@?|BoD;DKtdEM;Xbqj={kZmLa~ zMCvR>d;F`(U8f+6NN`UDd8YfQaUgQ%C}IP$j$1NwbWe+<^PPfrla7X(0Qofut@g0H zh_FD%OD5D8ETnd9J{zn9jb(Qh7bKQ4GAuPey0&!x;B?z~001YJDzh&6$5xeXKTryjHI+ z)qXmf$1bf}qps8n<`SnfX!B?vLOX!=QM6gK)mf}wT8io?qGR)`&1xH~>J31}z2Cqb z2kmd#_P5Y(NB?=W#8v+F_q_eL-}C&3-qHNAs%>Z6wdJVQt}d^{|0KMAtlGVt#rl^4 zhiCj-w8Zgyw#_)EzXdIE{d;H&Xan2MHR|nVV`-(@tS+~(MH|R2;2zJ@KuegbXo({~ zH01nv`0_k#ImR~rlCHew8n%SNmN3~8Keoh&EosS?c(E$dGwGbJq&Faq!@3{lR8+WpMY5Zq#*E&)nIlM>G0#b!j!KR4PN2;mSy5 zv@%v1uS`@XD+h)uLqkKuLnA|@Lt{hZLlZ-jLkET{!$ZTv!z06^!(+qa!xO`k!v{tx zBSRy@BO@cDBV!}uBNHQ&BL_w+qeG*^qa&lEqhq7vqZ6Z(qX)(+V?$%ZV06-tWvI7_jn^2D18_U&N{RqV9%ya|N)H+hfA#3wT z>iBVichy=g{EonVJoTY7wN|^^nTsMw-aBi{wYFUm&XICQ>g}irg*en~Hk$X=qcbbf zTsxY-=j=+k)+>-LoJ^F1G4sC6QU;}d0TgRiO$USv|Yxw1L z@=JXotl!3YKacN!!1oXE{X=~J6yN`j@BhO0FY*0re5o(|QeXI`z9hfY8-8!a+&l1n zH@-iGZw=qm_+G^K3cgR^`zd_Yr}l3VdjR&ez~9pqEG9znCoShOJt`MJ+ix=#^T_R# zs^w~X4qU{C#NlVB6{Gu%6}@wHc^0JT8WR65{3ga-^*d;7-(&2LVJO#H*x^z$s?MJk zQEg#7#%Zg)e`lk82ZbEBI)(Ss|E7(c#+`JUQ|dbPdUgdG*b#(Ov6jK&?@Rlm1xjJidgw}pvpZ}>_3 ziywE@NtNUjVKC?1c)R(1kh|)F(0p$%ltGpf&>-KXzasI_#gwfWZS$_hx_(#x=7wY_G#JwR(8 zH_Dh8sk0|(89Q|j4p@F1xt%>jmspowJBYsbSGcF`{ritro9)_MZKVo=bx23d5m$6> z)atsu5XI!&mk*bg;!aC1R8L2`{a_=x!XS)23JLh=3ckk~%Oy7>?8J5;R-?WbN5{6D z8ns&c^7r)4!ScDNb~n#L>-Or(QY69wplN|a@W#&GXT`l0gWgR1fq47DDC%J_7?5B`D=+K^)nrezTP}tT z6Z|6fOX|*@mOhBYxpQ^t!RlE`)Izm|$p3g!lr+Qx(JOO<2N!B{3qm(TS0J|3sGqQs zl<&gi@jCQ-x)bYb;n7kHfFiKBi46^nfC7}PRRdcPPRjg!Iy4t{%3QTh2F}q>%;!%a z2#SucE-jtavuE`x<1N8?M()pO{7}&~pn+zs&BvvS+F69O~`0^M= zM?Y*s4ic+YpKC^xXP^p!ZX7>u6~UZkbp<~a1+dlnJW*;!_yMX&Gr@rLwicpRo~Lfs z=Gvh43LH^1zjxM5YDP;&kYa`-yf%1I9jcUI(p%EBSh)?avz;``1URc?nebP?=JS>* zFioU1jUs%irc>oMh`Z@k^h(RE6EJs|6C6uoQ7n5ba4u^A;~%J<-^03AlaZ zG$8_GrAV?@h-yp3Fh0s^y>@C9QqgMZLGsPa0(K`bh&YE*clIrRHQk2f33mfjgN zkK0Jh@%EVWWN*8<8c`~G%^T&TwK|9DM9Xa6S<>M(s|;p?Tzu2Q-)}HIR_%o!(vadT ztTQADBS3QTnm!n_y)dSK5ExV?^6@jB8isLo)}WJ16ccg`a&^Xtdsl^GQ!irPB|Q+tKA{HJ$<0pr#H9PSmg@WE#{6#ED`36=)I%6+uNz*$?^t?jBo{dgm z2GJq9g#=#2m2^+w+Q&YNtKs60itF@ifU8(r;>z#nZ8qGdIwYOKt3)!ERnTFx7GNay z-Xk`kfiTlZnSt0f0rBnGT3aH7tR28|vHeM#FuY=dj2=*f=)sQE+q+}_(TP`=BNR() z%#ktch?2le`l~M(f7}BSRv(^N55~^03)vW~JaQ|VGN?X94R+3i9oKX6#%f_6eu6TR zfEO{xpoH5CwG$N9*xS}6HQx>635XPMIGc?b0W9 z%Ro(z_*eL=d4fCjL_##7D-(x|mph3S-yf>90s+W`2cL^SU+*r_p}~T|EwkV9-WK zBTgpvE4s%S$H8^JCytXaZV-~u_mp6_fJ4N$g46*dp$3q#))?3=MA3SFE!La|e^G1d z${V}M7-~~~eZ&IoXgN7$B$rMwW=SU~-=`0wR1V8TnW#xp0{YZZE~X!1`84*hd-4ct zfjwN^N(5q244GpuBeR{WHC9_#2m3MKz!-flGMp7e%dBcNk=#YbaCUwNmxtkr@ENE_ z4<7qIcILH^g^$O6lp3{4mN2!1dh^$KK_*d)gyY-PlXpUsjuIs_zXJ>#L}#KohW<>| zVwIiks(l1g(Y=-LSOn2#q8!fuI_41h(DM5)-&EFNlz`sKP8&YsV#h+a6_fB2a>vw2xYQ;Ff!pSob zqTTcJ&FGT{{KRwnZ82@u*E%st9OL}hw%Bb(_0tGBs#32f98>dbbc*>sH`C1)JU*u( zm>t?TF}aUre)GvSTdnz%=Jx*K%D%CEl{XxShUZ2q!^5+9v^6$6JUm*Rs7?-zMnfaB S)v=+8@u4W19U7gTRsSE%Z0Dl@ literal 0 HcmV?d00001 diff --git a/payment-channel-xlm/testdata/perun_soroban_token.wasm b/payment-channel-xlm/testdata/perun_soroban_token.wasm new file mode 100644 index 0000000000000000000000000000000000000000..eb74d2c9a016a27d20801b119054c90836a25601 GIT binary patch literal 7347 zcmc&(Yiu1y6+Sb&_xiDRylxG06V%SV3Bmy-y>=dU3yAEBJ|L7PO{fI@VXy6NW5>SN z*f&Xw5?{A*(n3QBr7bN5+CpEVq#!C4AtVSOKnN;TNEHYq5E4|VLI?pu0))zU=CQkW z+?K!(Hp=eInVB=^@tt$#jwxA~6+|SK#2d%_MLc40OzO91I)W*L|Dr`>ervIXk7(Ih zt+5gaOp-08`P||8n6pS@UTYC=*}{ti&&9)B_^X#-ifN)RZ|V^Z_h(Qu~kCGIL zsF5db)s(~H7SN}}2q;sS$?u(@jEiZ!XT=qmKPwV&xK(T;9~^3$&j<-`>y}cvt<>Jp zDLMnct9xBf*xR-4qKkX_`ug5LqN~jlf;@Q8%|LX>&B0M2EI?Br`LOBT0QC zrOVrrxw-kq;go7^48W>dPNyl~s>cw>gHgvH+8IXXI-G?US^KIw^Ibo4-)%#DsG3#lhNfBBXz zeWWOcQa`>lTKef_;hCkSB?{gQV)#jJDxu`rSe=ahW#!pMh=Cje0@!_^Xe~ zK#Ax}#qnVeqDLb9wB;^>=!_okFx)E=nqmKN*lRbfc3vW*pD(e57>#83055g|@)qH= z(NM|YAHrwlMN2vZsLTK{^kEakryqFurSJXyJGEGbpJHBDbyJacyAdv;iYIq@yObC8 zU)?RRPy4j;renzxdFWKUE(!uA<5$G-_$PD&=E&%;S{+Z%j=b<*=A{HIS~c^0o`!x{ z_4T?R>2)CVS4#x~bdJ?sPwtfcid1RX3-R$`lvq??Rg4--Dyw-iqKlPOX06jgjtcfze))+ z{4GS)a`bBge{{>yp6Tcn@!_cRJ+}YtmLaSM0mBd5?j^gsOXyxTT`6@zmvXe5TY_6R zpv49)pH!u@Y>j1X??o+`TKSQfuK3pC?I+`P%RSJ^Y2;K3Kgx;(?+~K35iMW_0U#Yb zlwe#*MFv#T;*kB8VMqk)VaN0Mp3rNo~ZOHb-JvQ|7t2dkbH-edHI3K(ZVGD5tVEz0UZAurR0On7w@ zLdnNO!Cn?I8NDi!$r@FD6mo_5iEgP{q(gzg8*59Kj>gn>`9YujlJ%tNOdEj; zougvlEt`yM^%qZa7*u8SeU1!3E4T)70EpAj{atr5^a!nXwAgxrgFu8QSq#8jgm>ze zUE$g3ZY~T+@o_E(+W4Zv1a<@kT@;?;rJOfV1cY=E@B(~SGQN{Y2r=Ej4*P)e_H3w@ zk^8I({OizsggF3QCFZH{fn)m>?8P3}#1TWR8RCE{!ScrA6@el6C47{bpzYi681}A3 zuY@ExjC6{sW<6M9JGz7pSQr>WMwSX6-$+(1Uk}L~>`O2t9OSF=!K#lbrZhr~7o1N5 zpP<4`-~b*XhA{k`qoeUF_Msc$7^LA7+9OJyScXxU6eF<&%Lb@OeBoVK2p3r!x5M@f z^x#ofWwJ7>Aj~G-29j}|0I%?~+|@$(od02){navtL&jaTO?mqiUVArSV|-8Gh0ifn zK6|X{oj4xT2a#$aH*#3T1$E{h79R|cAqxEg*&jY^x6T5%BlG1$jLxha)(Yt`X57GI z8cI+TXhg+>(WDJwKNeYq1dus8LD5;s#+gLO={S>s0n`G5K~jK%3_rm#vFQL}m`CA(%He8w)2;p5uyURFPPg6ON- zXK!*oyYD=(tStfTt~c|Q*blI57e(%m9MY08LADB+IN^khqYTiK9a`XuLfbcmhJ(R?$<;Q_h2cZmYBo02 zhd}cgCH-u3&NL7@UdEh1U3Q!^pF6N+rz>WQ)0I96=Jm_Z>Q^lFiO8w-!&eD`RcdL3 ziW9bqyFPrHKZ-Hog-__VK4uIcyijo!>~#9i&;G27 zb>wZrFY}xVxEnmXq^Y+HL)IMyIS&@A&<4_GS$gDmwsGcf6rR?TgC|TC+K3)f2BJx9 z(oKkDPSl}kAqm^FHRrMjLU@a8h^YS>U8zZzWOU7;7eP-Pal~lke8C5n3h9HG;1cY) z(>yY}i#P@QqpR1N19QIWdLi_F*{Oz*t*tr5Dsvj3#HU|+<{K}c`t6G&$g0nEe(3qb?CK$mw2!UURHN}Otmifg+ zjGrIPY{-n~jsQA@K}W$Jd%HFMj0XH$68b%+F(&lyG!5h2^!!r}rWZK~D0pf`aYX0;uAG{7)ElYMqXTHYNkAC<>avBj>&WYYoWkhzA1X%x&-B7<_lNMP46=rjQux z=xw|llg2tM30nt89=6U3AiAt<-3WA`f`(tP_Tjd%mDF@&D}=J{8C#uKJWj9HVeKF` z2|Oh4;cJvW53tu3Pi}}T+63b)5fr|MzZ_vOvp&5e z|0&ub`zzQg!#&Os`j#w+FOU(3`ASCr1&eSs3yBM(`=y{r-&UTINwb;G&NWrDp%xB} z<5F>=sg6uF4=7wc&fkpNNLu+6<|mVrE2r{J6kj4%pAgProKP5m!NzBYHvU3H&&+K|8g|sB0rYkBP%I47#Uycgr+h$WO`K-Rkzm`c2ekH|4IIXRcrgTbak*#d6Ql>=2o& zVIpY>vf0or$G>c>scERXE1trAvZf0=+EGuB*n4J8alG8(!rikbxxIaTzf9!jw>b}E z7Sou2QHJc^8uU!}*WrPww3bf2=i`N^W_)!Auk3~#ZKtoCn$*K<$(Y}x6M2@&YCSK+ z=BqB_HAkoWYJ2hE|FW04=+CjSn%7!(v?@~JuLGLobpKCed@a8DUmDC#>;tDiQyliW z&0|Hp7vrEf?)=EKFv|+>#$POUr?-K2A^2n-{H)9P+{hV1(;T0*^m{G*xpmB>EfNFAr`V9@$!R@=^Qz z!ouW1Gkp0_ZR?J$wT)M#LlfI-Lqp@+x9!+5J~XsF8BRt9x2J>K#*-a`!#fAlbbN68 H_&EI=n4R?k literal 0 HcmV?d00001 diff --git a/payment-channel-xlm/util/setup.go b/payment-channel-xlm/util/setup.go new file mode 100644 index 0000000..abb3970 --- /dev/null +++ b/payment-channel-xlm/util/setup.go @@ -0,0 +1,337 @@ +// Copyright 2024 PolyCrypt GmbH +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package util + +import ( + "context" + "crypto/rand" + "encoding/binary" + "fmt" + "log" + mathrand "math/rand" + "path/filepath" + "runtime" + "time" + + "github.com/stellar/go/clients/horizonclient" + "github.com/stellar/go/keypair" + "github.com/stellar/go/txnbuild" + "github.com/stellar/go/xdr" + pchannel "perun.network/go-perun/channel" + "perun.network/perun-stellar-backend/channel" + "perun.network/perun-stellar-backend/channel/types" + "perun.network/perun-stellar-backend/client" + "perun.network/perun-stellar-backend/wallet" + "perun.network/perun-stellar-backend/wire/scval" +) + +const ( + PerunContractPath = "payment-channel-xlm/testdata/perun_soroban_multi_contract.wasm" + StellarAssetContractPath = "payment-channel-xlm/testdata/perun_soroban_token.wasm" + initLumensBalance = "10000000" + initTokenBalance = uint64(2000000) + DefaultTestTimeout = 30 +) + +type Setup struct { + accs []*wallet.Account + ws []*wallet.EphemeralWallet + cbs []*client.ContractBackend + Rng *mathrand.Rand + funders []*channel.Funder + adjs []*channel.Adjudicator + assetIDs []pchannel.Asset +} + +func (s *Setup) GetStellarClients() []*client.ContractBackend { + return s.cbs +} + +func (s *Setup) GetFunders() []*channel.Funder { + return s.funders +} + +func (s *Setup) GetAdjudicators() []*channel.Adjudicator { + return s.adjs +} + +func (s *Setup) GetTokenAsset() []pchannel.Asset { + return s.assetIDs +} + +func (s *Setup) GetAccounts() []*wallet.Account { + return s.accs +} + +func (s *Setup) GetWallets() []*wallet.EphemeralWallet { + return s.ws +} + +func getProjectRoot() (string, error) { + _, b, _, _ := runtime.Caller(1) + basepath := filepath.Dir(b) + + fp, err := filepath.Abs(filepath.Join(basepath, "../..")) //filepath.Abs(filepath.Join(basepath, "../..")) + return fp, err +} + +func getDataFilePath(filename string) (string, error) { + root, err := getProjectRoot() + if err != nil { + return "", err + } + + fp := filepath.Join(root, "", filename) + return fp, nil +} + +func NewExampleSetup() (*Setup, error) { + + accs, kpsToFund, ws := MakeRandPerunAccsWallets(5) + + if err := CreateFundStellarAccounts(kpsToFund, initLumensBalance); err != nil { + return nil, fmt.Errorf("error funding accounts: %w", err) + } + + depTokenOneKp := kpsToFund[2] + depTokenTwoKp := kpsToFund[3] + + depTokenKps := []*keypair.Full{depTokenOneKp, depTokenTwoKp} + + epPerunKp := kpsToFund[4] + + relPathPerun, err := getDataFilePath(PerunContractPath) + if err != nil { + return nil, fmt.Errorf("error getting Perun contract path: %w", err) + } + relPathAsset, err := getDataFilePath(StellarAssetContractPath) + if err != nil { + return nil, fmt.Errorf("error getting asset contract path: %w", err) + } + + perunAddress, _ := Deploy(epPerunKp, relPathPerun) + + tokenAddressOne, _ := Deploy(depTokenOneKp, relPathAsset) + tokenAddressTwo, _ := Deploy(depTokenTwoKp, relPathAsset) + + tokenAddresses := []xdr.ScAddress{tokenAddressOne, tokenAddressTwo} + + InitTokenContract(depTokenOneKp, tokenAddressOne) + InitTokenContract(depTokenTwoKp, tokenAddressTwo) + + SetupAccountsAndContracts(depTokenKps, kpsToFund[:2], tokenAddresses, initTokenBalance) + + var assetContractIDs []pchannel.Asset + + for _, tokenAddress := range tokenAddresses { + assetContractID, err := types.NewStellarAssetFromScAddress(tokenAddress) + if err != nil { + return nil, err + } + assetContractIDs = append(assetContractIDs, assetContractID) + } + + cbs := NewContractBackendsFromKeys(kpsToFund[:2]) + + aliceCB := cbs[0] + aliceWallet := ws[0] + + bobCB := cbs[1] + bobWallet := ws[1] + + channelAccs := []*wallet.Account{accs[0], accs[1]} + channelCBs := []*client.ContractBackend{aliceCB, bobCB} + channelWallets := []*wallet.EphemeralWallet{aliceWallet, bobWallet} + + funders, adjs := CreateFundersAndAdjudicators(channelAccs, cbs, perunAddress, tokenAddresses) + + setup := Setup{ + accs: channelAccs, + ws: channelWallets, + cbs: channelCBs, + funders: funders, + adjs: adjs, + assetIDs: assetContractIDs, + } + + return &setup, nil +} + +func SetupAccountsAndContracts(deployerKps []*keypair.Full, kps []*keypair.Full, tokenAddresses []xdr.ScAddress, tokenBalance uint64) { + + for i := range deployerKps { + for _, kp := range kps { + addr, err := types.MakeAccountAddress(kp) + if err != nil { + panic(err) + } + MintToken(deployerKps[i], tokenAddresses[i], tokenBalance, addr) + } + } +} +func CreateFundersAndAdjudicators(accs []*wallet.Account, cbs []*client.ContractBackend, perunAddress xdr.ScAddress, tokenScAddresses []xdr.ScAddress) ([]*channel.Funder, []*channel.Adjudicator) { + funders := make([]*channel.Funder, len(accs)) + adjs := make([]*channel.Adjudicator, len(accs)) + + tokenVecAddresses := scval.MakeScVecFromScAddresses(tokenScAddresses) + + for i, acc := range accs { + funders[i] = channel.NewFunder(acc, cbs[i], perunAddress, tokenVecAddresses) + adjs[i] = channel.NewAdjudicator(acc, cbs[i], perunAddress, tokenVecAddresses) + } + return funders, adjs +} + +func NewContractBackendsFromKeys(kps []*keypair.Full) []*client.ContractBackend { + cbs := make([]*client.ContractBackend, len(kps)) + // generate Configs + for i, kp := range kps { + cbs[i] = NewContractBackendFromKey(kp) + } + return cbs +} + +func NewContractBackendFromKey(kp *keypair.Full) *client.ContractBackend { + trConfig := client.TransactorConfig{} + trConfig.SetKeyPair(kp) + return client.NewContractBackend(&trConfig) +} + +func MakeRandPerunAccsWallets(count int) ([]*wallet.Account, []*keypair.Full, []*wallet.EphemeralWallet) { + accs := make([]*wallet.Account, count) + kps := make([]*keypair.Full, count) + ws := make([]*wallet.EphemeralWallet, count) + + for i := 0; i < count; i++ { + acc, kp, w := MakeRandPerunAccWallet() + accs[i] = acc + kps[i] = kp + ws[i] = w + } + return accs, kps, ws +} + +func MakeRandPerunAcc() (*wallet.Account, *keypair.Full) { + w := wallet.NewEphemeralWallet() + + var b [8]byte + _, err := rand.Read(b[:]) + if err != nil { + panic(err) + } + + seed := binary.LittleEndian.Uint64(b[:]) + + r := mathrand.New(mathrand.NewSource(int64(seed))) + + acc, kp, err := w.AddNewAccount(r) + if err != nil { + panic(err) + } + return acc, kp +} + +func MakeRandPerunAccWallet() (*wallet.Account, *keypair.Full, *wallet.EphemeralWallet) { + w := wallet.NewEphemeralWallet() + + var b [8]byte + _, err := rand.Read(b[:]) + if err != nil { + panic(err) + } + + seed := binary.LittleEndian.Uint64(b[:]) + + r := mathrand.New(mathrand.NewSource(int64(seed))) + + acc, kp, err := w.AddNewAccount(r) + if err != nil { + panic(err) + } + return acc, kp, w +} + +func CreateFundStellarAccounts(pairs []*keypair.Full, initialBalance string) error { + + numKps := len(pairs) + + masterClient := client.NewHorizonMasterClient() + masterHzClient := masterClient.GetHorizonClient() + sourceKey := keypair.Root(client.NETWORK_PASSPHRASE) + + hzClient := client.NewHorizonClient() + + ops := make([]txnbuild.Operation, numKps) + + accReq := horizonclient.AccountRequest{AccountID: masterClient.GetAddress()} + sourceAccount, err := masterHzClient.AccountDetail(accReq) + if err != nil { + panic(err) + } + + masterAccount := txnbuild.SimpleAccount{ + AccountID: masterClient.GetAddress(), + Sequence: sourceAccount.Sequence, + } + + for i := 0; i < numKps; i++ { + pair := pairs[i] + + ops[i] = &txnbuild.CreateAccount{ + SourceAccount: masterAccount.AccountID, + Destination: pair.Address(), + Amount: initialBalance, + } + } + + txParams := client.GetBaseTransactionParamsWithFee(&masterAccount, txnbuild.MinBaseFee, ops...) + + txSigned, err := client.CreateSignedTransactionWithParams([]*keypair.Full{sourceKey}, txParams) + + if err != nil { + panic(err) + } + _, err = hzClient.SubmitTransaction(txSigned) + if err != nil { + panic(err) + } + + accounts := make([]txnbuild.Account, numKps) + for i, kp := range pairs { + request := horizonclient.AccountRequest{AccountID: kp.Address()} + account, err := hzClient.AccountDetail(request) + if err != nil { + panic(err) + } + + accounts[i] = &account + } + + for _, keys := range pairs { + log.Printf("Funded Stellar L1 account %s (%s) with %s XLM.\n", + keys.Seed(), keys.Address(), initialBalance) + } + + return nil +} + +func (s *Setup) NewCtx(testTimeout float64) context.Context { + timeout := time.Duration(testTimeout * float64(time.Second)) + ctx, cancel := context.WithTimeout(context.Background(), timeout) + if cancel != nil { + return nil + } + return ctx +} diff --git a/payment-channel-xlm/util/token.go b/payment-channel-xlm/util/token.go new file mode 100644 index 0000000..163d06e --- /dev/null +++ b/payment-channel-xlm/util/token.go @@ -0,0 +1,240 @@ +// Copyright 2024 PolyCrypt GmbH +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +package util + +import ( + "errors" + + "github.com/stellar/go/clients/horizonclient" + "github.com/stellar/go/keypair" + "github.com/stellar/go/xdr" + "perun.network/perun-stellar-backend/channel" + "perun.network/perun-stellar-backend/channel/types" + "perun.network/perun-stellar-backend/client" + "perun.network/perun-stellar-backend/event" + "perun.network/perun-stellar-backend/wire/scval" +) + +const tokenDecimals = uint32(7) +const tokenName = "PerunToken" +const tokenSymbol = "PRN" + +type TokenParams struct { + decimals uint32 + name string + symbol string +} + +func NewTokenParams() *TokenParams { + return &TokenParams{ + decimals: tokenDecimals, + name: tokenName, + symbol: tokenSymbol, + } +} + +func (t *TokenParams) GetDecimals() uint32 { + return t.decimals +} + +func (t *TokenParams) GetName() string { + return t.name +} + +func (t *TokenParams) GetSymbol() string { + return t.symbol +} + +func BuildInitTokenArgs(adminAddr xdr.ScAddress, decimals uint32, tokenName string, tokenSymbol string) (xdr.ScVec, error) { + + adminScAddr, err := scval.WrapScAddress(adminAddr) + if err != nil { + panic(err) + } + + decim := xdr.Uint32(decimals) + scvaltype := xdr.ScValTypeScvU32 + decimSc, err := xdr.NewScVal(scvaltype, decim) + if err != nil { + panic(err) + } + + tokenNameScString := xdr.ScString(tokenName) + tokenNameXdr := scval.MustWrapScString(tokenNameScString) + + tokenSymbolString := xdr.ScString(tokenSymbol) + tokenSymbolXdr := scval.MustWrapScString(tokenSymbolString) + + initTokenArgs := xdr.ScVec{ + adminScAddr, + decimSc, + tokenNameXdr, + tokenSymbolXdr, + } + + return initTokenArgs, nil +} + +func InitTokenContract(kp *keypair.Full, contractIDAddress xdr.ScAddress) error { + + cb := NewContractBackendFromKey(kp) + + adminScAddr, err := types.MakeAccountAddress(kp) + if err != nil { + panic(err) + } + + tokenParams := NewTokenParams() + decimals := tokenParams.GetDecimals() + name := tokenParams.GetName() + symbol := tokenParams.GetSymbol() + + initArgs, err := BuildInitTokenArgs(adminScAddr, decimals, name, symbol) + if err != nil { + panic(err) + } + + txMeta, err := cb.InvokeSignedTx("initialize", initArgs, contractIDAddress) + if err != nil { + return errors.New("error while invoking and processing host function: initialize" + err.Error()) + } + + _, err = event.DecodeEventsPerun(txMeta) + if err != nil { + return err + } + + return nil +} + +func GetTokenName(kp *keypair.Full, contractAddress xdr.ScAddress) error { + + cb := NewContractBackendFromKey(kp) + TokenNameArgs := xdr.ScVec{} + + _, err := cb.InvokeSignedTx("name", TokenNameArgs, contractAddress) + if err != nil { + panic(err) + } + + return nil +} + +func BuildGetTokenBalanceArgs(balanceOf xdr.ScAddress) (xdr.ScVec, error) { + + recScAddr, err := scval.WrapScAddress(balanceOf) + if err != nil { + panic(err) + } + + GetTokenBalanceArgs := xdr.ScVec{ + recScAddr, + } + + return GetTokenBalanceArgs, nil +} + +func BuildTransferTokenArgs(from xdr.ScAddress, to xdr.ScAddress, amount xdr.Int128Parts) (xdr.ScVec, error) { + + fromScAddr, err := scval.WrapScAddress(from) + if err != nil { + panic(err) + } + + toScAddr, err := scval.WrapScAddress(to) + if err != nil { + panic(err) + } + + amountSc, err := scval.WrapInt128Parts(amount) + if err != nil { + panic(err) + } + + GetTokenBalanceArgs := xdr.ScVec{ + fromScAddr, + toScAddr, + amountSc, + } + + return GetTokenBalanceArgs, nil +} + +func Deploy(kp *keypair.Full, contractPath string) (xdr.ScAddress, xdr.Hash) { + deployerCB := NewContractBackendFromKey(kp) + tr := deployerCB.GetTransactor() + hzClient := tr.GetHorizonClient() + deployerAccReq := horizonclient.AccountRequest{AccountID: kp.Address()} + deployerAcc, err := hzClient.AccountDetail(deployerAccReq) + if err != nil { + panic(err) + } + + installContractOpInstall := channel.AssembleInstallContractCodeOp(kp.Address(), contractPath) + preFlightOp, _ := client.PreflightHostFunctions(hzClient, &deployerAcc, *installContractOpInstall) + + minFeeInstallCustom := 500000 + txParamsInstall := client.GetBaseTransactionParamsWithFee(&deployerAcc, int64(minFeeInstallCustom), &preFlightOp) + txSignedInstall, err := client.CreateSignedTransactionWithParams([]*keypair.Full{kp}, txParamsInstall) + if err != nil { + panic(err) + } + + _, err = hzClient.SubmitTransaction(txSignedInstall) + if err != nil { + panic(err) + } + + createContractOp := channel.AssembleCreateContractOp(kp.Address(), contractPath, "a1", client.NETWORK_PASSPHRASE) + preFlightOpCreate, _ := client.PreflightHostFunctions(hzClient, &deployerAcc, *createContractOp) + txParamsCreate := client.GetBaseTransactionParamsWithFee(&deployerAcc, int64(minFeeInstallCustom), &preFlightOpCreate) + txSignedCreate, err := client.CreateSignedTransactionWithParams([]*keypair.Full{kp}, txParamsCreate) + if err != nil { + panic(err) + } + + _, err = hzClient.SubmitTransaction(txSignedCreate) + if err != nil { + panic(err) + } + + contractID := preFlightOpCreate.Ext.SorobanData.Resources.Footprint.ReadWrite[0].MustContractData().Contract.ContractId + contractHash := preFlightOpCreate.Ext.SorobanData.Resources.Footprint.ReadOnly[0].MustContractCode().Hash + contractIDAddress := xdr.ScAddress{ + Type: xdr.ScAddressTypeScAddressTypeContract, + ContractId: contractID, + } + + return contractIDAddress, contractHash +} + +func MintToken(kp *keypair.Full, contractAddr xdr.ScAddress, amount uint64, recipientAddr xdr.ScAddress) error { + cb := NewContractBackendFromKey(kp) + + amountTo128Xdr := xdr.Int128Parts{Hi: 0, Lo: xdr.Uint64(amount)} + + amountSc, err := xdr.NewScVal(xdr.ScValTypeScvI128, amountTo128Xdr) + if err != nil { + panic(err) + } + mintTokenArgs, err := client.BuildMintTokenArgs(recipientAddr, amountSc) + if err != nil { + panic(err) + } + _, err = cb.InvokeSignedTx("mint", mintTokenArgs, contractAddr) + if err != nil { + panic(err) + } + return nil +}