@forevermoney/sdk 0.5.3 → 0.5.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -0
- package/README.md +9 -7
- package/dist/index.cjs +65 -16
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +4 -3
- package/dist/index.d.ts +4 -3
- package/dist/index.js +65 -16
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.cts
CHANGED
|
@@ -9,9 +9,9 @@ declare const SUBTENSOR_CCIP_SELECTOR = 2135107236357186872n;
|
|
|
9
9
|
declare const RAO_PER_TAO = 1000000000n;
|
|
10
10
|
declare const EVM_WEI_PER_RAO = 1000000000n;
|
|
11
11
|
declare const SN80_NETUID = 80n;
|
|
12
|
-
declare const FOREVERMONEY_DEPLOYMENT_VERSION: "1.
|
|
12
|
+
declare const FOREVERMONEY_DEPLOYMENT_VERSION: "1.4.0";
|
|
13
13
|
declare const foreverMoneyDeployment: Readonly<{
|
|
14
|
-
version: "1.
|
|
14
|
+
version: "1.4.0";
|
|
15
15
|
base: Readonly<{
|
|
16
16
|
key: "base";
|
|
17
17
|
name: "Base";
|
|
@@ -40,6 +40,7 @@ declare const foreverMoneyDeployment: Readonly<{
|
|
|
40
40
|
gateway: `0x${string}`;
|
|
41
41
|
legacyGateways: readonly `0x${string}`[];
|
|
42
42
|
wrappedTao: `0x${string}`;
|
|
43
|
+
wrappedSn80: `0x${string}`;
|
|
43
44
|
ccipRouter: `0x${string}`;
|
|
44
45
|
ccipOffRampFromSubtensor: `0x${string}`;
|
|
45
46
|
}>;
|
|
@@ -262,7 +263,7 @@ declare const foreverMoneyAbis: Readonly<{
|
|
|
262
263
|
alphaGateway: readonly ["function ROUTER() view returns (address)", "function allowedLane(uint64 selector) view returns (bool)", "function maxIntegratorFeeBps() view returns (uint16)", "function bridgeFeeBps() view returns (uint16)", "function integratorTaoTopUp(uint256 taoAmount,uint16 bps) pure returns (uint256)", "function quoteBridgeOut(uint64 destSelector,address token,address recipient,uint256 mintedAmount) view returns (uint256 fee)", "function bridgeOut(uint64 destSelector,address token,address recipient,uint256 taoAmount,uint256 stakedAlphaRao,uint256 minTokenOut) payable returns (bytes32 messageId)", "function integratorCut(uint256 amount,uint16 bps) pure returns (uint256)", "function quoteBridgeOutWithFee(uint64 destSelector,address token,address recipient,uint256 mintedAmount,uint256 taoAmount,uint256 stakedAlphaRao,(address recipient,uint16 bps) integrator) view returns (uint256 fee,uint256 nativeTopUp,uint256 alphaTopUp,uint256 amountCrossing)", "function bridgeOutWithFee(uint64 destSelector,address token,address recipient,uint256 taoAmount,uint256 stakedAlphaRao,uint256 minTokenOut,(address recipient,uint16 bps) integrator) payable returns (bytes32 messageId)", "function bridgeOutFromValidators(uint64 destSelector,address token,address recipient,uint256 taoAmount,(bytes32 validator,uint256 alphaRao)[] sources,uint256 minTokenOut) payable returns (bytes32 messageId)", "function bridgeOutFromValidatorsWithFee(uint64 destSelector,address token,address recipient,uint256 taoAmount,(bytes32 validator,uint256 alphaRao)[] sources,uint256 minTokenOut,(address recipient,uint16 bps) integrator) payable returns (bytes32 messageId)", "function MAX_STAKE_SOURCES() view returns (uint256)", "function GATEWAY_COLDKEY() view returns (bytes32)", "function claimLiquid(address token,uint256 minTaoOut,address to)", "function claimNative(address to)", "function claimStaked(address token,bytes32 destColdkey,address to)", "function claimToken(address token,address to)", "function claimableNative(address account) view returns (uint256)", "function claimableToken(address token,address account) view returns (uint256)", "event BridgedOut(uint64 destChainSelector,address indexed token,address indexed sender,address indexed recipient,uint256 minted,bytes32 messageId)", "event Claimable(address indexed token,address indexed user,uint256 native,uint256 wsn)", "event NotDelivered(uint64 indexed sourceChainSelector,address indexed token,uint256 amount,uint8 reason)", "event DeliveredLiquid(address indexed token,bytes32 indexed ss58,uint256 taoOut)", "event DeliveredStaked(address indexed token,bytes32 indexed ss58,uint256 alphaRao)"];
|
|
263
264
|
alphaVault: readonly ["function isPaused() view returns (bool)", "function pausedUntil() view returns (uint256)", "function isListed(address token) view returns (bool)", "function backing(address token) view returns (uint256 stakedAlpha)", "function positionOf(address token) view returns (bytes32 validator,uint256 netuid)"];
|
|
264
265
|
ccipExecution: readonly ["event ExecutionStateChanged(uint64 indexed sourceChainSelector,uint64 indexed sequenceNumber,bytes32 indexed messageId,bytes32 messageHash,uint8 state,bytes returnData,uint256 gasUsed)"];
|
|
265
|
-
ccipRouter: readonly ["function isOffRamp(uint64 sourceChainSelector,address offRamp) view returns (bool)"];
|
|
266
|
+
ccipRouter: readonly ["function isOffRamp(uint64 sourceChainSelector,address offRamp) view returns (bool)", "function getOffRamps() view returns ((uint64 sourceChainSelector,address offRamp)[])"];
|
|
266
267
|
erc20: readonly ["function allowance(address owner,address spender) view returns (uint256)", "function approve(address spender,uint256 amount) returns (bool)", "function balanceOf(address account) view returns (uint256)"];
|
|
267
268
|
spokeGateway: readonly ["function ROUTER() view returns (address)", "function BITTENSOR_SELECTOR() view returns (uint64)", "function SUBTENSOR_GATEWAY() view returns (address)", "function maxIntegratorFeeBps() view returns (uint16)", "function bridgeFeeBps() view returns (uint16)", "function quoteBridgeToFinney(address token,uint256 amount,(bytes32 ss58,address evmFallback,bool wantLiquid,uint256 minTaoOut) exit) view returns (uint256 fee)", "function quoteBridgeToFinney(address token,uint256 amount,(bytes32 ss58,address evmFallback,bool wantLiquid,uint256 minTaoOut) exit,uint256 gasLimit) view returns (uint256 fee)", "function bridgeToFinney(address token,uint256 amount,(bytes32 ss58,address evmFallback,bool wantLiquid,uint256 minTaoOut) exit) payable returns (bytes32 messageId)", "function bridgeToFinney(address token,uint256 amount,(bytes32 ss58,address evmFallback,bool wantLiquid,uint256 minTaoOut) exit,uint256 gasLimit) payable returns (bytes32 messageId)", "function quoteBridgeToFinneyWithFee(address token,uint256 amount,(bytes32 ss58,address evmFallback,bool wantLiquid,uint256 minTaoOut) exit,uint256 gasLimit,(address recipient,uint16 bps) integrator) view returns (uint256 fee,uint256 cut,uint256 amountCrossing)", "function bridgeToFinneyWithFee(address token,uint256 amount,(bytes32 ss58,address evmFallback,bool wantLiquid,uint256 minTaoOut) exit,uint256 gasLimit,(address recipient,uint16 bps) integrator) payable returns (bytes32 messageId)", "event BridgedToFinney(address indexed token,address indexed sender,bytes32 indexed ss58,uint256 amount,bytes32 messageId)"];
|
|
268
269
|
staking: readonly ["function allowance(address sourceAddress,address spenderAddress,uint256 netuid) view returns (uint256)", "function approve(address spenderAddress,uint256 netuid,uint256 absoluteAmount)", "function getStake(bytes32 hotkey,bytes32 coldkey,uint256 netuid) view returns (uint256)"];
|
package/dist/index.d.ts
CHANGED
|
@@ -9,9 +9,9 @@ declare const SUBTENSOR_CCIP_SELECTOR = 2135107236357186872n;
|
|
|
9
9
|
declare const RAO_PER_TAO = 1000000000n;
|
|
10
10
|
declare const EVM_WEI_PER_RAO = 1000000000n;
|
|
11
11
|
declare const SN80_NETUID = 80n;
|
|
12
|
-
declare const FOREVERMONEY_DEPLOYMENT_VERSION: "1.
|
|
12
|
+
declare const FOREVERMONEY_DEPLOYMENT_VERSION: "1.4.0";
|
|
13
13
|
declare const foreverMoneyDeployment: Readonly<{
|
|
14
|
-
version: "1.
|
|
14
|
+
version: "1.4.0";
|
|
15
15
|
base: Readonly<{
|
|
16
16
|
key: "base";
|
|
17
17
|
name: "Base";
|
|
@@ -40,6 +40,7 @@ declare const foreverMoneyDeployment: Readonly<{
|
|
|
40
40
|
gateway: `0x${string}`;
|
|
41
41
|
legacyGateways: readonly `0x${string}`[];
|
|
42
42
|
wrappedTao: `0x${string}`;
|
|
43
|
+
wrappedSn80: `0x${string}`;
|
|
43
44
|
ccipRouter: `0x${string}`;
|
|
44
45
|
ccipOffRampFromSubtensor: `0x${string}`;
|
|
45
46
|
}>;
|
|
@@ -262,7 +263,7 @@ declare const foreverMoneyAbis: Readonly<{
|
|
|
262
263
|
alphaGateway: readonly ["function ROUTER() view returns (address)", "function allowedLane(uint64 selector) view returns (bool)", "function maxIntegratorFeeBps() view returns (uint16)", "function bridgeFeeBps() view returns (uint16)", "function integratorTaoTopUp(uint256 taoAmount,uint16 bps) pure returns (uint256)", "function quoteBridgeOut(uint64 destSelector,address token,address recipient,uint256 mintedAmount) view returns (uint256 fee)", "function bridgeOut(uint64 destSelector,address token,address recipient,uint256 taoAmount,uint256 stakedAlphaRao,uint256 minTokenOut) payable returns (bytes32 messageId)", "function integratorCut(uint256 amount,uint16 bps) pure returns (uint256)", "function quoteBridgeOutWithFee(uint64 destSelector,address token,address recipient,uint256 mintedAmount,uint256 taoAmount,uint256 stakedAlphaRao,(address recipient,uint16 bps) integrator) view returns (uint256 fee,uint256 nativeTopUp,uint256 alphaTopUp,uint256 amountCrossing)", "function bridgeOutWithFee(uint64 destSelector,address token,address recipient,uint256 taoAmount,uint256 stakedAlphaRao,uint256 minTokenOut,(address recipient,uint16 bps) integrator) payable returns (bytes32 messageId)", "function bridgeOutFromValidators(uint64 destSelector,address token,address recipient,uint256 taoAmount,(bytes32 validator,uint256 alphaRao)[] sources,uint256 minTokenOut) payable returns (bytes32 messageId)", "function bridgeOutFromValidatorsWithFee(uint64 destSelector,address token,address recipient,uint256 taoAmount,(bytes32 validator,uint256 alphaRao)[] sources,uint256 minTokenOut,(address recipient,uint16 bps) integrator) payable returns (bytes32 messageId)", "function MAX_STAKE_SOURCES() view returns (uint256)", "function GATEWAY_COLDKEY() view returns (bytes32)", "function claimLiquid(address token,uint256 minTaoOut,address to)", "function claimNative(address to)", "function claimStaked(address token,bytes32 destColdkey,address to)", "function claimToken(address token,address to)", "function claimableNative(address account) view returns (uint256)", "function claimableToken(address token,address account) view returns (uint256)", "event BridgedOut(uint64 destChainSelector,address indexed token,address indexed sender,address indexed recipient,uint256 minted,bytes32 messageId)", "event Claimable(address indexed token,address indexed user,uint256 native,uint256 wsn)", "event NotDelivered(uint64 indexed sourceChainSelector,address indexed token,uint256 amount,uint8 reason)", "event DeliveredLiquid(address indexed token,bytes32 indexed ss58,uint256 taoOut)", "event DeliveredStaked(address indexed token,bytes32 indexed ss58,uint256 alphaRao)"];
|
|
263
264
|
alphaVault: readonly ["function isPaused() view returns (bool)", "function pausedUntil() view returns (uint256)", "function isListed(address token) view returns (bool)", "function backing(address token) view returns (uint256 stakedAlpha)", "function positionOf(address token) view returns (bytes32 validator,uint256 netuid)"];
|
|
264
265
|
ccipExecution: readonly ["event ExecutionStateChanged(uint64 indexed sourceChainSelector,uint64 indexed sequenceNumber,bytes32 indexed messageId,bytes32 messageHash,uint8 state,bytes returnData,uint256 gasUsed)"];
|
|
265
|
-
ccipRouter: readonly ["function isOffRamp(uint64 sourceChainSelector,address offRamp) view returns (bool)"];
|
|
266
|
+
ccipRouter: readonly ["function isOffRamp(uint64 sourceChainSelector,address offRamp) view returns (bool)", "function getOffRamps() view returns ((uint64 sourceChainSelector,address offRamp)[])"];
|
|
266
267
|
erc20: readonly ["function allowance(address owner,address spender) view returns (uint256)", "function approve(address spender,uint256 amount) returns (bool)", "function balanceOf(address account) view returns (uint256)"];
|
|
267
268
|
spokeGateway: readonly ["function ROUTER() view returns (address)", "function BITTENSOR_SELECTOR() view returns (uint64)", "function SUBTENSOR_GATEWAY() view returns (address)", "function maxIntegratorFeeBps() view returns (uint16)", "function bridgeFeeBps() view returns (uint16)", "function quoteBridgeToFinney(address token,uint256 amount,(bytes32 ss58,address evmFallback,bool wantLiquid,uint256 minTaoOut) exit) view returns (uint256 fee)", "function quoteBridgeToFinney(address token,uint256 amount,(bytes32 ss58,address evmFallback,bool wantLiquid,uint256 minTaoOut) exit,uint256 gasLimit) view returns (uint256 fee)", "function bridgeToFinney(address token,uint256 amount,(bytes32 ss58,address evmFallback,bool wantLiquid,uint256 minTaoOut) exit) payable returns (bytes32 messageId)", "function bridgeToFinney(address token,uint256 amount,(bytes32 ss58,address evmFallback,bool wantLiquid,uint256 minTaoOut) exit,uint256 gasLimit) payable returns (bytes32 messageId)", "function quoteBridgeToFinneyWithFee(address token,uint256 amount,(bytes32 ss58,address evmFallback,bool wantLiquid,uint256 minTaoOut) exit,uint256 gasLimit,(address recipient,uint16 bps) integrator) view returns (uint256 fee,uint256 cut,uint256 amountCrossing)", "function bridgeToFinneyWithFee(address token,uint256 amount,(bytes32 ss58,address evmFallback,bool wantLiquid,uint256 minTaoOut) exit,uint256 gasLimit,(address recipient,uint16 bps) integrator) payable returns (bytes32 messageId)", "event BridgedToFinney(address indexed token,address indexed sender,bytes32 indexed ss58,uint256 amount,bytes32 messageId)"];
|
|
268
269
|
staking: readonly ["function allowance(address sourceAddress,address spenderAddress,uint256 netuid) view returns (uint256)", "function approve(address spenderAddress,uint256 netuid,uint256 absoluteAmount)", "function getStake(bytes32 hotkey,bytes32 coldkey,uint256 netuid) view returns (uint256)"];
|
package/dist/index.js
CHANGED
|
@@ -9,7 +9,7 @@ var SUBTENSOR_CCIP_SELECTOR = 2135107236357186872n;
|
|
|
9
9
|
var RAO_PER_TAO = 1000000000n;
|
|
10
10
|
var EVM_WEI_PER_RAO = 1000000000n;
|
|
11
11
|
var SN80_NETUID = 80n;
|
|
12
|
-
var FOREVERMONEY_DEPLOYMENT_VERSION = "1.
|
|
12
|
+
var FOREVERMONEY_DEPLOYMENT_VERSION = "1.4.0";
|
|
13
13
|
var foreverMoneyDeployment = Object.freeze({
|
|
14
14
|
version: FOREVERMONEY_DEPLOYMENT_VERSION,
|
|
15
15
|
base: Object.freeze({
|
|
@@ -62,6 +62,9 @@ var foreverMoneyDeployment = Object.freeze({
|
|
|
62
62
|
wrappedTao: getAddress(
|
|
63
63
|
"0xf3081494B87e8D5fb7960f066E931D1D0e6E3d67"
|
|
64
64
|
),
|
|
65
|
+
wrappedSn80: getAddress(
|
|
66
|
+
"0x6f63d869011f95274498023b4abfc00b30c34378"
|
|
67
|
+
),
|
|
65
68
|
ccipRouter: getAddress(
|
|
66
69
|
"0x06fC836cf9839B1cd891C440A0a45242DA6Ae1c9"
|
|
67
70
|
),
|
|
@@ -631,7 +634,8 @@ var CCIP_EXECUTION_ABI = Object.freeze([
|
|
|
631
634
|
"event ExecutionStateChanged(uint64 indexed sourceChainSelector,uint64 indexed sequenceNumber,bytes32 indexed messageId,bytes32 messageHash,uint8 state,bytes returnData,uint256 gasUsed)"
|
|
632
635
|
]);
|
|
633
636
|
var CCIP_ROUTER_ABI = Object.freeze([
|
|
634
|
-
"function isOffRamp(uint64 sourceChainSelector,address offRamp) view returns (bool)"
|
|
637
|
+
"function isOffRamp(uint64 sourceChainSelector,address offRamp) view returns (bool)",
|
|
638
|
+
"function getOffRamps() view returns ((uint64 sourceChainSelector,address offRamp)[])"
|
|
635
639
|
]);
|
|
636
640
|
var foreverMoneyAbis = Object.freeze({
|
|
637
641
|
alphaGateway: ALPHA_GATEWAY_ABI,
|
|
@@ -740,15 +744,9 @@ function bridgeAsset(evmChain, asset = "tao") {
|
|
|
740
744
|
'Asset must be "tao" or "sn80".'
|
|
741
745
|
);
|
|
742
746
|
}
|
|
743
|
-
if (asset === "sn80" && evmChain !== "base") {
|
|
744
|
-
throw new ForeverMoneyError(
|
|
745
|
-
"INVALID_TRANSACTION_PLAN",
|
|
746
|
-
"SN80 bridging is supported between Base and Subtensor."
|
|
747
|
-
);
|
|
748
|
-
}
|
|
749
747
|
const evm = getForeverMoneyEvmDeployment(evmChain);
|
|
750
748
|
return asset === "sn80" ? {
|
|
751
|
-
evmToken:
|
|
749
|
+
evmToken: evm.contracts.wrappedSn80,
|
|
752
750
|
subtensorToken: foreverMoneyDeployment.subtensor.contracts.wrappedSn80,
|
|
753
751
|
label: "SN80",
|
|
754
752
|
wrappedLabel: "SN80"
|
|
@@ -2013,6 +2011,41 @@ function bridgeMessageIdFromReceipt(direction, receipt) {
|
|
|
2013
2011
|
// src/bridge/tracking.ts
|
|
2014
2012
|
var ccipExecutionAbi = parseAbi4(CCIP_EXECUTION_ABI);
|
|
2015
2013
|
var alphaGatewayAbi2 = parseAbi4(ALPHA_GATEWAY_ABI);
|
|
2014
|
+
var routerAbi = parseAbi4(CCIP_ROUTER_ABI);
|
|
2015
|
+
var executionV2Abi = parseAbi4([
|
|
2016
|
+
"event ExecutionStateChanged(uint64 indexed sourceChainSelector,uint64 indexed sequenceNumber,bytes32 indexed messageId,uint8 state,bytes returnData)"
|
|
2017
|
+
]);
|
|
2018
|
+
var rampCache = /* @__PURE__ */ new WeakMap();
|
|
2019
|
+
function deliveryOffRamps(provider, client, router, selector, legacy) {
|
|
2020
|
+
let cache = rampCache.get(provider);
|
|
2021
|
+
if (!cache) {
|
|
2022
|
+
cache = /* @__PURE__ */ new Map();
|
|
2023
|
+
rampCache.set(provider, cache);
|
|
2024
|
+
}
|
|
2025
|
+
const key = `${router}:${selector}:${legacy}`;
|
|
2026
|
+
const cached = cache.get(key);
|
|
2027
|
+
if (cached && cached.expires > Date.now()) return cached.request;
|
|
2028
|
+
const request = client.readContract({
|
|
2029
|
+
address: router,
|
|
2030
|
+
abi: routerAbi,
|
|
2031
|
+
functionName: "getOffRamps"
|
|
2032
|
+
}).then((ramps) => {
|
|
2033
|
+
const addresses = /* @__PURE__ */ new Map([
|
|
2034
|
+
[legacy.toLowerCase(), legacy]
|
|
2035
|
+
]);
|
|
2036
|
+
for (const ramp of ramps) {
|
|
2037
|
+
if (ramp.sourceChainSelector === selector)
|
|
2038
|
+
addresses.set(ramp.offRamp.toLowerCase(), ramp.offRamp);
|
|
2039
|
+
}
|
|
2040
|
+
return [...addresses.values()];
|
|
2041
|
+
});
|
|
2042
|
+
const entry = { expires: Date.now() + 3e5, request };
|
|
2043
|
+
cache.set(key, entry);
|
|
2044
|
+
void request.catch(() => {
|
|
2045
|
+
if (cache.get(key) === entry) cache.delete(key);
|
|
2046
|
+
});
|
|
2047
|
+
return request;
|
|
2048
|
+
}
|
|
2016
2049
|
function destinationChainId(direction) {
|
|
2017
2050
|
assertBridgeDirection(direction);
|
|
2018
2051
|
const evm = getForeverMoneyEvmDeployment(
|
|
@@ -2126,13 +2159,29 @@ async function getCcipDeliveryStatus(provider, input) {
|
|
|
2126
2159
|
const evmToSubtensor = isEvmToSubtensorDirection(input.direction);
|
|
2127
2160
|
const sourceSelector = evmToSubtensor ? evm.ccipSelector : foreverMoneyDeployment.subtensor.ccipSelector;
|
|
2128
2161
|
const offRamp = evmToSubtensor ? evmChain === "base" ? foreverMoneyDeployment.subtensor.contracts.ccipOffRampFromBase : foreverMoneyDeployment.subtensor.contracts.ccipOffRampFromRobinhood : evm.contracts.ccipOffRampFromSubtensor;
|
|
2129
|
-
const
|
|
2130
|
-
|
|
2131
|
-
|
|
2132
|
-
|
|
2133
|
-
|
|
2134
|
-
|
|
2135
|
-
|
|
2162
|
+
const offRamps = await deliveryOffRamps(
|
|
2163
|
+
provider,
|
|
2164
|
+
client,
|
|
2165
|
+
evmToSubtensor ? foreverMoneyDeployment.subtensor.contracts.ccipRouter : evm.contracts.ccipRouter,
|
|
2166
|
+
sourceSelector,
|
|
2167
|
+
offRamp
|
|
2168
|
+
);
|
|
2169
|
+
const batches = await Promise.all(
|
|
2170
|
+
[executionV2Abi[0], ccipExecutionAbi[0]].map(
|
|
2171
|
+
(event) => client.getLogs({
|
|
2172
|
+
address: offRamps.length === 1 ? offRamps[0] : [...offRamps],
|
|
2173
|
+
fromBlock: BigInt(input.fromBlock),
|
|
2174
|
+
toBlock: "latest",
|
|
2175
|
+
event,
|
|
2176
|
+
args: { sourceChainSelector: sourceSelector, messageId },
|
|
2177
|
+
strict: true
|
|
2178
|
+
})
|
|
2179
|
+
)
|
|
2180
|
+
);
|
|
2181
|
+
const logs = batches.flat().sort((a, b) => {
|
|
2182
|
+
const blockA = a.blockNumber ?? 0n;
|
|
2183
|
+
const blockB = b.blockNumber ?? 0n;
|
|
2184
|
+
return blockA === blockB ? (a.logIndex ?? 0) - (b.logIndex ?? 0) : blockA < blockB ? -1 : 1;
|
|
2136
2185
|
});
|
|
2137
2186
|
const latest = logs.at(-1);
|
|
2138
2187
|
if (latest === void 0) return "waiting";
|