From 02576cdc975e4d8897df0ecc0a8f0a0b0ccc40bf Mon Sep 17 00:00:00 2001 From: Abhijit Date: Thu, 25 Jun 2026 11:26:15 +0530 Subject: [PATCH] feat: expose governance authority address via precompile query --- contracts/solidity/precompiles/gov/IGov.sol | 10 +++ .../testutil/contracts/GovCaller.sol | 8 +++ precompiles/gov/IGov.sol | 10 +++ precompiles/gov/abi.json | 18 +++++ precompiles/gov/gov.go | 2 + precompiles/gov/query.go | 37 ++++++++++ precompiles/testutil/contracts/GovCaller.json | 29 ++++++-- precompiles/testutil/contracts/GovCaller.sol | 8 +++ .../precompiles/gov/test_integration.go | 71 +++++++++++++++++++ .../integration/precompiles/gov/test_query.go | 56 +++++++++++++++ 10 files changed, 245 insertions(+), 4 deletions(-) diff --git a/contracts/solidity/precompiles/gov/IGov.sol b/contracts/solidity/precompiles/gov/IGov.sol index 7fa92a8eaa..bb9c5aed66 100644 --- a/contracts/solidity/precompiles/gov/IGov.sol +++ b/contracts/solidity/precompiles/gov/IGov.sol @@ -274,5 +274,15 @@ interface IGov { /// @dev getConstitution returns the current constitution. /// @return constitution The current constitution function getConstitution() external view returns (string memory constitution); + + /// @dev getAuthority returns the governance module account address. + /// This address must be used as the `authority` field in parameter-change + /// and software-upgrade proposal messages. + /// @return authorityBech32 The governance module account address in Bech32 format + /// @return authorityHex The governance module account address as an EVM address + function getAuthority() + external + view + returns (string memory authorityBech32, address authorityHex); } diff --git a/contracts/solidity/precompiles/testutil/contracts/GovCaller.sol b/contracts/solidity/precompiles/testutil/contracts/GovCaller.sol index c12fa00e4b..1ae062a32f 100644 --- a/contracts/solidity/precompiles/testutil/contracts/GovCaller.sol +++ b/contracts/solidity/precompiles/testutil/contracts/GovCaller.sol @@ -130,6 +130,14 @@ contract GovCaller { return gov.GOV_CONTRACT.getParams(); } + function getAuthority() + external + view + returns (string memory authorityBech32, address authorityHex) + { + return gov.GOV_CONTRACT.getAuthority(); + } + function testDepositWithTransfer( uint64 _proposalId, types.Coin[] calldata _deposit, diff --git a/precompiles/gov/IGov.sol b/precompiles/gov/IGov.sol index 7fa92a8eaa..bb9c5aed66 100644 --- a/precompiles/gov/IGov.sol +++ b/precompiles/gov/IGov.sol @@ -274,5 +274,15 @@ interface IGov { /// @dev getConstitution returns the current constitution. /// @return constitution The current constitution function getConstitution() external view returns (string memory constitution); + + /// @dev getAuthority returns the governance module account address. + /// This address must be used as the `authority` field in parameter-change + /// and software-upgrade proposal messages. + /// @return authorityBech32 The governance module account address in Bech32 format + /// @return authorityHex The governance module account address as an EVM address + function getAuthority() + external + view + returns (string memory authorityBech32, address authorityHex); } diff --git a/precompiles/gov/abi.json b/precompiles/gov/abi.json index c318e6a2a1..22ec2aba50 100644 --- a/precompiles/gov/abi.json +++ b/precompiles/gov/abi.json @@ -1103,5 +1103,23 @@ ], "stateMutability": "nonpayable", "type": "function" + }, + { + "inputs": [], + "name": "getAuthority", + "outputs": [ + { + "internalType": "string", + "name": "authorityBech32", + "type": "string" + }, + { + "internalType": "address", + "name": "authorityHex", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" } ] diff --git a/precompiles/gov/gov.go b/precompiles/gov/gov.go index 24cd8fbf74..070a540b50 100644 --- a/precompiles/gov/gov.go +++ b/precompiles/gov/gov.go @@ -141,6 +141,8 @@ func (p Precompile) Execute(ctx sdk.Context, stateDB vm.StateDB, contract *vm.Co bz, err = p.GetParams(ctx, method, contract, args) case GetConstitutionMethod: bz, err = p.GetConstitution(ctx, method, contract, args) + case GetAuthorityMethod: + bz, err = p.GetAuthority(ctx, method, contract, args) default: return nil, fmt.Errorf(cmn.ErrUnknownMethod, method.Name) } diff --git a/precompiles/gov/query.go b/precompiles/gov/query.go index 0b389b9a07..c541e82c2a 100644 --- a/precompiles/gov/query.go +++ b/precompiles/gov/query.go @@ -1,10 +1,17 @@ package gov import ( + "fmt" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/vm" + cmn "github.com/cosmos/evm/precompiles/common" + sdk "github.com/cosmos/cosmos-sdk/types" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" ) const ( @@ -26,6 +33,8 @@ const ( GetParamsMethod = "getParams" // GetConstitutionMethod defines the method name for the get constitution precompile request. GetConstitutionMethod = "getConstitution" + // GetAuthorityMethod defines the method name for the get authority precompile request. + GetAuthorityMethod = "getAuthority" ) // GetVotes implements the query logic for getting votes for a proposal. @@ -233,3 +242,31 @@ func (p *Precompile) GetConstitution( return method.Outputs.Pack(res.Constitution) } + +// GetAuthority returns the governance module account address in both +// Bech32 and EVM hex formats. This address must be used as the `authority` +// field in parameter-change and software-upgrade proposal messages. +func (p *Precompile) GetAuthority( + ctx sdk.Context, + method *abi.Method, + _ *vm.Contract, + args []interface{}, +) ([]byte, error) { + if len(args) != 0 { + return nil, fmt.Errorf(cmn.ErrInvalidNumberOfArgs, 0, len(args)) + } + + // Derive the governance module account address. + moduleAddr := authtypes.NewModuleAddress(govtypes.ModuleName) + + // Convert to Bech32 string using the chain's account prefix. + authorityBech32, err := p.addrCdc.BytesToString(moduleAddr.Bytes()) + if err != nil { + return nil, fmt.Errorf("failed to encode authority address: %w", err) + } + + // Convert to EVM hex address. + authorityHex := common.BytesToAddress(moduleAddr.Bytes()) + + return method.Outputs.Pack(authorityBech32, authorityHex) +} diff --git a/precompiles/testutil/contracts/GovCaller.json b/precompiles/testutil/contracts/GovCaller.json index 159ac53eed..d8d576623e 100644 --- a/precompiles/testutil/contracts/GovCaller.json +++ b/precompiles/testutil/contracts/GovCaller.json @@ -23,6 +23,24 @@ "stateMutability": "payable", "type": "function" }, + { + "inputs": [], + "name": "getAuthority", + "outputs": [ + { + "internalType": "string", + "name": "authorityBech32", + "type": "string" + }, + { + "internalType": "address", + "name": "authorityHex", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "getParams", @@ -652,8 +670,11 @@ "type": "receive" } ], - "bytecode": "0x6080806040523461001657611db3908161001c8239f35b600080fdfe6080604052600436101561001b575b361561001957600080fd5b005b60003560e01c80630f6265fb14611276578063258691e21461112d57806326c11ffa14610ff65780635e615a6b14610b7557806361bc221a14610b5457806361f09ad214610ae757806372ff5ec4146109a35780637726ece0146108445780638e7431d3146107cb57806391d6d8e71461068d57806397fd84d214610601578063b94c9822146103d8578063bc7bdf7514610326578063d0e30db014610318578063e8702c34146102545763ed6c08f70361000e5760a03660031901126101f4576100e4611713565b6100ec611729565b604435916001600160401b038084116101f45761010f6020943690600401611944565b949061011961186f565b9461012261187e565b9561020d575b610147604051978893849363592581bb60e11b85523060048601611ad5565b038160006108055af1928315610201576000936101c1575b60209450610174575b50506040519015158152f35b60008080600f6101ba95829583549061018f8260070b611b02565b67ffffffffffffffff1990921691161783556001600160a01b03165af16101b4611b1a565b50611b4a565b3880610168565b92506020843d82116101f9575b816101db602093836117cf565b810103126101f4576101ee602094611aa5565b9261015f565b600080fd5b3d91506101ce565b6040513d6000823e3d90fd5b60005461021c8160070b611b02565b67ffffffffffffffff1990911690851617600090815561024f90808080600f6001600160a01b038b165af16101b4611b1a565b610128565b60603660031901126101f457610268611713565b6001600160401b036024358181116101f457610288903690600401611755565b9290604435918383116101f4576102c46102a86020943690600401611944565b90604051978895869563a8fdc91960e01b875260048701611a71565b038160006108055af1908115610201576020926000926102e9575b5060405191168152f35b61030a919250833d8111610311575b61030281836117cf565b81019061198b565b90836102df565b503d6102f8565b60003660031901126101f457005b60403660031901126101f45761033a61173f565b6024356001600160401b0381116101f45761035b6020913690600401611944565b9261037b604051948593849363592581bb60e11b85523060048601611ad5565b038160006108055af180156102015760009061039f575b6020906040519015158152f35b506020813d82116103d0575b816103b8602093836117cf565b810103126101f4576103cb602091611aa5565b610392565b3d91506103ab565b346101f45760603660031901126101f4576103f1611713565b6024356001600160401b0381116101f457610410903690600401611842565b6001600160401b03604435116101f4573660236044350112156101f457604435600401359061043e82611974565b9161044c60405193846117cf565b80835260208301903660248260051b6044350101116101f457602460443501915b60248260051b604435010183106105855750505060005460018160070b0190677fffffffffffffff1992677fffffffffffffff9584841287851317610533576020926001600160401b031980956001600160401b03169116176000556104e76040519687938493631758efa960e11b855260048501611d47565b038160006108015af192831561020157600093610549575b50600054916000198360070b0194851390851217610533576020936001600160401b03169116176000556040519015158152f35b634e487b7160e01b600052601160045260246000fd5b9092506020813d60201161057d575b81610565602093836117cf565b810103126101f45761057690611aa5565b91846104ff565b3d9150610558565b82356001600160401b0381116101f45760406044358201360360231901126101f457604051906105b482611782565b6001600160401b03602482604435010135116101f45760249260209283926044906105e93683358301808a0135018901611842565b8352813501013583820152815201930192905061046d565b6020806003193601126101f4576106358161061a61173f565b6040518093819263519f184360e11b83523060048401611ab2565b038160006108055af190811561020157600091610658575b506040519015158152f35b90508181813d8311610686575b61066f81836117cf565b810103126101f45761068090611aa5565b8261064d565b503d610665565b60803660031901126101f4576001600160401b036004358181116101f4576106b9903690600401611755565b90916024358181116101f4576106d56020913690600401611944565b93909461070e6106e3611860565b956106ec61186f565b96610791575b60405163a8fdc91960e01b815297889485943060048701611a71565b038160006108055af191821561020157602093600093610772575b50610738575b60405191168152f35b6000546107478160070b611b02565b8216906001600160401b0319161760005561076d6000808080600f335af16101b4611b1a565b61072f565b61078a919350843d81116103115761030281836117cf565b9184610729565b6000546107a08160070b611b02565b8716906001600160401b031916176000556107c66000808080600f335af16101b4611b1a565b6106f2565b60603660031901126101f4576107df611713565b6107e7611729565b604435906001600160401b03928383116101f45761037b61080e6020943690600401611944565b604051968795869563592581bb60e11b875260018060a01b031660048701521660248501526060604485015260648401916119cb565b60a03660031901126101f457610858611713565b6001600160401b036024358181116101f457610878903690600401611755565b9190926044358281116101f4576108956020913690600401611944565b9490956108ce6108a361186f565b966108ac61187e565b9761095c575b60405163a8fdc91960e01b815298899485943060048701611a71565b038160006108055af19283156102015760209460009461093d575b506108f8575060405191168152f35b6000808080600f6109379582546109118160070b611b02565b67ffffffffffffffff199091169089161783556001600160a01b03165af16101b4611b1a565b836102df565b610955919450853d81116103115761030281836117cf565b92856108e9565b60005461096b8160070b611b02565b67ffffffffffffffff1990911690881617600090815561099e90808080600f6001600160a01b038c165af16101b4611b1a565b6108b2565b60803660031901126101f4576109b761173f565b602435906001600160401b038083116101f4576109da6020933690600401611944565b93906109e4611860565b936109ed61186f565b94610aad575b610a12604051968793849363592581bb60e11b85523060048601611ad5565b038160006108055af191821561020157600092610a72575b60209350610a3d57506040519015158152f35b60005490610a4d8260070b611b02565b16906001600160401b031916176000556106806000808080600f335af16101b4611b1a565b91506020833d8211610aa5575b81610a8c602093836117cf565b810103126101f457610a9f602093611aa5565b91610a2a565b3d9150610a7f565b600054610abc8160070b611b02565b8516906001600160401b03191617600055610ae26000808080600f335af16101b4611b1a565b6109f3565b60403660031901126101f4576001600160401b036004358181116101f457610b13903690600401611755565b602492919235908282116101f4576102c493610b356020933690600401611944565b60405163a8fdc91960e01b815296879485949193913060048701611a71565b346101f45760003660031901126101f457602060005460070b604051908152f35b346101f45760003660031901126101f45760606101e0604051610b97816117b3565b600081528260208201526000604082015282808201528260808201528260a08201528260c08201528260e08201528261010082015260006101208201528261014082015282610160820152600061018082015260006101a082015260006101c08201520152604051635e615a6b60e01b81526000816004816108055afa801561020157600090610d7b575b610d779060405191829160208352805160070b60208401526080836101e0610d3e610d28610d03610ced610cd8610cc4610cb0610c9a8b60208101519a6060610c796102009d8e60408501526102208401906118d5565b92604081015160070b82840152015190601f199d8e828503019101526118b0565b8d60808d01519060a08d828503019101526118b0565b60a08b01518d82038b0160c08f01526118b0565b60c08a01518c82038a0160e08e01526118b0565b60e0890151888c8303016101008d01526118b0565b610100880151878b8303016101208c01526118b0565b61012087015160070b6101408a0152610140870151868a8303016101608b01526118b0565b61016086015185898303016101808a01526118d5565b9361018081015115156101a08801526101a081015115156101c08801526101c081015115158288015201519185840301908501526118b0565b0390f35b503d90816000823e610d8d82826117cf565b60208183810103126101f4578051916001600160401b0383116101f45761020083830182840103126101f45760405191610dc6836117b3565b610dd1848201611b95565b8352602084820101516001600160401b0381116101f457610df9908383019086840101611be5565b6020840152610e0c604085830101611b95565b6040840152606084820101516001600160401b0381116101f457610e37908383019086840101611ba3565b6060840152608084820101516001600160401b0381116101f457610e62908383019086840101611ba3565b608084015260a084820101516001600160401b0381116101f457610e8d908383019086840101611ba3565b60a084015260c084820101516001600160401b0381116101f457610eb8908383019086840101611ba3565b60c084015260e084820101516001600160401b0381116101f457610ee3908383019086840101611ba3565b60e084015261010084820101516001600160401b0381116101f457610f0f908383019086840101611ba3565b610100840152610f2461012085830101611b95565b61012084015261014084820101516001600160401b0381116101f457610f51908383019086840101611ba3565b61014084015261016084820101516001600160401b0381116101f457610f7e908383019086840101611be5565b610160840152610f9361018085830101611aa5565b610180840152610fa86101a085830101611aa5565b6101a0840152610fbd6101c085830101611aa5565b6101c08401526101e084820101516001600160401b0381116101f457610d7794610feb938301920101611ba3565b6101e0820152610c22565b60603660031901126101f45761100a61173f565b60243580151581036101f457602061104592611024611860565b926110ec575b6040518094819263519f184360e11b83523060048401611ab2565b038160006108055af1908115610201576000916110b1575b60209250611070575b6040519015158152f35b60005461107f8160070b611b02565b6001600160401b0316906001600160401b031916176000556110ac6000808080600f335af16101b4611b1a565b611066565b90506020823d82116110e4575b816110cb602093836117cf565b810103126101f4576110de602092611aa5565b9061105d565b3d91506110be565b6000546110fb8160070b611b02565b6001600160401b0316906001600160401b031916176000556111286000808080600f335af16101b4611b1a565b61102a565b60803660031901126101f457611181611144611713565b61114c611729565b906020611157611860565b9261116061186f565b9361122d575b6040518095819263519f184360e11b83523060048401611ab2565b038160006108055af1918215610201576000926111f2575b602093506111ac57506040519015158152f35b6000808080600f6106809582546111c58160070b611b02565b6001600160401b031667ffffffffffffffff19919091161783556001600160a01b03165af16101b4611b1a565b91506020833d8211611225575b8161120c602093836117cf565b810103126101f45761121f602093611aa5565b91611199565b3d91506111ff565b60005461123c8160070b611b02565b6001600160401b0316906001600160401b031916176000556112716000808080600f60018060a01b0389165af16101b4611b1a565b611166565b60803660031901126101f45761128a611713565b611292611729565b9060448035916001600160401b03928381116101f4576112b6903690600401611755565b93909160649485358381116101f4576112d3903690600401611842565b9160018060a01b0316926000546112ec8160070b611b02565b82166001600160401b03198092161760005560008080806001895af1611310611b1a565b50156116c65761133a97986040519063519f184360e11b8252818060209b8c933060048401611ab2565b038160006108055af16000918161168f575b5061142b5789898961135c611c98565b6308c379a0146113a7575b7f63616e63656c50726f706f73616c206661696c65642073696c656e746c790000906040519262461bcd60e51b84526004840152601e6024840152820152fd5b6113af611cb6565b806113ba5750611367565b826114066037604051809476031b0b731b2b6283937b837b9b0b6103330b4b632b21d1604d1b858301526113f68151809287868601910161188d565b81010360178101855201836117cf565b61142760405192839262461bcd60e51b8452600484015260248301906118b0565b0390fd5b1561164c5790879492959391600054916114478360070b611b02565b169116176000556040519261145b84611782565b6001845260005b85811061161c5750946114866114c1966040519261147f84611782565b369161180b565b815260028582015261149784611d24565b526114a183611d24565b506000604051809681958294635ca64c1160e11b84528660048501611d47565b03925af1600091816115e5575b5061159757506114dc611c98565b6308c379a014611532575b6084927f66756e64436f6d6d756e697479506f6f6c206661696c65642073696c656e746c607960f81b926040519462461bcd60e51b8652600486015260216024860152840152820152fd5b61153a611cb6565b8061154557506114e7565b82611406603a60405180947f66756e64436f6d6d756e697479506f6f6c206661696c65643a20000000000000858301526115878151809287868601910161188d565b810103601a8101855201836117cf565b156115a6575060405160018152f35b7f66756e64436f6d6d756e697479506f6f6c2072657475726e65642066616c7365906040519262461bcd60e51b84528060048501526024840152820152fd5b9091508381813d8311611615575b6115fd81836117cf565b810103126101f45761160e90611aa5565b90856114ce565b503d6115f3565b6040969395919294965161162f81611782565b606081526000838201528282890101520190879492959391611462565b60405162461bcd60e51b815260048101899052601d60248201527f63616e63656c50726f706f73616c2072657475726e65642066616c7365000000818901528990fd5b9091508981813d83116116bf575b6116a781836117cf565b810103126101f4576116b890611aa5565b908b61134c565b503d61169d565b60405162461bcd60e51b815260206004820152602160248201527f4661696c656420746f2073656e6420457468657220746f206465706f7369746f81890152603960f91b818a0152608490fd5b600435906001600160a01b03821682036101f457565b602435906001600160401b03821682036101f457565b600435906001600160401b03821682036101f457565b9181601f840112156101f4578235916001600160401b0383116101f457602083818601950101116101f457565b604081019081106001600160401b0382111761179d57604052565b634e487b7160e01b600052604160045260246000fd5b61020081019081106001600160401b0382111761179d57604052565b90601f801991011681019081106001600160401b0382111761179d57604052565b6001600160401b03811161179d57601f01601f191660200190565b929192611817826117f0565b9161182560405193846117cf565b8294818452818301116101f4578281602093846000960137010152565b9080601f830112156101f45781602061185d9335910161180b565b90565b6044359081151582036101f457565b6064359081151582036101f457565b6084359081151582036101f457565b60005b8381106118a05750506000910152565b8181015183820152602001611890565b906020916118c98151809281855285808601910161188d565b601f01601f1916010190565b908082519081815260208091019281808460051b8301019501936000915b8483106119035750505050505090565b9091929394958480600192601f19858203018652895190828061192e845160408086528501906118b0565b93015191015298019301930191949392906118f3565b9181601f840112156101f4578235916001600160401b0383116101f4576020808501948460051b0101116101f457565b6001600160401b03811161179d5760051b60200190565b908160209103126101f457516001600160401b03811681036101f45790565b908060209392818452848401376000828201840152601f01601f1916010190565b9080835260208093019081938160051b830194846000915b8483106119f4575050505050505090565b9091929394959681810387528735603e19843603018112156101f45783018035601e19823603018112156101f4578101908682359201906001600160401b0383116101f45782360382136101f4576001938880611a5c819695829660408087528601916119aa565b930135910152990197019594930191906119e3565b939161185d9593611a979260018060a01b031686526060602087015260608601916119aa565b9260408185039101526119cb565b519081151582036101f457565b6001600160a01b0390911681526001600160401b03909116602082015260400190565b6001600160401b0361185d959360609360018060a01b0316835216602082015281604082015201916119cb565b60070b677fffffffffffffff81146105335760010190565b3d15611b45573d90611b2b826117f0565b91611b3960405193846117cf565b82523d6000602084013e565b606090565b15611b5157565b606460405162461bcd60e51b815260206004820152602060248201527f4661696c656420746f2073656e6420457468657220746f2070726f706f7365726044820152fd5b51908160070b82036101f457565b81601f820112156101f4578051611bb9816117f0565b92611bc760405194856117cf565b818452602082840101116101f45761185d916020808501910161188d565b81601f820112156101f4578051611bfb81611974565b92604091611c0b835195866117cf565b808552602093848087019260051b820101938385116101f457858201925b858410611c3a575050505050505090565b8351906001600160401b03918281116101f45784019083601f1983890301126101f4578351611c6881611782565b898301519384116101f4578483611c858a8d809881980101611ba3565b8352015183820152815201930192611c29565b60009060033d11611ca557565b905060046000803e60005160e01c90565b600060443d1061185d57604051600319913d83016004833e81516001600160401b03918282113d602484011117611d1357818401948551938411611d1b573d85010160208487010111611d13575061185d929101602001906117cf565b949350505050565b50949350505050565b805115611d315760200190565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03909116815260606020820181905261185d939192611d6f918401906118b0565b9160408184039101526118d556fea2646970667358221220c9625558987b92b3d3d39d698b4548091cb23adaf68209787374d331e395f0ec64736f6c63430008140033", - "deployedBytecode": "0x6080604052600436101561001b575b361561001957600080fd5b005b60003560e01c80630f6265fb14611276578063258691e21461112d57806326c11ffa14610ff65780635e615a6b14610b7557806361bc221a14610b5457806361f09ad214610ae757806372ff5ec4146109a35780637726ece0146108445780638e7431d3146107cb57806391d6d8e71461068d57806397fd84d214610601578063b94c9822146103d8578063bc7bdf7514610326578063d0e30db014610318578063e8702c34146102545763ed6c08f70361000e5760a03660031901126101f4576100e4611713565b6100ec611729565b604435916001600160401b038084116101f45761010f6020943690600401611944565b949061011961186f565b9461012261187e565b9561020d575b610147604051978893849363592581bb60e11b85523060048601611ad5565b038160006108055af1928315610201576000936101c1575b60209450610174575b50506040519015158152f35b60008080600f6101ba95829583549061018f8260070b611b02565b67ffffffffffffffff1990921691161783556001600160a01b03165af16101b4611b1a565b50611b4a565b3880610168565b92506020843d82116101f9575b816101db602093836117cf565b810103126101f4576101ee602094611aa5565b9261015f565b600080fd5b3d91506101ce565b6040513d6000823e3d90fd5b60005461021c8160070b611b02565b67ffffffffffffffff1990911690851617600090815561024f90808080600f6001600160a01b038b165af16101b4611b1a565b610128565b60603660031901126101f457610268611713565b6001600160401b036024358181116101f457610288903690600401611755565b9290604435918383116101f4576102c46102a86020943690600401611944565b90604051978895869563a8fdc91960e01b875260048701611a71565b038160006108055af1908115610201576020926000926102e9575b5060405191168152f35b61030a919250833d8111610311575b61030281836117cf565b81019061198b565b90836102df565b503d6102f8565b60003660031901126101f457005b60403660031901126101f45761033a61173f565b6024356001600160401b0381116101f45761035b6020913690600401611944565b9261037b604051948593849363592581bb60e11b85523060048601611ad5565b038160006108055af180156102015760009061039f575b6020906040519015158152f35b506020813d82116103d0575b816103b8602093836117cf565b810103126101f4576103cb602091611aa5565b610392565b3d91506103ab565b346101f45760603660031901126101f4576103f1611713565b6024356001600160401b0381116101f457610410903690600401611842565b6001600160401b03604435116101f4573660236044350112156101f457604435600401359061043e82611974565b9161044c60405193846117cf565b80835260208301903660248260051b6044350101116101f457602460443501915b60248260051b604435010183106105855750505060005460018160070b0190677fffffffffffffff1992677fffffffffffffff9584841287851317610533576020926001600160401b031980956001600160401b03169116176000556104e76040519687938493631758efa960e11b855260048501611d47565b038160006108015af192831561020157600093610549575b50600054916000198360070b0194851390851217610533576020936001600160401b03169116176000556040519015158152f35b634e487b7160e01b600052601160045260246000fd5b9092506020813d60201161057d575b81610565602093836117cf565b810103126101f45761057690611aa5565b91846104ff565b3d9150610558565b82356001600160401b0381116101f45760406044358201360360231901126101f457604051906105b482611782565b6001600160401b03602482604435010135116101f45760249260209283926044906105e93683358301808a0135018901611842565b8352813501013583820152815201930192905061046d565b6020806003193601126101f4576106358161061a61173f565b6040518093819263519f184360e11b83523060048401611ab2565b038160006108055af190811561020157600091610658575b506040519015158152f35b90508181813d8311610686575b61066f81836117cf565b810103126101f45761068090611aa5565b8261064d565b503d610665565b60803660031901126101f4576001600160401b036004358181116101f4576106b9903690600401611755565b90916024358181116101f4576106d56020913690600401611944565b93909461070e6106e3611860565b956106ec61186f565b96610791575b60405163a8fdc91960e01b815297889485943060048701611a71565b038160006108055af191821561020157602093600093610772575b50610738575b60405191168152f35b6000546107478160070b611b02565b8216906001600160401b0319161760005561076d6000808080600f335af16101b4611b1a565b61072f565b61078a919350843d81116103115761030281836117cf565b9184610729565b6000546107a08160070b611b02565b8716906001600160401b031916176000556107c66000808080600f335af16101b4611b1a565b6106f2565b60603660031901126101f4576107df611713565b6107e7611729565b604435906001600160401b03928383116101f45761037b61080e6020943690600401611944565b604051968795869563592581bb60e11b875260018060a01b031660048701521660248501526060604485015260648401916119cb565b60a03660031901126101f457610858611713565b6001600160401b036024358181116101f457610878903690600401611755565b9190926044358281116101f4576108956020913690600401611944565b9490956108ce6108a361186f565b966108ac61187e565b9761095c575b60405163a8fdc91960e01b815298899485943060048701611a71565b038160006108055af19283156102015760209460009461093d575b506108f8575060405191168152f35b6000808080600f6109379582546109118160070b611b02565b67ffffffffffffffff199091169089161783556001600160a01b03165af16101b4611b1a565b836102df565b610955919450853d81116103115761030281836117cf565b92856108e9565b60005461096b8160070b611b02565b67ffffffffffffffff1990911690881617600090815561099e90808080600f6001600160a01b038c165af16101b4611b1a565b6108b2565b60803660031901126101f4576109b761173f565b602435906001600160401b038083116101f4576109da6020933690600401611944565b93906109e4611860565b936109ed61186f565b94610aad575b610a12604051968793849363592581bb60e11b85523060048601611ad5565b038160006108055af191821561020157600092610a72575b60209350610a3d57506040519015158152f35b60005490610a4d8260070b611b02565b16906001600160401b031916176000556106806000808080600f335af16101b4611b1a565b91506020833d8211610aa5575b81610a8c602093836117cf565b810103126101f457610a9f602093611aa5565b91610a2a565b3d9150610a7f565b600054610abc8160070b611b02565b8516906001600160401b03191617600055610ae26000808080600f335af16101b4611b1a565b6109f3565b60403660031901126101f4576001600160401b036004358181116101f457610b13903690600401611755565b602492919235908282116101f4576102c493610b356020933690600401611944565b60405163a8fdc91960e01b815296879485949193913060048701611a71565b346101f45760003660031901126101f457602060005460070b604051908152f35b346101f45760003660031901126101f45760606101e0604051610b97816117b3565b600081528260208201526000604082015282808201528260808201528260a08201528260c08201528260e08201528261010082015260006101208201528261014082015282610160820152600061018082015260006101a082015260006101c08201520152604051635e615a6b60e01b81526000816004816108055afa801561020157600090610d7b575b610d779060405191829160208352805160070b60208401526080836101e0610d3e610d28610d03610ced610cd8610cc4610cb0610c9a8b60208101519a6060610c796102009d8e60408501526102208401906118d5565b92604081015160070b82840152015190601f199d8e828503019101526118b0565b8d60808d01519060a08d828503019101526118b0565b60a08b01518d82038b0160c08f01526118b0565b60c08a01518c82038a0160e08e01526118b0565b60e0890151888c8303016101008d01526118b0565b610100880151878b8303016101208c01526118b0565b61012087015160070b6101408a0152610140870151868a8303016101608b01526118b0565b61016086015185898303016101808a01526118d5565b9361018081015115156101a08801526101a081015115156101c08801526101c081015115158288015201519185840301908501526118b0565b0390f35b503d90816000823e610d8d82826117cf565b60208183810103126101f4578051916001600160401b0383116101f45761020083830182840103126101f45760405191610dc6836117b3565b610dd1848201611b95565b8352602084820101516001600160401b0381116101f457610df9908383019086840101611be5565b6020840152610e0c604085830101611b95565b6040840152606084820101516001600160401b0381116101f457610e37908383019086840101611ba3565b6060840152608084820101516001600160401b0381116101f457610e62908383019086840101611ba3565b608084015260a084820101516001600160401b0381116101f457610e8d908383019086840101611ba3565b60a084015260c084820101516001600160401b0381116101f457610eb8908383019086840101611ba3565b60c084015260e084820101516001600160401b0381116101f457610ee3908383019086840101611ba3565b60e084015261010084820101516001600160401b0381116101f457610f0f908383019086840101611ba3565b610100840152610f2461012085830101611b95565b61012084015261014084820101516001600160401b0381116101f457610f51908383019086840101611ba3565b61014084015261016084820101516001600160401b0381116101f457610f7e908383019086840101611be5565b610160840152610f9361018085830101611aa5565b610180840152610fa86101a085830101611aa5565b6101a0840152610fbd6101c085830101611aa5565b6101c08401526101e084820101516001600160401b0381116101f457610d7794610feb938301920101611ba3565b6101e0820152610c22565b60603660031901126101f45761100a61173f565b60243580151581036101f457602061104592611024611860565b926110ec575b6040518094819263519f184360e11b83523060048401611ab2565b038160006108055af1908115610201576000916110b1575b60209250611070575b6040519015158152f35b60005461107f8160070b611b02565b6001600160401b0316906001600160401b031916176000556110ac6000808080600f335af16101b4611b1a565b611066565b90506020823d82116110e4575b816110cb602093836117cf565b810103126101f4576110de602092611aa5565b9061105d565b3d91506110be565b6000546110fb8160070b611b02565b6001600160401b0316906001600160401b031916176000556111286000808080600f335af16101b4611b1a565b61102a565b60803660031901126101f457611181611144611713565b61114c611729565b906020611157611860565b9261116061186f565b9361122d575b6040518095819263519f184360e11b83523060048401611ab2565b038160006108055af1918215610201576000926111f2575b602093506111ac57506040519015158152f35b6000808080600f6106809582546111c58160070b611b02565b6001600160401b031667ffffffffffffffff19919091161783556001600160a01b03165af16101b4611b1a565b91506020833d8211611225575b8161120c602093836117cf565b810103126101f45761121f602093611aa5565b91611199565b3d91506111ff565b60005461123c8160070b611b02565b6001600160401b0316906001600160401b031916176000556112716000808080600f60018060a01b0389165af16101b4611b1a565b611166565b60803660031901126101f45761128a611713565b611292611729565b9060448035916001600160401b03928381116101f4576112b6903690600401611755565b93909160649485358381116101f4576112d3903690600401611842565b9160018060a01b0316926000546112ec8160070b611b02565b82166001600160401b03198092161760005560008080806001895af1611310611b1a565b50156116c65761133a97986040519063519f184360e11b8252818060209b8c933060048401611ab2565b038160006108055af16000918161168f575b5061142b5789898961135c611c98565b6308c379a0146113a7575b7f63616e63656c50726f706f73616c206661696c65642073696c656e746c790000906040519262461bcd60e51b84526004840152601e6024840152820152fd5b6113af611cb6565b806113ba5750611367565b826114066037604051809476031b0b731b2b6283937b837b9b0b6103330b4b632b21d1604d1b858301526113f68151809287868601910161188d565b81010360178101855201836117cf565b61142760405192839262461bcd60e51b8452600484015260248301906118b0565b0390fd5b1561164c5790879492959391600054916114478360070b611b02565b169116176000556040519261145b84611782565b6001845260005b85811061161c5750946114866114c1966040519261147f84611782565b369161180b565b815260028582015261149784611d24565b526114a183611d24565b506000604051809681958294635ca64c1160e11b84528660048501611d47565b03925af1600091816115e5575b5061159757506114dc611c98565b6308c379a014611532575b6084927f66756e64436f6d6d756e697479506f6f6c206661696c65642073696c656e746c607960f81b926040519462461bcd60e51b8652600486015260216024860152840152820152fd5b61153a611cb6565b8061154557506114e7565b82611406603a60405180947f66756e64436f6d6d756e697479506f6f6c206661696c65643a20000000000000858301526115878151809287868601910161188d565b810103601a8101855201836117cf565b156115a6575060405160018152f35b7f66756e64436f6d6d756e697479506f6f6c2072657475726e65642066616c7365906040519262461bcd60e51b84528060048501526024840152820152fd5b9091508381813d8311611615575b6115fd81836117cf565b810103126101f45761160e90611aa5565b90856114ce565b503d6115f3565b6040969395919294965161162f81611782565b606081526000838201528282890101520190879492959391611462565b60405162461bcd60e51b815260048101899052601d60248201527f63616e63656c50726f706f73616c2072657475726e65642066616c7365000000818901528990fd5b9091508981813d83116116bf575b6116a781836117cf565b810103126101f4576116b890611aa5565b908b61134c565b503d61169d565b60405162461bcd60e51b815260206004820152602160248201527f4661696c656420746f2073656e6420457468657220746f206465706f7369746f81890152603960f91b818a0152608490fd5b600435906001600160a01b03821682036101f457565b602435906001600160401b03821682036101f457565b600435906001600160401b03821682036101f457565b9181601f840112156101f4578235916001600160401b0383116101f457602083818601950101116101f457565b604081019081106001600160401b0382111761179d57604052565b634e487b7160e01b600052604160045260246000fd5b61020081019081106001600160401b0382111761179d57604052565b90601f801991011681019081106001600160401b0382111761179d57604052565b6001600160401b03811161179d57601f01601f191660200190565b929192611817826117f0565b9161182560405193846117cf565b8294818452818301116101f4578281602093846000960137010152565b9080601f830112156101f45781602061185d9335910161180b565b90565b6044359081151582036101f457565b6064359081151582036101f457565b6084359081151582036101f457565b60005b8381106118a05750506000910152565b8181015183820152602001611890565b906020916118c98151809281855285808601910161188d565b601f01601f1916010190565b908082519081815260208091019281808460051b8301019501936000915b8483106119035750505050505090565b9091929394958480600192601f19858203018652895190828061192e845160408086528501906118b0565b93015191015298019301930191949392906118f3565b9181601f840112156101f4578235916001600160401b0383116101f4576020808501948460051b0101116101f457565b6001600160401b03811161179d5760051b60200190565b908160209103126101f457516001600160401b03811681036101f45790565b908060209392818452848401376000828201840152601f01601f1916010190565b9080835260208093019081938160051b830194846000915b8483106119f4575050505050505090565b9091929394959681810387528735603e19843603018112156101f45783018035601e19823603018112156101f4578101908682359201906001600160401b0383116101f45782360382136101f4576001938880611a5c819695829660408087528601916119aa565b930135910152990197019594930191906119e3565b939161185d9593611a979260018060a01b031686526060602087015260608601916119aa565b9260408185039101526119cb565b519081151582036101f457565b6001600160a01b0390911681526001600160401b03909116602082015260400190565b6001600160401b0361185d959360609360018060a01b0316835216602082015281604082015201916119cb565b60070b677fffffffffffffff81146105335760010190565b3d15611b45573d90611b2b826117f0565b91611b3960405193846117cf565b82523d6000602084013e565b606090565b15611b5157565b606460405162461bcd60e51b815260206004820152602060248201527f4661696c656420746f2073656e6420457468657220746f2070726f706f7365726044820152fd5b51908160070b82036101f457565b81601f820112156101f4578051611bb9816117f0565b92611bc760405194856117cf565b818452602082840101116101f45761185d916020808501910161188d565b81601f820112156101f4578051611bfb81611974565b92604091611c0b835195866117cf565b808552602093848087019260051b820101938385116101f457858201925b858410611c3a575050505050505090565b8351906001600160401b03918281116101f45784019083601f1983890301126101f4578351611c6881611782565b898301519384116101f4578483611c858a8d809881980101611ba3565b8352015183820152815201930192611c29565b60009060033d11611ca557565b905060046000803e60005160e01c90565b600060443d1061185d57604051600319913d83016004833e81516001600160401b03918282113d602484011117611d1357818401948551938411611d1b573d85010160208487010111611d13575061185d929101602001906117cf565b949350505050565b50949350505050565b805115611d315760200190565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03909116815260606020820181905261185d939192611d6f918401906118b0565b9160408184039101526118d556fea2646970667358221220c9625558987b92b3d3d39d698b4548091cb23adaf68209787374d331e395f0ec64736f6c63430008140033", + "bytecode": "0x6080806040523461001657611e18908161001b8239f35b5f80fdfe6080604052600436101561001a575b3615610018575f80fd5b005b5f3560e01c80630f6265fb146112f4578063258691e2146111b157806326c11ffa146110825780635e615a6b14610c0b57806361bc221a14610bec57806361f09ad214610b7f57806372ff5ec414610a435780637726ece0146108e95780638e7431d31461087057806391d6d8e71461073a57806397fd84d2146106b0578063b94c982214610490578063bc7bdf75146103e0578063d0e30db0146103d3578063e2b178a014610318578063e8702c34146102565763ed6c08f70361000e5760a03660031901126101fa576100ed611786565b6100f561179c565b604435916001600160401b038084116101fa5761011860209436906004016119ab565b94906101226118df565b9461012b6118ee565b95610211575b610150604051978893849363592581bb60e11b85523060048601611b41565b03815f6108055af1928315610206575f936101c7575b6020945061017b575b50506040519015158152f35b5f8080600f6101c09582958354906101958260070b611b6e565b67ffffffffffffffff1990921691161783556001600160a01b03165af16101ba611b86565b50611bb5565b5f8061016f565b92506020843d82116101fe575b816101e160209383611840565b810103126101fa576101f4602094611b11565b92610166565b5f80fd5b3d91506101d4565b6040513d5f823e3d90fd5b5f5461021f8160070b611b6e565b67ffffffffffffffff19909116908516175f90815561025190808080600f6001600160a01b038b165af16101ba611b86565b610131565b60603660031901126101fa5761026a611786565b6001600160401b036024358181116101fa5761028a9036906004016117c8565b9290604435918383116101fa576102c66102aa60209436906004016119ab565b90604051978895869563a8fdc91960e01b875260048701611add565b03815f6108055af1908115610206576020925f926102e9575b5060405191168152f35b61030a919250833d8111610311575b6103028183611840565b8101906119f2565b90836102df565b503d6102f8565b346101fa575f3660031901126101fa576040516307158bc560e51b81525f816004816108055afa8015610206575f905f9061037b575b610367925060405192839260408452604084019061191e565b6001600160a01b0390911660208301520390f35b50503d805f833e61038c8183611840565b81016040828203126101fa5781516001600160401b0381116101fa576020916103b6918401611c0e565b9101516001600160a01b03811681036101fa57610367919061034e565b5f3660031901126101fa57005b60403660031901126101fa576103f46117b2565b6024356001600160401b0381116101fa5761041560209136906004016119ab565b92610435604051948593849363592581bb60e11b85523060048601611b41565b03815f6108055af18015610206575f90610457575b6020906040519015158152f35b506020813d8211610488575b8161047060209383611840565b810103126101fa57610483602091611b11565b61044a565b3d9150610463565b346101fa5760603660031901126101fa576104a9611786565b6024356001600160401b0381116101fa576104c89036906004016118b2565b6001600160401b03604435116101fa573660236044350112156101fa5760443560040135906104f6826119db565b916105046040519384611840565b80835260208301903660248260051b6044350101116101fa57602460443501915b60248260051b60443501018310610634575050505f5460018160070b0190677fffffffffffffff1992677fffffffffffffff95848412878513176105e4576020926001600160401b031980956001600160401b03169116175f5561059d6040519687938493631758efa960e11b855260048501611dac565b03815f6108015af1928315610206575f936105f8575b505f54915f198360070b01948513908512176105e4576020936001600160401b03169116175f556040519015158152f35b634e487b7160e01b5f52601160045260245ffd5b9092506020813d60201161062c575b8161061460209383611840565b810103126101fa5761062590611b11565b91846105b3565b3d9150610607565b82356001600160401b0381116101fa5760406044358201360360231901126101fa5760405190610663826117f5565b6001600160401b03602482604435010135116101fa5760249260209283926044906106983683358301808a01350189016118b2565b83528135010135838201528152019301929050610525565b6020806003193601126101fa576106e4816106c96117b2565b6040518093819263519f184360e11b83523060048401611b1e565b03815f6108055af1908115610206575f91610705575b506040519015158152f35b90508181813d8311610733575b61071c8183611840565b810103126101fa5761072d90611b11565b826106fa565b503d610712565b60803660031901126101fa576001600160401b036004358181116101fa576107669036906004016117c8565b90916024358181116101fa5761078260209136906004016119ab565b9390946107bb6107906118d0565b956107996118df565b96610839575b60405163a8fdc91960e01b815297889485943060048701611add565b03815f6108055af1918215610206576020935f9361081a575b506107e3575b60405191168152f35b5f546107f18160070b611b6e565b8216906001600160401b031916175f556108155f808080600f335af16101ba611b86565b6107da565b610832919350843d8111610311576103028183611840565b91846107d4565b5f546108478160070b611b6e565b8716906001600160401b031916175f5561086b5f808080600f335af16101ba611b86565b61079f565b60603660031901126101fa57610884611786565b61088c61179c565b604435906001600160401b03928383116101fa576104356108b360209436906004016119ab565b604051968795869563592581bb60e11b875260018060a01b03166004870152166024850152606060448501526064840191611a31565b60a03660031901126101fa576108fd611786565b6001600160401b036024358181116101fa5761091d9036906004016117c8565b9190926044358281116101fa5761093a60209136906004016119ab565b9490956109736109486118df565b966109516118ee565b976109fe575b60405163a8fdc91960e01b815298899485943060048701611add565b03815f6108055af1928315610206576020945f946109df575b5061099b575060405191168152f35b5f808080600f6109d99582546109b38160070b611b6e565b67ffffffffffffffff199091169089161783556001600160a01b03165af16101ba611b86565b836102df565b6109f7919450853d8111610311576103028183611840565b928561098c565b5f54610a0c8160070b611b6e565b67ffffffffffffffff19909116908816175f908155610a3e90808080600f6001600160a01b038c165af16101ba611b86565b610957565b60803660031901126101fa57610a576117b2565b602435906001600160401b038083116101fa57610a7a60209336906004016119ab565b9390610a846118d0565b93610a8d6118df565b94610b48575b610ab2604051968793849363592581bb60e11b85523060048601611b41565b03815f6108055af1918215610206575f92610b0d575b60209350610adb57506040519015158152f35b5f5490610aea8260070b611b6e565b16906001600160401b031916175f5561072d5f808080600f335af16101ba611b86565b91506020833d8211610b40575b81610b2760209383611840565b810103126101fa57610b3a602093611b11565b91610ac8565b3d9150610b1a565b5f54610b568160070b611b6e565b8516906001600160401b031916175f55610b7a5f808080600f335af16101ba611b86565b610a93565b60403660031901126101fa576001600160401b036004358181116101fa57610bab9036906004016117c8565b602492919235908282116101fa576102c693610bcd60209336906004016119ab565b60405163a8fdc91960e01b815296879485949193913060048701611add565b346101fa575f3660031901126101fa5760205f5460070b604051908152f35b346101fa575f3660031901126101fa5760606101e0604051610c2c81611824565b5f81528260208201525f604082015282808201528260808201528260a08201528260c08201528260e0820152826101008201525f61012082015282610140820152826101608201525f6101808201525f6101a08201525f6101c08201520152604051635e615a6b60e01b81525f816004816108055afa8015610206575f90610e08575b610e049060405191829160208352805160070b60208401526080836101e0610dcb610db5610d90610d7a610d65610d51610d3d610d278b60208101519a6060610d066102009d8e6040850152610220840190611943565b92604081015160070b82840152015190601f199d8e8285030191015261191e565b8d60808d01519060a08d8285030191015261191e565b60a08b01518d82038b0160c08f015261191e565b60c08a01518c82038a0160e08e015261191e565b60e0890151888c8303016101008d015261191e565b610100880151878b8303016101208c015261191e565b61012087015160070b6101408a0152610140870151868a8303016101608b015261191e565b61016086015185898303016101808a0152611943565b9361018081015115156101a08801526101a081015115156101c08801526101c0810151151582880152015191858403019085015261191e565b0390f35b503d90815f823e610e198282611840565b60208183810103126101fa578051916001600160401b0383116101fa5761020083830182840103126101fa5760405191610e5283611824565b610e5d848201611c00565b8352602084820101516001600160401b0381116101fa57610e85908383019086840101611c50565b6020840152610e98604085830101611c00565b6040840152606084820101516001600160401b0381116101fa57610ec3908383019086840101611c0e565b6060840152608084820101516001600160401b0381116101fa57610eee908383019086840101611c0e565b608084015260a084820101516001600160401b0381116101fa57610f19908383019086840101611c0e565b60a084015260c084820101516001600160401b0381116101fa57610f44908383019086840101611c0e565b60c084015260e084820101516001600160401b0381116101fa57610f6f908383019086840101611c0e565b60e084015261010084820101516001600160401b0381116101fa57610f9b908383019086840101611c0e565b610100840152610fb061012085830101611c00565b61012084015261014084820101516001600160401b0381116101fa57610fdd908383019086840101611c0e565b61014084015261016084820101516001600160401b0381116101fa5761100a908383019086840101611c50565b61016084015261101f61018085830101611b11565b6101808401526110346101a085830101611b11565b6101a08401526110496101c085830101611b11565b6101c08401526101e084820101516001600160401b0381116101fa57610e0494611077938301920101611c0e565b6101e0820152610caf565b60603660031901126101fa576110966117b2565b60243580151581036101fa5760206110d1926110b06118d0565b92611173575b6040518094819263519f184360e11b83523060048401611b1e565b03815f6108055af1908115610206575f91611138575b602092506110fa575b6040519015158152f35b5f546111088160070b611b6e565b6001600160401b0316906001600160401b031916175f556111335f808080600f335af16101ba611b86565b6110f0565b90506020823d821161116b575b8161115260209383611840565b810103126101fa57611165602092611b11565b906110e7565b3d9150611145565b5f546111818160070b611b6e565b6001600160401b0316906001600160401b031916175f556111ac5f808080600f335af16101ba611b86565b6110b6565b60803660031901126101fa576112056111c8611786565b6111d061179c565b9060206111db6118d0565b926111e46118df565b936112ae575b6040518095819263519f184360e11b83523060048401611b1e565b03815f6108055af1918215610206575f92611273575b6020935061122e57506040519015158152f35b5f808080600f61072d9582546112468160070b611b6e565b6001600160401b031667ffffffffffffffff19919091161783556001600160a01b03165af16101ba611b86565b91506020833d82116112a6575b8161128d60209383611840565b810103126101fa576112a0602093611b11565b9161121b565b3d9150611280565b5f546112bc8160070b611b6e565b6001600160401b0316906001600160401b031916175f556112ef5f808080600f60018060a01b0389165af16101ba611b86565b6111ea565b60803660031901126101fa57611308611786565b61131061179c565b9060448035916001600160401b03928381116101fa576113349036906004016117c8565b93909160649485358381116101fa576113519036906004016118b2565b9160018060a01b0316925f546113698160070b611b6e565b82166001600160401b0319809216175f555f8080806001895af161138b611b86565b5015611739576113b597986040519063519f184360e11b8252818060209b8c933060048401611b1e565b03815f6108055af15f9181611702575b506114a4578989896113d5611d03565b6308c379a014611420575b7f63616e63656c50726f706f73616c206661696c65642073696c656e746c790000906040519262461bcd60e51b84526004840152601e6024840152820152fd5b611428611d1e565b8061143357506113e0565b8261147f6037604051809476031b0b731b2b6283937b837b9b0b6103330b4b632b21d1604d1b8583015261146f815180928786860191016118fd565b8101036017810185520183611840565b6114a060405192839262461bcd60e51b84526004840152602483019061191e565b0390fd5b156116bf57908794929593915f54916114bf8360070b611b6e565b169116175f55604051926114d2846117f5565b600184525f5b8581106116905750946114fc61153696604051926114f5846117f5565b369161187c565b815260028582015261150d84611d8b565b5261151783611d8b565b505f604051809681958294635ca64c1160e11b84528660048501611dac565b03925af15f9181611659575b5061160b5750611550611d03565b6308c379a0146115a6575b6084927f66756e64436f6d6d756e697479506f6f6c206661696c65642073696c656e746c607960f81b926040519462461bcd60e51b8652600486015260216024860152840152820152fd5b6115ae611d1e565b806115b9575061155b565b8261147f603a60405180947f66756e64436f6d6d756e697479506f6f6c206661696c65643a20000000000000858301526115fb815180928786860191016118fd565b810103601a810185520183611840565b1561161a575060405160018152f35b7f66756e64436f6d6d756e697479506f6f6c2072657475726e65642066616c7365906040519262461bcd60e51b84528060048501526024840152820152fd5b9091508381813d8311611689575b6116718183611840565b810103126101fa5761168290611b11565b9085611542565b503d611667565b604096939591929496516116a3816117f5565b606081525f8382015282828901015201908794929593916114d8565b60405162461bcd60e51b815260048101899052601d60248201527f63616e63656c50726f706f73616c2072657475726e65642066616c7365000000818901528990fd5b9091508981813d8311611732575b61171a8183611840565b810103126101fa5761172b90611b11565b908b6113c5565b503d611710565b60405162461bcd60e51b815260206004820152602160248201527f4661696c656420746f2073656e6420457468657220746f206465706f7369746f81890152603960f91b818a0152608490fd5b600435906001600160a01b03821682036101fa57565b602435906001600160401b03821682036101fa57565b600435906001600160401b03821682036101fa57565b9181601f840112156101fa578235916001600160401b0383116101fa57602083818601950101116101fa57565b604081019081106001600160401b0382111761181057604052565b634e487b7160e01b5f52604160045260245ffd5b61020081019081106001600160401b0382111761181057604052565b90601f801991011681019081106001600160401b0382111761181057604052565b6001600160401b03811161181057601f01601f191660200190565b92919261188882611861565b916118966040519384611840565b8294818452818301116101fa578281602093845f960137010152565b9080601f830112156101fa578160206118cd9335910161187c565b90565b6044359081151582036101fa57565b6064359081151582036101fa57565b6084359081151582036101fa57565b5f5b83811061190e5750505f910152565b81810151838201526020016118ff565b90602091611937815180928185528580860191016118fd565b601f01601f1916010190565b80518083526020600582901b8401810193928101925f908201805b84831061196e5750505050505090565b9091929394958480828460019403865289519082806119958451604080865285019061191e565b930151910152980193019301919493929061195e565b9181601f840112156101fa578235916001600160401b0383116101fa576020808501948460051b0101116101fa57565b6001600160401b0381116118105760051b60200190565b908160209103126101fa57516001600160401b03811681036101fa5790565b908060209392818452848401375f828201840152601f01601f1916010190565b90918092808252602080920191808260051b86010194845f915b848310611a5c575050505050505090565b90919293949596601f198282030187528735603e19843603018112156101fa5783018035601e19823603018112156101fa578101908682359201906001600160401b0383116101fa5782360382136101fa576001938880611ac881969582966040808752860191611a11565b93013591015299019701959493019190611a4b565b93916118cd9593611b039260018060a01b03168652606060208701526060860191611a11565b926040818503910152611a31565b519081151582036101fa57565b6001600160a01b0390911681526001600160401b03909116602082015260400190565b6001600160401b036118cd959360609360018060a01b031683521660208201528160408201520191611a31565b60070b677fffffffffffffff81146105e45760010190565b3d15611bb0573d90611b9782611861565b91611ba56040519384611840565b82523d5f602084013e565b606090565b15611bbc57565b606460405162461bcd60e51b815260206004820152602060248201527f4661696c656420746f2073656e6420457468657220746f2070726f706f7365726044820152fd5b51908160070b82036101fa57565b81601f820112156101fa578051611c2481611861565b92611c326040519485611840565b818452602082840101116101fa576118cd91602080850191016118fd565b81601f820112156101fa578051611c66816119db565b92604091611c7683519586611840565b808552602093848087019260051b820101938385116101fa57858201925b858410611ca5575050505050505090565b8351906001600160401b03918281116101fa5784019083601f1983890301126101fa578351611cd3816117f5565b898301519384116101fa578483611cf08a8d809881980101611c0e565b8352015183820152815201930192611c94565b5f9060033d11611d0f57565b905060045f803e5f5160e01c90565b5f60443d106118cd57604051600319913d83016004833e81516001600160401b03918282113d602484011117611d7a57818401948551938411611d82573d85010160208487010111611d7a57506118cd92910160200190611840565b949350505050565b50949350505050565b805115611d985760200190565b634e487b7160e01b5f52603260045260245ffd5b6001600160a01b0390911681526060602082018190526118cd939192611dd49184019061191e565b91604081840391015261194356fea26469706673582212201b36848cdaf964f093efaabc0ee8bf61e852da594bf9ccc9e2e358ecb2a11fc064736f6c63430008140033", + "deployedBytecode": "0x6080604052600436101561001a575b3615610018575f80fd5b005b5f3560e01c80630f6265fb146112f4578063258691e2146111b157806326c11ffa146110825780635e615a6b14610c0b57806361bc221a14610bec57806361f09ad214610b7f57806372ff5ec414610a435780637726ece0146108e95780638e7431d31461087057806391d6d8e71461073a57806397fd84d2146106b0578063b94c982214610490578063bc7bdf75146103e0578063d0e30db0146103d3578063e2b178a014610318578063e8702c34146102565763ed6c08f70361000e5760a03660031901126101fa576100ed611786565b6100f561179c565b604435916001600160401b038084116101fa5761011860209436906004016119ab565b94906101226118df565b9461012b6118ee565b95610211575b610150604051978893849363592581bb60e11b85523060048601611b41565b03815f6108055af1928315610206575f936101c7575b6020945061017b575b50506040519015158152f35b5f8080600f6101c09582958354906101958260070b611b6e565b67ffffffffffffffff1990921691161783556001600160a01b03165af16101ba611b86565b50611bb5565b5f8061016f565b92506020843d82116101fe575b816101e160209383611840565b810103126101fa576101f4602094611b11565b92610166565b5f80fd5b3d91506101d4565b6040513d5f823e3d90fd5b5f5461021f8160070b611b6e565b67ffffffffffffffff19909116908516175f90815561025190808080600f6001600160a01b038b165af16101ba611b86565b610131565b60603660031901126101fa5761026a611786565b6001600160401b036024358181116101fa5761028a9036906004016117c8565b9290604435918383116101fa576102c66102aa60209436906004016119ab565b90604051978895869563a8fdc91960e01b875260048701611add565b03815f6108055af1908115610206576020925f926102e9575b5060405191168152f35b61030a919250833d8111610311575b6103028183611840565b8101906119f2565b90836102df565b503d6102f8565b346101fa575f3660031901126101fa576040516307158bc560e51b81525f816004816108055afa8015610206575f905f9061037b575b610367925060405192839260408452604084019061191e565b6001600160a01b0390911660208301520390f35b50503d805f833e61038c8183611840565b81016040828203126101fa5781516001600160401b0381116101fa576020916103b6918401611c0e565b9101516001600160a01b03811681036101fa57610367919061034e565b5f3660031901126101fa57005b60403660031901126101fa576103f46117b2565b6024356001600160401b0381116101fa5761041560209136906004016119ab565b92610435604051948593849363592581bb60e11b85523060048601611b41565b03815f6108055af18015610206575f90610457575b6020906040519015158152f35b506020813d8211610488575b8161047060209383611840565b810103126101fa57610483602091611b11565b61044a565b3d9150610463565b346101fa5760603660031901126101fa576104a9611786565b6024356001600160401b0381116101fa576104c89036906004016118b2565b6001600160401b03604435116101fa573660236044350112156101fa5760443560040135906104f6826119db565b916105046040519384611840565b80835260208301903660248260051b6044350101116101fa57602460443501915b60248260051b60443501018310610634575050505f5460018160070b0190677fffffffffffffff1992677fffffffffffffff95848412878513176105e4576020926001600160401b031980956001600160401b03169116175f5561059d6040519687938493631758efa960e11b855260048501611dac565b03815f6108015af1928315610206575f936105f8575b505f54915f198360070b01948513908512176105e4576020936001600160401b03169116175f556040519015158152f35b634e487b7160e01b5f52601160045260245ffd5b9092506020813d60201161062c575b8161061460209383611840565b810103126101fa5761062590611b11565b91846105b3565b3d9150610607565b82356001600160401b0381116101fa5760406044358201360360231901126101fa5760405190610663826117f5565b6001600160401b03602482604435010135116101fa5760249260209283926044906106983683358301808a01350189016118b2565b83528135010135838201528152019301929050610525565b6020806003193601126101fa576106e4816106c96117b2565b6040518093819263519f184360e11b83523060048401611b1e565b03815f6108055af1908115610206575f91610705575b506040519015158152f35b90508181813d8311610733575b61071c8183611840565b810103126101fa5761072d90611b11565b826106fa565b503d610712565b60803660031901126101fa576001600160401b036004358181116101fa576107669036906004016117c8565b90916024358181116101fa5761078260209136906004016119ab565b9390946107bb6107906118d0565b956107996118df565b96610839575b60405163a8fdc91960e01b815297889485943060048701611add565b03815f6108055af1918215610206576020935f9361081a575b506107e3575b60405191168152f35b5f546107f18160070b611b6e565b8216906001600160401b031916175f556108155f808080600f335af16101ba611b86565b6107da565b610832919350843d8111610311576103028183611840565b91846107d4565b5f546108478160070b611b6e565b8716906001600160401b031916175f5561086b5f808080600f335af16101ba611b86565b61079f565b60603660031901126101fa57610884611786565b61088c61179c565b604435906001600160401b03928383116101fa576104356108b360209436906004016119ab565b604051968795869563592581bb60e11b875260018060a01b03166004870152166024850152606060448501526064840191611a31565b60a03660031901126101fa576108fd611786565b6001600160401b036024358181116101fa5761091d9036906004016117c8565b9190926044358281116101fa5761093a60209136906004016119ab565b9490956109736109486118df565b966109516118ee565b976109fe575b60405163a8fdc91960e01b815298899485943060048701611add565b03815f6108055af1928315610206576020945f946109df575b5061099b575060405191168152f35b5f808080600f6109d99582546109b38160070b611b6e565b67ffffffffffffffff199091169089161783556001600160a01b03165af16101ba611b86565b836102df565b6109f7919450853d8111610311576103028183611840565b928561098c565b5f54610a0c8160070b611b6e565b67ffffffffffffffff19909116908816175f908155610a3e90808080600f6001600160a01b038c165af16101ba611b86565b610957565b60803660031901126101fa57610a576117b2565b602435906001600160401b038083116101fa57610a7a60209336906004016119ab565b9390610a846118d0565b93610a8d6118df565b94610b48575b610ab2604051968793849363592581bb60e11b85523060048601611b41565b03815f6108055af1918215610206575f92610b0d575b60209350610adb57506040519015158152f35b5f5490610aea8260070b611b6e565b16906001600160401b031916175f5561072d5f808080600f335af16101ba611b86565b91506020833d8211610b40575b81610b2760209383611840565b810103126101fa57610b3a602093611b11565b91610ac8565b3d9150610b1a565b5f54610b568160070b611b6e565b8516906001600160401b031916175f55610b7a5f808080600f335af16101ba611b86565b610a93565b60403660031901126101fa576001600160401b036004358181116101fa57610bab9036906004016117c8565b602492919235908282116101fa576102c693610bcd60209336906004016119ab565b60405163a8fdc91960e01b815296879485949193913060048701611add565b346101fa575f3660031901126101fa5760205f5460070b604051908152f35b346101fa575f3660031901126101fa5760606101e0604051610c2c81611824565b5f81528260208201525f604082015282808201528260808201528260a08201528260c08201528260e0820152826101008201525f61012082015282610140820152826101608201525f6101808201525f6101a08201525f6101c08201520152604051635e615a6b60e01b81525f816004816108055afa8015610206575f90610e08575b610e049060405191829160208352805160070b60208401526080836101e0610dcb610db5610d90610d7a610d65610d51610d3d610d278b60208101519a6060610d066102009d8e6040850152610220840190611943565b92604081015160070b82840152015190601f199d8e8285030191015261191e565b8d60808d01519060a08d8285030191015261191e565b60a08b01518d82038b0160c08f015261191e565b60c08a01518c82038a0160e08e015261191e565b60e0890151888c8303016101008d015261191e565b610100880151878b8303016101208c015261191e565b61012087015160070b6101408a0152610140870151868a8303016101608b015261191e565b61016086015185898303016101808a0152611943565b9361018081015115156101a08801526101a081015115156101c08801526101c0810151151582880152015191858403019085015261191e565b0390f35b503d90815f823e610e198282611840565b60208183810103126101fa578051916001600160401b0383116101fa5761020083830182840103126101fa5760405191610e5283611824565b610e5d848201611c00565b8352602084820101516001600160401b0381116101fa57610e85908383019086840101611c50565b6020840152610e98604085830101611c00565b6040840152606084820101516001600160401b0381116101fa57610ec3908383019086840101611c0e565b6060840152608084820101516001600160401b0381116101fa57610eee908383019086840101611c0e565b608084015260a084820101516001600160401b0381116101fa57610f19908383019086840101611c0e565b60a084015260c084820101516001600160401b0381116101fa57610f44908383019086840101611c0e565b60c084015260e084820101516001600160401b0381116101fa57610f6f908383019086840101611c0e565b60e084015261010084820101516001600160401b0381116101fa57610f9b908383019086840101611c0e565b610100840152610fb061012085830101611c00565b61012084015261014084820101516001600160401b0381116101fa57610fdd908383019086840101611c0e565b61014084015261016084820101516001600160401b0381116101fa5761100a908383019086840101611c50565b61016084015261101f61018085830101611b11565b6101808401526110346101a085830101611b11565b6101a08401526110496101c085830101611b11565b6101c08401526101e084820101516001600160401b0381116101fa57610e0494611077938301920101611c0e565b6101e0820152610caf565b60603660031901126101fa576110966117b2565b60243580151581036101fa5760206110d1926110b06118d0565b92611173575b6040518094819263519f184360e11b83523060048401611b1e565b03815f6108055af1908115610206575f91611138575b602092506110fa575b6040519015158152f35b5f546111088160070b611b6e565b6001600160401b0316906001600160401b031916175f556111335f808080600f335af16101ba611b86565b6110f0565b90506020823d821161116b575b8161115260209383611840565b810103126101fa57611165602092611b11565b906110e7565b3d9150611145565b5f546111818160070b611b6e565b6001600160401b0316906001600160401b031916175f556111ac5f808080600f335af16101ba611b86565b6110b6565b60803660031901126101fa576112056111c8611786565b6111d061179c565b9060206111db6118d0565b926111e46118df565b936112ae575b6040518095819263519f184360e11b83523060048401611b1e565b03815f6108055af1918215610206575f92611273575b6020935061122e57506040519015158152f35b5f808080600f61072d9582546112468160070b611b6e565b6001600160401b031667ffffffffffffffff19919091161783556001600160a01b03165af16101ba611b86565b91506020833d82116112a6575b8161128d60209383611840565b810103126101fa576112a0602093611b11565b9161121b565b3d9150611280565b5f546112bc8160070b611b6e565b6001600160401b0316906001600160401b031916175f556112ef5f808080600f60018060a01b0389165af16101ba611b86565b6111ea565b60803660031901126101fa57611308611786565b61131061179c565b9060448035916001600160401b03928381116101fa576113349036906004016117c8565b93909160649485358381116101fa576113519036906004016118b2565b9160018060a01b0316925f546113698160070b611b6e565b82166001600160401b0319809216175f555f8080806001895af161138b611b86565b5015611739576113b597986040519063519f184360e11b8252818060209b8c933060048401611b1e565b03815f6108055af15f9181611702575b506114a4578989896113d5611d03565b6308c379a014611420575b7f63616e63656c50726f706f73616c206661696c65642073696c656e746c790000906040519262461bcd60e51b84526004840152601e6024840152820152fd5b611428611d1e565b8061143357506113e0565b8261147f6037604051809476031b0b731b2b6283937b837b9b0b6103330b4b632b21d1604d1b8583015261146f815180928786860191016118fd565b8101036017810185520183611840565b6114a060405192839262461bcd60e51b84526004840152602483019061191e565b0390fd5b156116bf57908794929593915f54916114bf8360070b611b6e565b169116175f55604051926114d2846117f5565b600184525f5b8581106116905750946114fc61153696604051926114f5846117f5565b369161187c565b815260028582015261150d84611d8b565b5261151783611d8b565b505f604051809681958294635ca64c1160e11b84528660048501611dac565b03925af15f9181611659575b5061160b5750611550611d03565b6308c379a0146115a6575b6084927f66756e64436f6d6d756e697479506f6f6c206661696c65642073696c656e746c607960f81b926040519462461bcd60e51b8652600486015260216024860152840152820152fd5b6115ae611d1e565b806115b9575061155b565b8261147f603a60405180947f66756e64436f6d6d756e697479506f6f6c206661696c65643a20000000000000858301526115fb815180928786860191016118fd565b810103601a810185520183611840565b1561161a575060405160018152f35b7f66756e64436f6d6d756e697479506f6f6c2072657475726e65642066616c7365906040519262461bcd60e51b84528060048501526024840152820152fd5b9091508381813d8311611689575b6116718183611840565b810103126101fa5761168290611b11565b9085611542565b503d611667565b604096939591929496516116a3816117f5565b606081525f8382015282828901015201908794929593916114d8565b60405162461bcd60e51b815260048101899052601d60248201527f63616e63656c50726f706f73616c2072657475726e65642066616c7365000000818901528990fd5b9091508981813d8311611732575b61171a8183611840565b810103126101fa5761172b90611b11565b908b6113c5565b503d611710565b60405162461bcd60e51b815260206004820152602160248201527f4661696c656420746f2073656e6420457468657220746f206465706f7369746f81890152603960f91b818a0152608490fd5b600435906001600160a01b03821682036101fa57565b602435906001600160401b03821682036101fa57565b600435906001600160401b03821682036101fa57565b9181601f840112156101fa578235916001600160401b0383116101fa57602083818601950101116101fa57565b604081019081106001600160401b0382111761181057604052565b634e487b7160e01b5f52604160045260245ffd5b61020081019081106001600160401b0382111761181057604052565b90601f801991011681019081106001600160401b0382111761181057604052565b6001600160401b03811161181057601f01601f191660200190565b92919261188882611861565b916118966040519384611840565b8294818452818301116101fa578281602093845f960137010152565b9080601f830112156101fa578160206118cd9335910161187c565b90565b6044359081151582036101fa57565b6064359081151582036101fa57565b6084359081151582036101fa57565b5f5b83811061190e5750505f910152565b81810151838201526020016118ff565b90602091611937815180928185528580860191016118fd565b601f01601f1916010190565b80518083526020600582901b8401810193928101925f908201805b84831061196e5750505050505090565b9091929394958480828460019403865289519082806119958451604080865285019061191e565b930151910152980193019301919493929061195e565b9181601f840112156101fa578235916001600160401b0383116101fa576020808501948460051b0101116101fa57565b6001600160401b0381116118105760051b60200190565b908160209103126101fa57516001600160401b03811681036101fa5790565b908060209392818452848401375f828201840152601f01601f1916010190565b90918092808252602080920191808260051b86010194845f915b848310611a5c575050505050505090565b90919293949596601f198282030187528735603e19843603018112156101fa5783018035601e19823603018112156101fa578101908682359201906001600160401b0383116101fa5782360382136101fa576001938880611ac881969582966040808752860191611a11565b93013591015299019701959493019190611a4b565b93916118cd9593611b039260018060a01b03168652606060208701526060860191611a11565b926040818503910152611a31565b519081151582036101fa57565b6001600160a01b0390911681526001600160401b03909116602082015260400190565b6001600160401b036118cd959360609360018060a01b031683521660208201528160408201520191611a31565b60070b677fffffffffffffff81146105e45760010190565b3d15611bb0573d90611b9782611861565b91611ba56040519384611840565b82523d5f602084013e565b606090565b15611bbc57565b606460405162461bcd60e51b815260206004820152602060248201527f4661696c656420746f2073656e6420457468657220746f2070726f706f7365726044820152fd5b51908160070b82036101fa57565b81601f820112156101fa578051611c2481611861565b92611c326040519485611840565b818452602082840101116101fa576118cd91602080850191016118fd565b81601f820112156101fa578051611c66816119db565b92604091611c7683519586611840565b808552602093848087019260051b820101938385116101fa57858201925b858410611ca5575050505050505090565b8351906001600160401b03918281116101fa5784019083601f1983890301126101fa578351611cd3816117f5565b898301519384116101fa578483611cf08a8d809881980101611c0e565b8352015183820152815201930192611c94565b5f9060033d11611d0f57565b905060045f803e5f5160e01c90565b5f60443d106118cd57604051600319913d83016004833e81516001600160401b03918282113d602484011117611d7a57818401948551938411611d82573d85010160208487010111611d7a57506118cd92910160200190611840565b949350505050565b50949350505050565b805115611d985760200190565b634e487b7160e01b5f52603260045260245ffd5b6001600160a01b0390911681526060602082018190526118cd939192611dd49184019061191e565b91604081840391015261194356fea26469706673582212201b36848cdaf964f093efaabc0ee8bf61e852da594bf9ccc9e2e358ecb2a11fc064736f6c63430008140033", "linkReferences": {}, - "deployedLinkReferences": {} -} + "deployedLinkReferences": {}, + "immutableReferences": {}, + "inputSourceName": "project/solidity/precompiles/testutil/contracts/GovCaller.sol", + "buildInfoId": "solc-0_8_20-429c990f0937684ef883cdd3aa04d65f2fbd3fb6" +} \ No newline at end of file diff --git a/precompiles/testutil/contracts/GovCaller.sol b/precompiles/testutil/contracts/GovCaller.sol index c12fa00e4b..1ae062a32f 100644 --- a/precompiles/testutil/contracts/GovCaller.sol +++ b/precompiles/testutil/contracts/GovCaller.sol @@ -130,6 +130,14 @@ contract GovCaller { return gov.GOV_CONTRACT.getParams(); } + function getAuthority() + external + view + returns (string memory authorityBech32, address authorityHex) + { + return gov.GOV_CONTRACT.getAuthority(); + } + function testDepositWithTransfer( uint64 _proposalId, types.Coin[] calldata _deposit, diff --git a/tests/integration/precompiles/gov/test_integration.go b/tests/integration/precompiles/gov/test_integration.go index 33f8a05eec..b861f055bc 100644 --- a/tests/integration/precompiles/gov/test_integration.go +++ b/tests/integration/precompiles/gov/test_integration.go @@ -990,6 +990,77 @@ func TestPrecompileIntegrationTestSuite(t *testing.T, create network.CreateEvmAp Expect(err).To(BeNil()) }) }) + + Context("authority query", func() { + var ( + err error + callsData CallsData + govCallerContractAddr common.Address + govCallerContract evmtypes.CompiledContract + ) + + BeforeEach(func() { + // Setting gas tip cap to zero to have zero gas price. + txArgs.GasTipCap = new(big.Int).SetInt64(0) + + govCallerContract, err = contracts.LoadGovCallerContract() + Expect(err).ToNot(HaveOccurred(), "failed to load GovCaller contract") + + govCallerContractAddr, err = s.factory.DeployContract( + s.keyring.GetPrivKey(0), + evmtypes.EvmTxArgs{}, // NOTE: passing empty struct to use default values + testutiltypes.ContractDeploymentData{ + Contract: govCallerContract, + }, + ) + Expect(err).ToNot(HaveOccurred(), "failed to deploy gov caller contract") + Expect(s.network.NextBlock()).ToNot(HaveOccurred(), "error on NextBlock") + + callsData = CallsData{ + precompileAddr: s.precompile.Address(), + precompileABI: s.precompile.ABI, + + precompileCallerAddr: govCallerContractAddr, + precompileCallerABI: govCallerContract.ABI, + } + }) + + DescribeTable("should return the governance module account address", func(callType callType) { + txArgs, callArgs = callsData.getTxAndCallArgs(callArgs, txArgs, callType) + + switch callType { + case directCall: + callArgs.MethodName = gov.GetAuthorityMethod + case contractCall: + callArgs.MethodName = "getAuthority" + } + + _, ethRes, err := s.factory.CallContractAndCheckLogs( + s.keyring.GetPrivKey(0), + txArgs, + callArgs, + passCheck, + ) + Expect(err).To(BeNil()) + + var out struct { + AuthorityBech32 string `json:"authorityBech32"` + AuthorityHex common.Address `json:"authorityHex"` + } + err = s.precompile.UnpackIntoInterface(&out, gov.GetAuthorityMethod, ethRes.Ret) + Expect(err).To(BeNil()) + + // Verify against the deterministic gov module account address + expectedModuleAddr := authtypes.NewModuleAddress(govtypes.ModuleName) + Expect(out.AuthorityBech32).To(Equal(expectedModuleAddr.String()), + "expected bech32 authority address to match gov module account") + Expect(out.AuthorityHex).To(Equal(common.BytesToAddress(expectedModuleAddr.Bytes())), + "expected hex authority address to match gov module account") + }, + Entry("directly calling the precompile", directCall), + Entry("through a caller contract", contractCall), + ) + }) }) }) _ = Describe("Calling governance precompile from contract", Ordered, func() { diff --git a/tests/integration/precompiles/gov/test_query.go b/tests/integration/precompiles/gov/test_query.go index 3e57f40a98..c318bd8da5 100644 --- a/tests/integration/precompiles/gov/test_query.go +++ b/tests/integration/precompiles/gov/test_query.go @@ -718,3 +718,59 @@ func (s *PrecompileTestSuite) TestGetParams() { }) } } + +func (s *PrecompileTestSuite) TestGetAuthority() { + testCases := []struct { + name string + malleate func() []interface{} + expPass bool + errContains string + }{ + { + "fail - not empty input args", + func() []interface{} { + return []interface{}{""} + }, + false, + fmt.Sprintf(cmn.ErrInvalidNumberOfArgs, 0, 1), + }, + { + "success - get authority address", + func() []interface{} { + return []interface{}{} + }, + true, + "", + }, + } + + for _, tc := range testCases { + s.Run(tc.name, func() { + s.SetupTest() + + method := s.precompile.Methods[gov.GetAuthorityMethod] + bz, err := s.precompile.GetAuthority(s.network.GetContext(), &method, nil, tc.malleate()) + + if tc.expPass { + s.Require().NoError(err) + + var out struct { + AuthorityBech32 string `json:"authorityBech32"` + AuthorityHex common.Address `json:"authorityHex"` + } + err = s.precompile.UnpackIntoInterface(&out, gov.GetAuthorityMethod, bz) + s.Require().NoError(err) + + // Verify the returned Bech32 address matches the gov module account + expectedModuleAddr := authtypes.NewModuleAddress(govtypes.ModuleName) + s.Require().Equal(expectedModuleAddr.String(), out.AuthorityBech32) + + // Verify the returned hex address matches the gov module account + s.Require().Equal(common.BytesToAddress(expectedModuleAddr.Bytes()), out.AuthorityHex) + } else { + s.Require().Error(err) + s.Require().Contains(err.Error(), tc.errContains) + } + }) + } +}