From 5e88a109ef8f09e0808c16935917e1d0ec8295cd Mon Sep 17 00:00:00 2001 From: robin Date: Thu, 18 Aug 2022 13:29:19 +0800 Subject: [PATCH] feat: trigger contract methods --- pkg/client/contracts.go | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/pkg/client/contracts.go b/pkg/client/contracts.go index ab433a3b..bcd0643c 100644 --- a/pkg/client/contracts.go +++ b/pkg/client/contracts.go @@ -55,33 +55,43 @@ func (g *GrpcClient) triggerConstantContract(ct *core.TriggerSmartContract) (*ap return g.Client.TriggerConstantContract(ctx, ct) } +func (g *GrpcClient) TriggerContractNoPay(from, contractAddress, method, jsonString string, feeLimit int64) (*api.TransactionExtention, error) { + return g.TriggerContract(from, contractAddress, method, jsonString, feeLimit, 0, "", 0) +} + // TriggerContract and return tx result func (g *GrpcClient) TriggerContract(from, contractAddress, method, jsonString string, feeLimit, tAmount int64, tTokenID string, tTokenAmount int64) (*api.TransactionExtention, error) { - fromDesc, err := address.Base58ToAddress(from) + param, err := abi.LoadFromJSON(jsonString) if err != nil { return nil, err } - - contractDesc, err := address.Base58ToAddress(contractAddress) + dataBytes, err := abi.Pack(method, param) if err != nil { return nil, err } + return g.TriggerContractWithPackedData(from, contractAddress, dataBytes, feeLimit, tAmount, tTokenID, tTokenAmount) +} - param, err := abi.LoadFromJSON(jsonString) +func (g *GrpcClient) TriggerContractWithPackedDataNoPay(from, contractAddress string, packedData []byte, feeLimit int64) (*api.TransactionExtention, error) { + return g.TriggerContractWithPackedData(from, contractAddress, packedData, feeLimit, 0, "", 0) +} + +// TriggerContractWithPackedData you can build `packedData` with go-ethereum abi.Pack directly +func (g *GrpcClient) TriggerContractWithPackedData(from, contractAddress string, packedData []byte, + feeLimit, tAmount int64, tTokenID string, tTokenAmount int64) (*api.TransactionExtention, error) { + fromDesc, err := address.Base58ToAddress(from) if err != nil { return nil, err } - - dataBytes, err := abi.Pack(method, param) + contractDesc, err := address.Base58ToAddress(contractAddress) if err != nil { return nil, err } - ct := &core.TriggerSmartContract{ OwnerAddress: fromDesc.Bytes(), ContractAddress: contractDesc.Bytes(), - Data: dataBytes, + Data: packedData, } if tAmount > 0 { ct.CallValue = tAmount @@ -93,7 +103,6 @@ func (g *GrpcClient) TriggerContract(from, contractAddress, method, jsonString s return nil, err } } - return g.triggerContract(ct, feeLimit) }