UNPKG

@river-build/web3

Version:

Dapps for our Space and Registry contracts

120 lines 4.19 kB
import { ethers } from 'ethers'; import { CheckOperationType, encodeRuleData, encodeRuleDataV2, encodeThresholdParams, decodeThresholdParams, } from './entitlement'; const UserAddressesEncoding = 'address[]'; export function encodeUsers(users) { const abiCoder = ethers.utils.defaultAbiCoder; const encodedData = abiCoder.encode([UserAddressesEncoding], [users]); return encodedData; } export function decodeUsers(encodedData) { const abiCoder = ethers.utils.defaultAbiCoder; const decodedData = abiCoder.decode([UserAddressesEncoding], encodedData); let u = []; if (decodedData.length) { // decoded value is in element 0 of the array u = decodedData[0]; } return u; } export function createUserEntitlementStruct(moduleAddress, users) { const data = encodeUsers(users); return { module: moduleAddress, data, }; } export function createRuleEntitlementStruct(moduleAddress, ruleData) { const encoded = encodeRuleData(ruleData); return { module: moduleAddress, data: encoded, }; } export function createRuleEntitlementV2Struct(moduleAddress, ruleData) { const encoded = encodeRuleDataV2(ruleData); return { module: moduleAddress, data: encoded, }; } export function convertRuleDataV1ToV2(ruleData) { const operations = ruleData.operations.map((op) => { return { ...op }; }); const logicalOperations = ruleData.logicalOperations.map((op) => { return { ...op }; }); const checkOperations = ruleData.checkOperations.map((op) => { switch (op.opType) { case CheckOperationType.MOCK: case CheckOperationType.ERC20: case CheckOperationType.ERC721: case CheckOperationType.ETH_BALANCE: { const threshold = ethers.BigNumber.from(op.threshold).toBigInt(); return { opType: op.opType, chainId: op.chainId, contractAddress: op.contractAddress, params: encodeThresholdParams({ threshold }), }; } case CheckOperationType.ERC1155: throw new Error('ERC1155 not supported for V1 Rule Data'); case CheckOperationType.ISENTITLED: return { opType: op.opType, chainId: op.chainId, contractAddress: op.contractAddress, params: `0x`, }; default: throw new Error('Unsupported Check Operation Type'); } }); return { operations, logicalOperations, checkOperations, }; } export function convertRuleDataV2ToV1(ruleData) { const operations = ruleData.operations.map((op) => { return { ...op }; }); const logicalOperations = ruleData.logicalOperations.map((op) => { return { ...op }; }); const checkOperations = ruleData.checkOperations.map((op) => { switch (op.opType) { case CheckOperationType.MOCK: case CheckOperationType.ERC20: case CheckOperationType.ERC721: case CheckOperationType.ETH_BALANCE: { const { threshold } = decodeThresholdParams(op.params); return { opType: op.opType, chainId: op.chainId, contractAddress: op.contractAddress, threshold, }; } case CheckOperationType.ERC1155: throw new Error('ERC1155 not supported for V1 Rule Data'); case CheckOperationType.ISENTITLED: return { opType: op.opType, chainId: op.chainId, contractAddress: op.contractAddress, threshold: 0n, }; default: throw new Error('Unsupported Check Operation Type'); } }); return { operations, logicalOperations, checkOperations, }; } //# sourceMappingURL=ConvertersEntitlements.js.map