Skip to content

Commit

Permalink
tmp
Browse files Browse the repository at this point in the history
  • Loading branch information
linhpn99 committed Aug 26, 2024
2 parents d7b09e1 + 651f5aa commit 8590510
Show file tree
Hide file tree
Showing 4 changed files with 215 additions and 36 deletions.
4 changes: 3 additions & 1 deletion gno.land/pkg/gnoclient/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,10 @@ type IClient interface {
Send(cfg BaseTxCfg, msgs ...bank.MsgSend) (*ctypes.ResultBroadcastTxCommit, error)
AddPackage(cfg BaseTxCfg, msgs ...vm.MsgAddPackage) (*ctypes.ResultBroadcastTxCommit, error)

SignTx(tx std.Tx, accountNumber, sequenceNumber uint64) (*std.Tx, error)
BroadcastTxCommit(signedTx *std.Tx) (*ctypes.ResultBroadcastTxCommit, error)

NewSponsorTransaction(cfg SponsorTxCfg, msgs ...std.Msg) (*std.Tx, error)
SignTransaction(tx std.Tx, accountNumber, sequenceNumber uint64) (*std.Tx, error)
ExecuteSponsorTransaction(tx std.Tx, accountNumber, sequenceNumber uint64) (*ctypes.ResultBroadcastTxCommit, error)
}

Expand Down
79 changes: 60 additions & 19 deletions gno.land/pkg/gnoclient/client_txs.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,17 @@ func (c *Client) Call(cfg BaseTxCfg, msgs ...vm.MsgCall) (*ctypes.ResultBroadcas
return nil, err
}

tx, err := NewCallTx(cfg, msgs...)
if err != nil {
return nil, err
}

return c.signAndBroadcastTxCommit(*tx, cfg.AccountNumber, cfg.SequenceNumber)
}

// NewCallTx makes an unsigned transaction from one or more MsgCall.
// The Caller field must be set.
func NewCallTx(cfg BaseTxCfg, msgs ...vm.MsgCall) (*std.Tx, error) {
// Validate base transaction config
if err := cfg.validate(); err != nil {
return nil, err
Expand All @@ -38,14 +49,12 @@ func (c *Client) Call(cfg BaseTxCfg, msgs ...vm.MsgCall) (*ctypes.ResultBroadcas
}

// Pack transaction
tx := std.Tx{
return &std.Tx{
Msgs: vmMsgs,
Fee: std.NewFee(cfg.GasWanted, gasFeeCoins),
Signatures: nil,
Memo: cfg.Memo,
}

return c.signAndBroadcastTxCommit(tx, cfg.AccountNumber, cfg.SequenceNumber)
}, nil
}

// Run executes one or more MsgRun calls on the blockchain
Expand All @@ -55,6 +64,16 @@ func (c *Client) Run(cfg BaseTxCfg, msgs ...vm.MsgRun) (*ctypes.ResultBroadcastT
return nil, err
}

tx, err := NewRunTx(cfg, msgs...)
if err != nil {
return nil, err
}
return c.signAndBroadcastTxCommit(*tx, cfg.AccountNumber, cfg.SequenceNumber)
}

// NewRunTx makes an unsigned transaction from one or more MsgRun.
// The Caller field must be set.
func NewRunTx(cfg BaseTxCfg, msgs ...vm.MsgRun) (*std.Tx, error) {
// Validate base transaction config
if err := cfg.validate(); err != nil {
return nil, err
Expand All @@ -77,14 +96,12 @@ func (c *Client) Run(cfg BaseTxCfg, msgs ...vm.MsgRun) (*ctypes.ResultBroadcastT
}

// Pack transaction
tx := std.Tx{
return &std.Tx{
Msgs: vmMsgs,
Fee: std.NewFee(cfg.GasWanted, gasFeeCoins),
Signatures: nil,
Memo: cfg.Memo,
}

return c.signAndBroadcastTxCommit(tx, cfg.AccountNumber, cfg.SequenceNumber)
}, nil
}

// Send executes one or more MsgSend calls on the blockchain
Expand All @@ -94,6 +111,16 @@ func (c *Client) Send(cfg BaseTxCfg, msgs ...bank.MsgSend) (*ctypes.ResultBroadc
return nil, err
}

tx, err := NewSendTx(cfg, msgs...)
if err != nil {
return nil, err
}
return c.signAndBroadcastTxCommit(*tx, cfg.AccountNumber, cfg.SequenceNumber)
}

