Skip to main content

SnarkyJS Reference

Table of contents

References

Namespaces

Classes

Interfaces

Type Aliases

Variables

Functions

References

PublicKey

Re-exports PublicKey

Type Aliases

DeployArgs

Ƭ DeployArgs: { verificationKey?: { data: string ; hash: string | Field } ; zkappKey?: PrivateKey } | undefined

Defined in

lib/zkapp.ts:1095


State

Ƭ State<A>: Object

Gettable and settable state that can be checked for equality.

Type parameters

Name
A

Type declaration

NameType
assertEquals(a: A) => void
assertNothing() => void
fetch() => Promise<undefined | A>
get() => A
set(a: A) => void

Defined in

lib/state.ts:25

lib/state.ts:18


TokenSymbol

Ƭ TokenSymbol: Object

Type declaration

NameType
fieldField
symbolstring

Defined in

lib/hash.ts:140

lib/hash.ts:168


ZkappPublicInput

Ƭ ZkappPublicInput: Object

The public input for zkApps consists of certain hashes of the proving AccountUpdate (and its child accountUpdates) which is constructed during method execution.

For SmartContract proving, a method is run twice: First outside the proof, to obtain the public input, and once in the prover, which takes the public input as input. The current transaction is hashed again inside the prover, which asserts that the result equals the input public input, as part of the snark circuit. The block producer will also hash the transaction they receive and pass it as a public input to the verifier. Thus, the transaction is fully constrained by the proof - the proof couldn't be used to attest to a different transaction.

Type declaration

NameType
accountUpdateField
callsField

Defined in

lib/account_update.ts:1356

lib/account_update.ts:1357

Variables

Permissions

Permissions: Object

Type declaration

NameType
default() => Permissions
impossible() => AuthRequired
initial() => Permissions
none() => AuthRequired
proof() => AuthRequired
proofOrSignature() => AuthRequired
signature() => AuthRequired

Defined in

lib/account_update.ts:160

lib/account_update.ts:224


Poseidon

Const Poseidon: Object

Type declaration

NameType
Spongetypeof Sponge
get initialState()[Field, Field, Field]
hash(input: Field[]) => Field
update(state: [Field, Field, Field], input: Field[]) => [Field, Field, Field]

Defined in

lib/hash.ts:36


TokenSymbol

TokenSymbol: Object

Type declaration

NameType
empty{ field: Field = Field.zero; symbol: string = '' }
empty.fieldField
empty.symbolstring
check(value: TokenSymbol) => void
from(symbol: string) => TokenSymbol
fromFields(fields: Field[], aux: any[]) => TokenSymbol
sizeInFields() => number
toAuxiliary(value?: TokenSymbol) => any[]
toFields(value: TokenSymbol) => Field[]
toInput(value: TokenSymbol) => HashInput
toJSON(value: TokenSymbol) => string

Defined in

lib/hash.ts:140

lib/hash.ts:168


ZkappPublicInput

ZkappPublicInput: AsFieldsExtended<ZkappPublicInput>

Defined in

lib/account_update.ts:1356

lib/account_update.ts:1357


isReady

isReady: Promise<undefined>

A Promise that resolves when SnarkyJS is ready to be used

Defined in

snarky.d.ts:857

Functions

Account

Account(address, tokenId?): PreconditionClassType<AccountPrecondition>

Parameters

NameType
addressPublicKey
tokenId?Field

Returns

PreconditionClassType<AccountPrecondition>

Defined in

lib/zkapp.ts:1152


State

State<A>(): State<A>

Type parameters

Name
A

Returns

State<A>

Defined in

lib/state.ts:25


addCachedAccount

addCachedAccount(account, graphqlEndpoint?): void

Parameters

NameTypeDefault value
accountObjectundefined
account.balance?string | number | UInt64undefined
account.noncestring | number | UInt32undefined
account.publicKeystring | PublicKeyundefined
account.tokenIdstringundefined
account.zkapp?Objectundefined
account.zkapp.appState(string | number | Field)[]undefined
graphqlEndpointstringdefaultGraphqlEndpoint

