@silvana-one/coordination
Version:
Silvana Coordination Client
44 lines • 1.43 kB
JavaScript
import Client from "mina-signer";
import { convertFieldsToPublicKey } from "./base58/public-key.js";
const client = new Client({
network: "testnet",
});
export function publicKeyToU256(publicKey) {
const raw = client.publicKeyToRaw(publicKey);
const swappedRaw = raw
.match(/.{1,2}/g)
?.reverse()
.join("") || "";
const u256 = BigInt("0x" + swappedRaw);
return u256;
}
const MAX_BIT = 2n ** 255n;
export function u256ToFields(u256) {
const isOdd = (u256 & MAX_BIT) != 0n;
const x = u256 - (isOdd ? MAX_BIT : 0n);
return { x, isOdd };
}
export function u256ToPublicKey(u256) {
const { x, isOdd } = u256ToFields(u256);
return convertFieldsToPublicKey({ x, isOdd });
}
export function convertMinaPublicKey(publicKey) {
const u256 = publicKeyToU256(publicKey);
return u256ToFields(u256);
}
export function convertMinaPublicKeyToFields(publicKey) {
if (!publicKey)
return [];
const { x, isOdd } = convertMinaPublicKey(publicKey);
return [x, isOdd ? 1n : 0n];
}
export function signFields(params) {
const { privateKey, fields } = params;
const signedData = client.signFields(fields.map(BigInt), privateKey);
return signedData;
}
export function verifyFields(params) {
const { publicKey, fields, signature } = params;
return client.verifyFields({ data: fields, publicKey, signature });
}
//# sourceMappingURL=public-key.js.map