o1js
Version:
TypeScript framework for zk-SNARKs and zkApps
51 lines (43 loc) • 1.2 kB
text/typescript
import {
Hash,
Field,
SmartContract,
state,
State,
method,
Permissions,
Bytes,
} from 'o1js';
let initialCommitment = Field(0);
class Bytes32 extends Bytes(32) {}
export class HashStorage extends SmartContract {
commitment = State<Field>();
init() {
super.init();
this.account.permissions.set({
...Permissions.default(),
editState: Permissions.proofOrSignature(),
});
this.commitment.set(initialCommitment);
}
async SHA256(xs: Bytes32) {
const shaHash = Hash.SHA3_256.hash(xs);
const commitment = Hash.hash(shaHash.toFields());
this.commitment.set(commitment);
}
async SHA384(xs: Bytes32) {
const shaHash = Hash.SHA3_384.hash(xs);
const commitment = Hash.hash(shaHash.toFields());
this.commitment.set(commitment);
}
async SHA512(xs: Bytes32) {
const shaHash = Hash.SHA3_512.hash(xs);
const commitment = Hash.hash(shaHash.toFields());
this.commitment.set(commitment);
}
async Keccak256(xs: Bytes32) {
const shaHash = Hash.Keccak256.hash(xs);
const commitment = Hash.hash(shaHash.toFields());
this.commitment.set(commitment);
}
}