state: drop NativeContract, fix #3430

This unifies getnativecontracts RPC API with regular contracts.

Signed-off-by: Roman Khimov <roman@nspcc.ru>
This commit is contained in:
Roman Khimov 2024-05-16 18:46:00 +03:00
parent 13020ccd02
commit b1bb12df48
6 changed files with 14 additions and 18 deletions

View file

@ -99,7 +99,7 @@ func (*FakeChain) IsExtensibleAllowed(uint160 util.Uint160) bool {
} }
// GetNatives implements the blockchainer.Blockchainer interface. // GetNatives implements the blockchainer.Blockchainer interface.
func (*FakeChain) GetNatives() []state.NativeContract { func (*FakeChain) GetNatives() []state.Contract {
panic("TODO") panic("TODO")
} }

View file

@ -2292,18 +2292,19 @@ func (bc *Blockchain) GetNativeContractScriptHash(name string) (util.Uint160, er
} }
// GetNatives returns list of native contracts. // GetNatives returns list of native contracts.
func (bc *Blockchain) GetNatives() []state.NativeContract { func (bc *Blockchain) GetNatives() []state.Contract {
res := make([]state.NativeContract, 0, len(bc.contracts.Contracts)) res := make([]state.Contract, 0, len(bc.contracts.Contracts))
current := bc.getCurrentHF() current := bc.getCurrentHF()
for _, c := range bc.contracts.Contracts { for _, c := range bc.contracts.Contracts {
activeIn := c.ActiveIn() activeIn := c.ActiveIn()
if !(activeIn == nil || activeIn.Cmp(current) <= 0) { if !(activeIn == nil || activeIn.Cmp(current) <= 0) {
continue continue
} }
md := c.Metadata().HFSpecificContractMD(&current)
res = append(res, state.NativeContract{ st := bc.GetContractState(c.Metadata().Hash)
ContractBase: md.ContractBase, if st != nil { // Should never happen, but better safe than sorry.
}) res = append(res, *st)
}
} }
return res return res
} }

View file

@ -29,11 +29,6 @@ type ContractBase struct {
Manifest manifest.Manifest `json:"manifest"` Manifest manifest.Manifest `json:"manifest"`
} }
// NativeContract holds information about the native contract.
type NativeContract struct {
ContractBase
}
// ToStackItem converts state.Contract to stackitem.Item. // ToStackItem converts state.Contract to stackitem.Item.
func (c *Contract) ToStackItem() (stackitem.Item, error) { func (c *Contract) ToStackItem() (stackitem.Item, error) {
// Do not skip the NEF size check, it won't affect native Management related // Do not skip the NEF size check, it won't affect native Management related

View file

@ -265,8 +265,8 @@ func (c *Client) getContractState(param any) (*state.Contract, error) {
} }
// GetNativeContracts queries information about native contracts. // GetNativeContracts queries information about native contracts.
func (c *Client) GetNativeContracts() ([]state.NativeContract, error) { func (c *Client) GetNativeContracts() ([]state.Contract, error) {
var resp []state.NativeContract var resp []state.Contract
if err := c.performRequest("getnativecontracts", nil, &resp); err != nil { if err := c.performRequest("getnativecontracts", nil, &resp); err != nil {
return resp, err return resp, err
} }

View file

@ -86,7 +86,7 @@ type (
GetNEP11Contracts() []util.Uint160 GetNEP11Contracts() []util.Uint160
GetNEP17Contracts() []util.Uint160 GetNEP17Contracts() []util.Uint160
GetNativeContractScriptHash(string) (util.Uint160, error) GetNativeContractScriptHash(string) (util.Uint160, error)
GetNatives() []state.NativeContract GetNatives() []state.Contract
GetNextBlockValidators() ([]*keys.PublicKey, error) GetNextBlockValidators() ([]*keys.PublicKey, error)
GetNotaryContractScriptHash() util.Uint160 GetNotaryContractScriptHash() util.Uint160
GetStateModule() core.StateRoot GetStateModule() core.StateRoot

View file

@ -1192,13 +1192,13 @@ var rpcTestCases = map[string][]rpcTestCase{
{ {
params: "[]", params: "[]",
result: func(e *executor) any { result: func(e *executor) any {
return new([]state.NativeContract) return new([]state.Contract)
}, },
check: func(t *testing.T, e *executor, res any) { check: func(t *testing.T, e *executor, res any) {
lst := res.(*[]state.NativeContract) lst := res.(*[]state.Contract)
for i := range *lst { for i := range *lst {
cs := e.chain.GetContractState((*lst)[i].Hash) cs := e.chain.GetContractState((*lst)[i].Hash)
require.NotNil(t, cs) require.Equal(t, *cs, (*lst)[i])
require.True(t, cs.ID <= 0) require.True(t, cs.ID <= 0)
} }
}, },