wallet

package
v1.0.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 5, 2023 License: MIT Imports: 13 Imported by: 15

README

Tools to simplify the deployment and interaction with the wallet smart contract

This library supports:

  1. Address generation from public or private keys for V1-V4 wallets
  2. Message generation for deploying new wallets
  3. Message generation for TON transfer (long comment supported) and custom payload (for V1-V4 supports up to 4 payload messages)

Wallets smart contracts description:

Usage

Example

Documentation

Index

Constants

View Source
const (
	DefaultSubWalletIdV3V4 = 698983191
	DefaultMessageLifetime = time.Minute * 3
	DefaultMessageMode     = 3
)

Variables

View Source
var WORDLIST = []string{}/* 2048 elements not displayed */

Functions

func GenerateWalletAddress

func GenerateWalletAddress(
	key ed25519.PublicKey,
	ver Version,
	workchain int,
	subWalletId *int,
) (tongo.AccountID, error)

GenerateWalletAddress Generate wallet address from known workchain, public key and version. subWalletId is only used in V3 and V4 wallets. Use nil for default value. The version number is associated with a specific implementation of the wallet code (https://github.com/toncenter/tonweb/blob/master/src/contract/wallet/WalletSources.md)

func GetCodeByVer

func GetCodeByVer(ver Version) *boc.Cell

func GetCodeHashByVer

func GetCodeHashByVer(ver Version) tlb.Bits256

func RandomSeed added in v1.0.1

func RandomSeed() string

func SeedToPrivateKey

func SeedToPrivateKey(seed string) (ed25519.PrivateKey, error)

Types

type DataV1V2

type DataV1V2 struct {
	Seqno     uint32
	PublicKey tlb.Bits256
}

type DataV3

type DataV3 struct {
	Seqno       uint32
	SubWalletId uint32
	PublicKey   tlb.Bits256
}

type DataV4

type DataV4 struct {
	Seqno       uint32
	SubWalletId uint32
	PublicKey   tlb.Bits256
	PluginDict  tlb.HashmapE[tlb.Bits264, tlb.Any] // TODO: find type and check size
}

type Message

type Message struct {
	Amount  tlb.Grams
	Address tongo.AccountID
	Body    *boc.Cell
	Code    *boc.Cell
	Data    *boc.Cell
	Bounce  bool
	Mode    uint8
}

func (Message) ToInternal added in v1.0.1

func (m Message) ToInternal() (message tlb.Message, mode uint8, err error)

type MessageV3

type MessageV3 struct {
	SubWalletId uint32
	ValidUntil  uint32
	Seqno       uint32
	Payload     PayloadV1toV4
}

type MessageV4

type MessageV4 struct {
	// Op: 0 - simple send, 1 - deploy and install plugin, 2 - install plugin, 3 - remove plugin
	SubWalletId uint32
	ValidUntil  uint32
	Seqno       uint32
	Op          int8
	Payload     PayloadV1toV4
}

type PayloadV1toV4

type PayloadV1toV4 []RawMessage

func (PayloadV1toV4) MarshalTLB

func (p PayloadV1toV4) MarshalTLB(c *boc.Cell, encoder *tlb.Encoder) error

func (*PayloadV1toV4) UnmarshalTLB

func (p *PayloadV1toV4) UnmarshalTLB(c *boc.Cell, decoder *tlb.Decoder) error

type RawMessage

type RawMessage struct {
	Message *boc.Cell
	Mode    byte
}

type Sendable added in v1.0.1

type Sendable interface {
	ToInternal() (tlb.Message, uint8, error)
}

type SimpleMockBlockchain

type SimpleMockBlockchain struct {
	// contains filtered or unexported fields
}

SimpleMockBlockchain Very simple mock. It does not provide blockchain logic for calculating state and seqno for different addresses. Only for internal tests and demonstration purposes.

func NewMockBlockchain

func NewMockBlockchain(seqno uint32, state tongo.AccountInfo) (*SimpleMockBlockchain, chan []byte)

func (*SimpleMockBlockchain) GetAccountState

func (b *SimpleMockBlockchain) GetAccountState(ctx context.Context, accountID tongo.AccountID) (tlb.ShardAccount, error)

func (*SimpleMockBlockchain) GetSeqno

func (b *SimpleMockBlockchain) GetSeqno(ctx context.Context, account tongo.AccountID) (uint32, error)

func (*SimpleMockBlockchain) SendMessage added in v1.0.1

func (b *SimpleMockBlockchain) SendMessage(ctx context.Context, payload []byte) (uint32, error)

type SimpleTransfer added in v1.0.1

type SimpleTransfer struct {
	Amount  tlb.Grams
	Address tongo.AccountID
	Comment string
}

func (SimpleTransfer) ToInternal added in v1.0.1

func (m SimpleTransfer) ToInternal() (message tlb.Message, mode uint8, err error)

type TextComment

type TextComment string

func (TextComment) MarshalTLB

func (t TextComment) MarshalTLB(c *boc.Cell, encoder *tlb.Encoder) error

func (*TextComment) UnmarshalTLB

func (t *TextComment) UnmarshalTLB(c *boc.Cell, decoder *tlb.Decoder) error

type Version

type Version int
const (
	V1R1 Version = iota
	V1R2
	V1R3
	V2R1
	V2R2
	V3R1
	V3R2
	V4R1
	V4R2
	HighLoadV1R1
	HighLoadV1R2
	HighLoadV2
	HighLoadV2R1
	HighLoadV2R2
)

func GetVerByCodeHash

func GetVerByCodeHash(hash tlb.Bits256) Version

func (Version) ToString

func (v Version) ToString() string

type Wallet

type Wallet struct {
	// contains filtered or unexported fields
}

func DefaultWalletFromSeed

func DefaultWalletFromSeed(seed string, blockchain blockchain) (Wallet, error)

func New added in v1.0.1

func New(key ed25519.PrivateKey, ver Version, workchain int, subWalletId *int, blockchain blockchain) (Wallet, error)

New Fill new Wallet struct from known workchain, public key and version. subWalletId is only used in V3 and V4 wallets. Use nil for default value. The version number is associated with a specific implementation of the wallet code (https://github.com/toncenter/tonweb/blob/master/src/contract/wallet/WalletSources.md)

func (*Wallet) GetAddress

func (w *Wallet) GetAddress() tongo.AccountID

GetAddress returns current wallet address but you can also call function GenerateWalletAddress which returns same address but doesn't require blockchain connection for calling

func (*Wallet) GetBalance

func (w *Wallet) GetBalance(ctx context.Context) (uint64, error)

GetBalance Gets actual TON balance for wallet

func (*Wallet) RawSend

func (w *Wallet) RawSend(
	ctx context.Context,
	seqno uint32,
	validUntil time.Time,
	internalMessages []RawMessage,
	init *tlb.StateInit,
) error

RawSend Generates a signed external message for wallet with custom internal messages, seqno, TTL and init The payload is serialized into bytes and sent by the method SendRawMessage

func (*Wallet) Send added in v1.0.1

func (w *Wallet) Send(ctx context.Context, messages ...Sendable) error

Send Generates a signed external message for wallet with custom internal messages and default TTL Gets actual seqno and attach init for wallet if it needed The payload is serialized into bytes and sent by the method SendRawMessage

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL