7 "github.com/bytom/bytom/contract"
8 "github.com/bytom/bytom/crypto/sha3pool"
9 chainjson "github.com/bytom/bytom/encoding/json"
10 "github.com/bytom/bytom/errors"
11 "github.com/bytom/bytom/protocol/vm/vmutil"
14 // pre-define errors for supporting bytom errorFormatter
16 ErrNullContract = errors.New("contract is empty")
17 ErrNullContractID = errors.New("contract id is empty")
18 ErrNullContractAlias = errors.New("contract alias is empty")
22 func (a *API) createContract(_ context.Context, ins struct {
23 Alias string `json:"alias"`
24 Contract chainjson.HexBytes `json:"contract"`
26 ins.Alias = strings.TrimSpace(ins.Alias)
28 return NewErrorResponse(ErrNullContractAlias)
31 if ins.Contract == nil {
32 return NewErrorResponse(ErrNullContract)
36 sha3pool.Sum256(hash[:], ins.Contract)
38 registerProgram, err := vmutil.RegisterProgram(ins.Contract)
40 return NewErrorResponse(err)
43 callProgram, err := vmutil.CallContractProgram(hash[:])
45 return NewErrorResponse(err)
48 c := &contract.Contract{
51 Contract: ins.Contract,
52 CallProgram: callProgram,
53 RegisterProgram: registerProgram,
55 if err := a.wallet.ContractReg.SaveContract(c); err != nil {
56 return NewErrorResponse(err)
59 return NewSuccessResponse(c)
62 // POST /update-contract-alias
63 func (a *API) updateContractAlias(_ context.Context, ins struct {
64 ID chainjson.HexBytes `json:"id"`
65 Alias string `json:"alias"`
68 return NewErrorResponse(ErrNullContractID)
71 ins.Alias = strings.TrimSpace(ins.Alias)
73 return NewErrorResponse(ErrNullContractAlias)
76 if err := a.wallet.ContractReg.UpdateContract(ins.ID, ins.Alias); err != nil {
77 return NewErrorResponse(err)
80 return NewSuccessResponse(nil)
84 func (a *API) getContract(_ context.Context, ins struct {
85 ID chainjson.HexBytes `json:"id"`
88 return NewErrorResponse(ErrNullContractID)
91 c, err := a.wallet.ContractReg.GetContract(ins.ID)
93 return NewErrorResponse(err)
96 return NewSuccessResponse(c)
99 // POST /list-contracts
100 func (a *API) listContracts(_ context.Context) Response {
101 cs, err := a.wallet.ContractReg.ListContracts()
103 return NewErrorResponse(err)
106 return NewSuccessResponse(cs)