[#1141] morph/client: Allow to use more integer types as arguments

Also, use `*big.Int` as integer value, see nspcc-dev/neo-go#2413.

Signed-off-by: Evgenii Stratonikov <evgeniy@nspcc.ru>
experimental
Evgenii Stratonikov 2022-03-11 12:28:34 +03:00 committed by LeL
parent 1c7195666c
commit 1e8391d216
12 changed files with 30 additions and 16 deletions

View File

@ -126,7 +126,7 @@ func (s *Server) voteForSidechainValidator(prm governance.VoteValidatorPrm) erro
}
s.contracts.alphabet.iterate(func(letter GlagoliticLetter, contract util.Uint160) {
err := s.morphClient.NotaryInvoke(contract, s.feeConfig.SideChainFee(), nonce, vubP, voteMethod, int64(epoch), validators)
err := s.morphClient.NotaryInvoke(contract, s.feeConfig.SideChainFee(), nonce, vubP, voteMethod, epoch, validators)
if err != nil {
s.log.Warn("can't invoke vote method in alphabet contract",
zap.Int8("alphabet_index", int8(letter)),

View File

@ -25,7 +25,7 @@ func (c *Client) ListAllAuditResultID() ([]ResultID, error) {
func (c *Client) ListAuditResultIDByEpoch(epoch uint64) ([]ResultID, error) {
prm := client.TestInvokePrm{}
prm.SetMethod(listByEpochResultsMethod)
prm.SetArgs(int64(epoch))
prm.SetArgs(epoch)
items, err := c.client.TestInvoke(prm)
if err != nil {
@ -44,7 +44,7 @@ func (c *Client) ListAuditResultIDByCID(epoch uint64, cid *cid.ID) ([]ResultID,
prm := client.TestInvokePrm{}
prm.SetMethod(listByCIDResultsMethod)
prm.SetArgs(int64(epoch), v2.GetValue())
prm.SetArgs(epoch, v2.GetValue())
items, err := c.client.TestInvoke(prm)
if err != nil {
@ -63,7 +63,7 @@ func (c *Client) ListAuditResultIDByNode(epoch uint64, cid *cid.ID, nodeKey []by
prm := client.TestInvokePrm{}
prm.SetMethod(listByNodeResultsMethod)
prm.SetArgs(int64(epoch), v2.GetValue(), nodeKey)
prm.SetArgs(epoch, v2.GetValue(), nodeKey)
items, err := c.client.TestInvoke(prm)
if err != nil {

View File

@ -4,6 +4,7 @@ import (
"context"
"errors"
"fmt"
"math/big"
"sync"
"time"
@ -445,12 +446,18 @@ func toStackParameter(value interface{}) (sc.Parameter, error) {
Value: value,
}
// TODO: #1141 add more types
switch v := value.(type) {
case []byte:
result.Type = sc.ByteArrayType
case int:
result.Type = sc.IntegerType
result.Value = big.NewInt(int64(v))
case int64:
result.Type = sc.IntegerType
result.Value = big.NewInt(v)
case uint64:
result.Type = sc.IntegerType
result.Value = new(big.Int).SetUint64(v)
case [][]byte:
arr := make([]sc.Parameter, 0, len(v))
for i := range v {
@ -471,7 +478,7 @@ func toStackParameter(value interface{}) (sc.Parameter, error) {
result.Value = v.BytesBE()
case noderoles.Role:
result.Type = sc.IntegerType
result.Value = int64(v)
result.Value = big.NewInt(int64(v))
case keys.PublicKeys:
arr := make([][]byte, 0, len(v))
for i := range v {

View File

@ -1,6 +1,7 @@
package client
import (
"math/big"
"testing"
sc "github.com/nspcc-dev/neo-go/pkg/smartcontract"
@ -20,6 +21,12 @@ func TestToStackParameter(t *testing.T) {
{
value: int64(100),
expType: sc.IntegerType,
expVal: big.NewInt(100),
},
{
value: uint64(100),
expType: sc.IntegerType,
expVal: big.NewInt(100),
},
{
value: "hello world",

View File

@ -31,7 +31,7 @@ func (p *commonEstimationPrm) SetEpoch(epoch uint64) {
func (c *Client) StartEstimation(p StartEstimationPrm) error {
prm := client.InvokePrm{}
prm.SetMethod(startEstimationMethod)
prm.SetArgs(int64(p.epoch))
prm.SetArgs(p.epoch)
prm.InvokePrmOptional = p.InvokePrmOptional
if err := c.client.Invoke(prm); err != nil {
@ -44,7 +44,7 @@ func (c *Client) StartEstimation(p StartEstimationPrm) error {
func (c *Client) StopEstimation(p StopEstimationPrm) error {
prm := client.InvokePrm{}
prm.SetMethod(stopEstimationMethod)
prm.SetArgs(int64(p.epoch))
prm.SetArgs(p.epoch)
prm.InvokePrmOptional = p.InvokePrmOptional
if err := c.client.Invoke(prm); err != nil {

View File

@ -39,7 +39,7 @@ func (c *Client) AnnounceLoad(p AnnounceLoadPrm) error {
prm := client.InvokePrm{}
prm.SetMethod(putSizeMethod)
prm.SetArgs(int64(p.a.Epoch()), v2.GetValue(), int64(p.a.UsedSpace()), p.key)
prm.SetArgs(p.a.Epoch(), v2.GetValue(), p.a.UsedSpace(), p.key)
prm.InvokePrmOptional = p.InvokePrmOptional
err := c.client.Invoke(prm)
@ -57,7 +57,7 @@ type EstimationID []byte
func (c *Client) ListLoadEstimationsByEpoch(epoch uint64) ([]EstimationID, error) {
invokePrm := client.TestInvokePrm{}
invokePrm.SetMethod(listSizesMethod)
invokePrm.SetArgs(int64(epoch))
invokePrm.SetArgs(epoch)
prms, err := c.client.TestInvoke(invokePrm)
if err != nil {

View File

@ -34,7 +34,7 @@ const (
func (c *Client) GetNetMapByEpoch(epoch uint64) (*netmap.Netmap, error) {
invokePrm := client.TestInvokePrm{}
invokePrm.SetMethod(epochSnapshotMethod)
invokePrm.SetArgs(int64(epoch))
invokePrm.SetArgs(epoch)
res, err := c.client.TestInvoke(invokePrm)
if err != nil {

View File

@ -11,7 +11,7 @@ import (
func (c *Client) NewEpoch(epoch uint64) error {
prm := client.InvokePrm{}
prm.SetMethod(newEpochMethod)
prm.SetArgs(int64(epoch))
prm.SetArgs(epoch)
if err := c.client.Invoke(prm); err != nil {
return fmt.Errorf("could not invoke method (%s): %w", newEpochMethod, err)

View File

@ -25,7 +25,7 @@ func (c *Client) Snapshot() (*netmap.Netmap, error) {
func (c *Client) getNetMap(diff uint64) (*netmap.Netmap, error) {
prm := client.TestInvokePrm{}
prm.SetMethod(snapshotMethod)
prm.SetArgs(int64(diff))
prm.SetArgs(diff)
res, err := c.client.TestInvoke(prm)
if err != nil {

View File

@ -41,7 +41,7 @@ func (g *GetByIDPrm) SetID(v ID) {
func (c *Client) Get(p GetPrm) ([]reputation.GlobalTrust, error) {
invokePrm := client.TestInvokePrm{}
invokePrm.SetMethod(getMethod)
invokePrm.SetArgs(int64(p.epoch), p.peerID.ToV2().GetPublicKey())
invokePrm.SetArgs(p.epoch, p.peerID.ToV2().GetPublicKey())
res, err := c.client.TestInvoke(invokePrm)
if err != nil {

View File

@ -27,7 +27,7 @@ func (l *ListByEpochArgs) SetEpoch(v uint64) {
func (c *Client) ListByEpoch(p ListByEpochArgs) ([]ID, error) {
invokePrm := client.TestInvokePrm{}
invokePrm.SetMethod(listByEpochMethod)
invokePrm.SetArgs(int64(p.epoch))
invokePrm.SetArgs(p.epoch)
prms, err := c.client.TestInvoke(invokePrm)
if err != nil {

View File

@ -42,7 +42,7 @@ func (c *Client) Put(p PutPrm) error {
prm := client.InvokePrm{}
prm.SetMethod(putMethod)
prm.SetArgs(int64(p.epoch), p.peerID.ToV2().GetPublicKey(), data)
prm.SetArgs(p.epoch, p.peerID.ToV2().GetPublicKey(), data)
err = c.client.Invoke(prm)
if err != nil {