DocsReference@proto-kit/protocolClassesDispatchSmartContractBase

@proto-kit/protocolDocs


Documentation / @proto-kit/protocol / DispatchSmartContractBase

Class: abstract DispatchSmartContractBase

Extends

  • SmartContract

Extended by

Implements

Constructors

new DispatchSmartContractBase()

new DispatchSmartContractBase(address, tokenId?): DispatchSmartContractBase

Parameters

address: PublicKey

tokenId?: Field

Returns

DispatchSmartContractBase

Inherited from

SmartContract.constructor

Defined in

node_modules/o1js/dist/node/lib/mina/v1/zkapp.d.ts:149

Properties

address

address: PublicKey

Inherited from

SmartContract.address

Defined in

node_modules/o1js/dist/node/lib/mina/v1/zkapp.d.ts:51


events

events: object

A list of event types that can be emitted using this.emitEvent()`.

incoming-message-placeholder

incoming-message-placeholder: typeof Field & (x) => Field = Field

token-bridge-added

token-bridge-added: typeof TokenBridgeTreeAddition = TokenBridgeTreeAddition

Overrides

SmartContract.events

Defined in

packages/protocol/src/settlement/contracts/DispatchSmartContract.ts:94


honoredMessagesHash

abstract honoredMessagesHash: State<Field>

Defined in

packages/protocol/src/settlement/contracts/DispatchSmartContract.ts:104


promisedMessagesHash

abstract promisedMessagesHash: State<Field>

Defined in

packages/protocol/src/settlement/contracts/DispatchSmartContract.ts:102


sender

sender: object

self

self: SmartContract

getAndRequireSignature()

Return a public key that is forced to sign this transaction.

Note: This doesn’t prove that the return value is the transaction sender, but it proves that whoever created the transaction controls the private key associated with the returned public key.

Returns

PublicKey

getUnconstrained()

The public key of the current transaction’s sender account.

Throws an error if not inside a transaction, or the sender wasn’t passed in.

Warning: The fact that this public key equals the current sender is not part of the proof. A malicious prover could use any other public key without affecting the validity of the proof.

Consider using this.sender.getAndRequireSignature() if you need to prove that the sender controls this account.

Returns

PublicKey

Inherited from

SmartContract.sender

Defined in

node_modules/o1js/dist/node/lib/mina/v1/zkapp.d.ts:300


settlementContract

abstract settlementContract: State<PublicKey>

Defined in

packages/protocol/src/settlement/contracts/DispatchSmartContract.ts:106


tokenBridgeCount

abstract tokenBridgeCount: State<Field>

Defined in

packages/protocol/src/settlement/contracts/DispatchSmartContract.ts:110


tokenBridgeRoot

abstract tokenBridgeRoot: State<Field>

Defined in

packages/protocol/src/settlement/contracts/DispatchSmartContract.ts:108


tokenId

tokenId: Field

Inherited from

SmartContract.tokenId

Defined in

node_modules/o1js/dist/node/lib/mina/v1/zkapp.d.ts:52


_methodMetadata?

static optional _methodMetadata: Record<string, object>

Inherited from

SmartContract._methodMetadata

Defined in

node_modules/o1js/dist/node/lib/mina/v1/zkapp.d.ts:54


_methods?

static optional _methods: MethodInterface[]

Inherited from

SmartContract._methods

Defined in

node_modules/o1js/dist/node/lib/mina/v1/zkapp.d.ts:53


_provers?

static optional _provers: Prover[]

Inherited from

SmartContract._provers

Defined in

node_modules/o1js/dist/node/lib/mina/v1/zkapp.d.ts:61


_verificationKey?

static optional _verificationKey: object

data

data: string

hash

hash: Field

Inherited from

SmartContract._verificationKey

Defined in

node_modules/o1js/dist/node/lib/mina/v1/zkapp.d.ts:62

Accessors

account

Get Signature

get account(): Account

Current account of the SmartContract.

Returns

Account

Inherited from

SmartContract.account

Defined in

node_modules/o1js/dist/node/lib/mina/v1/zkapp.d.ts:324


balance

Get Signature

get balance(): object

Balance of this SmartContract.

Returns

object

addInPlace()
Parameters

x: string | number | bigint | UInt64 | UInt32 | Int64

Returns

void

subInPlace()
Parameters

x: string | number | bigint | UInt64 | UInt32 | Int64

Returns

void

Inherited from

SmartContract.balance

Defined in

node_modules/o1js/dist/node/lib/mina/v1/zkapp.d.ts:364


currentSlot

Get Signature

get currentSlot(): CurrentSlot

Current global slot on the network. This is the slot at which this transaction is included in a block. Since we cannot know this value at the time of transaction construction, this only has the assertBetween() method but no get() (impossible to implement) or assertEquals() (confusing, because the developer can’t know the exact slot at which this will be included either)

Returns

CurrentSlot

Inherited from

SmartContract.currentSlot

Defined in

node_modules/o1js/dist/node/lib/mina/v1/zkapp.d.ts:334


network

Get Signature

get network(): Network

Current network state of the SmartContract.

Returns

Network

Inherited from

SmartContract.network

Defined in

node_modules/o1js/dist/node/lib/mina/v1/zkapp.d.ts:328


self

Get Signature

get self(): AccountUpdate

Returns the current AccountUpdate associated to this SmartContract.

Returns

AccountUpdate

Inherited from

SmartContract.self

Defined in

node_modules/o1js/dist/node/lib/mina/v1/zkapp.d.ts:295

Methods

approve()

approve(update): void

Approve an account update or tree / forest of updates. Doing this means you include the account update in the zkApp’s public input, which allows you to read and use its content in a proof, make assertions about it, and modify it.

`@method` myApprovingMethod(update: AccountUpdate) {
  this.approve(update);
 
  // read balance on the account (for example)
  let balance = update.account.balance.getAndRequireEquals();
}

Under the hood, “approving” just means that the account update is made a child of the zkApp in the tree of account updates that forms the transaction. Similarly, if you pass in an AccountUpdateTree, the entire tree will become a subtree of the zkApp’s account update.

Passing in a forest is a bit different, because it means you set the entire children of the zkApp’s account update at once. approve() will fail if the zkApp’s account update already has children, to prevent you from accidentally excluding important information from the public input.

Parameters

update: AccountUpdateForest | AccountUpdate | AccountUpdateTree

Returns

void

Inherited from

SmartContract.approve

Defined in

node_modules/o1js/dist/node/lib/mina/v1/zkapp.d.ts:356


deploy()

deploy(__namedParameters?): Promise<void>

Deploys a SmartContract.

let tx = await Mina.transaction(sender, async () => {
  AccountUpdate.fundNewAccount(sender);
  await zkapp.deploy();
});
tx.sign([senderKey, zkAppKey]);

Parameters

__namedParameters?

__namedParameters.verificationKey?

__namedParameters.verificationKey.data?: string

__namedParameters.verificationKey.hash?: string | Field

Returns

Promise<void>

Inherited from

SmartContract.deploy

Defined in

node_modules/o1js/dist/node/lib/mina/v1/zkapp.d.ts:205


dispatchMessage()

protected dispatchMessage<Type>(methodId, value, valueType): void

Type Parameters

Type

Parameters

methodId: Field

value: Type

valueType: ProvableExtended<Type>

Returns

void

Defined in

packages/protocol/src/settlement/contracts/DispatchSmartContract.ts:157


emitEvent()

emitEvent<K>(type, event): void

Emits an event. Events will be emitted as a part of the transaction and can be collected by archive nodes.

Type Parameters

K extends "token-bridge-added" | "incoming-message-placeholder"

Parameters

type: K

event: any

Returns

void

Inherited from

SmartContract.emitEvent

Defined in

node_modules/o1js/dist/node/lib/mina/v1/zkapp.d.ts:383


emitEventIf()

emitEventIf<K>(condition, type, event): void

Conditionally emits an event.

Events will be emitted as a part of the transaction and can be collected by archive nodes.

Type Parameters

K extends "token-bridge-added" | "incoming-message-placeholder"

Parameters

condition: Bool

type: K

event: any

Returns

void

Inherited from

SmartContract.emitEventIf

Defined in

node_modules/o1js/dist/node/lib/mina/v1/zkapp.d.ts:379


enableTokenDepositsBase()

protected enableTokenDepositsBase(tokenId, bridgeContractAddress, settlementContractAddress): Promise<void>

Parameters

tokenId: Field

bridgeContractAddress: PublicKey

settlementContractAddress: PublicKey

Returns

Promise<void>

Defined in

packages/protocol/src/settlement/contracts/DispatchSmartContract.ts:195


fetchEvents()

fetchEvents(start?, end?): Promise<object[]>

Asynchronously fetches events emitted by this SmartContract and returns an array of events with their corresponding types.

Parameters

start?: UInt32

The start height of the events to fetch.

end?: UInt32

The end height of the events to fetch. If not provided, fetches events up to the latest height.

Returns

Promise<object[]>

A promise that resolves to an array of objects, each containing the event type and event data for the specified range.

Throws

If there is an error fetching events from the Mina network.

Example

const startHeight = UInt32.from(1000);
const endHeight = UInt32.from(2000);
const events = await myZkapp.fetchEvents(startHeight, endHeight);
console.log(events);

Inherited from

SmartContract.fetchEvents

Defined in

node_modules/o1js/dist/node/lib/mina/v1/zkapp.d.ts:396


getInitializationArgs()

getInitializationArgs(): DispatchContractArgs

Returns

DispatchContractArgs

Implementation of

StaticInitializationContract.getInitializationArgs

Defined in

packages/protocol/src/settlement/contracts/DispatchSmartContract.ts:112


init()

init(): void

SmartContract.init() is called when a SmartContract is first deployed. By default, it initializes the smart contract’s state to zero, and sets the provedState to false.

Returns

void

Note

The first time any method is called on the smart contract, provedState will be set to true. The init method itself may be decorated with @method in this way. Review the examples below to see how init can be called with or without a method decorator.

Note

init may be overridden to set state fields to values other than zero, but the method takes no arguments. Therefore, only static values may be set.

Note

To initialize a smart contract with custom values provided as arguments, a separate method is required.

Examples

class MyContract extends SmartContract {
 @state(Field) x = State<Field>();
 
 // Overwrite init to set static, non-zero values
 init() {
  super.init();
  this.x.set(Field(1));
 }
 
 // Use custom method to initialize dynamic values
 @method async initialize(x: Field) {
   // This method may only be called once, immediately after deployment
   this.account.provedState.getAndRequireEquals().assertFalse();
 
   this.x.set(x);
 }
}
class MyContract extends SmartContract {
 @state(Field) x = State<Field>();
 
 // Use init as a @method to set state fields to zero, and also
 // set provedState to true, making any other initialization impossible.
 @method async init() {
   super.init();
   this.x.set(Field(1));
 }
 
 // This method is invalid because `init` is a `@method`
 @method async initialize(x: Field) {
   // This assertion will fail because `provedState` is true after `init` is called
   this.account.provedState.getAndRequireEquals().assertFalse();
 
   this.x.set(x);
 }
}

Inherited from

SmartContract.init

Defined in

node_modules/o1js/dist/node/lib/mina/v1/zkapp.d.ts:270


initializeBase()

protected initializeBase(settlementContract): void

Parameters

settlementContract: PublicKey

Returns

void

Defined in

packages/protocol/src/settlement/contracts/DispatchSmartContract.ts:151


newSelf()

newSelf(methodName?): AccountUpdate

Same as SmartContract.self but explicitly creates a new AccountUpdate.

Parameters

methodName?: string

Returns

AccountUpdate

Inherited from

SmartContract.newSelf

Defined in

node_modules/o1js/dist/node/lib/mina/v1/zkapp.d.ts:299


requireSignature()

requireSignature(): void

Use this command if the account update created by this SmartContract should be signed by the account owner, instead of authorized with a proof.

Note that the smart contract’s Permissions determine which updates have to be (can be) authorized by a signature.

If you only want to avoid creating proofs for quicker testing, we advise you to use LocalBlockchain({ proofsEnabled: false }) instead of requireSignature(). Setting proofsEnabled to false allows you to test your transactions with the same authorization flow as in production, with the only difference being that quick mock proofs are filled in instead of real proofs.

Returns

void

Inherited from

SmartContract.requireSignature

Defined in

node_modules/o1js/dist/node/lib/mina/v1/zkapp.d.ts:282


send()

send(args): AccountUpdate

Parameters

args

args.amount: number | bigint | UInt64

args.to: PublicKey | SmartContract | AccountUpdate

Returns

AccountUpdate

Inherited from

SmartContract.send

Defined in

node_modules/o1js/dist/node/lib/mina/v1/zkapp.d.ts:357


skipAuthorization()

skipAuthorization(): void

Use this command if the account update created by this SmartContract should have no authorization on it, instead of being authorized with a proof.

WARNING: This is a method that should rarely be useful. If you want to disable proofs for quicker testing, take a look at LocalBlockchain({ proofsEnabled: false }), which causes mock proofs to be created and doesn’t require changing the authorization flow.

Returns

void

Inherited from

SmartContract.skipAuthorization

Defined in

node_modules/o1js/dist/node/lib/mina/v1/zkapp.d.ts:291


updateMessagesHashBase()

protected updateMessagesHashBase(executedMessagesHash, newPromisedMessagesHash): void

Parameters

executedMessagesHash: Field

newPromisedMessagesHash: Field

Returns

void

Defined in

packages/protocol/src/settlement/contracts/DispatchSmartContract.ts:118


analyzeMethods()

static analyzeMethods(__namedParameters?): Promise<Record<string, object>>

This function is run internally before compiling a smart contract, to collect metadata about what each of your smart contract methods does.

For external usage, this function can be handy because calling it involves running all methods in the same “mode” as compile() does, so it serves as a quick-to-run check for whether your contract can be compiled without errors, which can greatly speed up iterating.

analyzeMethods() will also return the number of rows of each of your method circuits (i.e., the number of constraints in the underlying proof system), which is a good indicator for circuit size and the time it will take to create proofs. To inspect the created circuit in detail, you can look at the returned gates.

Note: If this function was already called before, it will short-circuit and just return the metadata collected the first time.

Parameters

__namedParameters?

__namedParameters.printSummary?: boolean

Returns

Promise<Record<string, object>>

an object, keyed by method name, each entry containing:

  • rows the size of the constraint system created by this method
  • digest a digest of the method circuit
  • actions the number of actions the method dispatches
  • gates the constraint system, represented as an array of gates

Inherited from

SmartContract.analyzeMethods

Defined in

node_modules/o1js/dist/node/lib/mina/v1/zkapp.d.ts:432


compile()

static compile(__namedParameters?): Promise<object>

Compile your smart contract.

This generates both the prover functions, needed to create proofs for running @methods, and the verification key, needed to deploy your zkApp.

Although provers and verification key are returned by this method, they are also cached internally and used when needed, so you don’t actually have to use the return value of this function.

Under the hood, “compiling” means calling into the lower-level Pickles and Kimchi libraries to create multiple prover & verifier indices (one for each smart contract method as part of a “step circuit” and one for the “wrap circuit” which recursively wraps it so that proofs end up in the original finite field). These are fairly expensive operations, so expect compiling to take at least 20 seconds, up to several minutes if your circuit is large or your hardware is not optimal for these operations.

Parameters

__namedParameters?

__namedParameters.cache?: Cache

__namedParameters.forceRecompile?: boolean

Returns

Promise<object>

provers

provers: Prover[]

verificationKey

verificationKey: object

verificationKey.data

verificationKey.data: string

verificationKey.hash

verificationKey.hash: Field

verify()

verify: (statement, proof) => Promise<boolean>

Parameters

statement: Statement<FieldConst>

proof: unknown

Returns

Promise<boolean>

Inherited from

SmartContract.compile

Defined in

node_modules/o1js/dist/node/lib/mina/v1/zkapp.d.ts:164


digest()

static digest(): Promise<string>

Computes a hash of your smart contract, which will reliably change whenever one of your method circuits changes. This digest is quick to compute. it is designed to help with deciding whether a contract should be re-compiled or a cached verification key can be used.

Returns

Promise<string>

the digest, as a hex string

Inherited from

SmartContract.digest

Defined in

node_modules/o1js/dist/node/lib/mina/v1/zkapp.d.ts:181


getMaxProofsVerified()

static getMaxProofsVerified(): Promise<0 | 1 | 2>

The maximum number of proofs that are verified by any of the zkApp methods. This is an internal parameter needed by the proof system.

Returns

Promise<0 | 1 | 2>

Inherited from

SmartContract.getMaxProofsVerified

Defined in

node_modules/o1js/dist/node/lib/mina/v1/zkapp.d.ts:186


Proof()

static Proof(): (__namedParameters) => object

Returns a Proof type that belongs to this SmartContract.

Returns

Function

Parameters

__namedParameters

__namedParameters.maxProofsVerified: 0 | 1 | 2

__namedParameters.proof: unknown

__namedParameters.publicInput: ZkappPublicInput

__namedParameters.publicOutput: undefined

Returns

object

maxProofsVerified

maxProofsVerified: 0 | 1 | 2

proof

proof: unknown

publicInput

publicInput: ZkappPublicInput

publicOutput

publicOutput: undefined

shouldVerify

shouldVerify: Bool

declare()
Returns

boolean

publicFields()
Returns

object

input

input: Field[]

output

output: Field[]

toJSON()
Returns

JsonProof

verify()
Returns

void

verifyIf()
Parameters

condition: Bool

Returns

void

provable

readonly provable: object

provable.check()

provable.check: (value) => void

Parameters

value: Proof<any, any>

Returns

void

provable.fromFields()

provable.fromFields: (fields, aux) => Proof<any, any>

Parameters

fields: Field[]

aux: any[]

Returns

Proof<any, any>

provable.fromValue()

provable.fromValue: (x) => Proof<any, any>

Parameters

x: Proof<any, any> | ProofValue<any, any>

Returns

Proof<any, any>

provable.toAuxiliary()

provable.toAuxiliary: (value?) => any[]

Parameters

value?: Proof<any, any>

Returns

any[]

provable.toCanonical()?

optional provable.toCanonical: (x) => Proof<any, any>

Parameters

x: Proof<any, any>

Returns

Proof<any, any>

provable.toFields()

provable.toFields: (value) => Field[]

Parameters

value: Proof<any, any>

Returns

Field[]

provable.toValue()

provable.toValue: (x) => ProofValue<any, any>

Parameters

x: Proof<any, any>

Returns

ProofValue<any, any>

provable.sizeInFields()
Returns

number

publicInputType

publicInputType: Omit<Provable<object, object>, "fromFields"> & object & object

Type declaration
fromFields()

fromFields: (fields) => object

Parameters

fields: Field[]

Returns

object

accountUpdate

accountUpdate: Field

calls

calls: Field

Type declaration
empty()

empty: () => object

Returns

object

accountUpdate

accountUpdate: Field

calls

calls: Field

fromJSON()

fromJSON: (x) => object

Parameters

x

x.accountUpdate: string

x.calls: string

Returns

object

accountUpdate

accountUpdate: Field

calls

calls: Field

toInput()

toInput: (x) => object

Parameters

x

x.accountUpdate: Field

x.calls: Field

Returns

object

fields?

optional fields: Field[]

packed?

optional packed: [Field, number][]

toJSON()

toJSON: (x) => object

Parameters

x

x.accountUpdate: Field

x.calls: Field

Returns

object

accountUpdate

accountUpdate: string

calls

calls: string

publicOutputType

publicOutputType: ProvablePureExtended<undefined, undefined, null>

tag()

tag: () => typeof SmartContract

Returns

typeof SmartContract

_proofFromBase64()
Parameters

proofString: string

maxProofsVerified: 0 | 1 | 2

Returns

unknown

_proofToBase64()
Parameters

proof: unknown

maxProofsVerified: 0 | 1 | 2

Returns

string

dummy()
Type Parameters

Input

OutPut

Parameters

publicInput: Input

publicOutput: OutPut

maxProofsVerified: 0 | 1 | 2

domainLog2?: number

Returns

Promise<Proof<Input, OutPut>>

fromJSON()
Type Parameters

S extends Subclass<typeof Proof>

Parameters

this: S

__namedParameters: JsonProof

Returns

Promise<Proof<InferProvable<S["publicInputType"]>, InferProvable<S["publicOutputType"]>>>

publicFields()
Parameters

value: ProofBase<any, any>

Returns

object

input

input: Field[]

output

output: Field[]

Inherited from

SmartContract.Proof

Defined in

node_modules/o1js/dist/node/lib/mina/v1/zkapp.d.ts:69


runOutsideCircuit()

static runOutsideCircuit(run): void

Parameters

run

Returns

void

Inherited from

SmartContract.runOutsideCircuit

Defined in

node_modules/o1js/dist/node/lib/mina/v1/zkapp.d.ts:412


setVerificationKeyUnsafe()

static setVerificationKeyUnsafe(verificationKey): void

Manually set the verification key.

Parameters

verificationKey

verificationKey.data: string

verificationKey.hash: string | Field

Returns

void

Inherited from

SmartContract.setVerificationKeyUnsafe

Defined in

node_modules/o1js/dist/node/lib/mina/v1/zkapp.d.ts:190