Returns

void

Defined in

lib/fetch.ts:362


arrayProp

arrayProp<T>(elementType, length): (target: any, key: string) => void

Type parameters

Name
T

Parameters

NameType
elementTypeAsFieldElements<T>
lengthnumber

Returns

fn

▸ (target, key): void

Parameters
NameType
targetany
keystring
Returns

void

Defined in

lib/circuit_value.ts:284


circuitMain

circuitMain(target, propertyName, _descriptor?): any

Parameters

NameType
targetany
propertyNamestring
_descriptor?PropertyDescriptor

Returns

any

Defined in

lib/circuit_value.ts:353


circuitValue

circuitValue<T>(typeObj, options?): AsFieldsExtended<T>

Type parameters

Name
T

Parameters

NameType
typeObjany
options?Object
options.customObjectKeysstring[]

Returns

AsFieldsExtended<T>

Defined in

lib/circuit_value.ts:407


declareMethods

declareMethods<T>(SmartContract, methodArguments): void

declareMethods can be used in place of the @method decorator to declare SmartContract methods along with their list of arguments. It should be placed after the class declaration. Here is an example of declaring a method update, which takes a single argument of type Field:

class MyContract extends SmartContract {
// ...
update(x: Field) {
// ...
}
}
declareMethods(MyContract, { update: [Field] }); // `[Field]` is the list of arguments!

Note that a method of the same name must still be defined on the class, just without the decorator.

Type parameters

NameType
Textends typeof SmartContract

Parameters

NameType
SmartContractT
methodArgumentsRecord<string, AsFieldElements<unknown>[]>

Returns

void

Defined in

lib/zkapp.ts:1229


declareState

declareState<T>(SmartContract, states): void

declareState can be used in place of the @state decorator to declare on-chain state on a SmartContract. It should be placed after the class declaration. Here is an example of declaring a state property x of type Field.

class MyContract extends SmartContract {
x = State<Field>();
// ...
}
declareState(MyContract, { x: Field });

If you're using pure JS, it's not possible to use the built-in class field syntax, i.e. the following will not work:

// THIS IS WRONG IN JS!
class MyContract extends SmartContract {
x = State();
}
declareState(MyContract, { x: Field });

Instead, add a constructor where you assign the property:

class MyContract extends SmartContract {
constructor(x) {
super();
this.x = State();
}
}
declareState(MyContract, { x: Field });

Type parameters

NameType
Textends typeof SmartContract

Parameters

NameType
SmartContractT
statesRecord<string, AsFieldElements<unknown>>

Returns

void

Defined in

lib/state.ts:115


deploy

deploy<S>(SmartContract, __namedParameters): Promise<string>

Type parameters

NameType
Sextends typeof SmartContract

Parameters

NameType
SmartContractS
__namedParametersObject
__namedParameters.feePayer?FeePayerSpec
__namedParameters.initialBalance?string | number
__namedParameters.tokenId?Field
__namedParameters.verificationKeyObject
__namedParameters.verificationKey.datastring
__namedParameters.verificationKey.hashstring | Field
__namedParameters.zkappKeyPrivateKey

Returns

Promise<string>

Defined in

lib/zkapp.ts:1104


fetchAccount

fetchAccount(accountInfo, graphqlEndpoint?, config?): Promise<{ account: Account ; error: undefined } | { account: undefined ; error: FetchError }>

Gets account information on the specified publicKey by performing a GraphQL query to the specified endpoint. This will call the 'GetAccountInfo' query which fetches zkapp related account information.

If an error is returned by the specified endpoint, an error is thrown. Otherwise, the data is returned.

Parameters

NameTypeDefault valueDescription
accountInfoObjectundefined-
accountInfo.publicKeystring | PublicKeyundefined-
accountInfo.tokenId?stringundefined-
graphqlEndpointstringdefaultGraphqlEndpointThe graphql endpoint to fetch from
configObject{}An object that exposes an additional timeout option
config.timeoutundefined | numberundefined-

Returns

