allo-monad-ray
Version:
Monad version of Allo v2 SDK
309 lines (308 loc) • 8.6 kB
JavaScript
import { encodeFunctionData, getContract, extractChain, } from "viem";
import { create } from "../Client/Client";
import { abi, getAddress } from "./allo.config";
import { supportedChains } from "../chains.config";
export class Allo {
constructor({ chain, rpc }) {
const usedChain = extractChain({
chains: supportedChains,
id: chain,
});
this.addr = getAddress(usedChain);
this.client = create(usedChain, rpc);
this.contract = getContract({
address: this.addr,
abi: abi,
client: {
public: this.client,
}
});
}
address() {
return this.addr;
}
// Read only funcitons
async getFeeDenominator() {
const denominator = await this.contract.read.getFeeDenominator();
return denominator;
}
async isPoolAdmin(poolId, address) {
const isAdmin = await this.contract.read.isPoolAdmin([poolId, address]);
return isAdmin;
}
async isPoolManager(poolId, address) {
const isManager = await this.contract.read.isPoolManager([poolId, address]);
return isManager;
}
async getStrategy(poolId) {
const strategyAddress = this.contract.read.getStrategy([poolId]);
return strategyAddress;
}
async getPercentFee() {
const percentage = this.contract.read.getPercentFee();
return percentage;
}
async getBaseFee() {
const baseFee = this.contract.read.getBaseFee();
return baseFee;
}
async getTreasury() {
const treasuryAddress = this.contract.read.getTreasury();
return treasuryAddress;
}
async getRegistry() {
const registryAddress = this.contract.read.getRegistry();
return registryAddress;
}
async isCloneableStrategy() {
const isCloneable = this.contract.read.isCloneableStrategy();
return isCloneable;
}
async getPool(poolId) {
const pool = this.contract.read.getPool([poolId]);
return pool;
}
// Write functions
createPoolWithCustomStrategy({ profileId, strategy, initStrategyData, token, amount, metadata, managers, }) {
const data = encodeFunctionData({
abi: abi,
functionName: "createPoolWithCustomStrategy",
args: [
profileId,
strategy,
initStrategyData,
token,
amount,
metadata,
managers,
],
});
const value = token.toLocaleLowerCase() ===
"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE".toLocaleLowerCase()
? amount.toString()
: "0";
return {
to: this.addr,
data: data,
value: value,
};
}
createPool({ profileId, strategy, initStrategyData, token, amount, metadata, managers, }) {
const data = encodeFunctionData({
abi: abi,
functionName: "createPool",
args: [
profileId,
strategy,
initStrategyData,
token,
amount,
metadata,
managers,
],
});
const value = token.toLocaleLowerCase() ===
"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE".toLocaleLowerCase()
? amount.toString()
: "0";
return {
to: this.addr,
data: data,
value: value,
};
}
// updatePoolMetadata(uint256 _poolId, Metadata memory _metadata)
updatePoolMetadata({ poolId, metadata, }) {
const data = encodeFunctionData({
abi: abi,
functionName: "updatePoolMetadata",
args: [poolId, metadata],
});
return {
to: this.addr,
data: data,
value: "0",
};
}
updateRegistry(registry) {
const data = encodeFunctionData({
abi: abi,
functionName: "updateRegistry",
args: [registry],
});
return {
to: this.addr,
data: data,
value: "0",
};
}
updateTreasury(registry) {
const data = encodeFunctionData({
abi: abi,
functionName: "updateRegistry",
args: [registry],
});
return {
to: this.addr,
data: data,
value: "0",
};
}
updatePercentFee(percentage) {
const data = encodeFunctionData({
abi: abi,
functionName: "updatePercentFee",
args: [percentage],
});
return {
to: this.addr,
data: data,
value: "0",
};
}
updateBaseFee(percentage) {
const data = encodeFunctionData({
abi: abi,
functionName: "updateBaseFee",
args: [percentage],
});
return {
to: this.addr,
data: data,
value: "0",
};
}
addToCloneableStrategies(strategy) {
const data = encodeFunctionData({
abi: abi,
functionName: "addToCloneableStrategies",
args: [strategy],
});
return {
to: this.addr,
data: data,
value: "0",
};
}
removeFromCloneableStrategies(strategy) {
const data = encodeFunctionData({
abi: abi,
functionName: "removeFromCloneableStrategies",
args: [strategy],
});
return {
to: this.addr,
data: data,
value: "0",
};
}
addPoolManager(poolId, manager) {
const data = encodeFunctionData({
abi: abi,
functionName: "addPoolManager",
args: [poolId, manager],
});
return {
to: this.addr,
data: data,
value: "0",
};
}
removePoolManager(poolId, manager) {
const data = encodeFunctionData({
abi: abi,
functionName: "removePoolManager",
args: [poolId, manager],
});
return {
to: this.addr,
data: data,
value: "0",
};
}
recoverFunds(token, recipient) {
const data = encodeFunctionData({
abi: abi,
functionName: "recoverFunds",
args: [token, recipient],
});
return {
to: this.addr,
data: data,
value: "0",
};
}
// Strategy functions
registerRecipient(poolId, strategyData) {
const data = encodeFunctionData({
abi: abi,
functionName: "registerRecipient",
args: [poolId, strategyData],
});
return {
to: this.addr,
data: data,
value: "0",
};
}
batchRegisterRecipient(poolIds, strategyData) {
const data = encodeFunctionData({
abi: abi,
functionName: "batchRegisterRecipient",
args: [poolIds, strategyData],
});
return {
to: this.addr,
data: data,
value: "0",
};
}
fundPool(poolId, amount) {
const data = encodeFunctionData({
abi: abi,
functionName: "fundPool",
args: [poolId, amount],
});
return {
to: this.addr,
data: data,
value: "0",
};
}
allocate(poolId, strategyData) {
const data = encodeFunctionData({
abi: abi,
functionName: "allocate",
args: [poolId, strategyData],
});
return {
to: this.addr,
data: data,
value: "0",
};
}
batchAllocate(poolIds, strategyData) {
const data = encodeFunctionData({
abi: abi,
functionName: "batchAllocate",
args: [poolIds, strategyData],
});
return {
to: this.addr,
data: data,
value: "0",
};
}
distribute(poolId, recipientId, strategyData) {
const data = encodeFunctionData({
abi: abi,
functionName: "distribute",
args: [poolId, recipientId, strategyData],
});
return {
to: this.addr,
data: data,
value: "0",
};
}
}