Skip to content

@stdlib/deploy

Provides unified mechanisms for deployments.

To use this library, import @stdlib/deploy:

import "@stdlib/deploy";

Messages

Deploy

Message struct used in a receiver of the deprecated Deployable trait.

message Deploy {
/// Unique identifier for tracking transactions across multiple contracts.
queryId: Int as uint64;
}

DeployOk

Forwarded message struct used in deprecated Deployable and FactoryDeployable traits.

message DeployOk {
/// Unique identifier for tracking transactions across multiple contracts.
queryId: Int as uint64;
}

FactoryDeploy

Message struct used in a receiver of the deprecated FactoryDeployable trait.

message FactoryDeploy {
/// Unique identifier for tracking transactions across multiple contracts.
queryId: Int as uint64;
/// Address to forward `DeployOk` message to.
cashback: Address;
}

Traits

Deployable

Deprecated since Tact 1.6

The trait Deployable provides a unified mechanism for deployments by implementing a simple receiver for the Deploy message.

All contracts are deployed by sending them a message. While any message can be used for this purpose, you can use the special Deploy message.

This message has a single field, queryId, provided by the deployer and is usually set to zero. If the deployment succeeds, the contract will reply with a DeployOk message and echo the same queryId in the response.

Beware that the receiver handling the Deploy message sends the DeployOk reply using the self.reply() function, which returns all excessive funds from the incoming message back to the sender. That is, contracts deployed using the Deployable trait have a balance of 0 Toncoin after the deployment is completed.

Source code:

trait Deployable {
receive(deploy: Deploy) {
self.notify(DeployOk { queryId: deploy.queryId }.toCell());
}
}

Usage example:

import "@stdlib/deploy";
contract ExampleContract with Deployable {
// Now, this contract has a receiver for the Deploy message
}

Unless you need the queryId, use a null message body receiver instead of this trait.

contract ExampleContract {
// Forwards the remaining value in the
// incoming message back to the sender
receive() { cashback(sender()) }
}

FactoryDeployable

Deprecated since Tact 1.6

The trait FactoryDeployable provides a convenient unified mechanism for chained deployments.

Source code:

trait FactoryDeployable {
receive(deploy: FactoryDeploy) {
self.forward(deploy.cashback, DeployOk{queryId: deploy.queryId}.toCell(), false, null);
}
}

Usage example:

import "@stdlib/deploy";
contract ExampleContract with FactoryDeployable {
// Now, this contract has a receiver for the FactoryDeploy message
}

Unless you need the queryId, use a null message body receiver instead of this trait.

contract ExampleContract {
// Forwards the remaining value in the
// incoming message back to the sender
receive() { cashback(sender()) }
}

Sources