wallet

package
v1.6.5 Latest Latest
Warning

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

Go to latest
Published: Apr 12, 2024 License: MIT Imports: 14 Imported by: 4

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 (
	// DefaultSubWallet is a recommended default value of subWalletID according to
	// https://docs.ton.org/develop/smart-contracts/tutorials/wallet#subwallet-ids.
	DefaultSubWallet       = 698983191
	DefaultMessageLifetime = time.Minute * 3
	DefaultMessageMode     = 3
)

Variables

View Source
var (
	ErrAccountIsFrozen         = fmt.Errorf("account is frozen")
	ErrAccountIsNotInitialized = fmt.Errorf("account is not initialized")
)
View Source
var WORDLIST = []string{}/* 2048 elements not displayed */

Functions

func GenerateStateInit added in v1.2.1

func GenerateStateInit(
	key ed25519.PublicKey,
	ver Version,
	workchain int,
	subWalletId *int,
) (tlb.StateInit, error)

func GenerateWalletAddress

func GenerateWalletAddress(
	key ed25519.PublicKey,
	ver Version,
	workchain int,
	subWalletId *int,
) (ton.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 IsMessageModeSet added in v1.1.2

func IsMessageModeSet(modeValue int, mode MessageMode) bool

func RandomSeed added in v1.0.1

func RandomSeed() string

func SeedToPrivateKey

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

func VerifySignature added in v1.2.1

func VerifySignature(ver Version, msg *boc.Cell, publicKey ed25519.PublicKey) error

VerifySignature checks whether the given message (tlb.Message) represented as a cell was signed by the given public key of a wallet contract. On success, it returns nil. Otherwise, it returns an error.

Types

type DataHighloadV4 added in v1.2.1

type DataHighloadV4 struct {
	SubWalletId     uint32
	LastCleanedTime uint64
	PublicKey       tlb.Bits256
	Queries         tlb.HashmapE[tlb.Uint64, tlb.Any]
}

DataHighloadV4 represents data of a highload-wallet contract.

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 HighloadV2Message added in v1.2.1

type HighloadV2Message struct {
	SubWalletId    uint32
	BoundedQueryID uint64
	RawMessages    PayloadHighload
}

func DecodeHighloadV2Message added in v1.4.2

func DecodeHighloadV2Message(msg *boc.Cell) (*HighloadV2Message, error)

type Message

type Message struct {
	Amount  tlb.Grams
	Address ton.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 MessageMode added in v1.1.2

type MessageMode int
const (
	// AttachAllRemainingBalance means that a wallet will transfer all the remaining balance to the destination
	// instead of the value originally indicated in the message.
	AttachAllRemainingBalance MessageMode = 128
	// AttachAllRemainingBalanceOfInboundMessage means that
	// a wallet will transfer all the remaining value of the inbound message in addition to the value initially indicated
	// in the new message
	AttachAllRemainingBalanceOfInboundMessage MessageMode = 64
	// DestroyAccount means that current account must be destroyed if its resulting balance is zero (often used with Mode 128).
	DestroyAccount MessageMode = 32
)

For detailed information about message modes take a look at https://docs.ton.org/develop/smart-contracts/messages.

type MessageV3

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

func DecodeMessageV3 added in v1.2.1

func DecodeMessageV3(msg *boc.Cell) (*MessageV3, error)

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
	RawMessages PayloadV1toV4
}

func DecodeMessageV4 added in v1.2.1

func DecodeMessageV4(msg *boc.Cell) (*MessageV4, error)

type PayloadHighload added in v1.2.1

type PayloadHighload []RawMessage

func (PayloadHighload) MarshalTLB added in v1.2.1

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

func (*PayloadHighload) UnmarshalTLB added in v1.4.2

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

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
}

RawMessage when received by a wallet contract will be resent as an outgoing message.

func ExtractRawMessages added in v1.1.1

func ExtractRawMessages(ver Version, msg *boc.Cell) ([]RawMessage, error)

ExtractRawMessages extracts a list of RawMessages from an external message.

type Sendable added in v1.0.1

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

type SignedMsgBody added in v1.2.1

type SignedMsgBody struct {
	Sign    tlb.Bits512
	Message tlb.Any
}

SignedMsgBody represents an external message's body sent by an offchain application to a wallet contract. The signature is created using the wallet's private key. So the wallet will verify that it is the recipient of the payload and accept the payload.

func (*SignedMsgBody) Verify added in v1.2.1

func (body *SignedMsgBody) Verify(publicKey ed25519.PublicKey) 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 tlb.ShardAccount) (*SimpleMockBlockchain, chan []byte)

func (*SimpleMockBlockchain) GetAccountState

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

func (*SimpleMockBlockchain) GetSeqno

func (b *SimpleMockBlockchain) GetSeqno(ctx context.Context, account ton.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    ton.AccountID
	Comment    string
	Bounceable bool
}

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, bool)

GetVerByCodeHash returns (Version, true) if there is code with the given hash. Otherwise, it returns (0, false).

func GetWalletVersion added in v1.4.2

func GetWalletVersion(state tlb.ShardAccount, msg tlb.Message) (Version, bool, error)

GetWalletVersion returns a wallet version by the given state of an account and an incoming message to the account. An incoming message is needed in case when a wallet has not been initialized yet. In this case, we take its code from the message's StateInit.

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) CreateMessage added in v1.2.1

func (w *Wallet) CreateMessage(lifetime time.Duration, messages ...Sendable) (*tlb.Message, error)

func (*Wallet) GetAddress

func (w *Wallet) GetAddress() ton.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) RawSendV2 added in v1.2.0

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

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

func (*Wallet) SendV2 added in v1.2.0

func (w *Wallet) SendV2(
	ctx context.Context,
	waitingConfirmation time.Duration,
	messages ...Sendable,
) (ton.Bits256, error)

Jump to

Keyboard shortcuts

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