Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

*: add invocations to applicationlog #3569

Open
wants to merge 16 commits into
base: master
Choose a base branch
from
4 changes: 3 additions & 1 deletion pkg/core/interop/contract/call.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,8 @@ func Call(ic *interop.Context) error {
arr := stackitem.NewArray(args)
ixje marked this conversation as resolved.
Show resolved Hide resolved
arrCount := len(args)
valid := true
if _, err = ic.DAO.GetItemCtx().Serialize(arr, false); err != nil {
argBytes := []byte{}
ixje marked this conversation as resolved.
Show resolved Hide resolved
if argBytes, err = ic.DAO.GetItemCtx().Serialize(arr, false); err != nil {
arr = stackitem.NewArray([]stackitem.Item{})
valid = false
}
Expand All @@ -83,6 +84,7 @@ func Call(ic *interop.Context) error {
Hash: u,
Method: method,
Arguments: arr,
ArgumentsBytes: argBytes,
ArgumentsCount: uint32(arrCount),
IsValid: valid,
})
Expand Down
20 changes: 6 additions & 14 deletions pkg/core/state/notification_event.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,36 +24,28 @@ type ContractInvocation struct {
Hash util.Uint160 `json:"contract_hash"`
Method string `json:"method"`
Arguments *stackitem.Array `json:"arguments"`
ArgumentsBytes []byte `json:"arguments_bytes"`
AnnaShaleva marked this conversation as resolved.
Show resolved Hide resolved
ArgumentsCount uint32 `json:"arguments_count"`
ixje marked this conversation as resolved.
Show resolved Hide resolved
IsValid bool `json:"is_valid"`
ixje marked this conversation as resolved.
Show resolved Hide resolved
}

func (ci *ContractInvocation) DecodeBinary(r *io.BinReader) {
ci.Hash.DecodeBinary(r)
ci.Method = r.ReadString()
args := stackitem.DecodeBinary(r)
if r.Err != nil {
return
}
arr, ok := args.Value().([]stackitem.Item)
if !ok {
r.Err = errors.New("array or Struct expected")
ci.ArgumentsBytes = r.ReadVarBytes()
si, err := stackitem.Deserialize(ci.ArgumentsBytes)
if err != nil {
return
}
ci.Arguments = stackitem.NewArray(arr)
ci.Arguments = si.(*stackitem.Array)
ci.ArgumentsCount = r.ReadU32LE()
ci.IsValid = r.ReadBool()
}

func (ci *ContractInvocation) EncodeBinaryWithContext(w *io.BinWriter, sc *stackitem.SerializationContext) {
ci.Hash.EncodeBinary(w)
w.WriteString(ci.Method)
b, err := sc.Serialize(ci.Arguments, false)
if err != nil {
w.Err = err
return
}
w.WriteBytes(b)
w.WriteVarBytes(ci.ArgumentsBytes)
w.WriteU32LE(ci.ArgumentsCount)
w.WriteBool(ci.IsValid)
}
Expand Down