Skip to content
This repository was archived by the owner on Jun 6, 2024. It is now read-only.

Commit d13f7b6

Browse files
authored
Merge pull request #45 from 15000785133/qa
add tx_signature and ipfs function
2 parents 96feae2 + 70b6802 commit d13f7b6

File tree

12 files changed

+998
-259
lines changed

12 files changed

+998
-259
lines changed

accounts/seed_generator.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package accounts
2+
3+
import (
4+
"fmt"
5+
"github.com/bnb-chain/zkbnb-go-sdk/signer"
6+
"strings"
7+
)
8+
9+
const SEED_FORMAT = "Access zkbnb account.\n\nOnly sign this message for a trusted client!\nChain ID: %d."
10+
11+
func GenerateSeed(privateKey string, chainId uint64) (string, error) {
12+
signer, err := signer.NewL1Singer(privateKey)
13+
if err != nil {
14+
return "", err
15+
}
16+
17+
messageText := fmt.Sprintf(SEED_FORMAT, chainId)
18+
seedString, err := signer.Sign(messageText)
19+
// if seedString starts with 0x as the prefix, directly trim the 0x prefix
20+
if strings.HasPrefix(seedString, "0x") {
21+
seedString = seedString[2:]
22+
}
23+
if err != nil {
24+
return "", err
25+
}
26+
return seedString, nil
27+
}

client/api.go

Lines changed: 63 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package client
22