// NewSendTx makes an unsigned transaction from one or more MsgSend.
// The FromAddress field must be set.
func NewSendTx(cfg BaseTxCfg, msgs ...bank.MsgSend) (*std.Tx, error) {
// Validate base transaction config
if err := cfg.validate(); err != nil {
return nil, err
Expand All @@ -116,14 +143,12 @@ func (c *Client) Send(cfg BaseTxCfg, msgs ...bank.MsgSend) (*ctypes.ResultBroadc
}

// Pack transaction
tx := std.Tx{
return &std.Tx{
Msgs: vmMsgs,
Fee: std.NewFee(cfg.GasWanted, gasFeeCoins),
Signatures: nil,
Memo: cfg.Memo,
}

return c.signAndBroadcastTxCommit(tx, cfg.AccountNumber, cfg.SequenceNumber)
}, nil
}

// AddPackage executes one or more AddPackage calls on the blockchain
Expand All @@ -133,6 +158,16 @@ func (c *Client) AddPackage(cfg BaseTxCfg, msgs ...vm.MsgAddPackage) (*ctypes.Re
return nil, err
}

tx, err := NewAddPackageTx(cfg, msgs...)
if err != nil {
return nil, err
}
return c.signAndBroadcastTxCommit(*tx, cfg.AccountNumber, cfg.SequenceNumber)
}

