@river-build/web3
Version:
Dapps for our Space and Registry contracts
120 lines • 4.19 kB
JavaScript
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