33
import (
4-
"math/big"
5-
4+
"github.com/bnb-chain/zkbnb-go-sdk/signer"
65
"github.com/ethereum/go-ethereum/common"
76
"github.com/ethereum/go-ethereum/ethclient"
7+
"math/big"
88

99
"github.com/bnb-chain/zkbnb-go-sdk/accounts"
1010
"github.com/bnb-chain/zkbnb-go-sdk/client/abi"
@@ -120,43 +120,59 @@ type ZkBNBQuerier interface {
120120

121121
// GetNftsByAccountIndex returns nfts by account index
122122
GetNftsByAccountIndex(accountIndex, offset, limit int64) (*types.Nfts, error)
123+
124+
// GetRollbacks returns tx rollback info
125+
GetRollbacks(fromBlockHeight, offset, limit int64) (total uint32, rollbacks []*types.Rollback, err error)
126+
127+
// GetMaxCollectionId returns max collection id by accountIndex
128+
GetMaxCollectionId(accountIndex int64) (*types.MaxCollectionId, error)
129+
130+
// GetNftByTxHash returns nfts by txHash
131+
GetNftByTxHash(txHash string) (*types.NftIndex, error)
132+
133+
// UpdateNftByIndex updates mutable attribute by NftIndex
134+
UpdateNftByIndex(privateKey string, nft *types.UpdateNftReq) (*types.Mutable, error)
123135
}
124136

125137
type ZkBNBTxSender interface {
126-
// SetKeyManager sets the key manager for signing txs.
127-
SetKeyManager(keyManager accounts.KeyManager)
128138

129139
// KeyManager returns the key manager for signing txs.
130140
KeyManager() accounts.KeyManager
131141

132142
// SendRawTx sends signed raw transaction and returns tx hash
133-
SendRawTx(txType uint32, txInfo string) (string, error)
143+
SendRawTx(txType uint32, txInfo string, signature string) (string, error)
144+
145+
// GenerateSignBody generates the signature body for caller to calculate signature
146+
GenerateSignBody(txData interface{}) (string, error)
147+
148+
// GenerateSignature generates the signature for l1 identifier validation
149+
GenerateSignature(privateKey string, txData interface{}) (string, error)
134150

135151
// NOTE: You need to call SetKeyManager first before using following functions
136152

137153
// MintNft will sign tx with key manager and send signed transaction
138-
MintNft(tx *types.MintNftTxReq, ops *types.TransactOpts) (string, error)
154+
MintNft(tx *types.MintNftTxReq, ops *types.TransactOpts, signatureList ...string) (string, error)
139155

140156
// CreateCollection will sign tx with key manager and send signed transaction
141-
CreateCollection(tx *types.CreateCollectionReq, ops *types.TransactOpts) (string, error)
157+
CreateCollection(tx *types.CreateCollectionTxReq, ops *types.TransactOpts, signatureList ...string) (string, error)
142158

143159
// CancelOffer will sign tx with key manager and send signed transaction
144-
CancelOffer(tx *types.CancelOfferReq, ops *types.TransactOpts) (string, error)
160+
CancelOffer(tx *types.CancelOfferTxReq, ops *types.TransactOpts, signatureList ...string) (string, error)
145161

146162
// AtomicMatch will sign tx with key manager and send signed transaction
147-
AtomicMatch(tx *types.AtomicMatchTxReq, ops *types.TransactOpts) (string, error)
163+
AtomicMatch(tx *types.AtomicMatchTxReq, ops *types.TransactOpts, signatureList ...string) (string, error)
148164

149165
// WithdrawNft will sign tx with key manager and send signed transaction
150-
WithdrawNft(tx *types.WithdrawNftTxReq, ops *types.TransactOpts) (string, error)
166+
WithdrawNft(tx *types.WithdrawNftTxReq, ops *types.TransactOpts, signatureList ...string) (string, error)
151167

152168
// TransferNft will sign tx with key manager and send signed transaction
153-
TransferNft(tx *types.TransferNftTxReq, ops *types.TransactOpts) (string, error)
169+
TransferNft(tx *types.TransferNftTxReq, ops *types.TransactOpts, signatureList ...string) (string, error)
154170

155171
// Transfer will sign tx with key manager and send signed transaction
156-
Transfer(tx *types.TransferTxReq, ops *types.TransactOpts) (string, error)
172+
Transfer(tx *types.TransferTxReq, ops *types.TransactOpts, signatureList ...string) (string, error)
157173

158174
// Withdraw will sign tx with key manager and send signed transaction
159-
Withdraw(tx *types.WithdrawReq, ops *types.TransactOpts) (string, error)
175+
Withdraw(tx *types.WithdrawTxReq, ops *types.TransactOpts, signatureList ...string) (string, error)
160176
}
161177

162178
type ZkBNBL1Client interface {
@@ -182,10 +198,42 @@ type ZkBNBL1Client interface {
182198
RequestFullExitNft(accountName string, nftIndex uint32) (common.Hash, error)
183199
}
184200

185-
func NewZkBNBClient(url string) ZkBNBClient {
201+
func NewZkBNBClientWithPrivateKey(url, privateKey string, chainId uint64) (ZkBNBClient, error) {
202+
l1Signer, err := signer.NewL1Singer(privateKey)
203+
if err != nil {
204+
return nil, err
205+
}
206+
seed, err := accounts.GenerateSeed(privateKey, chainId)
207+
if err != nil {
208+
return nil, err
209+
}
210+
keyManager, err := accounts.NewSeedKeyManager(seed)
211+
if err != nil {
212+
return nil, err
213+
}
214+
186215
return &l2Client{
187-
endpoint: url,
216+
endpoint: url,
217+
privateKey: privateKey,
218+
chainId: chainId,
219+
l1Signer: l1Signer,
220+
keyManager: keyManager,
221+
}, nil
222+
}
223+
224+
func NewZkBNBClientWithSeed(url, seed string, chainId uint64) (ZkBNBClient, error) {
225+
keyManager, err := accounts.NewSeedKeyManager(seed)
226+
if err != nil {
227+
return nil, err
188228
}
229+
230+
return &l2Client{
231+
endpoint: url,
232+
privateKey: "",
233+
chainId: chainId,
234+
l1Signer: nil,
235+
keyManager: keyManager,
236+
}, nil
189237
}
190238

191239
func NewZkBNBL1Client(provider, zkbnbContract string) (ZkBNBL1Client, error) {

client/l1_client_test.go

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,28 @@ var l1Endpoint = "https://data-seed-prebsc-1-s1.binance.org:8545"
1515
var zkbnbContract = "0x308fC6afE1A0738C8BAD2cAf5255c47A051e000e"
1616
var l1PrivateKey = "acbaa269bd7573ff12361be4b97201aef019776ea13384681d4e5ba6a88367d9"
1717
var l1Address = "0x8b2C5A5744F42AA9269BaabDd05933a96D8EF911"
18+
var chainNetworkId uint64 = 97
1819

19-
// Random seed
20-
var l2KeyManager, _ = accounts.NewSeedKeyManager("30e1a3762ff9944e9a4ad79477b756ef0aff3d2af76f0f40a0c3ec6ca76cf24b")
21-
var l2Name = "walt.legend"
20+
var l2Name = "walt.zkbnb"
21+
22+
func InitSeedKeyManager() (accounts.KeyManager, error) {
23+
seed, err := accounts.GenerateSeed(l1PrivateKey, chainNetworkId)
24+
if err != nil {
25+
return nil, err
26+
}
27+
keyManager, err := accounts.NewSeedKeyManager(seed)
28+
if err != nil {
29+
return nil, err
30+
}
31+
return keyManager, nil
32+
}
2233

2334
func TestRegisterZNS(t *testing.T) {
35+
l2KeyManager, err := InitSeedKeyManager()
36+
assert.NoError(t, err)
37+
2438
client, _ := NewZkBNBL1Client(l1Endpoint, zkbnbContract)
25-
err := client.SetPrivateKey(l1PrivateKey)
39+
err = client.SetPrivateKey(l1PrivateKey)
2640
assert.NoError(t, err)
2741
pk := l2KeyManager.PubKeyPoint()
2842
fmt.Println(pk[0])

0 commit comments

Comments
 (0)