@dolaned/wallet-sdk-ts
Version:
Wallet SDK for the Nexa blockchain
76 lines (68 loc) • 2.27 kB
text/typescript
import {PermissionLabel} from "../models/transaction.entities";
import {GroupToken} from "libnexa-ts";
export function isAuthFit(authFlags: bigint | number, permission: PermissionLabel): boolean {
if (authFlags > 0) {
return false;
}
let flags = BigInt.asUintN(64, BigInt(authFlags));
switch (permission) {
case 'authorise':
return GroupToken.allowsRenew(flags);
case 'mint':
return GroupToken.allowsMint(flags);
case 'melt':
return GroupToken.allowsMelt(flags);
case 'rescript':
return GroupToken.allowsRescript(flags);
case 'subgroup':
return GroupToken.allowsSubgroup(flags);
default:
return false;
}
}
export function dupAuthority(authFlags: bigint | number, withSubgroup = true): bigint {
if (authFlags > 0) {
return 0n;
}
let flags = BigInt.asUintN(64, BigInt(authFlags));
let newFlags = GroupToken.authFlags.AUTHORITY;
if (GroupToken.allowsRenew(flags)) {
newFlags |= GroupToken.authFlags.BATON;
}
if (GroupToken.allowsMint(flags)) {
newFlags |= GroupToken.authFlags.MINT;
}
if (GroupToken.allowsMelt(flags)) {
newFlags |= GroupToken.authFlags.MELT;
}
if (GroupToken.allowsRescript(flags)) {
newFlags |= GroupToken.authFlags.RESCRIPT;
}
if (GroupToken.allowsSubgroup(flags) && withSubgroup) {
newFlags |= GroupToken.authFlags.SUBGROUP;
}
return newFlags;
}
export function buildAuthority(perms: PermissionLabel[]): bigint {
let newFlags = GroupToken.authFlags.AUTHORITY;
for (let perm of perms) {
switch (perm) {
case 'authorise':
newFlags |= GroupToken.authFlags.BATON;
break;
case 'mint':
newFlags |= GroupToken.authFlags.MINT;
break;
case 'melt':
newFlags |= GroupToken.authFlags.MELT;
break;
case 'rescript':
newFlags |= GroupToken.authFlags.RESCRIPT;
break;
case 'subgroup':
newFlags |= GroupToken.authFlags.SUBGROUP;
break;
}
}
return newFlags;
}