Promise<{ account: Account ; error: undefined } | { account: undefined ; error: FetchError }>

zkapp information on the specified account or an error is thrown

Defined in

lib/fetch.ts:50


fetchLastBlock

fetchLastBlock(graphqlEndpoint?): Promise<PreconditionBaseTypes<{ blockchainLength: { isSome: Bool ; value: { lower: UInt32 ; upper: UInt32 } } ; globalSlotSinceGenesis: { isSome: Bool ; value: { lower: UInt32 ; upper: UInt32 } } ; globalSlotSinceHardFork: { isSome: Bool ; value: { lower: UInt32 ; upper: UInt32 } } ; minWindowDensity: { isSome: Bool ; value: { lower: UInt32 ; upper: UInt32 } } ; nextEpochData: { epochLength: { isSome: Bool ; value: { lower: UInt32 ; upper: UInt32 } } ; ledger: { hash: { isSome: Bool ; value: Field } ; totalCurrency: { isSome: Bool ; value: { lower: UInt64 ; upper: UInt64 } } } ; lockCheckpoint: { isSome: Bool ; value: Field } ; seed: { isSome: Bool ; value: Field } ; startCheckpoint: { isSome: Bool ; value: Field } } ; snarkedLedgerHash: { isSome: Bool ; value: Field } ; stakingEpochData: { epochLength: { isSome: Bool ; value: { lower: UInt32 ; upper: UInt32 } } ; ledger: { hash: { isSome: Bool ; value: Field } ; totalCurrency: { isSome: Bool ; value: { lower: UInt64 ; upper: UInt64 } } } ; lockCheckpoint: { isSome: Bool ; value: Field } ; seed: { isSome: Bool ; value: Field } ; startCheckpoint: { isSome: Bool ; value: Field } } ; timestamp: { isSome: Bool ; value: { lower: UInt64 ; upper: UInt64 } } ; totalCurrency: { isSome: Bool ; value: { lower: UInt64 ; upper: UInt64 } } }>>

Parameters

NameTypeDefault value
graphqlEndpointstringdefaultGraphqlEndpoint

Returns

Promise<PreconditionBaseTypes<{ blockchainLength: { isSome: Bool ; value: { lower: UInt32 ; upper: UInt32 } } ; globalSlotSinceGenesis: { isSome: Bool ; value: { lower: UInt32 ; upper: UInt32 } } ; globalSlotSinceHardFork: { isSome: Bool ; value: { lower: UInt32 ; upper: UInt32 } } ; minWindowDensity: { isSome: Bool ; value: { lower: UInt32 ; upper: UInt32 } } ; nextEpochData: { epochLength: { isSome: Bool ; value: { lower: UInt32 ; upper: UInt32 } } ; ledger: { hash: { isSome: Bool ; value: Field } ; totalCurrency: { isSome: Bool ; value: { lower: UInt64 ; upper: UInt64 } } } ; lockCheckpoint: { isSome: Bool ; value: Field } ; seed: { isSome: Bool ; value: Field } ; startCheckpoint: { isSome: Bool ; value: Field } } ; snarkedLedgerHash: { isSome: Bool ; value: Field } ; stakingEpochData: { epochLength: { isSome: Bool ; value: { lower: UInt32 ; upper: UInt32 } } ; ledger: { hash: { isSome: Bool ; value: Field } ; totalCurrency: { isSome: Bool ; value: { lower: UInt64 ; upper: UInt64 } } } ; lockCheckpoint: { isSome: Bool ; value: Field } ; seed: { isSome: Bool ; value: Field } ; startCheckpoint: { isSome: Bool ; value: Field } } ; timestamp: { isSome: Bool ; value: { lower: UInt64 ; upper: UInt64 } } ; totalCurrency: { isSome: Bool ; value: { lower: UInt64 ; upper: UInt64 } } }>>

Defined in

lib/fetch.ts:388


getSrs

getSrs(keypair): any

Parameters

NameTypeDescription
keypairanySNARK keypair, as returned by Circuit.generateKeypair

Returns

any

The SRS (structured reference string), needed to reconstruct the keypair later

