diff --git a/localnet.just b/localnet.just index 97ed568a2..3a38a9be3 100644 --- a/localnet.just +++ b/localnet.just @@ -1,7 +1,7 @@ chain_id := "warden_1337-1" shulgin := "warden1d652c9nngq5cneak2whyaqa4g9ehr8pstxj0r5" shulgin_mnemonic := "exclude try nephew main caught favorite tone degree lottery device tissue tent ugly mouse pelican gasp lava flush pen river noise remind balcony emerge" -warden-precompiles := '["0x0000000000000000000000000000000000000900", "0x0000000000000000000000000000000000000901", "0x0000000000000000000000000000000000000902"]' +warden-precompiles := '["0x0000000000000000000000000000000000000900", "0x0000000000000000000000000000000000000901", "0x0000000000000000000000000000000000000902", "0x0000000000000000000000000000000000000903"]' # run a single-node chain locally, use "bin" to specify the binary name start bin="wardend" install="true": diff --git a/precompiles/act/Types.abi b/precompiles/act/Types.abi new file mode 100644 index 000000000..0637a088a --- /dev/null +++ b/precompiles/act/Types.abi @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/precompiles/async/IAsync.go b/precompiles/async/IAsync.go new file mode 100644 index 000000000..010d30a21 --- /dev/null +++ b/precompiles/async/IAsync.go @@ -0,0 +1,509 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package async + +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 +) + +// Future is an auto generated low-level Go binding around an user-defined struct. +type Future struct { + Id uint64 + Creator common.Address + Handler string + Input []byte +} + +// FutureByIdResponse is an auto generated low-level Go binding around an user-defined struct. +type FutureByIdResponse struct { + Future Future +} + +// FutureResponse is an auto generated low-level Go binding around an user-defined struct. +type FutureResponse struct { + Future Future + Votes []FutureVote + Result FutureResult +} + +// FutureResult is an auto generated low-level Go binding around an user-defined struct. +type FutureResult struct { + Id uint64 + Output []byte + Submitter []byte +} + +// FutureVote is an auto generated low-level Go binding around an user-defined struct. +type FutureVote struct { + FutureId uint64 + Voter []byte + Vote uint8 +} + +// FuturesResponse is an auto generated low-level Go binding around an user-defined struct. +type FuturesResponse struct { + Pagination TypesPageResponse + Futures []FutureResponse +} + +// PendingFuturesResponse is an auto generated low-level Go binding around an user-defined struct. +type PendingFuturesResponse struct { + Pagination TypesPageResponse + Futures []Future +} + +// TypesPageRequest is an auto generated low-level Go binding around an user-defined struct. +type TypesPageRequest struct { + Key []byte + Offset uint64 + Limit uint64 + CountTotal bool + Reverse bool +} + +// TypesPageResponse is an auto generated low-level Go binding around an user-defined struct. +type TypesPageResponse struct { + NextKey []byte + Total uint64 +} + +// IAsyncMetaData contains all meta data concerning the IAsync contract. +var IAsyncMetaData = &bind.MetaData{ + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"futureId\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"creator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"handler\",\"type\":\"string\"}],\"name\":\"CreateFuture\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"handler\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"addFuture\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"futureId\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"futureId\",\"type\":\"uint64\"}],\"name\":\"futureById\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"creator\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"handler\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"internalType\":\"structFuture\",\"name\":\"future\",\"type\":\"tuple\"}],\"internalType\":\"structFutureByIdResponse\",\"name\":\"response\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"key\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"offset\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"limit\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"countTotal\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"reverse\",\"type\":\"bool\"}],\"internalType\":\"structTypes.PageRequest\",\"name\":\"pagination\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"creator\",\"type\":\"address\"}],\"name\":\"futures\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nextKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"total\",\"type\":\"uint64\"}],\"internalType\":\"structTypes.PageResponse\",\"name\":\"pagination\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"creator\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"handler\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"internalType\":\"structFuture\",\"name\":\"future\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"futureId\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"Voter\",\"type\":\"bytes\"},{\"internalType\":\"enumFutureVoteType\",\"name\":\"vote\",\"type\":\"uint8\"}],\"internalType\":\"structFutureVote[]\",\"name\":\"votes\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"output\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"submitter\",\"type\":\"bytes\"}],\"internalType\":\"structFutureResult\",\"name\":\"result\",\"type\":\"tuple\"}],\"internalType\":\"structFutureResponse[]\",\"name\":\"futures\",\"type\":\"tuple[]\"}],\"internalType\":\"structFuturesResponse\",\"name\":\"response\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"key\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"offset\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"limit\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"countTotal\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"reverse\",\"type\":\"bool\"}],\"internalType\":\"structTypes.PageRequest\",\"name\":\"pagination\",\"type\":\"tuple\"}],\"name\":\"pendingFutures\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nextKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"total\",\"type\":\"uint64\"}],\"internalType\":\"structTypes.PageResponse\",\"name\":\"pagination\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"creator\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"handler\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"internalType\":\"structFuture[]\",\"name\":\"futures\",\"type\":\"tuple[]\"}],\"internalType\":\"structPendingFuturesResponse\",\"name\":\"response\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", +} + +// IAsyncABI is the input ABI used to generate the binding from. +// Deprecated: Use IAsyncMetaData.ABI instead. +var IAsyncABI = IAsyncMetaData.ABI + +// IAsync is an auto generated Go binding around an Ethereum contract. +type IAsync struct { + IAsyncCaller // Read-only binding to the contract + IAsyncTransactor // Write-only binding to the contract + IAsyncFilterer // Log filterer for contract events +} + +// IAsyncCaller is an auto generated read-only Go binding around an Ethereum contract. +type IAsyncCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IAsyncTransactor is an auto generated write-only Go binding around an Ethereum contract. +type IAsyncTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IAsyncFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type IAsyncFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IAsyncSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type IAsyncSession struct { + Contract *IAsync // 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 +} + +// IAsyncCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type IAsyncCallerSession struct { + Contract *IAsyncCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// IAsyncTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type IAsyncTransactorSession struct { + Contract *IAsyncTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IAsyncRaw is an auto generated low-level Go binding around an Ethereum contract. +type IAsyncRaw struct { + Contract *IAsync // Generic contract binding to access the raw methods on +} + +// IAsyncCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type IAsyncCallerRaw struct { + Contract *IAsyncCaller // Generic read-only contract binding to access the raw methods on +} + +// IAsyncTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type IAsyncTransactorRaw struct { + Contract *IAsyncTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewIAsync creates a new instance of IAsync, bound to a specific deployed contract. +func NewIAsync(address common.Address, backend bind.ContractBackend) (*IAsync, error) { + contract, err := bindIAsync(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &IAsync{IAsyncCaller: IAsyncCaller{contract: contract}, IAsyncTransactor: IAsyncTransactor{contract: contract}, IAsyncFilterer: IAsyncFilterer{contract: contract}}, nil +} + +// NewIAsyncCaller creates a new read-only instance of IAsync, bound to a specific deployed contract. +func NewIAsyncCaller(address common.Address, caller bind.ContractCaller) (*IAsyncCaller, error) { + contract, err := bindIAsync(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &IAsyncCaller{contract: contract}, nil +} + +// NewIAsyncTransactor creates a new write-only instance of IAsync, bound to a specific deployed contract. +func NewIAsyncTransactor(address common.Address, transactor bind.ContractTransactor) (*IAsyncTransactor, error) { + contract, err := bindIAsync(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &IAsyncTransactor{contract: contract}, nil +} + +// NewIAsyncFilterer creates a new log filterer instance of IAsync, bound to a specific deployed contract. +func NewIAsyncFilterer(address common.Address, filterer bind.ContractFilterer) (*IAsyncFilterer, error) { + contract, err := bindIAsync(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &IAsyncFilterer{contract: contract}, nil +} + +// bindIAsync binds a generic wrapper to an already deployed contract. +func bindIAsync(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(IAsyncABI)) + 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 (_IAsync *IAsyncRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IAsync.Contract.IAsyncCaller.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 (_IAsync *IAsyncRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IAsync.Contract.IAsyncTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IAsync *IAsyncRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IAsync.Contract.IAsyncTransactor.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 (_IAsync *IAsyncCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IAsync.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 (_IAsync *IAsyncTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IAsync.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IAsync *IAsyncTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IAsync.Contract.contract.Transact(opts, method, params...) +} + +// FutureById is a free data retrieval call binding the contract method 0x012d56e0. +// +// Solidity: function futureById(uint64 futureId) view returns(((uint64,address,string,bytes)) response) +func (_IAsync *IAsyncCaller) FutureById(opts *bind.CallOpts, futureId uint64) (FutureByIdResponse, error) { + var out []interface{} + err := _IAsync.contract.Call(opts, &out, "futureById", futureId) + + if err != nil { + return *new(FutureByIdResponse), err + } + + out0 := *abi.ConvertType(out[0], new(FutureByIdResponse)).(*FutureByIdResponse) + + return out0, err + +} + +// FutureById is a free data retrieval call binding the contract method 0x012d56e0. +// +// Solidity: function futureById(uint64 futureId) view returns(((uint64,address,string,bytes)) response) +func (_IAsync *IAsyncSession) FutureById(futureId uint64) (FutureByIdResponse, error) { + return _IAsync.Contract.FutureById(&_IAsync.CallOpts, futureId) +} + +// FutureById is a free data retrieval call binding the contract method 0x012d56e0. +// +// Solidity: function futureById(uint64 futureId) view returns(((uint64,address,string,bytes)) response) +func (_IAsync *IAsyncCallerSession) FutureById(futureId uint64) (FutureByIdResponse, error) { + return _IAsync.Contract.FutureById(&_IAsync.CallOpts, futureId) +} + +// Futures is a free data retrieval call binding the contract method 0x83817c27. +// +// Solidity: function futures((bytes,uint64,uint64,bool,bool) pagination, address creator) view returns(((bytes,uint64),((uint64,address,string,bytes),(uint64,bytes,uint8)[],(uint64,bytes,bytes))[]) response) +func (_IAsync *IAsyncCaller) Futures(opts *bind.CallOpts, pagination TypesPageRequest, creator common.Address) (FuturesResponse, error) { + var out []interface{} + err := _IAsync.contract.Call(opts, &out, "futures", pagination, creator) + + if err != nil { + return *new(FuturesResponse), err + } + + out0 := *abi.ConvertType(out[0], new(FuturesResponse)).(*FuturesResponse) + + return out0, err + +} + +// Futures is a free data retrieval call binding the contract method 0x83817c27. +// +// Solidity: function futures((bytes,uint64,uint64,bool,bool) pagination, address creator) view returns(((bytes,uint64),((uint64,address,string,bytes),(uint64,bytes,uint8)[],(uint64,bytes,bytes))[]) response) +func (_IAsync *IAsyncSession) Futures(pagination TypesPageRequest, creator common.Address) (FuturesResponse, error) { + return _IAsync.Contract.Futures(&_IAsync.CallOpts, pagination, creator) +} + +// Futures is a free data retrieval call binding the contract method 0x83817c27. +// +// Solidity: function futures((bytes,uint64,uint64,bool,bool) pagination, address creator) view returns(((bytes,uint64),((uint64,address,string,bytes),(uint64,bytes,uint8)[],(uint64,bytes,bytes))[]) response) +func (_IAsync *IAsyncCallerSession) Futures(pagination TypesPageRequest, creator common.Address) (FuturesResponse, error) { + return _IAsync.Contract.Futures(&_IAsync.CallOpts, pagination, creator) +} + +// PendingFutures is a free data retrieval call binding the contract method 0xddebca34. +// +// Solidity: function pendingFutures((bytes,uint64,uint64,bool,bool) pagination) view returns(((bytes,uint64),(uint64,address,string,bytes)[]) response) +func (_IAsync *IAsyncCaller) PendingFutures(opts *bind.CallOpts, pagination TypesPageRequest) (PendingFuturesResponse, error) { + var out []interface{} + err := _IAsync.contract.Call(opts, &out, "pendingFutures", pagination) + + if err != nil { + return *new(PendingFuturesResponse), err + } + + out0 := *abi.ConvertType(out[0], new(PendingFuturesResponse)).(*PendingFuturesResponse) + + return out0, err + +} + +// PendingFutures is a free data retrieval call binding the contract method 0xddebca34. +// +// Solidity: function pendingFutures((bytes,uint64,uint64,bool,bool) pagination) view returns(((bytes,uint64),(uint64,address,string,bytes)[]) response) +func (_IAsync *IAsyncSession) PendingFutures(pagination TypesPageRequest) (PendingFuturesResponse, error) { + return _IAsync.Contract.PendingFutures(&_IAsync.CallOpts, pagination) +} + +// PendingFutures is a free data retrieval call binding the contract method 0xddebca34. +// +// Solidity: function pendingFutures((bytes,uint64,uint64,bool,bool) pagination) view returns(((bytes,uint64),(uint64,address,string,bytes)[]) response) +func (_IAsync *IAsyncCallerSession) PendingFutures(pagination TypesPageRequest) (PendingFuturesResponse, error) { + return _IAsync.Contract.PendingFutures(&_IAsync.CallOpts, pagination) +} + +// AddFuture is a paid mutator transaction binding the contract method 0x58f36d78. +// +// Solidity: function addFuture(string handler, bytes input) returns(uint64 futureId) +func (_IAsync *IAsyncTransactor) AddFuture(opts *bind.TransactOpts, handler string, input []byte) (*types.Transaction, error) { + return _IAsync.contract.Transact(opts, "addFuture", handler, input) +} + +// AddFuture is a paid mutator transaction binding the contract method 0x58f36d78. +// +// Solidity: function addFuture(string handler, bytes input) returns(uint64 futureId) +func (_IAsync *IAsyncSession) AddFuture(handler string, input []byte) (*types.Transaction, error) { + return _IAsync.Contract.AddFuture(&_IAsync.TransactOpts, handler, input) +} + +// AddFuture is a paid mutator transaction binding the contract method 0x58f36d78. +// +// Solidity: function addFuture(string handler, bytes input) returns(uint64 futureId) +func (_IAsync *IAsyncTransactorSession) AddFuture(handler string, input []byte) (*types.Transaction, error) { + return _IAsync.Contract.AddFuture(&_IAsync.TransactOpts, handler, input) +} + +// IAsyncCreateFutureIterator is returned from FilterCreateFuture and is used to iterate over the raw logs and unpacked data for CreateFuture events raised by the IAsync contract. +type IAsyncCreateFutureIterator struct { + Event *IAsyncCreateFuture // 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 *IAsyncCreateFutureIterator) 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(IAsyncCreateFuture) + 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(IAsyncCreateFuture) + 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 *IAsyncCreateFutureIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IAsyncCreateFutureIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IAsyncCreateFuture represents a CreateFuture event raised by the IAsync contract. +type IAsyncCreateFuture struct { + FutureId uint64 + Creator common.Address + Handler string + Raw types.Log // Blockchain specific contextual infos +} + +// FilterCreateFuture is a free log retrieval operation binding the contract event 0x5ff36e17a53266688028dda85a1ae26868151e191647b9c731c7a43d5041ac96. +// +// Solidity: event CreateFuture(uint64 indexed futureId, address indexed creator, string handler) +func (_IAsync *IAsyncFilterer) FilterCreateFuture(opts *bind.FilterOpts, futureId []uint64, creator []common.Address) (*IAsyncCreateFutureIterator, error) { + + var futureIdRule []interface{} + for _, futureIdItem := range futureId { + futureIdRule = append(futureIdRule, futureIdItem) + } + var creatorRule []interface{} + for _, creatorItem := range creator { + creatorRule = append(creatorRule, creatorItem) + } + + logs, sub, err := _IAsync.contract.FilterLogs(opts, "CreateFuture", futureIdRule, creatorRule) + if err != nil { + return nil, err + } + return &IAsyncCreateFutureIterator{contract: _IAsync.contract, event: "CreateFuture", logs: logs, sub: sub}, nil +} + +// WatchCreateFuture is a free log subscription operation binding the contract event 0x5ff36e17a53266688028dda85a1ae26868151e191647b9c731c7a43d5041ac96. +// +// Solidity: event CreateFuture(uint64 indexed futureId, address indexed creator, string handler) +func (_IAsync *IAsyncFilterer) WatchCreateFuture(opts *bind.WatchOpts, sink chan<- *IAsyncCreateFuture, futureId []uint64, creator []common.Address) (event.Subscription, error) { + + var futureIdRule []interface{} + for _, futureIdItem := range futureId { + futureIdRule = append(futureIdRule, futureIdItem) + } + var creatorRule []interface{} + for _, creatorItem := range creator { + creatorRule = append(creatorRule, creatorItem) + } + + logs, sub, err := _IAsync.contract.WatchLogs(opts, "CreateFuture", futureIdRule, creatorRule) + 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(IAsyncCreateFuture) + if err := _IAsync.contract.UnpackLog(event, "CreateFuture", 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 +} + +// ParseCreateFuture is a log parse operation binding the contract event 0x5ff36e17a53266688028dda85a1ae26868151e191647b9c731c7a43d5041ac96. +// +// Solidity: event CreateFuture(uint64 indexed futureId, address indexed creator, string handler) +func (_IAsync *IAsyncFilterer) ParseCreateFuture(log types.Log) (*IAsyncCreateFuture, error) { + event := new(IAsyncCreateFuture) + if err := _IAsync.contract.UnpackLog(event, "CreateFuture", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/precompiles/async/IAsync.sol b/precompiles/async/IAsync.sol new file mode 100644 index 000000000..87ddac15d --- /dev/null +++ b/precompiles/async/IAsync.sol @@ -0,0 +1,105 @@ +// SPDX-License-Identifier: LGPL-3.0-only +pragma solidity >=0.8.18; + +import "../common/Types.sol"; + +/// @dev The IAsync contract's address. +address constant IASYNC_PRECOMPILE_ADDRESS = 0x0000000000000000000000000000000000000903; + +/// @dev The IAsync contract's instance. +IAsync constant IASYNC_CONTRACT = IAsync(IASYNC_PRECOMPILE_ADDRESS); + +struct Future { + uint64 id; + address creator; + string handler; + bytes input; +} + +enum FutureVoteType { + Unspecified, + Verified, + Rejected +} + +struct FutureVote { + uint64 futureId; + bytes Voter; + FutureVoteType vote; +} + +struct FutureResult { + uint64 id; + bytes output; + bytes submitter; +} + +struct FutureResponse { + Future future; + FutureVote[] votes; + FutureResult result; +} + +struct PendingFuturesResponse { + Types.PageResponse pagination; + Future[] futures; +} + +struct FuturesResponse { + Types.PageResponse pagination; + FutureResponse[] futures; +} + +struct FutureByIdResponse { + Future future; +} + +/** + * @author Warden Team + * @title x/async Interface + * @dev The interface through which users and solidity contracts will interact with x/async. + * @custom:address 0x0000000000000000000000000000000000000903 + */ +interface IAsync { + /// @dev Defines a method to add a future. + /// @param handler The unique name of the handler + /// @param input The handler's input + /// @return futureId The id of the future + function addFuture( + string calldata handler, + bytes calldata input + ) external returns (uint64 futureId); + + /// @dev Defines a method to query future by id. + /// @param futureId The future id + /// @return response The future + function futureById( + uint64 futureId + ) external view returns (FutureByIdResponse memory response); + + /// @dev Defines a method to query futures. + /// @param pagination The pagination details + /// @param creator Optional creator address filter + /// @return response The paged futures + function futures( + Types.PageRequest calldata pagination, + address creator + ) external view returns (FuturesResponse memory response); + + /// @dev Defines a method to query pending futures. + /// @param pagination The pagination details + /// @return response The paged futures + function pendingFutures( + Types.PageRequest calldata pagination + ) external view returns (PendingFuturesResponse memory response); + + /// @dev CreateFuture defines an Event emitted when a future is created. + /// @param creator The address of the creator + /// @param futureId The future Id + /// @param handler The name of the handler + event CreateFuture( + uint64 indexed futureId, + address indexed creator, + string handler + ); +} diff --git a/precompiles/async/Types.abi b/precompiles/async/Types.abi new file mode 100644 index 000000000..0637a088a --- /dev/null +++ b/precompiles/async/Types.abi @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/precompiles/async/abi.json b/precompiles/async/abi.json new file mode 100644 index 000000000..91a973b5b --- /dev/null +++ b/precompiles/async/abi.json @@ -0,0 +1,341 @@ +{ + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint64", + "name": "futureId", + "type": "uint64" + }, + { + "indexed": true, + "internalType": "address", + "name": "creator", + "type": "address" + }, + { + "indexed": false, + "internalType": "string", + "name": "handler", + "type": "string" + } + ], + "name": "CreateFuture", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "handler", + "type": "string" + }, + { + "internalType": "bytes", + "name": "input", + "type": "bytes" + } + ], + "name": "addFuture", + "outputs": [ + { + "internalType": "uint64", + "name": "futureId", + "type": "uint64" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "futureId", + "type": "uint64" + } + ], + "name": "futureById", + "outputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "uint64", + "name": "id", + "type": "uint64" + }, + { + "internalType": "address", + "name": "creator", + "type": "address" + }, + { + "internalType": "string", + "name": "handler", + "type": "string" + }, + { + "internalType": "bytes", + "name": "input", + "type": "bytes" + } + ], + "internalType": "struct Future", + "name": "future", + "type": "tuple" + } + ], + "internalType": "struct FutureByIdResponse", + "name": "response", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "key", + "type": "bytes" + }, + { + "internalType": "uint64", + "name": "offset", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "limit", + "type": "uint64" + }, + { + "internalType": "bool", + "name": "countTotal", + "type": "bool" + }, + { + "internalType": "bool", + "name": "reverse", + "type": "bool" + } + ], + "internalType": "struct Types.PageRequest", + "name": "pagination", + "type": "tuple" + }, + { + "internalType": "address", + "name": "creator", + "type": "address" + } + ], + "name": "futures", + "outputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "bytes", + "name": "nextKey", + "type": "bytes" + }, + { + "internalType": "uint64", + "name": "total", + "type": "uint64" + } + ], + "internalType": "struct Types.PageResponse", + "name": "pagination", + "type": "tuple" + }, + { + "components": [ + { + "components": [ + { + "internalType": "uint64", + "name": "id", + "type": "uint64" + }, + { + "internalType": "address", + "name": "creator", + "type": "address" + }, + { + "internalType": "string", + "name": "handler", + "type": "string" + }, + { + "internalType": "bytes", + "name": "input", + "type": "bytes" + } + ], + "internalType": "struct Future", + "name": "future", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint64", + "name": "futureId", + "type": "uint64" + }, + { + "internalType": "bytes", + "name": "Voter", + "type": "bytes" + }, + { + "internalType": "enum FutureVoteType", + "name": "vote", + "type": "uint8" + } + ], + "internalType": "struct FutureVote[]", + "name": "votes", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "uint64", + "name": "id", + "type": "uint64" + }, + { + "internalType": "bytes", + "name": "output", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "submitter", + "type": "bytes" + } + ], + "internalType": "struct FutureResult", + "name": "result", + "type": "tuple" + } + ], + "internalType": "struct FutureResponse[]", + "name": "futures", + "type": "tuple[]" + } + ], + "internalType": "struct FuturesResponse", + "name": "response", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "key", + "type": "bytes" + }, + { + "internalType": "uint64", + "name": "offset", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "limit", + "type": "uint64" + }, + { + "internalType": "bool", + "name": "countTotal", + "type": "bool" + }, + { + "internalType": "bool", + "name": "reverse", + "type": "bool" + } + ], + "internalType": "struct Types.PageRequest", + "name": "pagination", + "type": "tuple" + } + ], + "name": "pendingFutures", + "outputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "bytes", + "name": "nextKey", + "type": "bytes" + }, + { + "internalType": "uint64", + "name": "total", + "type": "uint64" + } + ], + "internalType": "struct Types.PageResponse", + "name": "pagination", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint64", + "name": "id", + "type": "uint64" + }, + { + "internalType": "address", + "name": "creator", + "type": "address" + }, + { + "internalType": "string", + "name": "handler", + "type": "string" + }, + { + "internalType": "bytes", + "name": "input", + "type": "bytes" + } + ], + "internalType": "struct Future[]", + "name": "futures", + "type": "tuple[]" + } + ], + "internalType": "struct PendingFuturesResponse", + "name": "response", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + } + ] +} diff --git a/precompiles/async/async.go b/precompiles/async/async.go new file mode 100644 index 000000000..15a350286 --- /dev/null +++ b/precompiles/async/async.go @@ -0,0 +1,148 @@ +package async + +import ( + "embed" + "fmt" + + "cosmossdk.io/log" + + storetypes "cosmossdk.io/store/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/ethereum/go-ethereum/accounts/abi" + ethcmn "github.com/ethereum/go-ethereum/common" + evmoscmn "github.com/evmos/evmos/v20/precompiles/common" + "github.com/evmos/evmos/v20/x/evm/core/vm" + + "github.com/warden-protocol/wardenprotocol/precompiles/common" + asyncmodulekeeper "github.com/warden-protocol/wardenprotocol/warden/x/async/keeper" + types "github.com/warden-protocol/wardenprotocol/warden/x/async/types/v1beta1" +) + +var _ vm.PrecompiledContract = &Precompile{} + +const PrecompileAddress = "0x0000000000000000000000000000000000000903" + +// Embed abi json file to the executable binary. Needed when importing as dependency. +// +//go:embed abi.json +var f embed.FS + +// Precompile defines the precompiled contract for x/async. +type Precompile struct { + evmoscmn.Precompile + asyncmodulekeeper asyncmodulekeeper.Keeper + eventsRegistry *common.EthEventsRegistry + queryServer types.QueryServer +} + +// LoadABI loads the x/async ABI from the embedded abi.json file +// for the x/async precompile. +func LoadABI() (abi.ABI, error) { + return evmoscmn.LoadABI(f, "abi.json") +} + +func NewPrecompile(asynckeeper asyncmodulekeeper.Keeper, er *common.EthEventsRegistry) (*Precompile, error) { + abi, err := LoadABI() + if err != nil { + return nil, err + } + + p := Precompile{ + Precompile: evmoscmn.Precompile{ + ABI: abi, + KvGasConfig: storetypes.KVGasConfig(), + TransientKVGasConfig: storetypes.TransientGasConfig(), + }, + asyncmodulekeeper: asynckeeper, + eventsRegistry: er, + queryServer: asyncmodulekeeper.NewQueryServerImpl(asynckeeper), + } + + p.SetAddress(p.Address()) + + return &p, nil +} + +// Address implements vm.PrecompiledContract. +func (p *Precompile) Address() ethcmn.Address { + return ethcmn.HexToAddress(PrecompileAddress) +} + +// RequiredGas implements vm.PrecompiledContract. +// Subtle: this method shadows the method (Precompile).RequiredGas of Precompile.Precompile. +func (p *Precompile) RequiredGas(input []byte) uint64 { + // NOTE: This check avoid panicking when trying to decode the method ID + if len(input) < 4 { + return 0 + } + + methodID := input[:4] + + method, err := p.MethodById(methodID) + if err != nil { + // This should never happen since this method is going to fail during Run + return 0 + } + + return p.Precompile.RequiredGas(input, p.IsTransaction(method.Name)) +} + +// Run implements vm.PrecompiledContract. +func (p *Precompile) Run(evm *vm.EVM, contract *vm.Contract, readonly bool) (bz []byte, err error) { + ctx, stateDB, snapshot, method, initialGas, args, err := p.RunSetup(evm, contract, readonly, p.IsTransaction) + if err != nil { + return nil, err + } + + // This handles any out of gas errors that may occur during the execution of a precompile tx or query. + // It avoids panics and returns the out of gas error so the EVM can continue gracefully. + defer evmoscmn.HandleGasError(ctx, contract, initialGas, &err)() + + switch method.Name { + // transactions + case AddFutureMethod: + bz, err = p.AddFutureMethod(ctx, evm.Origin, stateDB, method, args) + // queries + case FutureByIdMethod: + bz, err = p.FutureByIdMethod(ctx, method, args) + case FuturesMethod: + bz, err = p.FuturesMethod(ctx, method, args) + case PendingFuturesMethod: + bz, err = p.PendingFuturesMethod(ctx, method, args) + } + + if err != nil { + return nil, err + } + + cost := ctx.GasMeter().GasConsumed() - initialGas + + if !contract.UseGas(cost) { + return nil, vm.ErrOutOfGas + } + + if err := p.AddJournalEntries(stateDB, snapshot); err != nil { + return nil, err + } + + return bz, nil +} + +func (p *Precompile) IsTransaction(method string) bool { + switch method { + // transactions + case AddFutureMethod: + return true + // queries + case FutureByIdMethod, + FuturesMethod, + PendingFuturesMethod: + return false + } + panic(fmt.Errorf("async precompile: method not exists: %s", method)) +} + +// Logger returns a precompile-specific logger. +func (p *Precompile) Logger(ctx sdk.Context) log.Logger { + return ctx.Logger().With("evm extension", "async") +} diff --git a/precompiles/async/events.go b/precompiles/async/events.go new file mode 100644 index 000000000..29133bbd1 --- /dev/null +++ b/precompiles/async/events.go @@ -0,0 +1,58 @@ +package async + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + ethtypes "github.com/ethereum/go-ethereum/core/types" + evmoscmn "github.com/evmos/evmos/v20/precompiles/common" + + ethcmn "github.com/ethereum/go-ethereum/common" + + "github.com/warden-protocol/wardenprotocol/precompiles/common" + "github.com/warden-protocol/wardenprotocol/warden/x/async/types/v1beta1" +) + +const ( + // EventCreateFuture defines the event type for the x/async CreateFuture transaction. + EventCreateFuture = "CreateFuture" +) + +// GetCreateFutureEvent Map EventCreateFuture to eth CreateFuture event and write to eth log +func (p *Precompile) GetCreateFutureEvent(ctx sdk.Context, writerAddress *ethcmn.Address, sdkEvent sdk.Event) (*ethtypes.Log, error) { + event := p.ABI.Events[EventCreateFuture] + + topics := make([]ethcmn.Hash, 3) + topics[0] = event.ID + + typedEvent := v1beta1.EventCreateFuture{} + if err := common.ParseSdkEvent(sdkEvent, typedEvent.XXX_Merge); err != nil { + return nil, err + } + + packed, err := event.Inputs.NonIndexed().Pack( + typedEvent.GetHandler(), + ) + if err != nil { + return nil, err + } + + creatorAddress, err := common.AddressFromBech32Str(typedEvent.GetCreator()) + if err != nil { + return nil, err + } + + topics[1], err = evmoscmn.MakeTopic(typedEvent.GetId()) + topics[2], err = evmoscmn.MakeTopic(creatorAddress) + + if err != nil { + return nil, err + } + + log := ethtypes.Log{ + Address: p.Address(), + Topics: topics, + Data: packed, + BlockNumber: uint64(ctx.BlockHeight()), + } + + return &log, nil +} diff --git a/precompiles/async/query.go b/precompiles/async/query.go new file mode 100644 index 000000000..c73431820 --- /dev/null +++ b/precompiles/async/query.go @@ -0,0 +1,166 @@ +package async + +import ( + "fmt" + + wardencommon "github.com/warden-protocol/wardenprotocol/precompiles/common" + types "github.com/warden-protocol/wardenprotocol/warden/x/async/types/v1beta1" + + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/query" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/common" +) + +const ( + FutureByIdMethod = "futureById" + FuturesMethod = "futures" + PendingFuturesMethod = "pendingFutures" +) + +// FutureByIdMethod constructs QueryFutureByIdRequest from args, passes it to query server and packs response into corresponding abi output. +func (p Precompile) FutureByIdMethod( + ctx sdk.Context, + method *abi.Method, + args []interface{}, +) ([]byte, error) { + req, err := newFutureByIdRequest(method, args) + if err != nil { + return nil, err + } + + response, err := p.queryServer.FutureById(ctx, req) + if err != nil { + return nil, err + } + if response == nil { + return nil, fmt.Errorf("received nil response from query server") + } + + out, err := new(FutureByIdResponse).FromResponse(response) + if err != nil { + return nil, err + } + + return method.Outputs.Pack(out) +} + +func newFutureByIdRequest(method *abi.Method, args []interface{}) (*types.QueryFutureByIdRequest, error) { + if len(args) != 1 { + return nil, wardencommon.WrongArgsNumber{Expected: 1, Got: len(args)} + } + + var input futureByIdInput + if err := method.Inputs.Copy(&input, args); err != nil { + return nil, fmt.Errorf("error while unpacking args to futureByIdInput struct: %w", err) + } + + return &types.QueryFutureByIdRequest{ + Id: input.Id, + }, nil +} + +type futureByIdInput struct { + Id uint64 +} + +// FuturesMethod constructs QueryFuturesRequest from args, passes it to query server and packs response into corresponding abi output. +func (p Precompile) FuturesMethod( + ctx sdk.Context, + method *abi.Method, + args []interface{}, +) ([]byte, error) { + req, err := newFuturesRequest(method, args) + if err != nil { + return nil, err + } + + response, err := p.queryServer.Futures(ctx, req) + if err != nil { + return nil, err + } + if response == nil { + return nil, fmt.Errorf("received nil response from query server") + } + + out, err := new(FuturesResponse).FromResponse(response) + if err != nil { + return nil, err + } + + return method.Outputs.Pack(out) +} + +func newFuturesRequest(method *abi.Method, args []interface{}) (*types.QueryFuturesRequest, error) { + if len(args) != 2 { + return nil, wardencommon.WrongArgsNumber{Expected: 2, Got: len(args)} + } + + var input futuresInput + if err := method.Inputs.Copy(&input, args); err != nil { + return nil, fmt.Errorf("error while unpacking args to futuresInput struct: %w", err) + } + + var creator string + if input.Creator == (common.Address{}) { + creator = "" + } else { + creator = wardencommon.Bech32StrFromAddress(input.Creator) + } + + return &types.QueryFuturesRequest{ + Pagination: &input.PageRequest, + Creator: creator, + }, nil +} + +type futuresInput struct { + PageRequest query.PageRequest `abi:"pagination"` + Creator common.Address `abi:"creator"` +} + +// PendingFuturesMethod constructs QueryPendingFuturesRequest from args, passes it to query server and packs response into corresponding abi output. +func (p Precompile) PendingFuturesMethod( + ctx sdk.Context, + method *abi.Method, + args []interface{}, +) ([]byte, error) { + req, err := newPendingFuturesRequest(method, args) + if err != nil { + return nil, err + } + + response, err := p.queryServer.PendingFutures(ctx, req) + if err != nil { + return nil, err + } + if response == nil { + return nil, fmt.Errorf("received nil response from query server") + } + + out, err := new(PendingFuturesResponse).FromResponse(response) + if err != nil { + return nil, err + } + + return method.Outputs.Pack(out) +} + +func newPendingFuturesRequest(method *abi.Method, args []interface{}) (*types.QueryPendingFuturesRequest, error) { + if len(args) != 1 { + return nil, wardencommon.WrongArgsNumber{Expected: 1, Got: len(args)} + } + + var input pendingFuturesInput + if err := method.Inputs.Copy(&input, args); err != nil { + return nil, fmt.Errorf("error while unpacking args to pendingFuturesInput struct: %w", err) + } + + return &types.QueryPendingFuturesRequest{ + Pagination: &input.PageRequest, + }, nil +} + +type pendingFuturesInput struct { + PageRequest query.PageRequest `abi:"pagination"` +} diff --git a/precompiles/async/tx.go b/precompiles/async/tx.go new file mode 100644 index 000000000..b9d3938e5 --- /dev/null +++ b/precompiles/async/tx.go @@ -0,0 +1,76 @@ +package async + +import ( + "fmt" + + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/common" + "github.com/evmos/evmos/v20/x/evm/core/vm" + + precommon "github.com/warden-protocol/wardenprotocol/precompiles/common" + actmodulekeeper "github.com/warden-protocol/wardenprotocol/warden/x/async/keeper" + acttypes "github.com/warden-protocol/wardenprotocol/warden/x/async/types/v1beta1" +) + +const ( + AddFutureMethod = "addFuture" +) + +// AddFutureMethod constructs MsgAddFuture from args, passes it to msg server and packs corresponding abi output. +func (p *Precompile) AddFutureMethod( + ctx sdk.Context, + origin common.Address, + stateDB vm.StateDB, + method *abi.Method, + args []interface{}, +) ([]byte, error) { + msgServer := actmodulekeeper.NewMsgServerImpl(p.asyncmodulekeeper) + + message, err := newMsgAddFuture(args, origin, method) + + if err != nil { + return nil, err + } + + p.Logger(ctx).Debug( + "tx called", + "method", method.Name, + "args", args, + ) + + response, err := msgServer.AddFuture(ctx, message) + if err != nil { + return nil, err + } + + if err = p.eventsRegistry.EmitEvents(ctx, stateDB, &origin); err != nil { + return nil, err + } + + return method.Outputs.Pack(response.Id) +} + +func newMsgAddFuture(args []interface{}, origin common.Address, method *abi.Method) (*acttypes.MsgAddFuture, error) { + if len(args) != 2 { + return nil, precommon.WrongArgsNumber{Expected: 2, Got: len(args)} + } + + authority := precommon.Bech32StrFromAddress(origin) + + var input addFutureInput + if err := method.Inputs.Copy(&input, args); err != nil { + return nil, fmt.Errorf("error while unpacking args to addFutureInput struct: %w", err) + } + + return &acttypes.MsgAddFuture{ + Creator: authority, + Input: input.Input, + Handler: input.Handler, + }, nil +} + +type addFutureInput struct { + Handler string + Input []byte +} diff --git a/precompiles/async/types.go b/precompiles/async/types.go new file mode 100644 index 000000000..50d431ecf --- /dev/null +++ b/precompiles/async/types.go @@ -0,0 +1,152 @@ +package async + +import ( + "fmt" + + "github.com/cosmos/cosmos-sdk/types/query" + "github.com/ethereum/go-ethereum/common" + + precommon "github.com/warden-protocol/wardenprotocol/precompiles/common" + types "github.com/warden-protocol/wardenprotocol/warden/x/async/types/v1beta1" +) + +// FuturesInput needed to unmarshal Pagination field and pass it to types.QueryFuturesRequest +type FuturesInput struct { + Pagination query.PageRequest `abi:"pagination"` + Creator common.Address `abi:"creator"` +} + +// FromResponse needed to map QueryFuturesResponse to FuturesResponse +func (r *FuturesResponse) FromResponse(res *types.QueryFuturesResponse) (FuturesResponse, error) { + if res != nil { + futures := make([]FutureResponse, 0, len(res.Futures)) + for _, future := range res.Futures { + mappedFuture, err := mapFutureResponse(future) + if err != nil { + return FuturesResponse{}, err + } + + futures = append(futures, mappedFuture) + } + + r.Futures = futures + r.Pagination = mapPageResponse(res.Pagination) + } + + return *r, nil +} + +// FromResponse needed to map QueryPendingFuturesResponse to PendingFuturesResponse +func (r *PendingFuturesResponse) FromResponse(res *types.QueryPendingFuturesResponse) (PendingFuturesResponse, error) { + if res != nil { + futures := make([]Future, 0, len(res.Futures)) + for _, future := range res.Futures { + mappedFuture, err := mapFuture(future) + if err != nil { + return PendingFuturesResponse{}, err + } + + futures = append(futures, mappedFuture) + } + + r.Futures = futures + r.Pagination = mapPageResponse(res.Pagination) + } + + return *r, nil +} + +// FromResponse needed to map QueryFutureByIdResponse to FutureByIdResponse +func (r *FutureByIdResponse) FromResponse(res *types.QueryFutureByIdResponse) (FutureByIdResponse, error) { + if res != nil { + mappedFuture, err := mapFuture(res.Future) + if err != nil { + return FutureByIdResponse{}, err + } + + r.Future = mappedFuture + } + + return *r, nil +} + +func mapFuture(future types.Future) (Future, error) { + creator, err := precommon.AddressFromBech32Str(future.Creator) + if err != nil { + return Future{}, fmt.Errorf("invalid creator: %w", err) + } + + return Future{ + Id: future.Id, + Creator: creator, + Handler: future.Handler, + Input: future.Input, + }, nil +} + +func mapFutureResponse(futureResponse types.FutureResponse) (FutureResponse, error) { + future, err := mapFuture(futureResponse.Future) + if err != nil { + return FutureResponse{}, err + } + + votes, err := mapVotes(futureResponse.Votes) + if err != nil { + return FutureResponse{}, err + } + + futureResult, err := mapFutureResult(futureResponse.Result) + if err != nil { + return FutureResponse{}, err + } + + return FutureResponse{ + Future: future, + Votes: votes, + Result: futureResult, + }, nil +} + +func mapVotes(values []types.FutureVote) ([]FutureVote, error) { + result := make([]FutureVote, 0, len(values)) + for _, v := range values { + mappedTemplate, err := mapVote(v) + if err != nil { + return nil, err + } + + result = append(result, mappedTemplate) + } + return result, nil +} + +func mapVote(value types.FutureVote) (FutureVote, error) { + return FutureVote{ + Voter: value.Voter, + FutureId: value.FutureId, + Vote: uint8(value.Vote), + }, nil +} + +func mapFutureResult(value *types.FutureResult) (FutureResult, error) { + if value == nil { + return FutureResult{}, nil + } + + return FutureResult{ + Id: value.Id, + Output: value.Output, + Submitter: value.Submitter, + }, nil +} + +func mapPageResponse(value *query.PageResponse) TypesPageResponse { + if value == nil { + return TypesPageResponse{} + } + + return TypesPageResponse{ + NextKey: value.NextKey, + Total: value.Total, + } +} diff --git a/precompiles/justfile b/precompiles/justfile index f08814f0a..6a03006e2 100644 --- a/precompiles/justfile +++ b/precompiles/justfile @@ -11,9 +11,14 @@ abi: _tools just generate_artifacts act IAct just generate_artifacts warden IWarden just generate_artifacts slinky ISlinky + just generate_artifacts async IAsync generate_artifacts target type: - solc --evm-version paris --abi {{git_root}}/precompiles/{{target}}/{{type}}.sol -o {{tmpdir}} --overwrite - cat {{tmpdir}}/{{type}}.abi | jq '.' > {{git_root}}/precompiles/{{target}}/abi.json + solc --evm-version paris --abi {{git_root}}/precompiles/{{target}}/{{type}}.sol -o {{git_root}}/precompiles/{{target}}/ --overwrite + mv {{git_root}}/precompiles/{{target}}/{{type}}.abi {{git_root}}/precompiles/{{target}}/abi.json abigen --abi {{git_root}}/precompiles/{{target}}/abi.json --pkg {{target}} --type {{type}} --out {{git_root}}/precompiles/{{target}}/{{type}}.go - cat {{tmpdir}}/{{type}}.abi | jq '. | {abi: .}' > {{git_root}}/precompiles/{{target}}/abi.json \ No newline at end of file + + # pretty print the abi + echo '{"abi":[]}' > {{git_root}}/precompiles/{{target}}/formatted.json + echo "$(jq '.abi += inputs' {{git_root}}/precompiles/{{target}}/formatted.json {{git_root}}/precompiles/{{target}}/abi.json)" > {{git_root}}/precompiles/{{target}}/formatted.json + mv {{git_root}}/precompiles/{{target}}/formatted.json {{git_root}}/precompiles/{{target}}/abi.json \ No newline at end of file diff --git a/precompiles/precompiles.go b/precompiles/precompiles.go index 9bff07d55..94899bbd0 100644 --- a/precompiles/precompiles.go +++ b/precompiles/precompiles.go @@ -6,15 +6,21 @@ import ( oraclekeeper "github.com/skip-mev/slinky/x/oracle/keeper" actprecompile "github.com/warden-protocol/wardenprotocol/precompiles/act" + asyncprecompile "github.com/warden-protocol/wardenprotocol/precompiles/async" cmn "github.com/warden-protocol/wardenprotocol/precompiles/common" slinkyprecompile "github.com/warden-protocol/wardenprotocol/precompiles/slinky" wardenprecompile "github.com/warden-protocol/wardenprotocol/precompiles/warden" actkeeper "github.com/warden-protocol/wardenprotocol/warden/x/act/keeper" + asynckeeper "github.com/warden-protocol/wardenprotocol/warden/x/async/keeper" wardenkeeper "github.com/warden-protocol/wardenprotocol/warden/x/warden/keeper" ) // Single point of all wardenprotocol precompiles initialization, including precompiles and events registry -func NewWardenPrecompiles(wardenkeeper wardenkeeper.Keeper, actkeeper actkeeper.Keeper, oraclekeeper oraclekeeper.Keeper) (map[ethcmn.Address]vm.PrecompiledContract, error) { +func NewWardenPrecompiles( + wardenkeeper wardenkeeper.Keeper, + actkeeper actkeeper.Keeper, + oraclekeeper oraclekeeper.Keeper, + asynckeeper asynckeeper.Keeper) (map[ethcmn.Address]vm.PrecompiledContract, error) { precompiles := make(map[ethcmn.Address]vm.PrecompiledContract) eventsRegistry := cmn.NewEthEventsRegistry() @@ -59,5 +65,13 @@ func NewWardenPrecompiles(wardenkeeper wardenkeeper.Keeper, actkeeper actkeeper. } precompiles[newSlinkyPrecompile.Address()] = newSlinkyPrecompile + newAsyncPrecompile, err := asyncprecompile.NewPrecompile(asynckeeper, eventsRegistry) + if err != nil { + return nil, err + } + precompiles[newAsyncPrecompile.Address()] = newAsyncPrecompile + + eventsRegistry.RegisterEvent("warden.async.v1beta1.EventCreateFuture", newAsyncPrecompile.GetCreateFutureEvent) + return precompiles, nil } diff --git a/precompiles/slinky/abi.json b/precompiles/slinky/abi.json index 16632a55d..5f86031b2 100644 --- a/precompiles/slinky/abi.json +++ b/precompiles/slinky/abi.json @@ -1,90 +1,67 @@ { - "data": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "getPrice(string,string)": "3d0f34da" - } - }, - "abi": [ - { - "inputs": [ - { - "internalType": "string", - "name": "base", - "type": "string" - }, - { - "internalType": "string", - "name": "quote", - "type": "string" - } - ], - "name": "getPrice", - "outputs": [ - { - "components": [ - { - "internalType": "uint64", - "name": "id", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "decimals", - "type": "uint64" - }, - { - "components": [ - { - "internalType": "uint64", - "name": "blockHeight", - "type": "uint64" - }, - { - "internalType": "uint256", - "name": "blockTimestamp", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "price", - "type": "uint256" - } - ], - "internalType": "struct QuotePrice", - "name": "price", - "type": "tuple" - } - ], - "internalType": "struct GetPriceResponse", - "name": "response", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - } - ] -} \ No newline at end of file + "abi": [ + { + "inputs": [ + { + "internalType": "string", + "name": "base", + "type": "string" + }, + { + "internalType": "string", + "name": "quote", + "type": "string" + } + ], + "name": "getPrice", + "outputs": [ + { + "components": [ + { + "internalType": "uint64", + "name": "id", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "nonce", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "decimals", + "type": "uint64" + }, + { + "components": [ + { + "internalType": "uint64", + "name": "blockHeight", + "type": "uint64" + }, + { + "internalType": "uint256", + "name": "blockTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + } + ], + "internalType": "struct QuotePrice", + "name": "price", + "type": "tuple" + } + ], + "internalType": "struct GetPriceResponse", + "name": "response", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + } + ] +} diff --git a/precompiles/warden/IWarden.go b/precompiles/warden/IWarden.go index f30e8771a..262072383 100644 --- a/precompiles/warden/IWarden.go +++ b/precompiles/warden/IWarden.go @@ -26,7 +26,6 @@ var ( _ = common.Big1 _ = types.BloomLookup _ = event.NewSubscription - _ = abi.ConvertType ) // AddressesResponse is an auto generated low-level Go binding around an user-defined struct. @@ -237,11 +236,11 @@ func NewIWardenFilterer(address common.Address, filterer bind.ContractFilterer) // bindIWarden binds a generic wrapper to an already deployed contract. func bindIWarden(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := IWardenMetaData.GetAbi() + parsed, err := abi.JSON(strings.NewReader(IWardenABI)) if err != nil { return nil, err } - return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil } // Call invokes the (constant) contract method with params as input values and diff --git a/precompiles/warden/Types.abi b/precompiles/warden/Types.abi new file mode 100644 index 000000000..0637a088a --- /dev/null +++ b/precompiles/warden/Types.abi @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/tests/cases/async_precompile.go b/tests/cases/async_precompile.go new file mode 100644 index 000000000..f21fdb6ce --- /dev/null +++ b/tests/cases/async_precompile.go @@ -0,0 +1,82 @@ +package cases + +import ( + "context" + "testing" + + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/stretchr/testify/require" + + "github.com/warden-protocol/wardenprotocol/precompiles/async" + "github.com/warden-protocol/wardenprotocol/tests/framework" + "github.com/warden-protocol/wardenprotocol/tests/framework/checks" + "github.com/warden-protocol/wardenprotocol/tests/framework/exec" +) + +func init() { + Register(&Test_AsyncPrecompile{}) +} + +type Test_AsyncPrecompile struct { + w *exec.WardenNode +} + +func (c *Test_AsyncPrecompile) Setup(t *testing.T, ctx context.Context, build framework.BuildResult) { + c.w = exec.NewWardenNode(t, build.Wardend) + + go c.w.Start(t, ctx, "./testdata/snapshot-many-users") + c.w.WaitRunning(t) +} + +// TODO(backsapc): Implement positive test cases with async sidecar integration +func (c *Test_AsyncPrecompile) Run(t *testing.T, ctx context.Context, _ framework.BuildResult) { + alice := exec.NewWardend(c.w, "alice") + + evmClient := c.w.EthClient(t) + iAsyncClient, err := async.NewIAsync(common.HexToAddress(async.PrecompileAddress), evmClient) + require.NoError(t, err) + + futuresQuery, err := iAsyncClient.Futures(alice.CallOps(t), async.TypesPageRequest{}, common.Address{}) + require.NoError(t, err) + require.Len(t, futuresQuery.Futures, 0) + + addFutureTx, err := iAsyncClient.AddFuture(alice.TransactOps(t, ctx, evmClient), "echo", []byte("USDT")) + require.NoError(t, err) + + addFutureReceipt, err := bind.WaitMined(ctx, evmClient, addFutureTx) + require.NoError(t, err) + + createFutureEvents, err := checks.GetParsedEventsOnly(addFutureReceipt, iAsyncClient.ParseCreateFuture) + require.NoError(t, err) + require.Len(t, createFutureEvents, 1) + + createFutureEvent := createFutureEvents[0] + require.Equal(t, "echo", createFutureEvent.Handler) + require.Equal(t, uint64(1), createFutureEvent.FutureId) + require.Equal(t, alice.EthAddress(t), createFutureEvent.Creator) + + oneFuturesQuery, err := iAsyncClient.Futures(alice.CallOps(t), async.TypesPageRequest{}, common.Address{}) + require.NoError(t, err) + require.Len(t, oneFuturesQuery.Futures, 1) + + oneFuture := oneFuturesQuery.Futures[0] + require.Equal(t, uint64(1), oneFuture.Future.Id) + require.Equal(t, alice.EthAddress(t), oneFuture.Future.Creator) + require.Equal(t, "echo", oneFuture.Future.Handler) + require.Equal(t, []byte("USDT"), oneFuture.Future.Input) + require.Equal(t, async.FutureResult{ + Output: []byte{}, + Submitter: []byte{}, + }, oneFuture.Result) + + onePendingFuturesQuery, err := iAsyncClient.PendingFutures(alice.CallOps(t), async.TypesPageRequest{}) + require.NoError(t, err) + require.Len(t, oneFuturesQuery.Futures, 1) + + onePendingFuture := onePendingFuturesQuery.Futures[0] + require.Equal(t, uint64(1), onePendingFuture.Id) + require.Equal(t, alice.EthAddress(t), onePendingFuture.Creator) + require.Equal(t, "echo", onePendingFuture.Handler) + require.Equal(t, []byte("USDT"), onePendingFuture.Input) +} diff --git a/tests/justfile b/tests/justfile index d85a45bc3..8bd11672e 100644 --- a/tests/justfile +++ b/tests/justfile @@ -25,7 +25,7 @@ _rm_rf dir: snapshot: snapshot-base snapshot-keychain snapshot-many-users # Define the new precompiles addresses -warden-precompiles := '["0x0000000000000000000000000000000000000900", "0x0000000000000000000000000000000000000901", "0x0000000000000000000000000000000000000902"]' +warden-precompiles := '["0x0000000000000000000000000000000000000900", "0x0000000000000000000000000000000000000901", "0x0000000000000000000000000000000000000902", "0x0000000000000000000000000000000000000903"]' # regenerate ./testdata/snapshot-base snapshot-base: @@ -53,7 +53,7 @@ snapshot-base: wardend genesis add-genesis-account alice 10000000000000000000000000000000000000award --keyring-backend test --home $WARDEND_HOME replace 's/aevmos/award/' $WARDEND_HOME/config/genesis.json replace 's/aevmos/award/' $WARDEND_HOME/config/app.toml - jq '.app_state.evm.params.active_static_precompiles += {{warden-precompiles}}' ~/.warden/config/genesis.json > temp.json && mv temp.json ~/.warden/config/genesis.json + jq '.app_state.evm.params.active_static_precompiles += {{warden-precompiles}}' $WARDEND_HOME/config/genesis.json > $WARDEND_HOME/config/temp.json && mv $WARDEND_HOME/config/temp.json $WARDEND_HOME/config/genesis.json wardend genesis gentx alice 1000000000000000000000award --keyring-backend test --home $WARDEND_HOME wardend genesis collect-gentxs --home $WARDEND_HOME @@ -115,7 +115,7 @@ snapshot-keychain: wardend genesis add-genesis-keychain $(wardend keys show -a writer --keyring-backend test --home $WARDEND_HOME) "Test Keychain" "{\"key_req\":[{\"denom\":\"award\",\"amount\":\"2\"}],\"sig_req\":[{\"denom\":\"award\",\"amount\": \"2\"}]}" --home $WARDEND_HOME replace 's/aevmos/award/' $WARDEND_HOME/config/genesis.json replace 's/aevmos/award/' $WARDEND_HOME/config/app.toml - jq '.app_state.evm.params.active_static_precompiles += {{warden-precompiles}}' ~/.warden/config/genesis.json > temp.json && mv temp.json ~/.warden/config/genesis.json + jq '.app_state.evm.params.active_static_precompiles += {{warden-precompiles}}' $WARDEND_HOME/config/genesis.json > $WARDEND_HOME/config/temp.json && mv $WARDEND_HOME/config/temp.json $WARDEND_HOME/config/genesis.json wardend genesis gentx val 1000000000000000000000award --keyring-backend test --home $WARDEND_HOME wardend genesis collect-gentxs --home $WARDEND_HOME @@ -180,7 +180,7 @@ snapshot-many-users: wardend genesis add-genesis-space $(wardend keys show -a alice --keyring-backend test --home $WARDEND_HOME) --home $WARDEND_HOME replace 's/aevmos/award/' $WARDEND_HOME/config/genesis.json replace 's/aevmos/award/' $WARDEND_HOME/config/app.toml - jq '.app_state.evm.params.active_static_precompiles += {{warden-precompiles}}' ~/.warden/config/genesis.json > temp.json && mv temp.json ~/.warden/config/genesis.json + jq '.app_state.evm.params.active_static_precompiles += {{warden-precompiles}}' $WARDEND_HOME/config/genesis.json > $WARDEND_HOME/config/temp.json && mv $WARDEND_HOME/config/temp.json $WARDEND_HOME/config/genesis.json wardend genesis gentx alice 1000000000000000000000award --keyring-backend test --home $WARDEND_HOME wardend genesis collect-gentxs --home $WARDEND_HOME diff --git a/tests/testdata/snapshot-base/config/config.toml.tmpl b/tests/testdata/snapshot-base/config/config.toml.tmpl index bef3dbd34..3fa8d3ef7 100644 --- a/tests/testdata/snapshot-base/config/config.toml.tmpl +++ b/tests/testdata/snapshot-base/config/config.toml.tmpl @@ -8,7 +8,7 @@ # The version of the CometBFT binary that created or # last modified the config file. Do not modify this. -version = "0.38.12" +version = "0.38.15" ####################################################################### ### Main Base Config Options ### diff --git a/tests/testdata/snapshot-base/config/genesis.json b/tests/testdata/snapshot-base/config/genesis.json index 05fd8fab3..ff11853ab 100644 --- a/tests/testdata/snapshot-base/config/genesis.json +++ b/tests/testdata/snapshot-base/config/genesis.json @@ -1,7 +1,7 @@ { "app_name": "wardend", - "app_version": "v0.5.0-50-g04b9df68-dirty", - "genesis_time": "2024-10-22T14:04:05.95978498Z", + "app_version": "v0.5.4-54-g94c79f15a-dirty", + "genesis_time": "2024-12-24T11:11:06.422715515Z", "chain_id": "warden_1337-1", "initial_height": 1, "app_hash": null, @@ -28,7 +28,7 @@ "accounts": [ { "@type": "/cosmos.auth.v1beta1.BaseAccount", - "address": "warden1xhawfasggklp8tvvqddaz902p270lchqvcwgmq", + "address": "warden1slvu8w4s4ps6kpy83ydvptfae262tym5cr24ka", "pub_key": null, "account_number": "0", "sequence": "0" @@ -45,7 +45,7 @@ }, "balances": [ { - "address": "warden1xhawfasggklp8tvvqddaz902p270lchqvcwgmq", + "address": "warden1slvu8w4s4ps6kpy83ydvptfae262tym5cr24ka", "coins": [ { "denom": "award", @@ -155,7 +155,8 @@ "0x0000000000000000000000000000000000000805", "0x0000000000000000000000000000000000000900", "0x0000000000000000000000000000000000000901", - "0x0000000000000000000000000000000000000902" + "0x0000000000000000000000000000000000000902", + "0x0000000000000000000000000000000000000903" ] } }, @@ -202,10 +203,10 @@ }, "min_self_delegation": "1", "delegator_address": "", - "validator_address": "wardenvaloper1xhawfasggklp8tvvqddaz902p270lchqarvd53", + "validator_address": "wardenvaloper1slvu8w4s4ps6kpy83ydvptfae262tym5fcgsev", "pubkey": { "@type": "/cosmos.crypto.ed25519.PubKey", - "key": "B22P6ibnixx5s5sKR98+ALqAjqiXsHNeAyUMb0lZgzY=" + "key": "tevLpIl/LQHjU/rvWVoIEKH+XiGpYkhbdjehD4zgCPM=" }, "value": { "denom": "award", @@ -213,7 +214,7 @@ } } ], - "memo": "71df6ae3bd279f5798550e739827b52b3df60ff1@172.19.18.7:26656", + "memo": "1f81f9dfef20b1a6ce69d9e0290828e68f1640cb@172.19.18.7:26656", "timeout_height": "0", "extension_options": [], "non_critical_extension_options": [] @@ -223,7 +224,7 @@ { "public_key": { "@type": "/ethermint.crypto.v1.ethsecp256k1.PubKey", - "key": "Ak3S7h1WZlDQiIZOfb2/vYbnN2v35nn9r5SNVeIhnXm/" + "key": "AkOd4QzTZ1OrOj/5H9Ulc2nBVktZlOyArx0oD1EfL4Le" }, "mode_info": { "single": { @@ -242,7 +243,7 @@ "tip": null }, "signatures": [ - "t5JOuqKEUU9x0MV7GH27+4sZAxHZHXfj+RpC6JA4vysrarye4LLCDIuAPANJTVeZEQ/0SE6l7nl55xJaebDnqgE=" + "fFDV2md62KWOE+MQk6Cumxrq00WyvMene71buLJjzdcd7Zh9jhjGHKj1xbNuGf0/QTkBF771RDVzyIu6b7BWTwE=" ] } ] diff --git a/tests/testdata/snapshot-base/config/gentx/gentx-71df6ae3bd279f5798550e739827b52b3df60ff1.json b/tests/testdata/snapshot-base/config/gentx/gentx-1f81f9dfef20b1a6ce69d9e0290828e68f1640cb.json similarity index 56% rename from tests/testdata/snapshot-base/config/gentx/gentx-71df6ae3bd279f5798550e739827b52b3df60ff1.json rename to tests/testdata/snapshot-base/config/gentx/gentx-1f81f9dfef20b1a6ce69d9e0290828e68f1640cb.json index 220fbd1f8..8916e1784 100644 --- a/tests/testdata/snapshot-base/config/gentx/gentx-71df6ae3bd279f5798550e739827b52b3df60ff1.json +++ b/tests/testdata/snapshot-base/config/gentx/gentx-1f81f9dfef20b1a6ce69d9e0290828e68f1640cb.json @@ -1 +1 @@ -{"body":{"messages":[{"@type":"/cosmos.staking.v1beta1.MsgCreateValidator","description":{"moniker":"testing","identity":"","website":"","security_contact":"","details":""},"commission":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"min_self_delegation":"1","delegator_address":"","validator_address":"wardenvaloper1xhawfasggklp8tvvqddaz902p270lchqarvd53","pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"B22P6ibnixx5s5sKR98+ALqAjqiXsHNeAyUMb0lZgzY="},"value":{"denom":"award","amount":"1000000000000000000000"}}],"memo":"71df6ae3bd279f5798550e739827b52b3df60ff1@172.19.18.7:26656","timeout_height":"0","extension_options":[],"non_critical_extension_options":[]},"auth_info":{"signer_infos":[{"public_key":{"@type":"/ethermint.crypto.v1.ethsecp256k1.PubKey","key":"Ak3S7h1WZlDQiIZOfb2/vYbnN2v35nn9r5SNVeIhnXm/"},"mode_info":{"single":{"mode":"SIGN_MODE_DIRECT"}},"sequence":"0"}],"fee":{"amount":[],"gas_limit":"200000","payer":"","granter":""},"tip":null},"signatures":["t5JOuqKEUU9x0MV7GH27+4sZAxHZHXfj+RpC6JA4vysrarye4LLCDIuAPANJTVeZEQ/0SE6l7nl55xJaebDnqgE="]} +{"body":{"messages":[{"@type":"/cosmos.staking.v1beta1.MsgCreateValidator","description":{"moniker":"testing","identity":"","website":"","security_contact":"","details":""},"commission":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"min_self_delegation":"1","delegator_address":"","validator_address":"wardenvaloper1slvu8w4s4ps6kpy83ydvptfae262tym5fcgsev","pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"tevLpIl/LQHjU/rvWVoIEKH+XiGpYkhbdjehD4zgCPM="},"value":{"denom":"award","amount":"1000000000000000000000"}}],"memo":"1f81f9dfef20b1a6ce69d9e0290828e68f1640cb@172.19.18.7:26656","timeout_height":"0","extension_options":[],"non_critical_extension_options":[]},"auth_info":{"signer_infos":[{"public_key":{"@type":"/ethermint.crypto.v1.ethsecp256k1.PubKey","key":"AkOd4QzTZ1OrOj/5H9Ulc2nBVktZlOyArx0oD1EfL4Le"},"mode_info":{"single":{"mode":"SIGN_MODE_DIRECT"}},"sequence":"0"}],"fee":{"amount":[],"gas_limit":"200000","payer":"","granter":""},"tip":null},"signatures":["fFDV2md62KWOE+MQk6Cumxrq00WyvMene71buLJjzdcd7Zh9jhjGHKj1xbNuGf0/QTkBF771RDVzyIu6b7BWTwE="]} diff --git a/tests/testdata/snapshot-base/config/node_key.json b/tests/testdata/snapshot-base/config/node_key.json index 278d6d32e..f84ac31da 100644 --- a/tests/testdata/snapshot-base/config/node_key.json +++ b/tests/testdata/snapshot-base/config/node_key.json @@ -1 +1 @@ -{"priv_key":{"type":"tendermint/PrivKeyEd25519","value":"t99Sr/4VhsSzfRsSAV9bXtrUqzlZYGT+iZ2jUB28zRZqR/HnTX5CzqCQ8qfjoOBVlEk0cu88EOn/Bu40UqacUw=="}} \ No newline at end of file +{"priv_key":{"type":"tendermint/PrivKeyEd25519","value":"i6kTFMCyQ4NGzoNUVkJintafVjjVTFklUiZlB4Z63ID3taXpJpcfCJ5scjFArgxaHUF9RiPHWR8QnmYoJutyQg=="}} \ No newline at end of file diff --git a/tests/testdata/snapshot-base/config/priv_validator_key.json b/tests/testdata/snapshot-base/config/priv_validator_key.json index e39dbd121..9dc3cadbe 100644 --- a/tests/testdata/snapshot-base/config/priv_validator_key.json +++ b/tests/testdata/snapshot-base/config/priv_validator_key.json @@ -1,11 +1,11 @@ { - "address": "CB9157C31C3330433C9EC82DE71D7A90C318EE22", + "address": "DEB3435EE01304D7CA590E1A33C565E3C99FB775", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "B22P6ibnixx5s5sKR98+ALqAjqiXsHNeAyUMb0lZgzY=" + "value": "tevLpIl/LQHjU/rvWVoIEKH+XiGpYkhbdjehD4zgCPM=" }, "priv_key": { "type": "tendermint/PrivKeyEd25519", - "value": "dBU3A6wZUAvHUNZnlEG3+cIZ78gH1+e1fv3bkpdsG4AHbY/qJueLHHmzmwpH3z4AuoCOqJewc14DJQxvSVmDNg==" + "value": "MtgjryzLxJJQ+4tVEAI5RFkBAbz0LtRHNY/tpQPA0HG168ukiX8tAeNT+u9ZWggQof5eIaliSFt2N6EPjOAI8w==" } } \ No newline at end of file diff --git a/tests/testdata/snapshot-base/keyring-test/35fae4f60845be13ad8c035bd115ea0abcffe2e0.address b/tests/testdata/snapshot-base/keyring-test/35fae4f60845be13ad8c035bd115ea0abcffe2e0.address deleted file mode 100644 index 04309da07..000000000 --- a/tests/testdata/snapshot-base/keyring-test/35fae4f60845be13ad8c035bd115ea0abcffe2e0.address +++ /dev/null @@ -1 +0,0 @@ -eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyNC0xMC0yMiAxNzowNDowNi40MjAzMzQ4NCArMDMwMCBNU0sgbT0rMC4xNTk0ODI0NjIiLCJlbmMiOiJBMjU2R0NNIiwicDJjIjo4MTkyLCJwMnMiOiJUVXJKX3FORVg4V1NLbzFSIn0.yZQ83LGmuV178yKWhk8aiIxUwtN50W1_xpxZVXF457koEe6ox7RuRg.of-Ddlc5M6wLlFmu.KP5kuRLI6uf2BIgJl_QVfCoU4hwo78W2zyDoEkNT0LM31DNxKS8gVyHR6PQrhKWx0gO7TAwbzNxQkI15SoMHv1pFtM2yPwdeWzYvo2VdCpa6OY0kmYS8MDIRYksi9T3KWOfpkkOMxizn9fB-hJh6zCacOhwsvk9CoCdftjFmoCehfF4TFTyfTaa40c9NZ8gFxVpJY7EYqSdsn4XsxQvrR6ASzwrHdZCcxLOLNkrZdZKLYRhUGIw.Z7Y6rmQgK5nRP5nV5Fbz2w \ No newline at end of file diff --git a/tests/testdata/snapshot-base/keyring-test/87d9c3bab0a861ab0487891ac0ad3dcab4a59374.address b/tests/testdata/snapshot-base/keyring-test/87d9c3bab0a861ab0487891ac0ad3dcab4a59374.address new file mode 100644 index 000000000..dfed31c5c --- /dev/null +++ b/tests/testdata/snapshot-base/keyring-test/87d9c3bab0a861ab0487891ac0ad3dcab4a59374.address @@ -0,0 +1 @@ +eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyNC0xMi0yNCAxNDoxMTowNi44NjcyNDQyMzggKzAzMDAgTVNLIG09KzAuMTU5MjQyMzE1IiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoibEtBQkczbUpDWU5aMFREeiJ9.aGA5V-3q5wjFCC-1GL_TnMOdWOEvYIN_oaQB1ak83yohmGCxcGiq0g._oi_zO0yG3uTN9nE.8KJW42VJ2ieEs-Ga52Cf9mNBQnSRmhErdgi1Pex-L678yYa-a2htnoWDGCKxl3jmAYR6auSUkMai91i6BnRhtHk1yAUIO0gTOkkB-BJG2bKkWdJ47c2y81Y1mlrl-XIzwIUaVLW_vhK9NnYjR8K4lpK2wceBK2aXj4rLVBr9CqfdKe5rqnF2E3no34SygEf1KCPQWLzFpnKs87drQYWuGlhUAiWwiTZUpRqibK9xr7W01dBdocc.NPiYRclvOYRQHVmU8Aq-Cg \ No newline at end of file diff --git a/tests/testdata/snapshot-base/keyring-test/alice.info b/tests/testdata/snapshot-base/keyring-test/alice.info index a08191200..a6ce6aa85 100644 --- a/tests/testdata/snapshot-base/keyring-test/alice.info +++ b/tests/testdata/snapshot-base/keyring-test/alice.info @@ -1 +1 @@ -eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyNC0xMC0yMiAxNzowNDowNi40MTQxNzM3NTcgKzAzMDAgTVNLIG09KzAuMTUzMzIxMzc5IiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoiYXVuQThZclQxalp0WVZTRyJ9.ZCfcHdVwiAEFkizmznM1nNmGZdsUgvOE5O8Xg9OGlJ-IlkF2PozglQ.9k5dBfishB-3DcfL.guOaLzV8gq-3QUiXqyQ_0AsS3fNaNQ9lxQy1-Vj7O2Sn81hUDZxHXMw2BJf3XZfjOJ-3o-pVLUrcepWLHDr3TDXbXv0CZnJCWZbJRpEvmBK5K983fL6Wb6Omz0ljGHKCaAOPsEDkESBjp_MNG2w-OoacFbrNR73wD_AIXXdnjBCjHXx7K2zUfV6ylUmAYytmAM1nbRge41jBO-iRZwBpXCifPHdzKSRAqqLo0FTmfluZa8IokBgLruu7rPxNH2LFCNxgPvQO0YFZlhCEIz2loU5IOByaM1EiNNF_FUgohXM14uefksFSDyNJKhWumTO1PeakrnIBmVc7vB4wUvr1cxZAaxE8ZKAWiJtWB5_DZbVplTmnYDK17Nk82hR7PghIOOIOTx2A30Fym6q4GEu-hmvL4sv9cu5Lau8W9fKUXKy_P14kteYwhl6jyEMcd_3jfVVXrcSf7o7i8WQf_Kt2MLWg8-4.L61lv-Uc8DV-_kGl1URuoA \ No newline at end of file +eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyNC0xMi0yNCAxNDoxMTowNi44NTg4MDkzNTggKzAzMDAgTVNLIG09KzAuMTUwODA3NTM1IiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoiTklZY3l2a3hsaGtTOWtoSSJ9.Gl1XaSbg-MUpWAprg5CRbKGzHxDhEl3_tBhLi5QJFBXtDpfDNVUBiw.C7BXhCSjSj7LAcP-.n6kFwE9ENuw7Zon86Mz6thVur2pbXpRSwDVq7l0RPu6U3-GSNDylWhfCdtM1St7g2BSf5i9EgI49EYzGK3sy1st2uP-Qnz13YFWzaXaoPudoKKMZwdn5-JNmT7dt9jIpoco_pGWZtng-DtnUeIgCDau19tBgqa7_ChtDbC4qmBYEzXhe471uMr2QRjVqJ9XRYaqVJUbRth6huvgsQCfFSJ6tw41w773VwRJimWJ4q1_UiasAwRG8hdw4SJlgofFiEQk7szZED0LigojTvFuTShEvbCCcihxqwL2twYDK1K1GoVQmk6-IMhl5Z3gPX9OAoWmafBUX685OPCmXYBJefKtGtLC_jK2hRbCzJ9ZDZF6x3EpiXpiN69AJzvPBgr7dHDAF70vgidaMO6vyvDaxnSFQ6PJWwPTz45_Hipj72CYuDpV1wjX_VN5vQXYJ5ak96jJjPMEJfoChRZblEYqMM2yKId0.jHGyhQ7POytMpyAm08gpbA \ No newline at end of file diff --git a/tests/testdata/snapshot-keychain/config/config.toml.tmpl b/tests/testdata/snapshot-keychain/config/config.toml.tmpl index bef3dbd34..3fa8d3ef7 100644 --- a/tests/testdata/snapshot-keychain/config/config.toml.tmpl +++ b/tests/testdata/snapshot-keychain/config/config.toml.tmpl @@ -8,7 +8,7 @@ # The version of the CometBFT binary that created or # last modified the config file. Do not modify this. -version = "0.38.12" +version = "0.38.15" ####################################################################### ### Main Base Config Options ### diff --git a/tests/testdata/snapshot-keychain/config/genesis.json b/tests/testdata/snapshot-keychain/config/genesis.json index d2e89219c..4ddd52d91 100644 --- a/tests/testdata/snapshot-keychain/config/genesis.json +++ b/tests/testdata/snapshot-keychain/config/genesis.json @@ -1,7 +1,7 @@ { "app_name": "wardend", - "app_version": "v0.5.0-50-g04b9df68-dirty", - "genesis_time": "2024-10-22T14:04:08.271757407Z", + "app_version": "v0.5.4-54-g94c79f15a-dirty", + "genesis_time": "2024-12-24T11:11:09.923076147Z", "chain_id": "warden_1337-1", "initial_height": 1, "app_hash": null, @@ -28,21 +28,21 @@ "accounts": [ { "@type": "/cosmos.auth.v1beta1.BaseAccount", - "address": "warden1r949mzumv9w0q97vt5xjpystys73wtt53ne8zd", + "address": "warden1zyhwd06fj2vnufqlvn748rjfa3vtx7rttsczrc", "pub_key": null, "account_number": "0", "sequence": "0" }, { "@type": "/cosmos.auth.v1beta1.BaseAccount", - "address": "warden18fq3xh7l6sfd4upy4ah4zgquvhwmefcdyejnce", + "address": "warden1rcnpf6c40qg985vqh5vstq4rg3wg5tahapv9jz", "pub_key": null, "account_number": "1", "sequence": "0" }, { "@type": "/cosmos.auth.v1beta1.BaseAccount", - "address": "warden1xa2m7tdjj97zy7qfsn8hjuqdgpucayg6kzw9ar", + "address": "warden14r6ywuugdvyzmx6vwgevc9ly0vu8cmw4xgc56w", "pub_key": null, "account_number": "2", "sequence": "0" @@ -59,7 +59,7 @@ }, "balances": [ { - "address": "warden1r949mzumv9w0q97vt5xjpystys73wtt53ne8zd", + "address": "warden1zyhwd06fj2vnufqlvn748rjfa3vtx7rttsczrc", "coins": [ { "denom": "award", @@ -68,7 +68,7 @@ ] }, { - "address": "warden1xa2m7tdjj97zy7qfsn8hjuqdgpucayg6kzw9ar", + "address": "warden1rcnpf6c40qg985vqh5vstq4rg3wg5tahapv9jz", "coins": [ { "denom": "award", @@ -77,7 +77,7 @@ ] }, { - "address": "warden18fq3xh7l6sfd4upy4ah4zgquvhwmefcdyejnce", + "address": "warden14r6ywuugdvyzmx6vwgevc9ly0vu8cmw4xgc56w", "coins": [ { "denom": "award", @@ -187,7 +187,8 @@ "0x0000000000000000000000000000000000000805", "0x0000000000000000000000000000000000000900", "0x0000000000000000000000000000000000000901", - "0x0000000000000000000000000000000000000902" + "0x0000000000000000000000000000000000000902", + "0x0000000000000000000000000000000000000903" ] } }, @@ -234,10 +235,10 @@ }, "min_self_delegation": "1", "delegator_address": "", - "validator_address": "wardenvaloper1r949mzumv9w0q97vt5xjpystys73wtt5qgmzdu", + "validator_address": "wardenvaloper1zyhwd06fj2vnufqlvn748rjfa3vtx7rt6t68vf", "pubkey": { "@type": "/cosmos.crypto.ed25519.PubKey", - "key": "bjCqMke5d//47HQxI0e3jKAOPkX5G5VKCdyS3b63uKQ=" + "key": "IyWz23wAIgDZ2gJ/eqb/h7L+vszRZ7YzMWWjDoonYAA=" }, "value": { "denom": "award", @@ -245,7 +246,7 @@ } } ], - "memo": "a013d5a19933832d53e57b8fde53b2bb2855e90d@172.19.18.7:26656", + "memo": "da83b9365dd29a0cea789da7f7cfed5a3c94e909@172.19.18.7:26656", "timeout_height": "0", "extension_options": [], "non_critical_extension_options": [] @@ -255,7 +256,7 @@ { "public_key": { "@type": "/ethermint.crypto.v1.ethsecp256k1.PubKey", - "key": "AtKM5UR7j857OfqFjym6L1lFa9AV2GKb7qbkN8lMbmzP" + "key": "Av3ZIxDNHtJzm0H2+vf5X3T23mVaZrOPlmEX4sL6p1mQ" }, "mode_info": { "single": { @@ -274,7 +275,7 @@ "tip": null }, "signatures": [ - "nLDnP2iaJpIQn5eo2Aorj54L0wlxvjLRYyecsBJ0nnVrtBjH3xXF1UW2aPwmS7wiTukzaZEjyvViTTyi8R88OAE=" + "EGWHLtB2Wk5jSz1D3cY15I4q9n9fb6W6SxFvzFkA0ctFpMPkiy/mUA8kYhgW3tlQ2FxZNt/RvVe66pUrqzSbcQE=" ] } ] @@ -473,13 +474,13 @@ "keychains": [ { "id": "1", - "creator": "warden18fq3xh7l6sfd4upy4ah4zgquvhwmefcdyejnce", + "creator": "warden1rcnpf6c40qg985vqh5vstq4rg3wg5tahapv9jz", "name": "Test Keychain", "admins": [ - "warden18fq3xh7l6sfd4upy4ah4zgquvhwmefcdyejnce" + "warden1rcnpf6c40qg985vqh5vstq4rg3wg5tahapv9jz" ], "writers": [ - "warden18fq3xh7l6sfd4upy4ah4zgquvhwmefcdyejnce" + "warden1rcnpf6c40qg985vqh5vstq4rg3wg5tahapv9jz" ], "fees": { "key_req": [ @@ -503,9 +504,9 @@ "spaces": [ { "id": "1", - "creator": "warden1xa2m7tdjj97zy7qfsn8hjuqdgpucayg6kzw9ar", + "creator": "warden14r6ywuugdvyzmx6vwgevc9ly0vu8cmw4xgc56w", "owners": [ - "warden1xa2m7tdjj97zy7qfsn8hjuqdgpucayg6kzw9ar" + "warden14r6ywuugdvyzmx6vwgevc9ly0vu8cmw4xgc56w" ], "nonce": "0", "approve_admin_template_id": "0", diff --git a/tests/testdata/snapshot-many-users/config/gentx/gentx-20a81503b193d19209e9d3cb5e0ff6576427a585.json b/tests/testdata/snapshot-keychain/config/gentx/gentx-da83b9365dd29a0cea789da7f7cfed5a3c94e909.json similarity index 56% rename from tests/testdata/snapshot-many-users/config/gentx/gentx-20a81503b193d19209e9d3cb5e0ff6576427a585.json rename to tests/testdata/snapshot-keychain/config/gentx/gentx-da83b9365dd29a0cea789da7f7cfed5a3c94e909.json index 74a54062c..33db6ac63 100644 --- a/tests/testdata/snapshot-many-users/config/gentx/gentx-20a81503b193d19209e9d3cb5e0ff6576427a585.json +++ b/tests/testdata/snapshot-keychain/config/gentx/gentx-da83b9365dd29a0cea789da7f7cfed5a3c94e909.json @@ -1 +1 @@ -{"body":{"messages":[{"@type":"/cosmos.staking.v1beta1.MsgCreateValidator","description":{"moniker":"testing","identity":"","website":"","security_contact":"","details":""},"commission":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"min_self_delegation":"1","delegator_address":"","validator_address":"wardenvaloper1f00stcewhz7v8042pwpslsrwzgdvvmzg5uw6e6","pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"5mhXzEckA6ruk/XZfr7gVBxsVQv9uKHNFhgy0cvuluA="},"value":{"denom":"award","amount":"1000000000000000000000"}}],"memo":"20a81503b193d19209e9d3cb5e0ff6576427a585@172.19.18.7:26656","timeout_height":"0","extension_options":[],"non_critical_extension_options":[]},"auth_info":{"signer_infos":[{"public_key":{"@type":"/ethermint.crypto.v1.ethsecp256k1.PubKey","key":"AzZ8XfHxLbv0oPhTrl9xVjf2D///MjU6VnInL25Y21w8"},"mode_info":{"single":{"mode":"SIGN_MODE_DIRECT"}},"sequence":"0"}],"fee":{"amount":[],"gas_limit":"200000","payer":"","granter":""},"tip":null},"signatures":["M96Ut1eCv9IGOKFxojjdtx2lHZo9wVXujf9gQy0pHBkAsdlYu6pHQbR09UB1aZQk1XOLZe8fpQDh7mQvWK8DwwA="]} +{"body":{"messages":[{"@type":"/cosmos.staking.v1beta1.MsgCreateValidator","description":{"moniker":"testing","identity":"","website":"","security_contact":"","details":""},"commission":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"min_self_delegation":"1","delegator_address":"","validator_address":"wardenvaloper1zyhwd06fj2vnufqlvn748rjfa3vtx7rt6t68vf","pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"IyWz23wAIgDZ2gJ/eqb/h7L+vszRZ7YzMWWjDoonYAA="},"value":{"denom":"award","amount":"1000000000000000000000"}}],"memo":"da83b9365dd29a0cea789da7f7cfed5a3c94e909@172.19.18.7:26656","timeout_height":"0","extension_options":[],"non_critical_extension_options":[]},"auth_info":{"signer_infos":[{"public_key":{"@type":"/ethermint.crypto.v1.ethsecp256k1.PubKey","key":"Av3ZIxDNHtJzm0H2+vf5X3T23mVaZrOPlmEX4sL6p1mQ"},"mode_info":{"single":{"mode":"SIGN_MODE_DIRECT"}},"sequence":"0"}],"fee":{"amount":[],"gas_limit":"200000","payer":"","granter":""},"tip":null},"signatures":["EGWHLtB2Wk5jSz1D3cY15I4q9n9fb6W6SxFvzFkA0ctFpMPkiy/mUA8kYhgW3tlQ2FxZNt/RvVe66pUrqzSbcQE="]} diff --git a/tests/testdata/snapshot-keychain/config/node_key.json b/tests/testdata/snapshot-keychain/config/node_key.json index 88f9d47ca..9807ac2de 100644 --- a/tests/testdata/snapshot-keychain/config/node_key.json +++ b/tests/testdata/snapshot-keychain/config/node_key.json @@ -1 +1 @@ -{"priv_key":{"type":"tendermint/PrivKeyEd25519","value":"ns+2TeppRsobfgyWl7OhJqecXQ2V/U3fuZguIq4BDjvdYMVA6tu5RhrzfntMqC+fC1cH9jfsic4XdFdWm0Noxw=="}} \ No newline at end of file +{"priv_key":{"type":"tendermint/PrivKeyEd25519","value":"p8m6KKKpv/zRwexi3fELXrQO+nBsx4Y7U/z5ArTaqKEMz6SX1eTWMPoac03aCxhmM/RUvkRQVtRohFUJ9l+mIQ=="}} \ No newline at end of file diff --git a/tests/testdata/snapshot-keychain/config/priv_validator_key.json b/tests/testdata/snapshot-keychain/config/priv_validator_key.json index 5ebfbaa0b..a532130e7 100644 --- a/tests/testdata/snapshot-keychain/config/priv_validator_key.json +++ b/tests/testdata/snapshot-keychain/config/priv_validator_key.json @@ -1,11 +1,11 @@ { - "address": "DF43AFBBFEA3A7251B013574DE6049043C13BEE6", + "address": "CDC785D81187E208CE9389238B84A456EA2BADEE", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "bjCqMke5d//47HQxI0e3jKAOPkX5G5VKCdyS3b63uKQ=" + "value": "IyWz23wAIgDZ2gJ/eqb/h7L+vszRZ7YzMWWjDoonYAA=" }, "priv_key": { "type": "tendermint/PrivKeyEd25519", - "value": "MUKGp17FGBRWdhEyQnhXiHGDGUAXxMcdssupchkU961uMKoyR7l3//jsdDEjR7eMoA4+RfkblUoJ3JLdvre4pA==" + "value": "MZf3x1M5fsADr90nmaDhZcpr/e02zhQaCksa0q89WmsjJbPbfAAiANnaAn96pv+Hsv6+zNFntjMxZaMOiidgAA==" } } \ No newline at end of file diff --git a/tests/testdata/snapshot-keychain/keyring-test/112ee6bf4992993e241f64fd538e49ec58b3786b.address b/tests/testdata/snapshot-keychain/keyring-test/112ee6bf4992993e241f64fd538e49ec58b3786b.address new file mode 100644 index 000000000..f187d5402 --- /dev/null +++ b/tests/testdata/snapshot-keychain/keyring-test/112ee6bf4992993e241f64fd538e49ec58b3786b.address @@ -0,0 +1 @@ +eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyNC0xMi0yNCAxNDoxMToxMC4zMjAxMzMwNjIgKzAzMDAgTVNLIG09KzAuMTI5NzMyOTc4IiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoiTzdpbDhKOWZRRHlBQkM5USJ9.DJ9kqZ-hS1DJfNCnUv0FCHYmOvR0UCpZwOfdoJJ9CSwB4H3KQVNHTg.et0HUgnm7xEHHrSp.2AomK40qGTZ3RASGLH_ba_jLop2ZBqqHteVel2fU4CNvYHs9gEl1klSn-AjjgmrV90BtFKzMmH8NHvGDTHI021BDrPg5WsobUjU21AIS_2hgLc1W_Rph1-nagEg2EuAOt0RGpuU4W3aS6DYTNHxJg4nciqFj4rur_wlHw5SOwtaMaQCJSsP-uXqOnR4HH0MENtV80c2h5Se0gziS7cncucSNi15N4O1vAa1nC8R1sYsj0g.wJ4aPtGGup-gnHWhZAI1ag \ No newline at end of file diff --git a/tests/testdata/snapshot-keychain/keyring-test/196a5d8b9b615cf017cc5d0d20920b243d172d74.address b/tests/testdata/snapshot-keychain/keyring-test/196a5d8b9b615cf017cc5d0d20920b243d172d74.address deleted file mode 100644 index 600bd6181..000000000 --- a/tests/testdata/snapshot-keychain/keyring-test/196a5d8b9b615cf017cc5d0d20920b243d172d74.address +++ /dev/null @@ -1 +0,0 @@ -eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyNC0xMC0yMiAxNzowNDowOC43MjEzNDA1OTEgKzAzMDAgTVNLIG09KzAuMTUwNDYzMzk2IiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoiYU1tZE5PWVlLS251cWlGZiJ9.yLVgYDV-0YMRpkb_mXHi17d6pPo36DVhmSd1pKSWdKWq2racTpuU_w.k4ODrRBE0vJeHSzN.1xSPgiTtfmkMEgn7oGnVZvfM1PO5LccRHprj0fj0zyO1V67cunfkbXsbIvjUMBGdODiNiM_0dbONkvMp4QJyaCZxeLE_eMq4NuCcw4LtZXc9CYMqnJFLAbzDp00q_PBDHCZPAtv0zUyKL23FeCR3bHiHLds5B6uN4c0wyUK3h7e-PnY3ck_RBsxbq2xWx7b0a8WNq2A0BO1ep-UfwGmzlIT6YfUzf0lxcASAdi-di6lc-g.rITs092twzY5Xby3sr-BiQ \ No newline at end of file diff --git a/tests/testdata/snapshot-keychain/keyring-test/1e2614eb15781053d180bd190582a3445c8a2fb7.address b/tests/testdata/snapshot-keychain/keyring-test/1e2614eb15781053d180bd190582a3445c8a2fb7.address new file mode 100644 index 000000000..e17ba316a --- /dev/null +++ b/tests/testdata/snapshot-keychain/keyring-test/1e2614eb15781053d180bd190582a3445c8a2fb7.address @@ -0,0 +1 @@ +eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyNC0xMi0yNCAxNDoxMToxMC40NzkyMjQ1NjcgKzAzMDAgTVNLIG09KzAuMTQxODkzOTQ4IiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoiSVdfYllPXzFZdWpwSkdpUyJ9.UVo5AkcfyHfDwb4ZBxFzI8QOTmhjT_pvs3fqP5sxdaqQ7engdZt90Q.GWhrmiZcgqsNy29j.wgpCeCIxKKRUtWt8MoF9kRrfSK33qcYNXiP0i64arfqVlRo03Xwgkx7LsnKRi8cyA9ys1RqlSSki6DGUdUJ7UWN7VWd87_LatKwpzfte1s_Y5ha28XcrT_e73KXOqxeYiyy2RG7FKmWFZzOdOyiEIl5VzNBdbqPe_hEcKWrXX-zs6Joz7H1ImN3aa1Q89QYG-WPF7uCunhhint_GXYfHOf6kpawEeWDU_npUCE2HuCTQNlsKuuc.bVoIApBz_xCtZKPsZjvKbw \ No newline at end of file diff --git a/tests/testdata/snapshot-keychain/keyring-test/3755bf2db2917c22780984cf79700d40798e911a.address b/tests/testdata/snapshot-keychain/keyring-test/3755bf2db2917c22780984cf79700d40798e911a.address deleted file mode 100644 index 67d586ad8..000000000 --- a/tests/testdata/snapshot-keychain/keyring-test/3755bf2db2917c22780984cf79700d40798e911a.address +++ /dev/null @@ -1 +0,0 @@ -eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyNC0xMC0yMiAxNzowNDowOS4wNjM3ODM2OTUgKzAzMDAgTVNLIG09KzAuMTU3MjM2NTAxIiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoieTliNFAzQ242MHJ5VmxjLSJ9.rcE6UK9-glCK8WUeCuuwNVAmOEg0eh_rxhHHhz78C-OoJrlm1QQ20A.XqauOatQD77K-gxX.ih09iT8GT9-FCFCuYdPEIIaULsSBujfk8WZ9RvlhL4HHvQbWNSwYcfpMKRC8awSwIsXLB6-sQ90dy5oPspUyyhXm9kUXL4wpq_tVvz2jel046TbSOAbSBlSoUF23GTJf6lH52jce95x54gui7IBhOB_lmCk3pJ1TvHEkMIGuHnJXLjmey8TdHLwpqIZD-Pzdjtaxmoyaz_qZh5XDwOznfCSHTXBPOIhpv5hfGLYGTkg8hw.PnGqbmHyboO27ML-nNGNIA \ No newline at end of file diff --git a/tests/testdata/snapshot-keychain/keyring-test/3a41135fdfd412daf024af6f51201c65ddbca70d.address b/tests/testdata/snapshot-keychain/keyring-test/3a41135fdfd412daf024af6f51201c65ddbca70d.address deleted file mode 100644 index bcfedf659..000000000 --- a/tests/testdata/snapshot-keychain/keyring-test/3a41135fdfd412daf024af6f51201c65ddbca70d.address +++ /dev/null @@ -1 +0,0 @@ -eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyNC0xMC0yMiAxNzowNDowOC44OTIxNDU1NzIgKzAzMDAgTVNLIG09KzAuMTU2NzMyNTY3IiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoiUWN4QktMWDlIOE9kYldmQiJ9.l-8n9kKLxdgqYJoQRyq6lEz5hc3ATfzN4dgxXWc6cikKEBQCtVax8A.Sxo-bllEQduHHUWA.zLbXM37gJEYfkIaYnAoMF78ZaRx62MpEtq5mzBMp2A6T9ypR52QcNshwqi5TmIrZXuSXf7FGDS5rjXN0B9soB72D6_VaJwyCp1mV9QcZB66NC0Psp3g55VWBDh0QuRF-eIqxmCvhXHd4e19k5TC7udyPT40zMwbAu122xKdt1-MhHhlpyDJK52bk9PKywmE9F-6TZPJZjHo7AJR8uUY4WD6AfCJSJmsw-XcJbsctGbhGZHZbyEw.tsLZJ5RE9QaLr4slY_80Og \ No newline at end of file diff --git a/tests/testdata/snapshot-keychain/keyring-test/a8f44773886b082d9b4c7232cc17e47b387c6dd5.address b/tests/testdata/snapshot-keychain/keyring-test/a8f44773886b082d9b4c7232cc17e47b387c6dd5.address new file mode 100644 index 000000000..6a234d50d --- /dev/null +++ b/tests/testdata/snapshot-keychain/keyring-test/a8f44773886b082d9b4c7232cc17e47b387c6dd5.address @@ -0,0 +1 @@ +eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyNC0xMi0yNCAxNDoxMToxMC42NDc3OTYxNDggKzAzMDAgTVNLIG09KzAuMTU0MTMyMTE4IiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoiazN3RmFVNEQtY1BGa25VWSJ9.zGE-zVUOsWO3LCSVJ8nyWoos-DL_78CJhwymtsdcBzdKXo4gi-fR1A.6lzNuqoqA-fmUVrG.5Pqj2O1ssRjPgaFmH8SOKaW4UykKnGMXYCOrOzBKMX-p7Gio632cNlByXvqWoASpDVYeRN9BOrv4mDRgWfEIjO_9EJUH9wq_tjHzEQTujJeWBdQNFuXAH9TQPR-usXqhnEt86vp5D5IpGujhPREwUsKxO5EkO1ZDaD_lK5jHrVq-rhEm1I8Pcw0_lfh_1JqKkv_xFbQ8drmK0VRBZwLMspXk6L6VdXHZabWTYTz-uGzNXA.IerEGiJHXwCMyXtLwgOjBA \ No newline at end of file diff --git a/tests/testdata/snapshot-keychain/keyring-test/bob.info b/tests/testdata/snapshot-keychain/keyring-test/bob.info index fb503e424..96358da2d 100644 --- a/tests/testdata/snapshot-keychain/keyring-test/bob.info +++ b/tests/testdata/snapshot-keychain/keyring-test/bob.info @@ -1 +1 @@ -eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyNC0xMC0yMiAxNzowNDowOS4wNTgzMTAyMzcgKzAzMDAgTVNLIG09KzAuMTUxNzYyOTQ0IiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoiOTBNQkdpOFFHSXVELWtWWiJ9.LiZdMxiPoVc5sWESGkEkNRYZMCeVNrq9uokFEAK7GJ3vQUuQtcuoTA.QV08aavFeuSsI5wz.oUUOSbUGvA7FutXRLDMqXXV7zJ7S1Za8LE-QCZGlfnLAKJdFMVIGwiRt-h3xZXJuh7LVhIlf6QlhTmn69YICGofwOO1Wyg3QrCmZFdeeX8wtr41yBY-ggyVoDItNiLGMFJQW94ZCczUia2J4E3PZPPCfE6KXLvVXRTBQP3Pdg9g5uRcxu_AqDJ94hCxt4y_IKTwzXvTH1xZNPWFr8sxRGcXwzifEouU66icAoCjij9NX21gEuiUgm5DDqxuONm_yxWNj28lrWm8qgX2wCKBF3eGbxyjj7EHC5eB9TJef1r1S3YCxUvf7s45VCWmcobX62MQNC19cTcPgIRzwe0GLB4MWDmfNQ1Vtx6naLVoHiuyopz7hoe2eZ7-_-1rIYy71B2pKBcZDraZByZV_fbp88JFSHfAyJA_wUkHhtG3Q8j3CjBFpJAFdcNT37UOUsZ87E_oRb98JbA_ECrn8d5zy55Dl.J2LUJYypV3Kcvd3haazZJA \ No newline at end of file +eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyNC0xMi0yNCAxNDoxMToxMC42NDI3NDc5NjEgKzAzMDAgTVNLIG09KzAuMTQ5MDg0MDMxIiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoiaUhKdE1oQXZFMDlGNlZIUyJ9.WSXLI0f1TJKOcdvT37C8G91saGH6OrGF1oe7reKiE1xpuIdktY-qHQ.DtHu2_MCjVAHYdMq.WDq4A-xwAOE9jndrR6P_RxXmzA4fkCKlIr5hPck4ooxfyZdpbe-DDD031nON_0T0B2inE7mh_QFoFC9w3UyCzOpD6ZdN1JRm5UwHPnEPFyVlPwf2-cbgVyEmziTdrdtIjsVeGAi0GKMtltuq66fWow3HRVXcmTtRUXJlGIySkdtjdnjcpyJI8G5vljG17Aw_vw_X8m4qe1fxEKBX2XBtMlDPODw-8WcgdGYwaXCsLegY2YWppJdy4k6NFG0Jxixh-8YOG9rDE8Bi8qjWYb0FSmxnbyRYbC0Gst5jhZtf-Fsm0JxwV5GLLgpZpiJdhNV7EO9135JACwssfTZI-7OrS7AQVvcyJlH2wJWt-lEkdSn7BsQNLxkgu2B9t8s2gl-8hpz4HUlhDVD0Cu2-GYv9XxdHprUM6mr2sxVoomgXjN2jDOm8Q_FcmwcxF2kTA3ccL-vABzDYO72ITTtIj7kUL8az.1KiwvNoVj-U5rEOnLqFSIw \ No newline at end of file diff --git a/tests/testdata/snapshot-keychain/keyring-test/val.info b/tests/testdata/snapshot-keychain/keyring-test/val.info index 2470922a5..39dd5c658 100644 --- a/tests/testdata/snapshot-keychain/keyring-test/val.info +++ b/tests/testdata/snapshot-keychain/keyring-test/val.info @@ -1 +1 @@ -eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyNC0xMC0yMiAxNzowNDowOC43MTU3NzIzNjYgKzAzMDAgTVNLIG09KzAuMTQ0ODk1MDcyIiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoiV0hFMGlCZXJXR19xOUZ0ZSJ9.DBkZZGuTL8jthUVFQ8ZTe3PU3iOVTBgHS7TF7scjGPatDwwoah1SrA.oQosah7pQTGNKM1l.C72uexG69rMlvuqAxA-JuXGrSsT3PCKsScBCFj1xkNJ6Z3ptBI4bUrZ2cvzIf6qCqp_mvNDb4h7iBAAFRHx3hogivYFklOZd_9CTO2dCsqBMAlfE53B2uu8AROtyH1fccqj-YyMcaVCMUXNDJF77m0Pfgw-7cEhLDs8GhrNATUGxts4OMLAky7Sb0aNMLBMLZfruWGIUJKd3IpM5kekTFNchZzI-fgHmXtll028EhnV0D_P8RQioJ4INfX0gsh9iBkMwgaiyA7qqg2C5oNXgNMBaGtdMY4Io1O5aLK2uEhtg5D41pFi7NunhMId8znzFi19i5v7vwPN2Gyd2GThshoP4u4rDSpXvpDu_7g1Y7KtjOrSi_Vrqq_R2KMaAwKHdiJ9pn187lS4InFRSoXECRE4U_-X3PxCAQ5C7PYT8c3a_GBmgc1GPTagq-4_QB8XU7fkZtzx75oDB1kNMOn9OmSXy.Bq9BARo3XWR379n9r2gBIg \ No newline at end of file +eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyNC0xMi0yNCAxNDoxMToxMC4zMTIyOTg3ODIgKzAzMDAgTVNLIG09KzAuMTIxODk4Nzk4IiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoidUxmRG1PdUItNjZkY0pnTiJ9.bIDaFFtTkRYVQOypY6Pt0GGTK5JBpaq40rlHO3lA0bIKXZa7mjRkzg.RZ1gPctieFbtgffD.HUlLb_1V1t_ECKbfzrq5CQkLlYQ0yF48fcGpXd-jDTNcinukWvpKucVIa0NN8hlM4qmKZk-NX2-EzbT_-R75eAmHm9j79LDTRHLjbFl3isL-RW-zUnbBgTdXHzpKWMKD4otGyKzEYLNPyqpK7_3c0DhAr0PAvkmWfNM9BVif9NoPYOtAuhOpHsJfhNV1W6gnUYCNbY7xH7JzM3Y8tpV8TBhb2HUagHErwCruPHAE76IIU7oTI_f8FoHVd9AuNwhbiuH0MA0Hv2TJjUNi9gPrLbcW25f9YELvYxl7BoWKDeOFVuJezSuAF41ICqOWxsN5XMG4pKp33ysS0TptVFAZhoqTLeGpkHVo2iWXx4aRFVpqZ332ENERT0VnhcTJshqwDmRlXzaadR78JV7bsvq9Vf34TTg8i24t3pngTbsb-Yav6bnfd2dhswkZFbML6ko9JCAQvNbSRGOOxdOCbsuNBJh_.OTexcHT9KX7F3PnX0qajjw \ No newline at end of file diff --git a/tests/testdata/snapshot-keychain/keyring-test/writer.info b/tests/testdata/snapshot-keychain/keyring-test/writer.info index 0b961a534..0989f45dd 100644 --- a/tests/testdata/snapshot-keychain/keyring-test/writer.info +++ b/tests/testdata/snapshot-keychain/keyring-test/writer.info @@ -1 +1 @@ -eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyNC0xMC0yMiAxNzowNDowOC44ODcyMjA3MiArMDMwMCBNU0sgbT0rMC4xNTE4MDc3MTUiLCJlbmMiOiJBMjU2R0NNIiwicDJjIjo4MTkyLCJwMnMiOiJXbWxGU0pkZUtsNl9GbE1IIn0.Fl2RoQDKgCV2MV7Gux-DMYgAnpW34VaBJUjJs4cabMMgptDLmLzIBg.2ePo7rILRiliCIFg.cEdSx1VUee0iugnoPZV3XXWo6umU0Ofu4iWQfMqjOQoooNDpsl_DMsGhrwwu0LunLY13fFlH1uiUf2188dLAP4zO3wq8Oh8xDKHqAXaWNtQuVnAuzJK_yaaAlln1okhcnWwdZOrT74kPQVUCjZIosqV79kVvTgAHeKAYVvOvyZPvsJNdSwArGyddtnpDXrsu3WHZGN5q2HtHi21j6f9pAsh-smdaqdG0gLN4OlgiLCG7f1pAZojG3_GV6rMpX__RRO1wp5dT9UD9DXZIcdQ0BEDAqOhyGWbzIodJEPcgy7LfeVezMwsx7gHFsVhSXZNPFYfBySeOzp70xtB0uhXNdWUxFGpcs_Dv0G6Q72Q3SoGqEjuTTnFGA9Wdq8IaP8v2XTz3cW-VvLOR4AWqbnfdx97C7WcIeMpFKxNk-Ryuuk9mhc0LYlISUGqTfthgZalabjjVgI4V-2HlTCdsQh3h4um2aHWPL_5erg.vMizTzUHEp5dL8J6Vilm5A \ No newline at end of file +eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyNC0xMi0yNCAxNDoxMToxMC40NzM5OTM0OCArMDMwMCBNU0sgbT0rMC4xMzY2NjI4NjEiLCJlbmMiOiJBMjU2R0NNIiwicDJjIjo4MTkyLCJwMnMiOiJXZWVNU3JrWTE2QUFXUC1qIn0.QdmafNkyy9cEGxBiPUHlha0Scb0SkG_ZyZZDIyKcHEPSgg0FEjVFjA.JnDQFUPEFkwqKf6I.5E77Lnb2r6NP1Pj8t_A6QTp5mveAlPl_lcGX2sO0jGavZ6xtJ5aea8tEVfQC-9DnxTb6Og9rvs1TWjAtqJ-cJ4FkHCqgs9TmgzT3K3tVpD02XmL8QqY05SEybEea_3qw5j-P1jHh8tTXvfWOtm8m-uc185r9XkMxZnJou5ETLDkx3RrYJRhsmRwXXD7S7DDOs1qHLbloMeQRIePfjBlawKTerNdZeh3uQ22tbV9AU56B_KmC9RDbDcwRZ35qcTro9M83grVU2bncz8v8GBLlWGuzbGhOmfQXuBAogvGlkp6ddVpJrT7eNTDGjwTblcyk_z4uzWEvztMpM9m4KWlytgoEGH-ocfPkKFsMp7-ntproDVaqrtMWf6c_EZnRYIfC0I91HsZRQ93-hMh7QyIb2peQ7oR6PLk13oSWSFgY5Khv8RHiKAdHIe_UIrD6kztblUzuLlMKc1DxPaxQLlDVX52K9X6ePS0Ckg.wCOiFDrcRk9Eypzi_W67Mw \ No newline at end of file diff --git a/tests/testdata/snapshot-many-users/config/config.toml.tmpl b/tests/testdata/snapshot-many-users/config/config.toml.tmpl index bef3dbd34..3fa8d3ef7 100644 --- a/tests/testdata/snapshot-many-users/config/config.toml.tmpl +++ b/tests/testdata/snapshot-many-users/config/config.toml.tmpl @@ -8,7 +8,7 @@ # The version of the CometBFT binary that created or # last modified the config file. Do not modify this. -version = "0.38.12" +version = "0.38.15" ####################################################################### ### Main Base Config Options ### diff --git a/tests/testdata/snapshot-many-users/config/genesis.json b/tests/testdata/snapshot-many-users/config/genesis.json index 209062e79..7a22108c1 100644 --- a/tests/testdata/snapshot-many-users/config/genesis.json +++ b/tests/testdata/snapshot-many-users/config/genesis.json @@ -1,7 +1,7 @@ { "app_name": "wardend", - "app_version": "v0.5.0-50-g04b9df68-dirty", - "genesis_time": "2024-10-22T14:04:11.858586971Z", + "app_version": "v0.5.4-54-g94c79f15a-dirty", + "genesis_time": "2024-12-24T11:11:14.557117288Z", "chain_id": "warden_1337-1", "initial_height": 1, "app_hash": null, @@ -28,21 +28,21 @@ "accounts": [ { "@type": "/cosmos.auth.v1beta1.BaseAccount", - "address": "warden1f00stcewhz7v8042pwpslsrwzgdvvmzg98vlkt", + "address": "warden1jxe4lhk9umd9sdtttp0e6ddl4d3v52qxrsxvln", "pub_key": null, "account_number": "0", "sequence": "0" }, { "@type": "/cosmos.auth.v1beta1.BaseAccount", - "address": "warden1cuc99fquewqt02598wgzqm2wlnrh4wkzxgk5t8", + "address": "warden15txjnn4szt4axn2jzucaumf4dvd7dhtmqmhxdv", "pub_key": null, "account_number": "1", "sequence": "0" }, { "@type": "/cosmos.auth.v1beta1.BaseAccount", - "address": "warden1ewkv0k5sunyyazwt7mdfl5v4cqc4khe9ykkjxa", + "address": "warden1ghpwshn329luqe8d6n954nf59gmlm8xdeeuz2g", "pub_key": null, "account_number": "2", "sequence": "0" @@ -59,7 +59,7 @@ }, "balances": [ { - "address": "warden1f00stcewhz7v8042pwpslsrwzgdvvmzg98vlkt", + "address": "warden1ghpwshn329luqe8d6n954nf59gmlm8xdeeuz2g", "coins": [ { "denom": "award", @@ -68,7 +68,7 @@ ] }, { - "address": "warden1cuc99fquewqt02598wgzqm2wlnrh4wkzxgk5t8", + "address": "warden1jxe4lhk9umd9sdtttp0e6ddl4d3v52qxrsxvln", "coins": [ { "denom": "award", @@ -77,7 +77,7 @@ ] }, { - "address": "warden1ewkv0k5sunyyazwt7mdfl5v4cqc4khe9ykkjxa", + "address": "warden15txjnn4szt4axn2jzucaumf4dvd7dhtmqmhxdv", "coins": [ { "denom": "award", @@ -187,7 +187,8 @@ "0x0000000000000000000000000000000000000805", "0x0000000000000000000000000000000000000900", "0x0000000000000000000000000000000000000901", - "0x0000000000000000000000000000000000000902" + "0x0000000000000000000000000000000000000902", + "0x0000000000000000000000000000000000000903" ] } }, @@ -234,10 +235,10 @@ }, "min_self_delegation": "1", "delegator_address": "", - "validator_address": "wardenvaloper1f00stcewhz7v8042pwpslsrwzgdvvmzg5uw6e6", + "validator_address": "wardenvaloper1jxe4lhk9umd9sdtttp0e6ddl4d3v52qxjtyfsz", "pubkey": { "@type": "/cosmos.crypto.ed25519.PubKey", - "key": "5mhXzEckA6ruk/XZfr7gVBxsVQv9uKHNFhgy0cvuluA=" + "key": "lenUI8UWG3NxwW9dnLZFVrpRqyLUlvtxRJHF+HG2B+Y=" }, "value": { "denom": "award", @@ -245,7 +246,7 @@ } } ], - "memo": "20a81503b193d19209e9d3cb5e0ff6576427a585@172.19.18.7:26656", + "memo": "363aed1a0db2e101a04eeef57908956a05f89850@172.19.18.7:26656", "timeout_height": "0", "extension_options": [], "non_critical_extension_options": [] @@ -255,7 +256,7 @@ { "public_key": { "@type": "/ethermint.crypto.v1.ethsecp256k1.PubKey", - "key": "AzZ8XfHxLbv0oPhTrl9xVjf2D///MjU6VnInL25Y21w8" + "key": "AjUFeKNVPD3hTF2MCQcpLqhPSN0365nmZjRRWhhlrSXg" }, "mode_info": { "single": { @@ -274,7 +275,7 @@ "tip": null }, "signatures": [ - "M96Ut1eCv9IGOKFxojjdtx2lHZo9wVXujf9gQy0pHBkAsdlYu6pHQbR09UB1aZQk1XOLZe8fpQDh7mQvWK8DwwA=" + "eWjmaQFCiaMzHYx6yD+orZcvx/Z4+YYHc9SaAfkztOZaRc4HczRqexD0pFHO20wNhoJahpe6caaMRa83bha2LgE=" ] } ] @@ -474,9 +475,9 @@ "spaces": [ { "id": "1", - "creator": "warden1f00stcewhz7v8042pwpslsrwzgdvvmzg98vlkt", + "creator": "warden1jxe4lhk9umd9sdtttp0e6ddl4d3v52qxrsxvln", "owners": [ - "warden1f00stcewhz7v8042pwpslsrwzgdvvmzg98vlkt" + "warden1jxe4lhk9umd9sdtttp0e6ddl4d3v52qxrsxvln" ], "nonce": "0", "approve_admin_template_id": "0", diff --git a/tests/testdata/snapshot-keychain/config/gentx/gentx-a013d5a19933832d53e57b8fde53b2bb2855e90d.json b/tests/testdata/snapshot-many-users/config/gentx/gentx-363aed1a0db2e101a04eeef57908956a05f89850.json similarity index 56% rename from tests/testdata/snapshot-keychain/config/gentx/gentx-a013d5a19933832d53e57b8fde53b2bb2855e90d.json rename to tests/testdata/snapshot-many-users/config/gentx/gentx-363aed1a0db2e101a04eeef57908956a05f89850.json index 9e37430cd..58ab1146e 100644 --- a/tests/testdata/snapshot-keychain/config/gentx/gentx-a013d5a19933832d53e57b8fde53b2bb2855e90d.json +++ b/tests/testdata/snapshot-many-users/config/gentx/gentx-363aed1a0db2e101a04eeef57908956a05f89850.json @@ -1 +1 @@ -{"body":{"messages":[{"@type":"/cosmos.staking.v1beta1.MsgCreateValidator","description":{"moniker":"testing","identity":"","website":"","security_contact":"","details":""},"commission":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"min_self_delegation":"1","delegator_address":"","validator_address":"wardenvaloper1r949mzumv9w0q97vt5xjpystys73wtt5qgmzdu","pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"bjCqMke5d//47HQxI0e3jKAOPkX5G5VKCdyS3b63uKQ="},"value":{"denom":"award","amount":"1000000000000000000000"}}],"memo":"a013d5a19933832d53e57b8fde53b2bb2855e90d@172.19.18.7:26656","timeout_height":"0","extension_options":[],"non_critical_extension_options":[]},"auth_info":{"signer_infos":[{"public_key":{"@type":"/ethermint.crypto.v1.ethsecp256k1.PubKey","key":"AtKM5UR7j857OfqFjym6L1lFa9AV2GKb7qbkN8lMbmzP"},"mode_info":{"single":{"mode":"SIGN_MODE_DIRECT"}},"sequence":"0"}],"fee":{"amount":[],"gas_limit":"200000","payer":"","granter":""},"tip":null},"signatures":["nLDnP2iaJpIQn5eo2Aorj54L0wlxvjLRYyecsBJ0nnVrtBjH3xXF1UW2aPwmS7wiTukzaZEjyvViTTyi8R88OAE="]} +{"body":{"messages":[{"@type":"/cosmos.staking.v1beta1.MsgCreateValidator","description":{"moniker":"testing","identity":"","website":"","security_contact":"","details":""},"commission":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"min_self_delegation":"1","delegator_address":"","validator_address":"wardenvaloper1jxe4lhk9umd9sdtttp0e6ddl4d3v52qxjtyfsz","pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"lenUI8UWG3NxwW9dnLZFVrpRqyLUlvtxRJHF+HG2B+Y="},"value":{"denom":"award","amount":"1000000000000000000000"}}],"memo":"363aed1a0db2e101a04eeef57908956a05f89850@172.19.18.7:26656","timeout_height":"0","extension_options":[],"non_critical_extension_options":[]},"auth_info":{"signer_infos":[{"public_key":{"@type":"/ethermint.crypto.v1.ethsecp256k1.PubKey","key":"AjUFeKNVPD3hTF2MCQcpLqhPSN0365nmZjRRWhhlrSXg"},"mode_info":{"single":{"mode":"SIGN_MODE_DIRECT"}},"sequence":"0"}],"fee":{"amount":[],"gas_limit":"200000","payer":"","granter":""},"tip":null},"signatures":["eWjmaQFCiaMzHYx6yD+orZcvx/Z4+YYHc9SaAfkztOZaRc4HczRqexD0pFHO20wNhoJahpe6caaMRa83bha2LgE="]} diff --git a/tests/testdata/snapshot-many-users/config/node_key.json b/tests/testdata/snapshot-many-users/config/node_key.json index ced0f3aaa..52b80242d 100644 --- a/tests/testdata/snapshot-many-users/config/node_key.json +++ b/tests/testdata/snapshot-many-users/config/node_key.json @@ -1 +1 @@ -{"priv_key":{"type":"tendermint/PrivKeyEd25519","value":"vo/4HEUp+Me3CJ2EIhTfwpSO+GEHMgogP2x2CBsWrWy6GcEv6G39NmZGaaWSWYxThPLqdeIhfCWF9NFeSta0Cg=="}} \ No newline at end of file +{"priv_key":{"type":"tendermint/PrivKeyEd25519","value":"cr1IiR2BpQv2uhkXluTCOYH9Wlrag8O6bqddRlgeLxHgDFGo7VfH4QG3LO9ogNJE4k1zo8Yer3lgR9yl5NkHbQ=="}} \ No newline at end of file diff --git a/tests/testdata/snapshot-many-users/config/priv_validator_key.json b/tests/testdata/snapshot-many-users/config/priv_validator_key.json index 7aaa0c023..6ce323903 100644 --- a/tests/testdata/snapshot-many-users/config/priv_validator_key.json +++ b/tests/testdata/snapshot-many-users/config/priv_validator_key.json @@ -1,11 +1,11 @@ { - "address": "251D2696BFB7B5780B824A61CD2000F2C431B893", + "address": "B928C49439523156451E2BB79C2FB815B2EB9D3A", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "5mhXzEckA6ruk/XZfr7gVBxsVQv9uKHNFhgy0cvuluA=" + "value": "lenUI8UWG3NxwW9dnLZFVrpRqyLUlvtxRJHF+HG2B+Y=" }, "priv_key": { "type": "tendermint/PrivKeyEd25519", - "value": "wm4m9QSEEsAzZpGwyc1X7AgYw2J1sy8GBMSJMy08UGfmaFfMRyQDqu6T9dl+vuBUHGxVC/24oc0WGDLRy+6W4A==" + "value": "ppoL2EjslD5c5XCqSrlaq0LhQSH1zWEWCNj72P3uweSV6dQjxRYbc3HBb12ctkVWulGrItSW+3FEkcX4cbYH5g==" } } \ No newline at end of file diff --git a/tests/testdata/snapshot-many-users/keyring-test/3d23709c5c3ac8fd5caf326a722f80fbf88feb98.address b/tests/testdata/snapshot-many-users/keyring-test/3d23709c5c3ac8fd5caf326a722f80fbf88feb98.address new file mode 100644 index 000000000..f74ccae4a --- /dev/null +++ b/tests/testdata/snapshot-many-users/keyring-test/3d23709c5c3ac8fd5caf326a722f80fbf88feb98.address @@ -0,0 +1 @@ +eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyNC0xMi0yNCAxNDoxMToxNS43OTk4ODMzNjYgKzAzMDAgTVNLIG09KzAuMjAyNzg5MTc0IiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoieXFDNmV4VmhjOU96Wkx2diJ9.DbUPTLrCWFBkBq2lDjhbdMyOvcFFor-oiF-d14gbB6pw3JQpID7sig.OIGeMprYMonRhRFD.IM_ivNdhbhehdPAH63g4_Av1W7ojQvbYtem5HCwn1tj3sF--J77cDKU8ubTEP7xvm7VmeEfweGxCX2yGdc1-ojRSldLy6FtkUOiRLOq-o58Dlms0fkbDpucK8e5wsxMOB5PPczk-AVdCHr5f_WBm3zbZ7pN_UA0FzRYIfLwaCJbRXZrWdkqlS-Rr3CbZkKigYVxwioIiw3wjg3Nvrw2GK9cf3JouB6XuzkfuB6gV6WX6u9rGe4Y.UBvpqP2mFCLYKCY3YCkmmA \ No newline at end of file diff --git a/tests/testdata/snapshot-many-users/keyring-test/45c2e85e71517fc064edd4cb4acd342a37fd9ccd.address b/tests/testdata/snapshot-many-users/keyring-test/45c2e85e71517fc064edd4cb4acd342a37fd9ccd.address new file mode 100644 index 000000000..cd7f07ad5 --- /dev/null +++ b/tests/testdata/snapshot-many-users/keyring-test/45c2e85e71517fc064edd4cb4acd342a37fd9ccd.address @@ -0,0 +1 @@ +eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyNC0xMi0yNCAxNDoxMToxNS4yNjMzMDMxNiArMDMwMCBNU0sgbT0rMC4xNTQ2NTEwOTkiLCJlbmMiOiJBMjU2R0NNIiwicDJjIjo4MTkyLCJwMnMiOiIxMXN4Tjk5QWlrOWFGcFZ3In0.gANy0y6rOiWgIW03JSV3IjjBys6E5cibEaMfMgTQY8aa1m6PK_6N0Q.HIhELZvTKSifiwXN.63GLtWAdgl_g0dqxahCPB0BTV8XWtP2TtIvJI9G5gjLLZIe5MrMEy0HwRqvhbsnYBixpLlQXCbbzTLAqa773coaovUUqbScpBGZWS5RLciDpSO9KLFpAqrsiUngQpiSQd96R7AmEn42UQBl1op9Jk6jKNGiDx6y99q_gEV4nzdtciZAAzYQeOK7D1sW4QxGcQqijCWF9cnhsgzYrVVCavRzTvIRiRTFJLzNSnSRMY-LIw8YfFH0.E4iEQAqAxU02Yk5VwoHJCw \ No newline at end of file diff --git a/tests/testdata/snapshot-many-users/keyring-test/4bdf05e32eb8bcc3beaa0b830fc06e121ac66c48.address b/tests/testdata/snapshot-many-users/keyring-test/4bdf05e32eb8bcc3beaa0b830fc06e121ac66c48.address deleted file mode 100644 index dacbb8e04..000000000 --- a/tests/testdata/snapshot-many-users/keyring-test/4bdf05e32eb8bcc3beaa0b830fc06e121ac66c48.address +++ /dev/null @@ -1 +0,0 @@ -eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyNC0xMC0yMiAxNzowNDoxMi4yODc2NzE5MyArMDMwMCBNU0sgbT0rMC4xNDM1Mzc2NDgiLCJlbmMiOiJBMjU2R0NNIiwicDJjIjo4MTkyLCJwMnMiOiJCSnVSa2s1aU5ZcEFjQm1nIn0.ep43zqUsCO9fxvXv8_IuPZm6Xu-wIBGAlm6aAfGLkDuWs7n3aSJAIg.D7FhR_Q1LQPeYrXJ.oKsVpMo-n20GOIcMa1qtrcrPL8N_NH6FAzWhp8UPE8mNcJ6OLD-7nLo-3-Eaou4WVgjBGIXOT3KHt0jfExL8eBa4y4_Haj22YW5zIb1N-gMXVvgECA2vklewXAnGUlifgy5hZjo96MsyI5-vQdR0-r3y7-Gfw1-I3kQkmdUdpsrT3Wn1I6F_LFwU30C0XLSioenCNaxvrHfBe6AmBIv91t9fbJ-QVREeYxNQnaXz-cKcYBSOGic.EOaTaVgWRzTOevsf-_H-9w \ No newline at end of file diff --git a/tests/testdata/snapshot-many-users/keyring-test/4ef223a16ad3cbf44ff9d8fe8ab2c33e3468af93.address b/tests/testdata/snapshot-many-users/keyring-test/4ef223a16ad3cbf44ff9d8fe8ab2c33e3468af93.address deleted file mode 100644 index d391deddc..000000000 --- a/tests/testdata/snapshot-many-users/keyring-test/4ef223a16ad3cbf44ff9d8fe8ab2c33e3468af93.address +++ /dev/null @@ -1 +0,0 @@ -eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyNC0xMC0yMiAxNzowNDoxMy4xNTg5NTg3OTUgKzAzMDAgTVNLIG09KzAuMTM5OTcwNDMzIiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoiX0FMZHhyc3p6NlNYNjdKVCJ9.tlWg6YkE_9cAJ0mQOq35-hoqKpmL-newmACgI-q69w_J_aCShqvjdQ.9jwvXrQmDaNHAKw0._JkMGj9iqkXKVoqCgQBZjbZqlRTO8zLgU4pm4dEw86FIOzKGfKzvty51nDSQO2luLmfoFbpnltDGp82WL2TGJQa-t0vfmTOr52VnoiCCBlLEQSANiVgwozDfxwTVn41V4Cwe5mmhwQ2D2Mgf9MlcJfXSHO1tr74Su18YJqvXJhKUYPz-bcrKy7L2Ok7qFUM8ogl9mA02YO-G9kYhVwB3YuNv08Ut7bsUu8SRJeilyocP-JYBhhg.bKyXP2FV8eSiVariHlEyLg \ No newline at end of file diff --git a/tests/testdata/snapshot-many-users/keyring-test/6c11b09eab8dadfdda77035343bc188e99e54a32.address b/tests/testdata/snapshot-many-users/keyring-test/6c11b09eab8dadfdda77035343bc188e99e54a32.address deleted file mode 100644 index e9a85eae1..000000000 --- a/tests/testdata/snapshot-many-users/keyring-test/6c11b09eab8dadfdda77035343bc188e99e54a32.address +++ /dev/null @@ -1 +0,0 @@ -eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyNC0xMC0yMiAxNzowNDoxMi44NDU5ODI2MTYgKzAzMDAgTVNLIG09KzAuMTYyMDc1NTY5IiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoic0IteEI4SDA0OXNidTFCeiJ9.dbZZLN77CnQL0ePk4eVIfYIDuX_ZxXla788bvXS9N1fT3oyDZRX0iA.ukhxCvKOdgcEL8Ex.M7TAJQ7Cj1ax-yhXyck_IpZu2O9eyo1W3Qwi2wJ3o60NJoTmGshP7B7MqD3phBrpjEMvRIJB_BBRph2i99M_Wfmlhei-vo3PUFsfSbSfqajPgLJ3YPk3aYhPGIci1D8JUIuRSZ-eCC9d_dRko4rfVZ_uDwbg6KTYYWxjnWchpA2HF0ME0GGAOHlPkEGeG0EB9-TQ7Xt84IpE7T_8iXon5DRTnqz4opeCW-p3qTCN0C56KA.vMJvpJPw8S0-k_MQQ8jL4A \ No newline at end of file diff --git a/tests/testdata/snapshot-many-users/keyring-test/6dd9b9a7cc65360687fc46fead33ce8d53eb5df3.address b/tests/testdata/snapshot-many-users/keyring-test/6dd9b9a7cc65360687fc46fead33ce8d53eb5df3.address deleted file mode 100644 index 71fa1fbe9..000000000 --- a/tests/testdata/snapshot-many-users/keyring-test/6dd9b9a7cc65360687fc46fead33ce8d53eb5df3.address +++ /dev/null @@ -1 +0,0 @@ -eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyNC0xMC0yMiAxNzowNDoxMy4wMDM5OTIwODUgKzAzMDAgTVNLIG09KzAuMTQyODQ4NTgwIiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoiaEpZUTdQVjI5ano4aEVYRCJ9.l7jWm2xLxWprYuIqpANULVGxn1-QxxvWxzfAJnuTBUgoR8YwBXCRQg.fndbu2SRg55RIk-v.Usa9ADeqvK24G2S35je3iAl84nj5Dm-Or3wB8mK9v5AupkQxMW9SpLtt20Wit_AWlBpNUnaLOJuq2FZguNSf_4g9loPx3l7yuJWTgIDxovyjTk2zwTNPUpjPd9bNol_S9w-2TaHm0NHnFqF117dpWxkardNnZpDRrGpQIk311URJi3_3ndRhJE8oeSGqHZmu4uIjVTUumaHF69BlPAxdjpb-tL3fzDzrxTXeod4OqDLNSw.sM58FnBsyumxlKJIERGSGw \ No newline at end of file diff --git a/tests/testdata/snapshot-many-users/keyring-test/91b35fdec5e6da58356b585f9d35bfab62ca2806.address b/tests/testdata/snapshot-many-users/keyring-test/91b35fdec5e6da58356b585f9d35bfab62ca2806.address new file mode 100644 index 000000000..0f5c2db6d --- /dev/null +++ b/tests/testdata/snapshot-many-users/keyring-test/91b35fdec5e6da58356b585f9d35bfab62ca2806.address @@ -0,0 +1 @@ +eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyNC0xMi0yNCAxNDoxMToxNC45NDQyNTE1ODggKzAzMDAgTVNLIG09KzAuMTMyNzgxMjU4IiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoiYTFIQU94b29TVjBUc1FMUCJ9.IDreQFNaq9M1QAzcEMV1-oxaJPptFeiH3ERYwmeYxiTcpabg-YZHrw.OM-mi2ZXUJl0ggt3.2FqptbDNp5LpEZ0-LcFYRJ3546JQP4bTMSR1qKiLXLdcRQ2uHj84_XGKYg5KXsF5LAozRfeHDrfjwoopvP5um4hxOpsWvqex8UPbWOr0M4S_iKLTAhaJgVBTjf7lcCBJWsQ9OrRER_Amw9Y2AlA-7PoblKGfGzmKP0zQDc6aJqBSC98X6Ll3wIoWbZw8BD7yel6CBlNZsfRhyhysayd5v8ZidV3NAlRE2L4Aigw9zlaIsDrVHgs.OuK2qJ5Bzs1STACBUbJxvg \ No newline at end of file diff --git a/tests/testdata/snapshot-many-users/keyring-test/a2cd29ceb012ebd34d521731de6d356b1be6dd7b.address b/tests/testdata/snapshot-many-users/keyring-test/a2cd29ceb012ebd34d521731de6d356b1be6dd7b.address new file mode 100644 index 000000000..358945a30 --- /dev/null +++ b/tests/testdata/snapshot-many-users/keyring-test/a2cd29ceb012ebd34d521731de6d356b1be6dd7b.address @@ -0,0 +1 @@ +eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyNC0xMi0yNCAxNDoxMToxNS4wOTQyNTk3ICswMzAwIE1TSyBtPSswLjEzNDg0Mjc1MiIsImVuYyI6IkEyNTZHQ00iLCJwMmMiOjgxOTIsInAycyI6Ik9CWEdfdTU5WHYzdF9TeGgifQ.P0jnTqL8TgnqUplOOYuxLPFdoDqX6QjkJVn5-tEO9RJjJH-nhcYSXg.sAs0w9kN663R4BN-.6paLhiuTfCQvAS32-PbsjctnQkeRvCGbcZKr7Z33a_TZ7yFqgR3w9k7hlEDAbZEdljuhA96wqXs6_hShWye2rIgCXYi5UTfDh0ZhnLSck5LBvaENllQ7YGfjbTun_Dyi9ZRlhFmzTidAFe1hL07LCXSWkit34wKXG5rYGLlK5o-PqN9wDQGBBkUgC-n4zCXN0gsIUKrlG8PdEdsMR9Yn6e4WMM2XEvfNP_HCWrKvd4EaNQ.Q3Wi3dIwS_CJUSb8_Fh8fA \ No newline at end of file diff --git a/tests/testdata/snapshot-many-users/keyring-test/ac3f01ada9b162875e943a06e3539bf96b12c67c.address b/tests/testdata/snapshot-many-users/keyring-test/ac3f01ada9b162875e943a06e3539bf96b12c67c.address new file mode 100644 index 000000000..d2057c219 --- /dev/null +++ b/tests/testdata/snapshot-many-users/keyring-test/ac3f01ada9b162875e943a06e3539bf96b12c67c.address @@ -0,0 +1 @@ +eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyNC0xMi0yNCAxNDoxMToxNS40MDgzNzA0ODQgKzAzMDAgTVNLIG09KzAuMTMxNzYyMDU5IiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoiRldNZEVPQUJmRy10Tm5KViJ9.lp3S_U5mYieNfY_xwaM7R4T-qJ8QEl2GzpblKXgLC-KLIuqrQrAl_Q.HSfiCz461fb8E1fz.iIumbJ_LrSNjn1gn1Tou0FcOheJSKnf0N3pD-7ZTitKTIx-2Dhz28onT8I-VzE9XmIvCIc3lCFMQiAZcWnwtqs5ckQJJ1nmY2QWi9t7SuZV1mrz1dTcRyslMQ-RnK3Blte5axV9kcyGcJNKdYJDTorFdTDKc7Hcpjha6rLPBq1npqgGL6LEWSPe49V4gAeOpOp3tacJueJ7K9an5m-VMpQtKd2cp6s3c4YP8zlpvDofLng.091tEHdGN92MoWG0OQpHAw \ No newline at end of file diff --git a/tests/testdata/snapshot-many-users/keyring-test/alice.info b/tests/testdata/snapshot-many-users/keyring-test/alice.info index b56b82c55..cb25d87f9 100644 --- a/tests/testdata/snapshot-many-users/keyring-test/alice.info +++ b/tests/testdata/snapshot-many-users/keyring-test/alice.info @@ -1 +1 @@ -eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyNC0xMC0yMiAxNzowNDoxMi4yODI0ODExMTcgKzAzMDAgTVNLIG09KzAuMTM4MzQ2NzM1IiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoiVnpqU19ROXRCYmRtekR6aSJ9.5-MhnsBoe4PSQrXfuiJBDfOREj7Jze-eAhM9d8cKIhVe073WfZ-V6A.MuBjk8r4c6pTccXV.FcEopt0UXljMPexiRhJdIfnfn9-xWP3iiJvCL0OBbbV_pCh1iPuoHTMyfv4MHvj0EUNQDCfnvf8kDv4jsCq-8rs4CeQjyB7qa-dQrKb6V30RTVRO3LkoY0tzDMZRSPPhAetS1RrzwJtWqW7d4la-d522GWYQ0zxEwoWoN2verkVYmsn7pysGkgly_UjSByN9Rh3CxYFNTOoYB9tTKCgSyqYH-M3zlLoGdtIASmE1qUDvRXos-Ug1N3L5pcnHEdRqlQRPz-ARkdvrhWVTumDUE_SIiklNm-E7xcppNm8EkqFrubjqbIL3G9sKYAG7m83eb_ZQW5iCLGFqUWf_oMe-61xdNrbM5gjFhhtxHfq6KKhirYQqqBzjwEZ-zGqJjVAKSZZRcKZ9TCWHBSTj67aUrdm-cwbqD21tqFP94vVFiLSPg5rVWgtbyQpQubiZtZiHNvr3yvYRwV4033iMxuUVJuu8WGg.1v9MbL9xsktxHmh2O2LR1g \ No newline at end of file +eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyNC0xMi0yNCAxNDoxMToxNC45Mzg3NjcxMDMgKzAzMDAgTVNLIG09KzAuMTI3Mjk2NjczIiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoidzgtbWROeVNIcl9XMlZaRyJ9.GT-2ANq5TtPy34dHT4i5p4w7A_qIFZKT-9obXWyeycpSAbA_eWLzmQ.AdCS0Ku_KVAyBwVz.1ohpfaBE0BkxW46BAH_lIIUt0s7K7dhNUG51NcxyO2T8LTgkhcRdWVNJQHKRdlvX9OF0ztheTxLtwio-6QZx4gAfE197NHgRLK99hMp7wOMiwpAPNnc9WcfEGQraRHHRpVysWiJ6JpyMLZ5j7MwXA9PWhTU5OLcIKQVN35QB-JNhwLkwqnokinit_KPXCdkb1yhwSMVTQI8eDnYj4a9_iD126OxYe1MZWQJx4fcUto9wkAOoHHZOWRMM4IhlzdLy-D1SjOb7g3aZFwm2uZqYWJt-IU8RJxC7mEbUnfpNO2P3_1_a1ApU6kF_3KDfA3NTkSYEOVqzBQ22q5RyTtmfL6GG1-Y2Ccuzzi_Zn0yq1cAFmcRYfdxPJiYCm0keKKKccb5K9saJ-VnbHrKyM2OfJcPAhr7GatFPlgPA2plhTSmHxs_Y_KoaIQZGqHoqDswUGkQcdqUYyb5MeOuXsbQVMBx_tfk.UbljanWYG-JrGdXdefZCtw \ No newline at end of file diff --git a/tests/testdata/snapshot-many-users/keyring-test/bob.info b/tests/testdata/snapshot-many-users/keyring-test/bob.info index 801998146..56fa7bb93 100644 --- a/tests/testdata/snapshot-many-users/keyring-test/bob.info +++ b/tests/testdata/snapshot-many-users/keyring-test/bob.info @@ -1 +1 @@ -eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyNC0xMC0yMiAxNzowNDoxMi40Nzk2NzQzNTkgKzAzMDAgTVNLIG09KzAuMTc1NzEyNDQ0IiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoidERsUks5ZmFMX0EycVV3ciJ9.Fc2K1Tg98EdCnbuPvMoPUBB3lbeKNcXTOgz_Er2O4P2mrr43Tb9u7w.lo21PQgRa6iM39WM.8j3twCmAJ-kFVaIHtNDrxlBt3fgTSozG1ckH9QekaWykf9eGZVIkWcOxR9yiyFb3d2H7Sfp6teIkwE5adfaTY_CYjQ_FzLNIGstDgGBzYgvF6aISEz_hrKVSjetYAAnm4713XqHoT4-4KY_igopJ0T8QrUtF3vr2MVLpe76O-oBkce5dA1ccOnQWdCIosX3I_3CZ--Z2LxBXM4K912FqF19EiJY2XdvfFapD53q1SAGfszYj1Wq7k5NiZUJdA81NZEK6B9kPWJJ_fgLFFa4XrC09sKTDOxQuIRNrmI6pRdtL_DuJG09PHcWjCS7LkkZUVxbyZJLM7hZY8gwgLfP8FL-zLtwaY_GJ6Qq0ffWiFMOOFO5AeYE4K-IyuTFB5L8gtg9xu_N0H2M-7MiE-yHXUnGQ55yvDSfrK0uIdRJzQ5LDB-sBEFoROwH16oA2PhPRpPOrwPvit2hkbVj8qSk9Ev_M.fPgCf5PEU6afjyj7gIC_mA \ No newline at end of file +eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyNC0xMi0yNCAxNDoxMToxNS4wODY4NjM4MTkgKzAzMDAgTVNLIG09KzAuMTI3NDQ2OTcxIiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoiaFY5dWFXenFaOXphbV95TyJ9.iMAMB0FxEwK9sJ9K1clcbxuycoT-6Jm2lywSDwvGiPpImd-4czQPCA.ujgX7wSrgxa_VI_M.wqBdpirgnor5hxuWgHXITRMPuPvIxPx7vuYOei5Nbok-rSirWvklnU1GA_E3hEILTbjvMg0i0EfJQriCjKXLq3FO1P0A7DoPuW1q5_AtQFvYmb_phrVrnXpIru7OhvWw3HakFw6fJORSLY5hLjvgmRZilWN3AXfPV2gt3dpVzAGfK5uF5KXwMllkmr443a8Chkmw0ahJMSI06THLgNheuStxYK6hNFGXvwODTQuO3C_12m2VDe8rY8yiB5WoBylA-Pf6pqAIaiXsNmrShwsbkq33uUslJThJ0XnO4jnMHDBdFaa2yOITTSId4-3YJWUmr4iw__inK046ofrkfpLlIXS5rUCG1nnyY4GcvS08_3aztNhz6vww5kOBfSKP30B1xjydCehSCeGwe2itWVnaI65p6linzJv1F19PA4kscT0sLHGTeYbm1-yYGJy4ZZizXcabvm9atGCPUTKhVVfgkilB.8L0eYCi_jYFN0E2Dnn-0LQ \ No newline at end of file diff --git a/tests/testdata/snapshot-many-users/keyring-test/c73052a41ccb80b7aa853b90206d4efcc77abac2.address b/tests/testdata/snapshot-many-users/keyring-test/c73052a41ccb80b7aa853b90206d4efcc77abac2.address deleted file mode 100644 index 2f22a410d..000000000 --- a/tests/testdata/snapshot-many-users/keyring-test/c73052a41ccb80b7aa853b90206d4efcc77abac2.address +++ /dev/null @@ -1 +0,0 @@ -eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyNC0xMC0yMiAxNzowNDoxMi40ODUwODc1MjYgKzAzMDAgTVNLIG09KzAuMTgxMTI1NjExIiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoiNXRqMlZtQmhnbUVISVU1XyJ9.VWQt8ZaMpHPnDAqq-IK3zxsRk5xtkgqnZnZVFHFvCzvohH54470wVw.eeMZ7nhmknTHPaTd.sbuP8imXzIVdta7IvW6Mrg1pp_Z7NrCm_dtwRgZMEGfD2J5sa57XAJicXunLNVVF7W49FxXdH388kvTkcnNRUHW9hZ8iTPAjf-SS59p_9zcz4QyhcODq4PALsBhpOOiVOn4i07wmKHwq-9b0S4Q6_KvBnmVFlojrb3RE1z9dynwgBv93gcE9pCQ-PbiB94wWmtIrvy0mNnzT_Xu3qbYkllpEde68gSDxg21HjSTgXZZenw.FDdW3aX7M4ditLD6CgrAwA \ No newline at end of file diff --git a/tests/testdata/snapshot-many-users/keyring-test/cbacc7da90e4c84e89cbf6da9fd195c0315b5f25.address b/tests/testdata/snapshot-many-users/keyring-test/cbacc7da90e4c84e89cbf6da9fd195c0315b5f25.address deleted file mode 100644 index 07ded6810..000000000 --- a/tests/testdata/snapshot-many-users/keyring-test/cbacc7da90e4c84e89cbf6da9fd195c0315b5f25.address +++ /dev/null @@ -1 +0,0 @@ -eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyNC0xMC0yMiAxNzowNDoxMi42NjYxNjYyMzUgKzAzMDAgTVNLIG09KzAuMTYzMTIzMTExIiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoicklrZU1NUmpYYjluTG9UZCJ9.VmBPnUldBDgdrKJHTy6XfyklgsOMpWfQDRvmX8gDiOqMkEShX9v2jg.V53kZbaofHmq5ZYf.EJjJqwM-78KNoYS9Gm5Bk21UuycBaF89YXoaPS9zENDdzP2itHBRwq3wPU_gQgSlmUZw3S9Czdg4Q8H61zmpQYjP7G2B9mNbn1gCJK9Gg_WXW9dt43VJiUafSPNbErepEW2Wgc9807J5NVSaAbbAhwHnRXvW-cyMmRHdEBetrxTe9Qi7RihFktKv2CBS19iuG8LXNwrhsfbF6sssrz2YUw0uQSc91I0GjPS838gKfcEPptxiaEc.R9w1nMGjNoEWvtgNXERagQ \ No newline at end of file diff --git a/tests/testdata/snapshot-many-users/keyring-test/charlie.info b/tests/testdata/snapshot-many-users/keyring-test/charlie.info index c4f67af93..13cf907ac 100644 --- a/tests/testdata/snapshot-many-users/keyring-test/charlie.info +++ b/tests/testdata/snapshot-many-users/keyring-test/charlie.info @@ -1 +1 @@ -eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyNC0xMC0yMiAxNzowNDoxMi42NjA1MDkzMDYgKzAzMDAgTVNLIG09KzAuMTU3NDY2MDgyIiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoielFKWUc5ZkFTSWJmUEdubiJ9.OgTmHuxD3Msy_pg56ir-XhanhnXRHi2uatDr_ESXFB-sLQ_GQqJDyQ.vqDQWSGSER80F-pv.rdVghKmoeUkV_5SbfgMBJP5iUa1mO89UVplXIBuP8UA1W8FwPctiDgEL2XaiLjEVzpE53plmkItOFtIV3DkvZ1fvRPlE2grWZeJiXJaG-psRnSJbJdZUSnQlT-68bHfkkd7oTEIz059EOXmfkMgptvJYO1BsUXLQvF-LxcmwnG3LuagiOXjqwLCnN3sQ_2jBV_ZaCZW7k80uUkj1dfgujR6yyJx-VOO1FvPoSIoPD329KllILvKBLu1AJp3HZNRXhC9vSj0PSMJglKJ97wS6eL35oOiaw-rBeVfVg1zl3JCX-eRHKLNV_b3pQ3uAQ7MHyL8obH9t-3N8ZO9V0XWAFyO1v-bz9TcztT9kbDs0gePH-2MBznfi28wx3HULYFEAp0sAqlOZ2osgNgsTbQFr1ngK_l_5HWeLo__JcgBotznd3ROlBskfHSWN9tShKS90KqkiWbt_BWte1-zgijueJBLzWTWN11Kpctc.-gX3iYPBaGs3sXM2-2XOhg \ No newline at end of file +eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyNC0xMi0yNCAxNDoxMToxNS4yNTc4NTU3NzUgKzAzMDAgTVNLIG09KzAuMTQ5MjAzNzE0IiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoicnhlX0w2NG1NQlpVYkRtcyJ9.DgYF_buVkdq7nIpKltbLG-BEYv119uGd1iy1P4a_3OeP7lx41JPjvQ.JhzN5S1VSMeKVa4f.93tmXJdPrAkt33DnMlCtCZBASqVqSWgrDnkz4QtaoXH5oh9w18QoECvt2aWRthSO2XDQsSNAAV-xsDer7YAc3QFrSYDr2P98_Rj-A5F4AD61ptdYuGxK4DpriDpOx-FSqsWxHRIedUTl0zhj39qOpcF7fcHiRmlEQ4AwADIuUxyAJIegxmtZ06-hqsQCZHDkFJRTbeFWCtkceBveyg15LLZIDh5ahZ8LWcHJwZzT2GcOHm48bC28Bnm6xeCQ_gjnrT8gWcQSqWO6OJgqK8K4_l2zoHlK0o_wacVtqnj1C3sOxzyBAhS_BiSPpk1MqcvVM9AGcWao6GW6Cd7vsjPKg8mxYnQ-ADMyHPvD9O3U2R6Q8Jza6B0OhNYhXBIzCWYieruF8UUfP80sbWfzeKy_XcTZZFMymS1-nA5thLcXQYhMwmSNC2aXdJUh7R5GwY_-nPi3lso1d_HMalIOQmd20k5D-1urCZttXEQ.x_3-7CVymvYY0-eUwv-vdw \ No newline at end of file diff --git a/tests/testdata/snapshot-many-users/keyring-test/dave.info b/tests/testdata/snapshot-many-users/keyring-test/dave.info index c5a1d8497..ebea9e1c0 100644 --- a/tests/testdata/snapshot-many-users/keyring-test/dave.info +++ b/tests/testdata/snapshot-many-users/keyring-test/dave.info @@ -1 +1 @@ -eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyNC0xMC0yMiAxNzowNDoxMi44NDEyMzE4MzEgKzAzMDAgTVNLIG09KzAuMTU3MzI0ODgzIiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoibHNycDhQNEZ1ekNvQi1tMyJ9.TQNW8T76njtFbgBLRoMNep4j-8QWkTSyntC_nwi9bF5wUCefAmxvQw.BdxcGw6Y1fZdD4kI.7lZSCUXtZceznoTyIxktLYEcPLa-2__a9DBeZSo6UMZUUe7sMov_AVF_o6kiRBCR-DRi4wfj1tSoEtOEWLkUrF2Sa3nlqPH88MrkAgt8Z9UNVOuI9d-66dWkCelSXvXzX23S9XlhvEDJG_dLP1eUl3rdcHbCr_c-2G45P0IQdwyvohWzI6ketocPjkiheVogb-Vebon50EqioawDmf0aiy26knAzE0JJzVwzbjbd2bUr2ptsy52dIxPZTjZxb5YlSNBAqyma075SrIMH0i-tbePAr2-Z6zyYWkGr8DPRNsQALHipcgzoSCYfjTQvJgZbDy4YGnf_eypx3OLs7ynnwoZkgrXns2kTIGAHpoG_m5o_j165Bfkgfcvs5pTtiJRST5Qo9T_Uo3g0wfvJALsvthY6FMCiQVd0Hvz1KrePrjj3impnmRBMnqYOpa1_wupjp911mi70NiMbiHp5FMfcWDN4gw.a228TrldRCjxrPPSIP_pSQ \ No newline at end of file +eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyNC0xMi0yNCAxNDoxMToxNS40MDA0NTMzMDQgKzAzMDAgTVNLIG09KzAuMTIzODQ0Nzc5IiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoiMGdQb2RRRk5YQWVpSFc1aiJ9.hxcfabepiC2jKuGzdd5yl_qVF3Vv6lU8N1y5Fs2kAP_MXf6E7iPewQ.wKO4-7xdq33Mn9AR.OvId3ZilPsq7sfjuGwHKxeVNozn4-8tQ1UmB62SBfbefqewD_9M19bg-g-9N5gzHJX73kRMtuHzuNRWIe7N7W5xaEr2Zn2CCo2iA9DB6QDPakIybN4d792_aL0MQr0Fmz7oyg2itzIcMlzGu-I1neaiF8_SedD_DVUXVtLhviZrr9aMHSl10UcjjrEXQwGRu5LbtbQIj7TRyrJtfWRWlesvrspnWldHM5jQZDpmKfU85GgWEf0ril3vxvGYze15O5cWNnBGDzDc_804dytledaUvd7Jw8CBK5HOaYqiMfH_NywM-3tGw9tZW6dkOeg7PL7O8L9QIdGrlZt40U4m04kx1Azim_myWtt6WuXRs2Zj-VhJ49vq-mobf31AJfPbaCeoNyaS8dLaNxmr8MeHTwcWL3ODiTeARQsZ6NOFQ6jK1qXCFwDMyJlw4YnAIHAnWyM5_za_CSQLaBVLsxLtVNbWFoA.ewHE5sugMYEZ_-3bqbrZQw \ No newline at end of file diff --git a/tests/testdata/snapshot-many-users/keyring-test/erin.info b/tests/testdata/snapshot-many-users/keyring-test/erin.info index 1429241a5..a5b93a207 100644 --- a/tests/testdata/snapshot-many-users/keyring-test/erin.info +++ b/tests/testdata/snapshot-many-users/keyring-test/erin.info @@ -1 +1 @@ -eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyNC0xMC0yMiAxNzowNDoxMi45OTg3MzY5NDYgKzAzMDAgTVNLIG09KzAuMTM3NTkzMzQxIiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoiUmxINS14WERLRjhBeEpYZSJ9.4D7Ssi0D7Aok0alq1cN_wKZfBGAibCktZ5PONEbehuQK7wmWY4IsxA.R3d5Rj9GVVz8wCzJ.NltwzjyTlO2pw1PuzpF7-YQVCsZ8r2qRTGoK2pEUR49SFVVf95YE5n4pAEBevQLGusJ9FOBvtHKL9-iYlBI3yF2My8yJZPsUGUw5pnsr4z47ycPOqgcuX05EideWCu0wGvYmDx1uC8vwSVA0BwMIMo1vy22CB6RV3b28qLLOBzI8VSOASEonYOu8Sq8_qr4YoS33nnlUhN5X0EgARl2Sa_wUq6fYZpS1Jk2HuvJErPsLmtPGJL_sLn04yGlK_-mP0fHLKpSizq_Y-ndmIsmidBILEFx1VJqXPIVmukdxfoLNQT-LkcNMikY83fhMZ4Xn_Jo6L_B_OxXtCwk7U18hZNcqWAjX3PSqqUGJngDnu7mslxKnA-M7bM5kE-gHKPfRAfUUFyGKJXm2Vde81RVwIWM_sCk-P3_XMWZbPCu9Fb13a_OUVeu2kH9m5pQYQ5EFOLVL0VmtX2mtzIUaAWkPxFycDg.1lKxsY5Cvu_U0FBb8FBMzg \ No newline at end of file +eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyNC0xMi0yNCAxNDoxMToxNS41Nzc4OTEzNDMgKzAzMDAgTVNLIG09KzAuMTU1NjIwOTk3IiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoiUmRrOU9wUkZucVRRR096RSJ9.o_mPZHPSSv1lZrq1CvbqnjBJFRyt7iG-5-Imfao026x4ufaHlN5xVQ.mbZXvH577sgO9ML0.ocEE3cbvHbR6r20iwPVzD5h3d7A-QrUZkO1VbM0NDOQVbii6uu1fEl3ws3W0HWZCF8HRLxGX_0a-HK-yybjpL1BjQikxUCPx_v5gS4WDRS-mmIuOZFhQUK_y8C56BpDYyIpjOcnTPjbCytYZYs3qlO3bOq6IE9cibaQmP5qiY_DcyNH7p7p5rdIOSVWTXN48TLzNlGvuiE2YxpE-cjijLBjpsZiZncqkrJfedD-hiIgW1riyjUKK2A6_VKKaxkqQZ--nwIO0mY2W6dMSRRuzM8zS0akfsCrxeIgnqmdtjR2yZI6857AautC_wvDCZPVD-PyEOQTUHh0AoOPBFypQ8fboVDeya86vmf28uivPG-5Jqw_HsLc9PawDuhE7qWMu8lLt2OobzYEecnx2W76oas1CsVKFgAt0kYN2Vxj9sNITrWrMhp6jt-66-xS9RdYKoMhrGi7YJhIS_9jSCnbVIkBWnQ.yLNAdxaO3_OzlFoeUoJMBA \ No newline at end of file diff --git a/tests/testdata/snapshot-many-users/keyring-test/f93edf435017c754770901758a6447b4220f9298.address b/tests/testdata/snapshot-many-users/keyring-test/f93edf435017c754770901758a6447b4220f9298.address new file mode 100644 index 000000000..d79aff516 --- /dev/null +++ b/tests/testdata/snapshot-many-users/keyring-test/f93edf435017c754770901758a6447b4220f9298.address @@ -0,0 +1 @@ +eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyNC0xMi0yNCAxNDoxMToxNS41ODI2ODM5MzEgKzAzMDAgTVNLIG09KzAuMTYwNDEzNDg1IiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoib3FieHFyLXpMTzdtVVBhOSJ9.c2AP7b-vxT-shcXUbZ8GI1MQGIAMQTsaxheCmWZLE2UNfBusZciDiA.m-4pUQOrvAKmMALe.fLk8QLJ11ZHVY1E9QDhCAXvxc76Zn2FREGMMZERmuN31Y5dhgi8m0BJH9yQNJvBD4RgDmaptrBnyDz5B7awa7MP-IxYHfcbgagQQlwm4dW9uIs7fIWgAlju6doMfWON6yFZFWu-TyE8g-NU8ll1dlUeC4YUfzHPGjQqv0CC0phX1My5tkbCC_PogjNV6pi0ZFeZsNneqcCjCqtPLSv6_-H2rGa0YD4Fslxojq7nU4jVY3g.SxBAQKHSz0nLOB16OcW9nQ \ No newline at end of file diff --git a/tests/testdata/snapshot-many-users/keyring-test/frank.info b/tests/testdata/snapshot-many-users/keyring-test/frank.info index 78d0f6a12..364a70f94 100644 --- a/tests/testdata/snapshot-many-users/keyring-test/frank.info +++ b/tests/testdata/snapshot-many-users/keyring-test/frank.info @@ -1 +1 @@ -eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyNC0xMC0yMiAxNzowNDoxMy4xNTMyNjgxMzggKzAzMDAgTVNLIG09KzAuMTM0Mjc5ODc1IiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoiVGZTTmdWX2RjR0JhNHZyYSJ9.ptMUTgbwNrxMDWmf0I5zhfieyW7aAcNVLO5mc1AgrA8n9zWNK0S_WQ._Sk3Div5Icdv8z2Q.sIcsNUko1Zc1sbO8BfH7LqfhAxVjHIjEmeVbHDkl-LKq2_bFDKmEsk-i_HAZIDDWL7m9BTxw8RgaxzZ4bsehbYHYRig6Eybexe4xgo6oA_Xjj89DKqRBS8X33Wmz0_XTg0duGvuG5qeov-yze93yLvuEzJsxd4o6ajuN850OCVNe8Je7IpkxCLHbD8r35X_dC28Q4HTFf--vtWn84F0SLrJ-lHhuFeTAd-bOuKQgBTQktwDckQQ4ZhZao_6C6A6uw9BnBJNiR78dDeezgT89Zi7IurE_pgAU4Q6aNipz0efb9MPtaWaUgKaNiebjMsYLp-NjWzMw6S-wIedErTHWQHUgEH2WL7xO7WRAV9dYR_tbZ8NTwJ9sat0bA3UdlXExVnABr1VlmNFhd0b78NpFScnzYXVXTFy-vvjoKCEzFwrviQdHFFKCEnjLLSVpjhAKuFDUhrzBMN9gCQdFKrou7LFbFmE.3dbGjtecST6IlYI-TetNAg \ No newline at end of file +eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyNC0xMi0yNCAxNDoxMToxNS43OTExODYzODkgKzAzMDAgTVNLIG09KzAuMTk0MDkyMjk3IiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoiWDV6aHdqcTV1bXpUa21xbCJ9.ENjcoX8IAM63jj9795uazo_QnFfcafJPRYt1Gz4NEl8DJ3Bj1D5UzA.ay8pAiiJTMptEEaX.LuAy4gdtODXRJFsWV83Po0VVmPi7MVP5oXnbwF70wVxCND4YhFD-lZyjng8Cxyb_yeuXCULilyml2LB5K8JUq7mlINnwe4I-tUBuKTYlsawnKCQWoFTKvBy5f887HZe16VgHE3tAsmARVocERPcB_ZXH5FKnQqFrRCS4kM0k8lkC4nuG88JaU_HMhzKfs7OxaFVRUb1wDCqguyx1LM0JjRfSnpDG_64VbsZAGEllnGJtTjNO2xzPqN58DAcZWKAoPnZMbi4VlzV9Y1ZNFagUMmO_2Smq-MP_qosyhZy2jI-taZqY9CYw3-s-IE3v6m8zCnxGLCwotcEwHZhqdLwHpImQ2zjgFPBp0gfoZfJ0oZ1yPQhBFkhKD12BHhQfZ0U6QUDmzy-4ij-YyxBZnZFSTlTkfE4LfpHDiQS0UcUc1efcpmlr9gpcF-DIOvenyvpG2782ZZYp5vPjJvlLKS88CgC8Uig.FWD2A5gmy89R0J39IPdIVA \ No newline at end of file diff --git a/warden/app/legacy.go b/warden/app/legacy.go index 1b728672a..f01b25e30 100644 --- a/warden/app/legacy.go +++ b/warden/app/legacy.go @@ -340,7 +340,12 @@ func (app *App) registerLegacyModules(appOpts servertypes.AppOptions, wasmOpts [ // NOTE: we are just adding the default Ethereum precompiles here. // Additional precompiles could be added if desired. precompiles := maps.Clone(vm.PrecompiledContractsBerlin) - wardenprecompiles, err := wardenprecompiles.NewWardenPrecompiles(app.WardenKeeper, app.ActKeeper, *app.OracleKeeper) + wardenprecompiles, err := wardenprecompiles.NewWardenPrecompiles( + app.WardenKeeper, + app.ActKeeper, + *app.OracleKeeper, + app.AsyncKeeper, + ) if err != nil { panic(err) } diff --git a/warden/x/async/keeper/query.go b/warden/x/async/keeper/query.go index fe0b0e570..742f9c4af 100644 --- a/warden/x/async/keeper/query.go +++ b/warden/x/async/keeper/query.go @@ -4,4 +4,10 @@ import ( types "github.com/warden-protocol/wardenprotocol/warden/x/async/types/v1beta1" ) +// NewQueryServerImpl returns an implementation of the MsgServer interface +// for the provided Keeper. +func NewQueryServerImpl(keeper Keeper) types.QueryServer { + return &keeper +} + var _ types.QueryServer = Keeper{}