// NewAddPackageTx makes an unsigned transaction from one or more MsgAddPackage.
// The Creator field must be set.
func NewAddPackageTx(cfg BaseTxCfg, msgs ...vm.MsgAddPackage) (*std.Tx, error) {
// Validate base transaction config
if err := cfg.validate(); err != nil {
return nil, err
Expand All @@ -155,14 +190,12 @@ func (c *Client) AddPackage(cfg BaseTxCfg, msgs ...vm.MsgAddPackage) (*ctypes.Re
}

// Pack transaction
tx := std.Tx{
return &std.Tx{
Msgs: vmMsgs,
Fee: std.NewFee(cfg.GasWanted, gasFeeCoins),
Signatures: nil,
Memo: cfg.Memo,
}

return c.signAndBroadcastTxCommit(tx, cfg.AccountNumber, cfg.SequenceNumber)
}, nil
}

// CreateTx creates an signed transaction for various types of messages which used for sponsorship
Expand Down Expand Up @@ -223,7 +256,7 @@ func (c *Client) NewSponsorTransaction(cfg SponsorTxCfg, msgs ...std.Msg) (*std.
}

// SignTx signs a transaction using the client's signer
func (c *Client) SignTransaction(tx std.Tx, accountNumber, sequenceNumber uint64) (*std.Tx, error) {
func (c *Client) SignTx(tx std.Tx, accountNumber, sequenceNumber uint64) (*std.Tx, error) {
// Ensure sequence number and account number are provided
signCfg := SignCfg{
Tx: tx,
Expand Down Expand Up @@ -263,11 +296,19 @@ func (c *Client) ExecuteSponsorTransaction(tx std.Tx, accountNumber, sequenceNum

// signAndBroadcastTxCommit signs a transaction and broadcasts it, returning the result
func (c *Client) signAndBroadcastTxCommit(tx std.Tx, accountNumber, sequenceNumber uint64) (*ctypes.ResultBroadcastTxCommit, error) {
signedTx, err := c.SignTransaction(tx, accountNumber, sequenceNumber)
signedTx, err := c.SignTx(tx, accountNumber, sequenceNumber)
if err != nil {
return nil, errors.Wrap(err, "sign")
return nil, err
}
return c.BroadcastTxCommit(signedTx)
}

// BroadcastTxCommit marshals and broadcasts the signed transaction, returning the result.
// If the result has a delivery error, then return a wrapped error.
func (c *Client) BroadcastTxCommit(signedTx *std.Tx) (*ctypes.ResultBroadcastTxCommit, error) {
if err := c.validateRPCClient(); err != nil {
return nil, err
}
bz, err := amino.Marshal(signedTx)
if err != nil {
return nil, errors.Wrap(err, "marshaling tx binary bytes")
Expand Down
78 changes: 69 additions & 9 deletions gno.land/pkg/gnoclient/client_txs_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@ func TestCallSingle_Sponsor(t *testing.T) {
tx, err := client.NewSponsorTransaction(cfg, msg)
assert.NoError(t, err)

presignedTx, err := client.SignTransaction(*tx, cfg.AccountNumber, cfg.SequenceNumber)
presignedTx, err := client.SignTx(*tx, cfg.AccountNumber, cfg.SequenceNumber)
assert.NoError(t, err)

res, err := client.ExecuteSponsorTransaction(*presignedTx, cfg.AccountNumber, cfg.SequenceNumber)
Expand Down Expand Up @@ -332,7 +332,7 @@ func TestCallMultiple_Sponsor(t *testing.T) {
tx, err := client.NewSponsorTransaction(cfg, msg1, msg2, msg3)
assert.NoError(t, err)

presignedTx, err := client.SignTransaction(*tx, cfg.AccountNumber, cfg.SequenceNumber)
presignedTx, err := client.SignTx(*tx, cfg.AccountNumber, cfg.SequenceNumber)
assert.NoError(t, err)

res, err := client.ExecuteSponsorTransaction(*presignedTx, cfg.AccountNumber, cfg.SequenceNumber)
Expand Down Expand Up @@ -645,7 +645,7 @@ func TestSendSingle_Sponsor(t *testing.T) {
tx, err := client.NewSponsorTransaction(cfg, msg)
assert.NoError(t, err)

presignedTx, err := client.SignTransaction(*tx, cfg.AccountNumber, cfg.SequenceNumber)
presignedTx, err := client.SignTx(*tx, cfg.AccountNumber, cfg.SequenceNumber)
assert.NoError(t, err)

res, err := client.ExecuteSponsorTransaction(*presignedTx, cfg.AccountNumber, cfg.SequenceNumber)
Expand Down Expand Up @@ -775,7 +775,7 @@ func TestSendMultiple_Sponsor(t *testing.T) {
tx, err := client.NewSponsorTransaction(cfg, msg1, msg2)
assert.NoError(t, err)

presignedTx, err := client.SignTransaction(*tx, cfg.AccountNumber, cfg.SequenceNumber)
presignedTx, err := client.SignTx(*tx, cfg.AccountNumber, cfg.SequenceNumber)
assert.NoError(t, err)

res, err := client.ExecuteSponsorTransaction(*presignedTx, cfg.AccountNumber, cfg.SequenceNumber)
Expand Down Expand Up @@ -1121,7 +1121,7 @@ func main() {
tx, err := client.NewSponsorTransaction(cfg, msg)
assert.NoError(t, err)

presignedTx, err := client.SignTransaction(*tx, cfg.AccountNumber, cfg.SequenceNumber)
presignedTx, err := client.SignTx(*tx, cfg.AccountNumber, cfg.SequenceNumber)
assert.NoError(t, err)

res, err := client.ExecuteSponsorTransaction(*presignedTx, cfg.AccountNumber, cfg.SequenceNumber)
Expand Down Expand Up @@ -1298,7 +1298,7 @@ func main() {
tx, err := client.NewSponsorTransaction(cfg, msg1, msg2)
assert.NoError(t, err)

presignedTx, err := client.SignTransaction(*tx, cfg.AccountNumber, cfg.SequenceNumber)
presignedTx, err := client.SignTx(*tx, cfg.AccountNumber, cfg.SequenceNumber)
assert.NoError(t, err)

res, err := client.ExecuteSponsorTransaction(*presignedTx, cfg.AccountNumber, cfg.SequenceNumber)
Expand Down Expand Up @@ -1631,7 +1631,7 @@ func TestAddPackageSingle_Sponsor(t *testing.T) {
tx, err := client.NewSponsorTransaction(cfg, msg)
assert.NoError(t, err)

sponsorTx, err := client.SignTransaction(*tx, cfg.AccountNumber, cfg.SequenceNumber)
sponsorTx, err := client.SignTx(*tx, cfg.AccountNumber, cfg.SequenceNumber)
assert.NoError(t, err)

res, err := client.ExecuteSponsorTransaction(*sponsorTx, cfg.AccountNumber, cfg.SequenceNumber)
Expand Down Expand Up @@ -1797,7 +1797,7 @@ func TestAddPackageMultiple_Sponsor(t *testing.T) {
tx, err := client.NewSponsorTransaction(cfg, msg1, msg2)
assert.NoError(t, err)

sponsorTx, err := client.SignTransaction(*tx, cfg.AccountNumber, cfg.SequenceNumber)
sponsorTx, err := client.SignTx(*tx, cfg.AccountNumber, cfg.SequenceNumber)
assert.NoError(t, err)

res, err := client.ExecuteSponsorTransaction(*sponsorTx, cfg.AccountNumber, cfg.SequenceNumber)
Expand Down Expand Up @@ -2262,7 +2262,7 @@ func TestSignTransaction(t *testing.T) {
t.Run(tc.name, func(t *testing.T) {
t.Parallel()

res, err := tc.client.SignTransaction(tc.tx, 0, 0)
res, err := tc.client.SignTx(tc.tx, 0, 0)
assert.Nil(t, res)
assert.Equal(t, err.Error(), tc.expectedError.Error())
})
Expand Down Expand Up @@ -2396,3 +2396,63 @@ func TestExecuteSponsorTransaction(t *testing.T) {
})
}
}

// The same as client.Call, but test signing separately
func callSigningSeparately(t *testing.T, client Client, cfg BaseTxCfg, msgs ...vm.MsgCall) (*ctypes.ResultBroadcastTxCommit, error) {
t.Helper()
tx, err := NewCallTx(cfg, msgs...)
assert.NoError(t, err)
require.NotNil(t, tx)
signedTx, err := client.SignTx(*tx, cfg.AccountNumber, cfg.SequenceNumber)
assert.NoError(t, err)
require.NotNil(t, signedTx)
res, err := client.BroadcastTxCommit(signedTx)
assert.NoError(t, err)
require.NotNil(t, res)
return res, nil
}

// The same as client.Run, but test signing separately
func runSigningSeparately(t *testing.T, client Client, cfg BaseTxCfg, msgs ...vm.MsgRun) (*ctypes.ResultBroadcastTxCommit, error) {
t.Helper()
tx, err := NewRunTx(cfg, msgs...)
assert.NoError(t, err)
require.NotNil(t, tx)
signedTx, err := client.SignTx(*tx, cfg.AccountNumber, cfg.SequenceNumber)
assert.NoError(t, err)
require.NotNil(t, signedTx)
res, err := client.BroadcastTxCommit(signedTx)
assert.NoError(t, err)
require.NotNil(t, res)
return res, nil
}

// The same as client.Send, but test signing separately
func sendSigningSeparately(t *testing.T, client Client, cfg BaseTxCfg, msgs ...bank.MsgSend) (*ctypes.ResultBroadcastTxCommit, error) {
t.Helper()
tx, err := NewSendTx(cfg, msgs...)
assert.NoError(t, err)
require.NotNil(t, tx)
signedTx, err := client.SignTx(*tx, cfg.AccountNumber, cfg.SequenceNumber)
assert.NoError(t, err)
require.NotNil(t, signedTx)
res, err := client.BroadcastTxCommit(signedTx)
assert.NoError(t, err)
require.NotNil(t, res)
return res, nil
}

// The same as client.AddPackage, but test signing separately
func addPackageSigningSeparately(t *testing.T, client Client, cfg BaseTxCfg, msgs ...vm.MsgAddPackage) (*ctypes.ResultBroadcastTxCommit, error) {
t.Helper()
tx, err := NewAddPackageTx(cfg, msgs...)
assert.NoError(t, err)
require.NotNil(t, tx)
signedTx, err := client.SignTx(*tx, cfg.AccountNumber, cfg.SequenceNumber)
assert.NoError(t, err)
require.NotNil(t, signedTx)
res, err := client.BroadcastTxCommit(signedTx)
assert.NoError(t, err)
require.NotNil(t, res)
return res, nil
}
Loading

0 comments on commit 8590510

Please sign in to comment.