@proto-kit/protocol • Docs
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
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
abstracthonoredMessagesHash:State<Field>
Defined in
packages/protocol/src/settlement/contracts/DispatchSmartContract.ts:104
promisedMessagesHash
abstractpromisedMessagesHash: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
abstractsettlementContract:State<PublicKey>
Defined in
packages/protocol/src/settlement/contracts/DispatchSmartContract.ts:106
tokenBridgeCount
abstracttokenBridgeCount:State<Field>
Defined in
packages/protocol/src/settlement/contracts/DispatchSmartContract.ts:110
tokenBridgeRoot
abstracttokenBridgeRoot: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?
staticoptional_methodMetadata:Record<string,object>
Inherited from
SmartContract._methodMetadata
Defined in
node_modules/o1js/dist/node/lib/mina/v1/zkapp.d.ts:54
_methods?
staticoptional_methods:MethodInterface[]
Inherited from
SmartContract._methods
Defined in
node_modules/o1js/dist/node/lib/mina/v1/zkapp.d.ts:53
_provers?
staticoptional_provers:Prover[]
Inherited from
SmartContract._provers
Defined in
node_modules/o1js/dist/node/lib/mina/v1/zkapp.d.ts:61
_verificationKey?
staticoptional_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()
protecteddispatchMessage<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()
protectedenableTokenDepositsBase(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
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()
protectedinitializeBase(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()
protectedupdateMessagesHashBase(executedMessagesHash,newPromisedMessagesHash):void
Parameters
• executedMessagesHash: Field
• newPromisedMessagesHash: Field
Returns
void
Defined in
packages/protocol/src/settlement/contracts/DispatchSmartContract.ts:118
analyzeMethods()
staticanalyzeMethods(__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:
rowsthe size of the constraint system created by this methoddigesta digest of the method circuitactionsthe number of actions the method dispatchesgatesthe 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()
staticcompile(__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()
staticdigest():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()
staticgetMaxProofsVerified():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()
staticProof(): (__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
readonlyprovable: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()?
optionalprovable.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?
optionalfields:Field[]
packed?
optionalpacked: [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()
staticrunOutsideCircuit(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()
staticsetVerificationKeyUnsafe(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