Defined in

snarky/addons.js:18


matrixProp

matrixProp<T>(elementType, nRows, nColumns): (target: any, key: string) => void

Type parameters

Name
T

Parameters

NameType
elementTypeAsFieldElements<T>
nRowsnumber
nColumnsnumber

Returns

fn

▸ (target, key): void

Parameters
NameType
targetany
keystring
Returns

void

Defined in

lib/circuit_value.ts:293


method

method<T>(target, methodName, descriptor): void

A decorator to use in a zkapp to mark a method as callable by anyone. You can use inside your zkapp class as:

@method myMethod(someArg: Field) {
// your code here
}

Type parameters

NameType
Textends SmartContract<T>

Parameters

NameType
targetT & { constructor: any }
methodNamekeyof T & string
descriptorPropertyDescriptor

Returns

void

Defined in

lib/zkapp.ts:94


prop

prop(this, target, key): void

Parameters

NameType
thisany
targetany
keystring

Returns

void

Defined in

lib/circuit_value.ts:225


public_

public_(target, _key, index): void

Parameters

NameType
targetany
_keystring | symbol
indexnumber

Returns

void

Defined in

lib/circuit_value.ts:309


recoverVerificationKey

recoverVerificationKey(srs, serializedVk): any

Parameters

NameTypeDescription
srsanythe "structured reference string", a set of precomputed values needed for verifying proofs
serializedVkstringstring representation of a Circuit verification key

Returns

any

the recovered verification key

Defined in

snarky/addons.js:49


sendZkapp

sendZkapp(json, graphqlEndpoint?, __namedParameters?): Promise<[FetchResponse, undefined] | [undefined, FetchError]>

Parameters

NameTypeDefault value
jsonstringundefined
graphqlEndpointstringdefaultGraphqlEndpoint
__namedParametersObject{}
__namedParameters.timeoutundefined | numberundefined

Returns

Promise<[FetchResponse, undefined] | [undefined, FetchError]>

Defined in

lib/fetch.ts:532


serializeVerificationKey

serializeVerificationKey(verificationKey): string

Parameters

NameTypeDescription
verificationKeyanythe verification key of a Circuit

Returns

string

string representation of the verification key

Defined in

snarky/addons.js:27


setGraphqlEndpoint

setGraphqlEndpoint(graphqlEndpoint): void

Parameters

NameType
graphqlEndpointstring

Returns

void

Defined in

lib/fetch.ts:33


shutdown

shutdown(): Promise<undefined>

This function must be called at the end of a nodejs program, otherwise the worker threads will continue running and the program will never terminate. From web applications, this function is a no-op.

Returns

Promise<undefined>

Defined in

snarky.d.ts:852


signFeePayer

signFeePayer(transactionJson, feePayerKey, __namedParameters): string

Parameters

NameType
transactionJsonstring
feePayerKeystring | PrivateKey
__namedParametersObject

Returns

string

Defined in

lib/zkapp.ts:1186


state

state<A>(stateType): (target: SmartContract & { constructor: any }, key: string, _descriptor?: PropertyDescriptor) => void

A decorator to use within a zkapp to indicate what will be stored on-chain. For example, if you want to store a field element some_state in a zkapp, you can use the following in the declaration of your zkapp:

@state(Field) some_state = State<Field>();

Type parameters

Name
A

Parameters

NameType
stateTypeAsFieldElements<A>

Returns

fn

▸ (target, key, _descriptor?): void

Parameters
NameType
targetSmartContract & { constructor: any }
keystring
_descriptor?PropertyDescriptor
Returns

void

Defined in

lib/state.ts:39


verify

verify(proof, verificationKey): Promise<boolean>

Parameters

NameType
proofJsonProof | Proof<any>
verificationKeystring

Returns

Promise<boolean>

Defined in

lib/proof_system.ts:109


zkappCommandToJson

zkappCommandToJson(__namedParameters): ZkappCommand

Parameters

NameType
__namedParametersZkappCommand

Returns

ZkappCommand

Defined in

lib/account_update.ts:1253