@@ -28,7 +28,7 @@ func DefaultWalletFromSeed(seed string, blockchain blockchain) (Wallet, error) {
2828// (https://github.com/toncenter/tonweb/blob/master/src/contract/wallet/WalletSources.md)
2929func New (key ed25519.PrivateKey , ver Version , workchain int , subWalletId * int , blockchain blockchain ) (Wallet , error ) {
3030 publicKey := key .Public ().(ed25519.PublicKey )
31- address , err := GenerateWalletAddress (publicKey , ver , workchain , subWalletId )
31+ address , err := GenerateWalletAddress (publicKey , ver , workchain , subWalletId , nil )
3232 if err != nil {
3333 return Wallet {}, err
3434 }
@@ -56,8 +56,9 @@ func GenerateWalletAddress(
5656 ver Version ,
5757 workchain int ,
5858 subWalletId * int ,
59+ networkGlobalID * int ,
5960) (ton.AccountID , error ) {
60- state , err := GenerateStateInit (key , ver , workchain , subWalletId )
61+ state , err := GenerateStateInit (key , ver , workchain , subWalletId , networkGlobalID )
6162 if err != nil {
6263 return ton.AccountID {}, fmt .Errorf ("can not generate wallet state: %v" , err )
6364 }
@@ -83,6 +84,7 @@ func GenerateStateInit(
8384 ver Version ,
8485 workchain int ,
8586 subWalletId * int ,
87+ networkGlobalID * int ,
8688) (tlb.StateInit , error ) {
8789 var (
8890 err error
@@ -112,6 +114,26 @@ func GenerateStateInit(
112114 PublicKey : publicKey ,
113115 }
114116 err = tlb .Marshal (dataCell , data )
117+ case V5R1 :
118+ if subWalletId == nil {
119+ id := 0
120+ subWalletId = & id
121+ }
122+ if networkGlobalID == nil {
123+ id := - 239 // -3 for testnet
124+ networkGlobalID = & id
125+ }
126+ data := DataV5 {
127+ Seqno : 0 ,
128+ WalletID : WalletV5ID {
129+ NetworkGlobalID : uint32 (* networkGlobalID ),
130+ Workchain : uint8 (workchain ),
131+ WalletVersion : 0 ,
132+ SubWalletID : uint32 (* subWalletId ),
133+ },
134+ PublicKey : publicKey ,
135+ }
136+ err = tlb .Marshal (dataCell , data )
115137 case HighLoadV2R2 :
116138 if subWalletId == nil {
117139 id := DefaultSubWallet + workchain
@@ -260,7 +282,7 @@ func (w *Wallet) RawSend(
260282func (w * Wallet ) getInit () (tlb.StateInit , error ) {
261283 publicKey := w .key .Public ().(ed25519.PublicKey )
262284 id := int (w .subWalletId )
263- return GenerateStateInit (publicKey , w .ver , int (w .address .Workchain ), & id )
285+ return GenerateStateInit (publicKey , w .ver , int (w .address .Workchain ), & id , nil )
264286}
265287
266288func checkMessagesLimit (msgQty int , ver Version ) error { // TODO: maybe return bool
0 commit comments