OSDN Git Service

Mov (#518)
[bytom/vapor.git] / application / mov / contract / contract.go
1 package contract
2
3 import (
4         "encoding/hex"
5
6         "github.com/bytom/vapor/protocol/bc/types"
7         "github.com/bytom/vapor/protocol/vm"
8 )
9
10 const (
11         sizeOfCancelClauseArgs       = 3
12         sizeOfPartialTradeClauseArgs = 3
13         sizeOfFullTradeClauseArgs    = 2
14 )
15
16 // smart contract clause select for differnet unlock method
17 const (
18         PartialTradeClauseSelector int64 = iota
19         FullTradeClauseSelector
20         CancelClauseSelector
21 )
22
23 // IsCancelClauseSelector check if input select cancel clause
24 func IsCancelClauseSelector(input *types.TxInput) bool {
25         return len(input.Arguments()) == sizeOfCancelClauseArgs && hex.EncodeToString(input.Arguments()[len(input.Arguments())-1]) == hex.EncodeToString(vm.Int64Bytes(CancelClauseSelector))
26 }
27
28 // IsTradeClauseSelector check if input select is partial trade clause or full trade clause
29 func IsTradeClauseSelector(input *types.TxInput) bool {
30         return IsPartialTradeClauseSelector(input) || IsFullTradeClauseSelector(input)
31 }
32
33 // IsPartialTradeClauseSelector check if input select partial trade clause
34 func IsPartialTradeClauseSelector(input *types.TxInput) bool {
35         return len(input.Arguments()) == sizeOfPartialTradeClauseArgs && hex.EncodeToString(input.Arguments()[len(input.Arguments())-1]) == hex.EncodeToString(vm.Int64Bytes(PartialTradeClauseSelector))
36 }
37
38 // IsFullTradeClauseSelector check if input select full trade clause
39 func IsFullTradeClauseSelector(input *types.TxInput) bool {
40         return len(input.Arguments()) == sizeOfFullTradeClauseArgs && hex.EncodeToString(input.Arguments()[len(input.Arguments())-1]) == hex.EncodeToString(vm.Int64Bytes(FullTradeClauseSelector))
41 }