Skip to content

PreciseValue

PreciseValue = { Int: bigint; } | { Map: [string, PreciseValue][]; } | { Nat: bigint; } | { Blob: Uint8Array; } | { Bool: boolean; } | { Text: string; } | { Array: PreciseValue[]; }

Defined in: packages/canisters/src/declarations/sns/governance.d.ts:593

This type is equivalant to ICRC3Value, but we give it another name since it is used here not in the context of the ICRC-3 ledger standard. The justification is the same: The candid format supports sharing information even when the client and the server involved do not have the same schema (see the Upgrading and subtyping section of the candid spec). While this mechanism allows to evolve services and clients independently without breaking them, it also means that a client may not receive all the information that the server is sending, e.g. in case the client schema lacks some fields that the server schema has.

This loss of information is not an option for SNS voters deciding if an extension with particular init args should be installed or if an extension function with particular arguments should be called. The client must receive the same exact data the server sent in order to verify it.

Verification of a priorly installed extension is done by hashing the extension’s init arg data and checking that the result is consistent with what has been certified by the SNS.