forked from TrueCloudLab/neoneo-go
native: provide name
method for all contracts
This commit is contained in:
parent
eb9b1cae36
commit
42ff4a8fc7
6 changed files with 45 additions and 5 deletions
|
@ -67,6 +67,10 @@ func newDesignate() *Designate {
|
||||||
md = newMethodAndPrice(s.designateAsRole, 0, smartcontract.AllowModifyStates)
|
md = newMethodAndPrice(s.designateAsRole, 0, smartcontract.AllowModifyStates)
|
||||||
s.AddMethod(md, desc, false)
|
s.AddMethod(md, desc, false)
|
||||||
|
|
||||||
|
desc = newDescriptor("name", smartcontract.StringType)
|
||||||
|
md = newMethodAndPrice(nameMethod(designateName), 0, smartcontract.NoneFlag)
|
||||||
|
s.AddMethod(md, desc, true)
|
||||||
|
|
||||||
return s
|
return s
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -53,7 +53,7 @@ func newNEP5Native(name string) *nep5TokenNative {
|
||||||
n.Manifest.SupportedStandards = []string{manifest.NEP5StandardName}
|
n.Manifest.SupportedStandards = []string{manifest.NEP5StandardName}
|
||||||
|
|
||||||
desc := newDescriptor("name", smartcontract.StringType)
|
desc := newDescriptor("name", smartcontract.StringType)
|
||||||
md := newMethodAndPrice(n.Name, 0, smartcontract.NoneFlag)
|
md := newMethodAndPrice(nameMethod(name), 0, smartcontract.NoneFlag)
|
||||||
n.AddMethod(md, desc, true)
|
n.AddMethod(md, desc, true)
|
||||||
|
|
||||||
desc = newDescriptor("symbol", smartcontract.StringType)
|
desc = newDescriptor("symbol", smartcontract.StringType)
|
||||||
|
@ -98,10 +98,6 @@ func (c *nep5TokenNative) Initialize(_ *interop.Context) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *nep5TokenNative) Name(_ *interop.Context, _ []stackitem.Item) stackitem.Item {
|
|
||||||
return stackitem.NewByteArray([]byte(c.ContractMD.Name))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *nep5TokenNative) Symbol(_ *interop.Context, _ []stackitem.Item) stackitem.Item {
|
func (c *nep5TokenNative) Symbol(_ *interop.Context, _ []stackitem.Item) stackitem.Item {
|
||||||
return stackitem.NewByteArray([]byte(c.symbol))
|
return stackitem.NewByteArray([]byte(c.symbol))
|
||||||
}
|
}
|
||||||
|
|
|
@ -111,6 +111,10 @@ func newOracle() *Oracle {
|
||||||
md := newMethodAndPrice(o.request, oracleRequestPrice, smartcontract.AllowModifyStates)
|
md := newMethodAndPrice(o.request, oracleRequestPrice, smartcontract.AllowModifyStates)
|
||||||
o.AddMethod(md, desc, false)
|
o.AddMethod(md, desc, false)
|
||||||
|
|
||||||
|
desc = newDescriptor("name", smartcontract.StringType)
|
||||||
|
md = newMethodAndPrice(nameMethod(oracleName), 0, smartcontract.NoneFlag)
|
||||||
|
o.AddMethod(md, desc, true)
|
||||||
|
|
||||||
desc = newDescriptor("finish", smartcontract.VoidType)
|
desc = newDescriptor("finish", smartcontract.VoidType)
|
||||||
md = newMethodAndPrice(o.finish, 0, smartcontract.AllowModifyStates)
|
md = newMethodAndPrice(o.finish, 0, smartcontract.AllowModifyStates)
|
||||||
o.AddMethod(md, desc, false)
|
o.AddMethod(md, desc, false)
|
||||||
|
|
|
@ -126,6 +126,10 @@ func newPolicy() *Policy {
|
||||||
md = newMethodAndPrice(p.unblockAccount, 3000000, smartcontract.AllowModifyStates)
|
md = newMethodAndPrice(p.unblockAccount, 3000000, smartcontract.AllowModifyStates)
|
||||||
p.AddMethod(md, desc, false)
|
p.AddMethod(md, desc, false)
|
||||||
|
|
||||||
|
desc = newDescriptor("name", smartcontract.StringType)
|
||||||
|
md = newMethodAndPrice(nameMethod(policyName), 0, smartcontract.NoneFlag)
|
||||||
|
p.AddMethod(md, desc, true)
|
||||||
|
|
||||||
desc = newDescriptor("onPersist", smartcontract.VoidType)
|
desc = newDescriptor("onPersist", smartcontract.VoidType)
|
||||||
md = newMethodAndPrice(getOnPersistWrapper(p.OnPersist), 0, smartcontract.AllowModifyStates)
|
md = newMethodAndPrice(getOnPersistWrapper(p.OnPersist), 0, smartcontract.AllowModifyStates)
|
||||||
p.AddMethod(md, desc, false)
|
p.AddMethod(md, desc, false)
|
||||||
|
|
|
@ -2,8 +2,10 @@ package native
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/nspcc-dev/neo-go/pkg/core/dao"
|
"github.com/nspcc-dev/neo-go/pkg/core/dao"
|
||||||
|
"github.com/nspcc-dev/neo-go/pkg/core/interop"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/core/storage"
|
"github.com/nspcc-dev/neo-go/pkg/core/storage"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/io"
|
"github.com/nspcc-dev/neo-go/pkg/io"
|
||||||
|
"github.com/nspcc-dev/neo-go/pkg/vm/stackitem"
|
||||||
)
|
)
|
||||||
|
|
||||||
func getSerializableFromDAO(id int32, d dao.DAO, key []byte, item io.Serializable) error {
|
func getSerializableFromDAO(id int32, d dao.DAO, key []byte, item io.Serializable) error {
|
||||||
|
@ -15,3 +17,9 @@ func getSerializableFromDAO(id int32, d dao.DAO, key []byte, item io.Serializabl
|
||||||
item.DecodeBinary(r)
|
item.DecodeBinary(r)
|
||||||
return r.Err
|
return r.Err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func nameMethod(name string) interop.Method {
|
||||||
|
return func(_ *interop.Context, _ []stackitem.Item) stackitem.Item {
|
||||||
|
return stackitem.NewByteArray([]byte(name))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -357,3 +357,27 @@ func TestNativeContract_InvokeOtherContract(t *testing.T) {
|
||||||
require.Equal(t, int64(5), res.Stack[0].Value().(*big.Int).Int64())
|
require.Equal(t, int64(5), res.Stack[0].Value().(*big.Int).Int64())
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestAllContractsHaveName(t *testing.T) {
|
||||||
|
bc := newTestChain(t)
|
||||||
|
defer bc.Close()
|
||||||
|
for _, c := range bc.contracts.Contracts {
|
||||||
|
name := c.Metadata().Name
|
||||||
|
t.Run(name, func(t *testing.T) {
|
||||||
|
w := io.NewBufBinWriter()
|
||||||
|
emit.AppCallWithOperationAndArgs(w.BinWriter, c.Metadata().Hash, "name")
|
||||||
|
require.NoError(t, w.Err)
|
||||||
|
|
||||||
|
tx := transaction.New(netmode.UnitTestNet, w.Bytes(), 1007570)
|
||||||
|
tx.ValidUntilBlock = bc.blockHeight + 1
|
||||||
|
addSigners(tx)
|
||||||
|
require.NoError(t, signTx(bc, tx))
|
||||||
|
require.NoError(t, bc.AddBlock(bc.newBlock(tx)))
|
||||||
|
|
||||||
|
aer, err := bc.GetAppExecResult(tx.Hash())
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Len(t, aer.Stack, 1)
|
||||||
|
require.Equal(t, []byte(name), aer.Stack[0].Value())
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue