Contract-related functionality.
npm install @zilliqa-js/contract> Classes for managing Scilla smart contracts on the Zilliqa blockchain.
``typescript
interface DeployParams {
gasPrice: BN;
gasLimit: Long;
nonce?: number;
pubKey?: string;
}
interface CallParams {
amount: BN;
gasPrice: BN;
gasLimit: Long;
nonce?: number;
pubKey?: string;
}
interface Field {
name: string;
type: string;
}
interface Transition {
name: string;
params: Field[];
}
interface ABI {
name: string;
fields: Field[];
params: Field[];
transitions: Transition[];
}
interface Value {
vname: string;
type: string;
value: string;
}
type Init = Value[];
type State = any;
`
A factory class for creating Contract instances. Useful for managingProvider instances set on Contracts. The factory is mainly used by the@zilliqa-js/zilliqa
top-level module exported by .
#### Contracts(provider: Provider, signer?: Wallet): Contracts
##### Parameters
- provider: Provider - a Provider instancesigner
- : Wallet - a Wallet instance, used for signing transactions.
##### Returns
- Contracts - a Contracts instance.
#### Members
##### provider: Provider
##### signer: Wallet
#### Static Methods
##### static getAddressForContract(tx: Transaction): string
Computes the address for a contract deployment by concatenating senderAddressnonce
and and hasing the resulting bytes. Note that this method will notnonce
compute an accurate address if the provided is not up to date with the
actual nonce on the blockchain.
###### Parameters
- tx: Transaction - a Transaction with nonce and senderAddress.
###### Returns
- The compute contract address.
#### Instance Methods
##### at(address: string, abi: ABI, code: string, init?: Init, state?: State): Contract
Constructs a Contract with the provided parameters. It is recommended that
this method by used only to construct contracts that have already been deployed.
###### Parameters
- address: string - the contract address.abi
- : ABI (optional) - the ABI return by scilla-checker with-contractinfo
flag.code
- : string (optional) - UTF-8 encoded Scilla smart contract code.init
- : Init (optional) - the initialisation parameters of the smartstate
contract.
- : State (optional) - the current smart contract state.
###### Returns
- Contract - a Contract instance.
##### new(code: string, init: Init, abi?: ABI): Contract
Constructs a Contract with the provided parameters, that is not deployed. The
contract may subsequently be deployed.
###### Parameters
- code: string - UTF-8 encoded Scilla smart contract code.init
- : Init - the initialisation parameters of the smart contract.abi
- : ABI (optional) - the ABI return by scilla-checker.
###### Returns
- Contract - a Contract instance.
##### Contract(factory: Contracts, code?: string, address?: string, abi?: ABI, init?: Init, state?: State): Contracts
A class representing a single smart contract. Allows for deployment and calling
the smart contract's transitions.
###### Parameters
- factory: Contracts - the creating factory instance.code
- : string (Optional) - UTF-8 Scilla smart contract code.address
- : string (Optional)init
- : any (Optional) - contract initialisation parameters.state
- : any (Optional) - contract state.abi
- : string (Optional) - scilla interface
###### Returns
- Contract - a Contract instance.
#### Members
factory: Contracts provider: Provider signer: Wallet
init: Init abi?: ABI (Optional) state?: State (Optional)address?: string (Optional) code?: string (Optional)status: ContractStatus
#### Instance Methods
##### isInitialised(): boolean
Returns true if no attempt has been made to deploy the Contract, or its
status is unknown.
###### Returns
- boolean
##### isDeployed(): boolean
Returns true if the contract has been successfully deployed.
###### Returns
- boolean
##### isRejected(): boolean
Returns true if the contract deployment attempt was rejected by the network.
###### Returns
- boolean
##### deploy(params: DeployParams, attempts: number = 33, interval: number = 1000): Promise
Deploys a contract to the blockchain. This method will automatically generate
and sign the underlying Transaction and broadcast it. The status of theContract may then be ascertained by using isRejected or isDeployed, oncePromise
the resolves.
###### Parameters
- params: DeployParams - a subset of TxParams. Passed to the underlyingTransaction
. This can be used to manually provide nonce and pubKey, ifWallet
it is desirable to sign the underlying transaction with a non-default account
in the .attempts
- (Optional - default 33): number - the number of times to poll theinterval
lookup node for transaction receipt.
- (Optional - default 1000): number - the amount of time to waitnumAttempts * interval
between attempts. increases linearly ().
###### Returns
- Promise - will be rejected if a network error occurs. A resolvedPromise
does not indicate that the Contract is deployed, as the underlyingTransaction
may be confirmed by the blockchain but unsuccessful, due to lackgas
of , and so on.
##### call(transition: string, args: Value[], params: CallParams): Promise
Calls a transition of the current contract. At the moment, this is a low-level
interface for interacting with simple smart contracts.
###### Parameters
- transition: string - the exact name of the contract transition to beargs
invoked. _case matters_
- : Value[] - JSON-encoded array of transition arguments.params
- : CallParams - a subset of TxParams. Passed to the underlyingTransaction
.attempts
- (Optional - default 20): number - the number of times to poll theinterval
lookup node for transaction receipt.
- (Optional - default 1000): number - the amount of time to waitnumAttempts * interval
between attempts. increases linearly ().
###### Returns
- Promise - the Transaction that has been signed and broadcast to
the network.
##### getState(): Promise
Queries the blockchain for the smart contract's state. Note that this method
will return the _entire_ state of the smart contract. As a result, if you have a
large amount of data stored in a smart contract do not use this method on a
client. Instead, use a server-side layer to cache and proxy such queries.
###### Parameters
None
###### Returns
- Promise - the Contract state.
##### getInit(): Promise
Queries the blockchain for the smart contract's init (a.k.a. immutable variables
of a contract)
###### Parameters
None
###### Returns
- Promise - the Contract Init.
##### getSubState(variableName: string, indices: string[]): Promise
Queries the contract state, filtered by the variable names. This function is the
filtered version of getState. As getSubState performs the filtering,variableName of a field is required.
If the subState is not found, this returns a null response.
###### Parameters
- variableName: string - the variable name within a stateindices
- : string[] - optional variable. If the variableName is a Map,
an array of indices may be provided.
###### Returns
- Promise