Provides message encoding and decoding according to the ABI specification.
encode_message_body – Encodes message body according to ABI function call.
attach_signature_to_message_body
encode_message – Encodes an ABI-compatible message
encode_internal_message – Encodes an internal ABI-compatible message
attach_signature – Combines hex
-encoded signature
with base64
-encoded unsigned_message
. Returns signed message encoded in base64
.
decode_message – Decodes message body using provided message BOC and ABI.
decode_message_body – Decodes message body using provided body BOC and ABI.
encode_account – Creates account state BOC
decode_account_data – Decodes account data using provided data BOC and ABI.
FunctionHeader – The ABI function header.
ParamsOfAttachSignatureToMessageBody
ResultOfAttachSignatureToMessageBody
Encodes message body according to ABI function call.
type ParamsOfEncodeMessageBody = {
abi: Abi,
call_set: CallSet,
is_internal: boolean,
signer: Signer,
processing_try_index?: number
}
type ResultOfEncodeMessageBody = {
body: string,
data_to_sign?: string
}
function encode_message_body(
params: ParamsOfEncodeMessageBody,
): Promise<ResultOfEncodeMessageBody>;
abi
: Abi – Contract ABI.call_set
: CallSet – Function call parameters.
Must be specified in non deploy message.
In case of deploy message contains parameters of constructor.is_internal
: boolean – True if internal message body must be encoded.signer
: Signer – Signing parameters.processing_try_index
?: number – Processing try index.
Used in message processing with retries.
Encoder uses the provided try index to calculate message
expiration time.
Expiration timeouts will grow with every retry.
Default value is 0.
body
: string – Message body BOC encoded withbase64
.data_to_sign
?: string – Optional data to sign.
Encoded withbase64
.
Presents whenmessage
is unsigned. Can be used for external
message signing. Is this case you need to sing this data and
produce signed message usingabi.attach_signature
.
type ParamsOfAttachSignatureToMessageBody = {
abi: Abi,
public_key: string,
message: string,
signature: string
}
type ResultOfAttachSignatureToMessageBody = {
body: string
}
function attach_signature_to_message_body(
params: ParamsOfAttachSignatureToMessageBody,
): Promise<ResultOfAttachSignatureToMessageBody>;
abi
: Abi – Contract ABIpublic_key
: string – Public key.
Must be encoded withhex
.message
: string – Unsigned message body BOC.
Must be encoded withbase64
.signature
: string – Signature.
Must be encoded withhex
.
body
: string
Encodes an ABI-compatible message
Allows to encode deploy and function call messages, both signed and unsigned.
Use cases include messages of any possible type:
- deploy with initial function call (i.e.
constructor
or any other function that is used for some kind of initialization); - deploy without initial function call;
- signed/unsigned + data for signing.
Signer
defines how the message should or shouldn't be signed:
Signer::None
creates an unsigned message. This may be needed in case of some public methods,
that do not require authorization by pubkey.
Signer::External
takes public key and returns data_to_sign
for later signing.
Use attach_signature
method with the result signature to get the signed message.
Signer::Keys
creates a signed message with provided key pair.
[SOON] Signer::SigningBox
Allows using a special interface to implement signing
without private key disclosure to SDK. For instance, in case of using a cold wallet or HSM,
when application calls some API to sign data.
There is an optional public key can be provided in deploy set in order to substitute one in TVM file.
Public key resolving priority:
- Public key from deploy set.
- Public key, specified in TVM file.
- Public key, provided by signer.
type ParamsOfEncodeMessage = {
abi: Abi,
address?: string,
deploy_set?: DeploySet,
call_set?: CallSet,
signer: Signer,
processing_try_index?: number
}
type ResultOfEncodeMessage = {
message: string,
data_to_sign?: string,
address: string,
message_id: string
}
function encode_message(
params: ParamsOfEncodeMessage,
): Promise<ResultOfEncodeMessage>;
abi
: Abi – Contract ABI.address
?: string – Target address the message will be sent to.
Must be specified in case of non-deploy message.deploy_set
?: DeploySet – Deploy parameters.
Must be specified in case of deploy message.call_set
?: CallSet – Function call parameters.
Must be specified in case of non-deploy message.
In case of deploy message it is optional and contains parameters
of the functions that will to be called upon deploy transaction.signer
: Signer – Signing parameters.processing_try_index
?: number – Processing try index.
Used in message processing with retries (if contract's ABI includes "expire" header).
Encoder uses the provided try index to calculate message
expiration time. The 1st message expiration time is specified in
Client config.
Expiration timeouts will grow with every retry.
Retry grow factor is set in Client config:
<.....add config parameter with default value here>
Default value is 0.
message
: string – Message BOC encoded withbase64
.data_to_sign
?: string – Optional data to be signed encoded inbase64
.
Returned in case ofSigner::External
. Can be used for external
message signing. Is this case you need to use this data to create signature and
then produce signed message usingabi.attach_signature
.address
: string – Destination address.message_id
: string – Message id.
Encodes an internal ABI-compatible message
Allows to encode deploy and function call messages.
Use cases include messages of any possible type:
- deploy with initial function call (i.e.
constructor
or any other function that is used for some kind of initialization); - deploy without initial function call;
- simple function call
There is an optional public key can be provided in deploy set in order to substitute one in TVM file.
Public key resolving priority:
- Public key from deploy set.
- Public key, specified in TVM file.
type ParamsOfEncodeInternalMessage = {
abi?: Abi,
address?: string,
src_address?: string,
deploy_set?: DeploySet,
call_set?: CallSet,
value: string,
bounce?: boolean,
enable_ihr?: boolean
}
type ResultOfEncodeInternalMessage = {
message: string,
address: string,
message_id: string
}
function encode_internal_message(
params: ParamsOfEncodeInternalMessage,
): Promise<ResultOfEncodeInternalMessage>;
abi
?: Abi – Contract ABI.
Can be None if both deploy_set and call_set are None.address
?: string – Target address the message will be sent to.
Must be specified in case of non-deploy message.src_address
?: string – Source address of the message.deploy_set
?: DeploySet – Deploy parameters.
Must be specified in case of deploy message.call_set
?: CallSet – Function call parameters.
Must be specified in case of non-deploy message.
In case of deploy message it is optional and contains parameters
of the functions that will to be called upon deploy transaction.value
: string – Value in nanotokens to be sent with message.bounce
?: boolean – Flag of bounceable message.
Default is true.enable_ihr
?: boolean – Enable Instant Hypercube Routing for the message.
Default is false.
message
: string – Message BOC encoded withbase64
.address
: string – Destination address.message_id
: string – Message id.
Combines hex
-encoded signature
with base64
-encoded unsigned_message
. Returns signed message encoded in base64
.
type ParamsOfAttachSignature = {
abi: Abi,
public_key: string,
message: string,
signature: string
}
type ResultOfAttachSignature = {
message: string,
message_id: string
}
function attach_signature(
params: ParamsOfAttachSignature,
): Promise<ResultOfAttachSignature>;
abi
: Abi – Contract ABIpublic_key
: string – Public key encoded inhex
.message
: string – Unsigned message BOC encoded inbase64
.signature
: string – Signature encoded inhex
.
message
: string – Signed message BOCmessage_id
: string – Message ID
Decodes message body using provided message BOC and ABI.
type ParamsOfDecodeMessage = {
abi: Abi,
message: string
}
type DecodedMessageBody = {
body_type: MessageBodyType,
name: string,
value?: any,
header?: FunctionHeader
}
function decode_message(
params: ParamsOfDecodeMessage,
): Promise<DecodedMessageBody>;
abi
: Abi – contract ABImessage
: string – Message BOC
body_type
: MessageBodyType – Type of the message body content.name
: string – Function or event name.value
?: any – Parameters or result value.header
?: FunctionHeader – Function header.
Decodes message body using provided body BOC and ABI.
type ParamsOfDecodeMessageBody = {
abi: Abi,
body: string,
is_internal: boolean
}
type DecodedMessageBody = {
body_type: MessageBodyType,
name: string,
value?: any,
header?: FunctionHeader
}
function decode_message_body(
params: ParamsOfDecodeMessageBody,
): Promise<DecodedMessageBody>;
abi
: Abi – Contract ABI used to decode.body
: string – Message body BOC encoded inbase64
.is_internal
: boolean – True if the body belongs to the internal message.
body_type
: MessageBodyType – Type of the message body content.name
: string – Function or event name.value
?: any – Parameters or result value.header
?: FunctionHeader – Function header.
Creates account state BOC
Creates account state provided with one of these sets of data :
- BOC of code, BOC of data, BOC of library
- TVC (string in
base64
), keys, init params
type ParamsOfEncodeAccount = {
state_init: StateInitSource,
balance?: bigint,
last_trans_lt?: bigint,
last_paid?: number,
boc_cache?: BocCacheType
}
type ResultOfEncodeAccount = {
account: string,
id: string
}
function encode_account(
params: ParamsOfEncodeAccount,
): Promise<ResultOfEncodeAccount>;
state_init
: StateInitSource – Source of the account state init.balance
?: bigint – Initial balance.last_trans_lt
?: bigint – Initial value for thelast_trans_lt
.last_paid
?: number – Initial value for thelast_paid
.boc_cache
?: BocCacheType – Cache type to put the result.
The BOC itself returned if no cache type provided
account
: string – Account BOC encoded inbase64
.id
: string – Account ID encoded inhex
.
Decodes account data using provided data BOC and ABI.
Note: this feature requires ABI 2.1 or higher.
type ParamsOfDecodeAccountData = {
abi: Abi,
data: string
}
type ResultOfDecodeData = {
data: any
}
function decode_account_data(
params: ParamsOfDecodeAccountData,
): Promise<ResultOfDecodeData>;
abi
: Abi – Contract ABIdata
: string – Data BOC or BOC handle
data
: any – Decoded data as a JSON structure.
enum AbiErrorCode {
RequiredAddressMissingForEncodeMessage = 301,
RequiredCallSetMissingForEncodeMessage = 302,
InvalidJson = 303,
InvalidMessage = 304,
EncodeDeployMessageFailed = 305,
EncodeRunMessageFailed = 306,
AttachSignatureFailed = 307,
InvalidTvcImage = 308,
RequiredPublicKeyMissingForFunctionHeader = 309,
InvalidSigner = 310,
InvalidAbi = 311,
InvalidFunctionId = 312,
InvalidData = 313
}
One of the following value:
RequiredAddressMissingForEncodeMessage = 301
RequiredCallSetMissingForEncodeMessage = 302
InvalidJson = 303
InvalidMessage = 304
EncodeDeployMessageFailed = 305
EncodeRunMessageFailed = 306
AttachSignatureFailed = 307
InvalidTvcImage = 308
RequiredPublicKeyMissingForFunctionHeader = 309
InvalidSigner = 310
InvalidAbi = 311
InvalidFunctionId = 312
InvalidData = 313
type Abi = {
type: 'Contract'
value: AbiContract
} | {
type: 'Json'
value: string
} | {
type: 'Handle'
value: AbiHandle
} | {
type: 'Serialized'
value: AbiContract
}
Depends on value of the type
field.
When type is 'Contract'
value
: AbiContract
When type is 'Json'
value
: string
When type is 'Handle'
value
: AbiHandle
When type is 'Serialized'
value
: AbiContract
Variant constructors:
function abiContract(value: AbiContract): Abi;
function abiJson(value: string): Abi;
function abiHandle(value: AbiHandle): Abi;
function abiSerialized(value: AbiContract): Abi;
type AbiHandle = number
The ABI function header.
Includes several hidden function parameters that contract uses for security, message delivery monitoring and replay protection reasons.
The actual set of header fields depends on the contract's ABI. If a contract's ABI does not include some headers, then they are not filled.
type FunctionHeader = {
expire?: number,
time?: bigint,
pubkey?: string
}
expire
?: number – Message expiration time in seconds. If not specified - calculated automatically from message_expiration_timeout(), try_index and message_expiration_timeout_grow_factor() (if ABI includesexpire
header).time
?: bigint – Message creation time in milliseconds.
If not specified,now
is used (if ABI includestime
header).pubkey
?: string – Public key is used by the contract to check the signature.
Encoded inhex
. If not specified, method fails with exception (if ABI includespubkey
header)..
type CallSet = {
function_name: string,
header?: FunctionHeader,
input?: any
}
function_name
: string – Function name that is being called. Or function id encoded as string in hex (starting with 0x).header
?: FunctionHeader – Function header.
If an application omits some header parameters required by the
contract's ABI, the library will set the default values for
them.input
?: any – Function input parameters according to ABI.
type DeploySet = {
tvc: string,
workchain_id?: number,
initial_data?: any,
initial_pubkey?: string
}
tvc
: string – Content of TVC file encoded inbase64
.workchain_id
?: number – Target workchain for destination address.
Default is0
.initial_data
?: any – List of initial values for contract's public variables.initial_pubkey
?: string – Optional public key that can be provided in deploy set in order to substitute one in TVM file or provided by Signer.
Public key resolving priority:
1. Public key from deploy set.
2. Public key, specified in TVM file.
3. Public key, provided by Signer.
type Signer = {
type: 'None'
} | {
type: 'External'
public_key: string
} | {
type: 'Keys'
keys: KeyPair
} | {
type: 'SigningBox'
handle: SigningBoxHandle
}
Depends on value of the type
field.
When type is 'None'
No keys are provided.
Creates an unsigned message.
When type is 'External'
Only public key is provided in unprefixed hex string format to generate unsigned message and data_to_sign
which can be signed later.
public_key
: string
When type is 'Keys'
Key pair is provided for signing
keys
: KeyPair
When type is 'SigningBox'
Signing Box interface is provided for signing, allows Dapps to sign messages using external APIs, such as HSM, cold wallet, etc.
handle
: SigningBoxHandle
Variant constructors:
function signerNone(): Signer;
function signerExternal(public_key: string): Signer;
function signerKeys(keys: KeyPair): Signer;
function signerSigningBox(handle: SigningBoxHandle): Signer;
enum MessageBodyType {
Input = "Input",
Output = "Output",
InternalOutput = "InternalOutput",
Event = "Event"
}
One of the following value:
Input = "Input"
– Message contains the input of the ABI function.Output = "Output"
– Message contains the output of the ABI function.InternalOutput = "InternalOutput"
– Message contains the input of the imported ABI function.
Occurs when contract sends an internal message to other
contract.Event = "Event"
– Message contains the input of the ABI event.
type StateInitSource = {
type: 'Message'
source: MessageSource
} | {
type: 'StateInit'
code: string,
data: string,
library?: string
} | {
type: 'Tvc'
tvc: string,
public_key?: string,
init_params?: StateInitParams
}
Depends on value of the type
field.
When type is 'Message'
Deploy message.
source
: MessageSource
When type is 'StateInit'
State init data.
code
: string – Code BOC.
Encoded inbase64
.data
: string – Data BOC.
Encoded inbase64
.library
?: string – Library BOC.
Encoded inbase64
.
When type is 'Tvc'
Content of the TVC file.
Encoded in base64
.
tvc
: stringpublic_key
?: stringinit_params
?: StateInitParams
Variant constructors:
function stateInitSourceMessage(source: MessageSource): StateInitSource;
function stateInitSourceStateInit(code: string, data: string, library?: string): StateInitSource;
function stateInitSourceTvc(tvc: string, public_key?: string, init_params?: StateInitParams): StateInitSource;
type StateInitParams = {
abi: Abi,
value: any
}
abi
: Abivalue
: any
type MessageSource = {
type: 'Encoded'
message: string,
abi?: Abi
} | ({
type: 'EncodingParams'
} & ParamsOfEncodeMessage)
Depends on value of the type
field.
When type is 'Encoded'
message
: stringabi
?: Abi
When type is 'EncodingParams'
abi
: Abi – Contract ABI.address
?: string – Target address the message will be sent to.
Must be specified in case of non-deploy message.deploy_set
?: DeploySet – Deploy parameters.
Must be specified in case of deploy message.call_set
?: CallSet – Function call parameters.
Must be specified in case of non-deploy message.
In case of deploy message it is optional and contains parameters
of the functions that will to be called upon deploy transaction.signer
: Signer – Signing parameters.processing_try_index
?: number – Processing try index.
Used in message processing with retries (if contract's ABI includes "expire" header).
Encoder uses the provided try index to calculate message
expiration time. The 1st message expiration time is specified in
Client config.
Expiration timeouts will grow with every retry.
Retry grow factor is set in Client config:
<.....add config parameter with default value here>
Default value is 0.
Variant constructors:
function messageSourceEncoded(message: string, abi?: Abi): MessageSource;
function messageSourceEncodingParams(params: ParamsOfEncodeMessage): MessageSource;
type AbiParam = {
name: string,
type: string,
components?: AbiParam[]
}
name
: stringtype
: stringcomponents
?: AbiParam[]
type AbiEvent = {
name: string,
inputs: AbiParam[],
id?: string | null
}
name
: stringinputs
: AbiParam[]id
?: string?
type AbiData = {
key: number,
name: string,
type: string,
components?: AbiParam[]
}
key
: numbername
: stringtype
: stringcomponents
?: AbiParam[]
type AbiFunction = {
name: string,
inputs: AbiParam[],
outputs: AbiParam[],
id?: string | null
}
type AbiContract = {
'ABI version'?: number,
abi_version?: number,
version?: string | null,
header?: string[],
functions?: AbiFunction[],
events?: AbiEvent[],
data?: AbiData[],
fields?: AbiParam[]
}
ABI version
?: numberabi_version
?: numberversion
?: string?header
?: string[]functions
?: AbiFunction[]events
?: AbiEvent[]data
?: AbiData[]fields
?: AbiParam[]
type ParamsOfEncodeMessageBody = {
abi: Abi,
call_set: CallSet,
is_internal: boolean,
signer: Signer,
processing_try_index?: number
}
abi
: Abi – Contract ABI.call_set
: CallSet – Function call parameters.
Must be specified in non deploy message.
In case of deploy message contains parameters of constructor.is_internal
: boolean – True if internal message body must be encoded.signer
: Signer – Signing parameters.processing_try_index
?: number – Processing try index.
Used in message processing with retries.
Encoder uses the provided try index to calculate message
expiration time.
Expiration timeouts will grow with every retry.
Default value is 0.
type ResultOfEncodeMessageBody = {
body: string,
data_to_sign?: string
}
body
: string – Message body BOC encoded withbase64
.data_to_sign
?: string – Optional data to sign.
Encoded withbase64
.
Presents whenmessage
is unsigned. Can be used for external
message signing. Is this case you need to sing this data and
produce signed message usingabi.attach_signature
.
type ParamsOfAttachSignatureToMessageBody = {
abi: Abi,
public_key: string,
message: string,
signature: string
}
abi
: Abi – Contract ABIpublic_key
: string – Public key.
Must be encoded withhex
.message
: string – Unsigned message body BOC.
Must be encoded withbase64
.signature
: string – Signature.
Must be encoded withhex
.
type ResultOfAttachSignatureToMessageBody = {
body: string
}
body
: string
type ParamsOfEncodeMessage = {
abi: Abi,
address?: string,
deploy_set?: DeploySet,
call_set?: CallSet,
signer: Signer,
processing_try_index?: number
}
abi
: Abi – Contract ABI.address
?: string – Target address the message will be sent to.
Must be specified in case of non-deploy message.deploy_set
?: DeploySet – Deploy parameters.
Must be specified in case of deploy message.call_set
?: CallSet – Function call parameters.
Must be specified in case of non-deploy message.
In case of deploy message it is optional and contains parameters
of the functions that will to be called upon deploy transaction.signer
: Signer – Signing parameters.processing_try_index
?: number – Processing try index.
Used in message processing with retries (if contract's ABI includes "expire" header).
Encoder uses the provided try index to calculate message
expiration time. The 1st message expiration time is specified in
Client config.
Expiration timeouts will grow with every retry.
Retry grow factor is set in Client config:
<.....add config parameter with default value here>
Default value is 0.
type ResultOfEncodeMessage = {
message: string,
data_to_sign?: string,
address: string,
message_id: string
}
message
: string – Message BOC encoded withbase64
.data_to_sign
?: string – Optional data to be signed encoded inbase64
.
Returned in case ofSigner::External
. Can be used for external
message signing. Is this case you need to use this data to create signature and
then produce signed message usingabi.attach_signature
.address
: string – Destination address.message_id
: string – Message id.
type ParamsOfEncodeInternalMessage = {
abi?: Abi,
address?: string,
src_address?: string,
deploy_set?: DeploySet,
call_set?: CallSet,
value: string,
bounce?: boolean,
enable_ihr?: boolean
}
abi
?: Abi – Contract ABI.
Can be None if both deploy_set and call_set are None.address
?: string – Target address the message will be sent to.
Must be specified in case of non-deploy message.src_address
?: string – Source address of the message.deploy_set
?: DeploySet – Deploy parameters.
Must be specified in case of deploy message.call_set
?: CallSet – Function call parameters.
Must be specified in case of non-deploy message.
In case of deploy message it is optional and contains parameters
of the functions that will to be called upon deploy transaction.value
: string – Value in nanotokens to be sent with message.bounce
?: boolean – Flag of bounceable message.
Default is true.enable_ihr
?: boolean – Enable Instant Hypercube Routing for the message.
Default is false.
type ResultOfEncodeInternalMessage = {
message: string,
address: string,
message_id: string
}
message
: string – Message BOC encoded withbase64
.address
: string – Destination address.message_id
: string – Message id.
type ParamsOfAttachSignature = {
abi: Abi,
public_key: string,
message: string,
signature: string
}
abi
: Abi – Contract ABIpublic_key
: string – Public key encoded inhex
.message
: string – Unsigned message BOC encoded inbase64
.signature
: string – Signature encoded inhex
.
type ResultOfAttachSignature = {
message: string,
message_id: string
}
message
: string – Signed message BOCmessage_id
: string – Message ID
type ParamsOfDecodeMessage = {
abi: Abi,
message: string
}
abi
: Abi – contract ABImessage
: string – Message BOC
type DecodedMessageBody = {
body_type: MessageBodyType,
name: string,
value?: any,
header?: FunctionHeader
}
body_type
: MessageBodyType – Type of the message body content.name
: string – Function or event name.value
?: any – Parameters or result value.header
?: FunctionHeader – Function header.
type ParamsOfDecodeMessageBody = {
abi: Abi,
body: string,
is_internal: boolean
}
abi
: Abi – Contract ABI used to decode.body
: string – Message body BOC encoded inbase64
.is_internal
: boolean – True if the body belongs to the internal message.
type ParamsOfEncodeAccount = {
state_init: StateInitSource,
balance?: bigint,
last_trans_lt?: bigint,
last_paid?: number,
boc_cache?: BocCacheType
}
state_init
: StateInitSource – Source of the account state init.balance
?: bigint – Initial balance.last_trans_lt
?: bigint – Initial value for thelast_trans_lt
.last_paid
?: number – Initial value for thelast_paid
.boc_cache
?: BocCacheType – Cache type to put the result.
The BOC itself returned if no cache type provided
type ResultOfEncodeAccount = {
account: string,
id: string
}
account
: string – Account BOC encoded inbase64
.id
: string – Account ID encoded inhex
.
type ParamsOfDecodeAccountData = {
abi: Abi,
data: string
}
abi
: Abi – Contract ABIdata
: string – Data BOC or BOC handle
type ResultOfDecodeData = {
data: any
}
data
: any – Decoded data as a JSON structure.