mirror of
https://github.com/nspcc-dev/neo-go.git
synced 2024-12-02 19:45:50 +00:00
ddd1d92ff1
The idea here is to preserve the history of `dev` branch development and its code when merging with the `master`. Later this code could be moved into the masters code where appropriate.
61 lines
1.3 KiB
Go
61 lines
1.3 KiB
Go
package transaction
|
|
|
|
import (
|
|
"errors"
|
|
|
|
"github.com/CityOfZion/neo-go/pkg/wire/payload/transaction/types"
|
|
"github.com/CityOfZion/neo-go/pkg/wire/payload/transaction/version"
|
|
"github.com/CityOfZion/neo-go/pkg/wire/util"
|
|
"github.com/CityOfZion/neo-go/pkg/wire/util/fixed8"
|
|
)
|
|
|
|
//Invocation represents an invocation transaction on the neo network
|
|
type Invocation struct {
|
|
*Base
|
|
Script []byte
|
|
Gas fixed8.Fixed8
|
|
}
|
|
|
|
//NewInvocation returns an invocation transaction
|
|
func NewInvocation(ver version.TX) *Invocation {
|
|
basicTrans := createBaseTransaction(types.Invocation, ver)
|
|
|
|
invocation := &Invocation{}
|
|
invocation.Base = basicTrans
|
|
invocation.encodeExclusive = invocation.encodeExcl
|
|
invocation.decodeExclusive = invocation.decodeExcl
|
|
return invocation
|
|
}
|
|
|
|
func (c *Invocation) encodeExcl(bw *util.BinWriter) {
|
|
bw.VarUint(uint64(len(c.Script)))
|
|
bw.Write(c.Script)
|
|
|
|
switch c.Version {
|
|
case 0:
|
|
c.Gas = fixed8.Fixed8(0)
|
|
case 1:
|
|
bw.Write(&c.Gas)
|
|
default:
|
|
bw.Write(&c.Gas)
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func (c *Invocation) decodeExcl(br *util.BinReader) {
|
|
|
|
lenScript := br.VarUint()
|
|
c.Script = make([]byte, lenScript)
|
|
br.Read(&c.Script)
|
|
|
|
switch c.Version {
|
|
case 0:
|
|
c.Gas = fixed8.Fixed8(0)
|
|
case 1:
|
|
br.Read(&c.Gas)
|
|
default:
|
|
br.Err = errors.New("invalid Version Number for Invocation Transaction")
|
|
}
|
|
return
|
|
}
|