@wormhole-foundation/sdk-connect 0.5.0-alpha.0
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/dist/cjs/circle-api.d.ts +16 -0
- package/dist/cjs/circle-api.d.ts.map +1 -0
- package/dist/cjs/circle-api.js +47 -0
- package/dist/cjs/circle-api.js.map +1 -0
- package/dist/cjs/common.d.ts +4 -0
- package/dist/cjs/common.d.ts.map +1 -0
- package/dist/cjs/common.js +40 -0
- package/dist/cjs/common.js.map +1 -0
- package/dist/cjs/config.d.ts +34 -0
- package/dist/cjs/config.d.ts.map +1 -0
- package/dist/cjs/config.js +52 -0
- package/dist/cjs/config.js.map +1 -0
- package/dist/cjs/index.d.ts +15 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +45 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/protocols/cctpTransfer.d.ts +41 -0
- package/dist/cjs/protocols/cctpTransfer.d.ts.map +1 -0
- package/dist/cjs/protocols/cctpTransfer.js +459 -0
- package/dist/cjs/protocols/cctpTransfer.js.map +1 -0
- package/dist/cjs/protocols/gatewayTransfer.d.ts +40 -0
- package/dist/cjs/protocols/gatewayTransfer.d.ts.map +1 -0
- package/dist/cjs/protocols/gatewayTransfer.js +406 -0
- package/dist/cjs/protocols/gatewayTransfer.js.map +1 -0
- package/dist/cjs/protocols/tokenTransfer.d.ts +40 -0
- package/dist/cjs/protocols/tokenTransfer.d.ts.map +1 -0
- package/dist/cjs/protocols/tokenTransfer.js +472 -0
- package/dist/cjs/protocols/tokenTransfer.js.map +1 -0
- package/dist/cjs/protocols/wormholeTransfer.d.ts +20 -0
- package/dist/cjs/protocols/wormholeTransfer.d.ts.map +1 -0
- package/dist/cjs/protocols/wormholeTransfer.js +3 -0
- package/dist/cjs/protocols/wormholeTransfer.js.map +1 -0
- package/dist/cjs/routes/cctp/automatic.d.ts +46 -0
- package/dist/cjs/routes/cctp/automatic.d.ts.map +1 -0
- package/dist/cjs/routes/cctp/automatic.js +135 -0
- package/dist/cjs/routes/cctp/automatic.js.map +1 -0
- package/dist/cjs/routes/cctp/index.d.ts +3 -0
- package/dist/cjs/routes/cctp/index.d.ts.map +1 -0
- package/dist/cjs/routes/cctp/index.js +19 -0
- package/dist/cjs/routes/cctp/index.js.map +1 -0
- package/dist/cjs/routes/cctp/manual.d.ts +43 -0
- package/dist/cjs/routes/cctp/manual.d.ts.map +1 -0
- package/dist/cjs/routes/cctp/manual.js +113 -0
- package/dist/cjs/routes/cctp/manual.js.map +1 -0
- package/dist/cjs/routes/common.d.ts +13 -0
- package/dist/cjs/routes/common.d.ts.map +1 -0
- package/dist/cjs/routes/common.js +45 -0
- package/dist/cjs/routes/common.js.map +1 -0
- package/dist/cjs/routes/index.d.ts +9 -0
- package/dist/cjs/routes/index.d.ts.map +1 -0
- package/dist/cjs/routes/index.js +25 -0
- package/dist/cjs/routes/index.js.map +1 -0
- package/dist/cjs/routes/portico/automatic.d.ts +68 -0
- package/dist/cjs/routes/portico/automatic.d.ts.map +1 -0
- package/dist/cjs/routes/portico/automatic.js +208 -0
- package/dist/cjs/routes/portico/automatic.js.map +1 -0
- package/dist/cjs/routes/portico/index.d.ts +2 -0
- package/dist/cjs/routes/portico/index.d.ts.map +1 -0
- package/dist/cjs/routes/portico/index.js +18 -0
- package/dist/cjs/routes/portico/index.js.map +1 -0
- package/dist/cjs/routes/portico/utils.d.ts +1 -0
- package/dist/cjs/routes/portico/utils.d.ts.map +1 -0
- package/dist/cjs/routes/portico/utils.js +2 -0
- package/dist/cjs/routes/portico/utils.js.map +1 -0
- package/dist/cjs/routes/request.d.ts +25 -0
- package/dist/cjs/routes/request.d.ts.map +1 -0
- package/dist/cjs/routes/request.js +65 -0
- package/dist/cjs/routes/request.js.map +1 -0
- package/dist/cjs/routes/resolver.d.ts +15 -0
- package/dist/cjs/routes/resolver.d.ts.map +1 -0
- package/dist/cjs/routes/resolver.js +87 -0
- package/dist/cjs/routes/resolver.js.map +1 -0
- package/dist/cjs/routes/route.d.ts +46 -0
- package/dist/cjs/routes/route.d.ts.map +1 -0
- package/dist/cjs/routes/route.js +34 -0
- package/dist/cjs/routes/route.js.map +1 -0
- package/dist/cjs/routes/token.d.ts +12 -0
- package/dist/cjs/routes/token.d.ts.map +1 -0
- package/dist/cjs/routes/token.js +37 -0
- package/dist/cjs/routes/token.js.map +1 -0
- package/dist/cjs/routes/tokenBridge/automatic.d.ts +46 -0
- package/dist/cjs/routes/tokenBridge/automatic.d.ts.map +1 -0
- package/dist/cjs/routes/tokenBridge/automatic.js +145 -0
- package/dist/cjs/routes/tokenBridge/automatic.js.map +1 -0
- package/dist/cjs/routes/tokenBridge/index.d.ts +3 -0
- package/dist/cjs/routes/tokenBridge/index.d.ts.map +1 -0
- package/dist/cjs/routes/tokenBridge/index.js +19 -0
- package/dist/cjs/routes/tokenBridge/index.js.map +1 -0
- package/dist/cjs/routes/tokenBridge/manual.d.ts +42 -0
- package/dist/cjs/routes/tokenBridge/manual.d.ts.map +1 -0
- package/dist/cjs/routes/tokenBridge/manual.js +87 -0
- package/dist/cjs/routes/tokenBridge/manual.js.map +1 -0
- package/dist/cjs/routes/types.d.ts +44 -0
- package/dist/cjs/routes/types.d.ts.map +1 -0
- package/dist/cjs/routes/types.js +3 -0
- package/dist/cjs/routes/types.js.map +1 -0
- package/dist/cjs/tasks.d.ts +7 -0
- package/dist/cjs/tasks.d.ts.map +1 -0
- package/dist/cjs/tasks.js +65 -0
- package/dist/cjs/tasks.js.map +1 -0
- package/dist/cjs/types.d.ts +73 -0
- package/dist/cjs/types.d.ts.map +1 -0
- package/dist/cjs/types.js +35 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/cjs/whscan-api.d.ts +172 -0
- package/dist/cjs/whscan-api.d.ts.map +1 -0
- package/dist/cjs/whscan-api.js +243 -0
- package/dist/cjs/whscan-api.js.map +1 -0
- package/dist/cjs/wormhole.d.ts +198 -0
- package/dist/cjs/wormhole.d.ts.map +1 -0
- package/dist/cjs/wormhole.js +324 -0
- package/dist/cjs/wormhole.js.map +1 -0
- package/dist/esm/circle-api.d.ts +16 -0
- package/dist/esm/circle-api.d.ts.map +1 -0
- package/dist/esm/circle-api.js +39 -0
- package/dist/esm/circle-api.js.map +1 -0
- package/dist/esm/common.d.ts +4 -0
- package/dist/esm/common.d.ts.map +1 -0
- package/dist/esm/common.js +36 -0
- package/dist/esm/common.js.map +1 -0
- package/dist/esm/config.d.ts +34 -0
- package/dist/esm/config.d.ts.map +1 -0
- package/dist/esm/config.js +47 -0
- package/dist/esm/config.js.map +1 -0
- package/dist/esm/index.d.ts +15 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +16 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/protocols/cctpTransfer.d.ts +41 -0
- package/dist/esm/protocols/cctpTransfer.d.ts.map +1 -0
- package/dist/esm/protocols/cctpTransfer.js +455 -0
- package/dist/esm/protocols/cctpTransfer.js.map +1 -0
- package/dist/esm/protocols/gatewayTransfer.d.ts +40 -0
- package/dist/esm/protocols/gatewayTransfer.d.ts.map +1 -0
- package/dist/esm/protocols/gatewayTransfer.js +402 -0
- package/dist/esm/protocols/gatewayTransfer.js.map +1 -0
- package/dist/esm/protocols/tokenTransfer.d.ts +40 -0
- package/dist/esm/protocols/tokenTransfer.d.ts.map +1 -0
- package/dist/esm/protocols/tokenTransfer.js +468 -0
- package/dist/esm/protocols/tokenTransfer.js.map +1 -0
- package/dist/esm/protocols/wormholeTransfer.d.ts +20 -0
- package/dist/esm/protocols/wormholeTransfer.d.ts.map +1 -0
- package/dist/esm/protocols/wormholeTransfer.js +2 -0
- package/dist/esm/protocols/wormholeTransfer.js.map +1 -0
- package/dist/esm/routes/cctp/automatic.d.ts +46 -0
- package/dist/esm/routes/cctp/automatic.d.ts.map +1 -0
- package/dist/esm/routes/cctp/automatic.js +131 -0
- package/dist/esm/routes/cctp/automatic.js.map +1 -0
- package/dist/esm/routes/cctp/index.d.ts +3 -0
- package/dist/esm/routes/cctp/index.d.ts.map +1 -0
- package/dist/esm/routes/cctp/index.js +3 -0
- package/dist/esm/routes/cctp/index.js.map +1 -0
- package/dist/esm/routes/cctp/manual.d.ts +43 -0
- package/dist/esm/routes/cctp/manual.d.ts.map +1 -0
- package/dist/esm/routes/cctp/manual.js +109 -0
- package/dist/esm/routes/cctp/manual.js.map +1 -0
- package/dist/esm/routes/common.d.ts +13 -0
- package/dist/esm/routes/common.d.ts.map +1 -0
- package/dist/esm/routes/common.js +41 -0
- package/dist/esm/routes/common.js.map +1 -0
- package/dist/esm/routes/index.d.ts +9 -0
- package/dist/esm/routes/index.d.ts.map +1 -0
- package/dist/esm/routes/index.js +9 -0
- package/dist/esm/routes/index.js.map +1 -0
- package/dist/esm/routes/portico/automatic.d.ts +68 -0
- package/dist/esm/routes/portico/automatic.d.ts.map +1 -0
- package/dist/esm/routes/portico/automatic.js +204 -0
- package/dist/esm/routes/portico/automatic.js.map +1 -0
- package/dist/esm/routes/portico/index.d.ts +2 -0
- package/dist/esm/routes/portico/index.d.ts.map +1 -0
- package/dist/esm/routes/portico/index.js +2 -0
- package/dist/esm/routes/portico/index.js.map +1 -0
- package/dist/esm/routes/portico/utils.d.ts +1 -0
- package/dist/esm/routes/portico/utils.d.ts.map +1 -0
- package/dist/esm/routes/portico/utils.js +2 -0
- package/dist/esm/routes/portico/utils.js.map +1 -0
- package/dist/esm/routes/request.d.ts +25 -0
- package/dist/esm/routes/request.d.ts.map +1 -0
- package/dist/esm/routes/request.js +61 -0
- package/dist/esm/routes/request.js.map +1 -0
- package/dist/esm/routes/resolver.d.ts +15 -0
- package/dist/esm/routes/resolver.d.ts.map +1 -0
- package/dist/esm/routes/resolver.js +83 -0
- package/dist/esm/routes/resolver.js.map +1 -0
- package/dist/esm/routes/route.d.ts +46 -0
- package/dist/esm/routes/route.d.ts.map +1 -0
- package/dist/esm/routes/route.js +26 -0
- package/dist/esm/routes/route.js.map +1 -0
- package/dist/esm/routes/token.d.ts +12 -0
- package/dist/esm/routes/token.d.ts.map +1 -0
- package/dist/esm/routes/token.js +31 -0
- package/dist/esm/routes/token.js.map +1 -0
- package/dist/esm/routes/tokenBridge/automatic.d.ts +46 -0
- package/dist/esm/routes/tokenBridge/automatic.d.ts.map +1 -0
- package/dist/esm/routes/tokenBridge/automatic.js +141 -0
- package/dist/esm/routes/tokenBridge/automatic.js.map +1 -0
- package/dist/esm/routes/tokenBridge/index.d.ts +3 -0
- package/dist/esm/routes/tokenBridge/index.d.ts.map +1 -0
- package/dist/esm/routes/tokenBridge/index.js +3 -0
- package/dist/esm/routes/tokenBridge/index.js.map +1 -0
- package/dist/esm/routes/tokenBridge/manual.d.ts +42 -0
- package/dist/esm/routes/tokenBridge/manual.d.ts.map +1 -0
- package/dist/esm/routes/tokenBridge/manual.js +83 -0
- package/dist/esm/routes/tokenBridge/manual.js.map +1 -0
- package/dist/esm/routes/types.d.ts +44 -0
- package/dist/esm/routes/types.d.ts.map +1 -0
- package/dist/esm/routes/types.js +2 -0
- package/dist/esm/routes/types.js.map +1 -0
- package/dist/esm/tasks.d.ts +7 -0
- package/dist/esm/tasks.d.ts.map +1 -0
- package/dist/esm/tasks.js +59 -0
- package/dist/esm/tasks.js.map +1 -0
- package/dist/esm/types.d.ts +73 -0
- package/dist/esm/types.d.ts.map +1 -0
- package/dist/esm/types.js +27 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/esm/whscan-api.d.ts +172 -0
- package/dist/esm/whscan-api.d.ts.map +1 -0
- package/dist/esm/whscan-api.js +222 -0
- package/dist/esm/whscan-api.js.map +1 -0
- package/dist/esm/wormhole.d.ts +198 -0
- package/dist/esm/wormhole.d.ts.map +1 -0
- package/dist/esm/wormhole.js +320 -0
- package/dist/esm/wormhole.js.map +1 -0
- package/package.json +52 -0
|
@@ -0,0 +1,406 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GatewayTransfer = void 0;
|
|
4
|
+
const sdk_base_1 = require("@wormhole-foundation/sdk-base");
|
|
5
|
+
const sdk_definitions_1 = require("@wormhole-foundation/sdk-definitions");
|
|
6
|
+
const common_1 = require("../common");
|
|
7
|
+
const tasks_1 = require("../tasks");
|
|
8
|
+
const types_1 = require("../types");
|
|
9
|
+
const wormhole_1 = require("../wormhole");
|
|
10
|
+
class GatewayTransfer {
|
|
11
|
+
static chain = "Wormchain";
|
|
12
|
+
wh;
|
|
13
|
+
// Wormchain context
|
|
14
|
+
gateway;
|
|
15
|
+
// Wormchain IBC Bridge
|
|
16
|
+
gatewayIbcBridge;
|
|
17
|
+
// Contract address
|
|
18
|
+
gatewayAddress;
|
|
19
|
+
// state machine tracker
|
|
20
|
+
_state;
|
|
21
|
+
// cached message derived from transfer details
|
|
22
|
+
// note: we dont want to create multiple different ones since
|
|
23
|
+
// the nonce may change and we want to keep it consistent
|
|
24
|
+
msg;
|
|
25
|
+
// Initial Transfer Settings
|
|
26
|
+
transfer;
|
|
27
|
+
// Transaction Ids from source chain
|
|
28
|
+
transactions = [];
|
|
29
|
+
// The corresponding vaa representing the GatewayTransfer
|
|
30
|
+
// on the source chain (if it came from outside cosmos and if its been completed and finalized)
|
|
31
|
+
vaas;
|
|
32
|
+
// Any transfers we do over ibc
|
|
33
|
+
ibcTransfers = [];
|
|
34
|
+
constructor(wh, transfer, gateway, gatewayIbc) {
|
|
35
|
+
this._state = types_1.TransferState.Created;
|
|
36
|
+
this.wh = wh;
|
|
37
|
+
this.transfer = transfer;
|
|
38
|
+
// reference from conf instead of asking the module
|
|
39
|
+
// so we can prevent weird imports
|
|
40
|
+
this.gatewayAddress = {
|
|
41
|
+
chain: GatewayTransfer.chain,
|
|
42
|
+
address: (0, sdk_definitions_1.toNative)(GatewayTransfer.chain, this.wh.config.chains[GatewayTransfer.chain].contracts.gateway),
|
|
43
|
+
};
|
|
44
|
+
// cache the wormchain chain context since we need it for checks
|
|
45
|
+
this.gateway = gateway;
|
|
46
|
+
this.gatewayIbcBridge = gatewayIbc;
|
|
47
|
+
// cache the message since we don't want to regenerate it any time we need it
|
|
48
|
+
this.msg = (0, sdk_definitions_1.gatewayTransferMsg)(this.transfer);
|
|
49
|
+
}
|
|
50
|
+
getTransferState() {
|
|
51
|
+
return this._state;
|
|
52
|
+
}
|
|
53
|
+
static async from(wh, from, timeout) {
|
|
54
|
+
// we need this regardless of the type of `from`
|
|
55
|
+
const wc = wh.getChain(GatewayTransfer.chain);
|
|
56
|
+
const wcibc = await wc.getIbcBridge();
|
|
57
|
+
// Fresh new transfer
|
|
58
|
+
if ((0, sdk_definitions_1.isGatewayTransferDetails)(from)) {
|
|
59
|
+
const fromChain = wh.getChain(from.from.chain);
|
|
60
|
+
const toChain = wh.getChain(from.to.chain);
|
|
61
|
+
const overrides = await GatewayTransfer.destinationOverrides(fromChain, toChain, wc, from);
|
|
62
|
+
// Override transfer params if necessary
|
|
63
|
+
from = { ...from, ...overrides };
|
|
64
|
+
return new GatewayTransfer(wh, from, wc, wcibc);
|
|
65
|
+
}
|
|
66
|
+
// Picking up where we left off
|
|
67
|
+
let gtd;
|
|
68
|
+
let txns = [];
|
|
69
|
+
if ((0, sdk_definitions_1.isTransactionIdentifier)(from)) {
|
|
70
|
+
txns.push(from);
|
|
71
|
+
gtd = await GatewayTransfer._fromTransaction(wh, from);
|
|
72
|
+
}
|
|
73
|
+
else if ((0, sdk_definitions_1.isWormholeMessageId)(from)) {
|
|
74
|
+
// TODO: we're missing the transaction that created this
|
|
75
|
+
// get it from transaction status search on wormholescan?
|
|
76
|
+
gtd = await GatewayTransfer._fromMsgId(wh, from);
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
throw new Error("Invalid `from` parameter for GatewayTransfer");
|
|
80
|
+
}
|
|
81
|
+
const gt = new GatewayTransfer(wh, gtd, wc, wcibc);
|
|
82
|
+
gt.transactions = txns;
|
|
83
|
+
// Since we're picking up from somewhere we can move the
|
|
84
|
+
// state maching to initiated
|
|
85
|
+
gt._state = types_1.TransferState.SourceInitiated;
|
|
86
|
+
// Wait for what _can_ complete to complete
|
|
87
|
+
await gt.fetchAttestation(timeout);
|
|
88
|
+
return gt;
|
|
89
|
+
}
|
|
90
|
+
// Recover Transfer info from VAA details
|
|
91
|
+
static async _fromMsgId(wh, from, timeout) {
|
|
92
|
+
// Starting with the VAA
|
|
93
|
+
const vaa = await GatewayTransfer.getTransferVaa(wh, from, timeout);
|
|
94
|
+
// The VAA may have a payload which may have a nested GatewayTransferMessage
|
|
95
|
+
let payload = vaa.payloadName === "TransferWithPayload" ? vaa.payload.payload : undefined;
|
|
96
|
+
// Nonce for GatewayTransferMessage may be in the payload
|
|
97
|
+
// and since we use the payload to find the Wormchain transacton
|
|
98
|
+
// we need to preserve it
|
|
99
|
+
let nonce;
|
|
100
|
+
let to = { ...vaa.payload.to };
|
|
101
|
+
// The payload here may be the message for Gateway
|
|
102
|
+
// Lets be sure to pull the real payload if its set
|
|
103
|
+
// Otherwise revert to undefined
|
|
104
|
+
if (payload) {
|
|
105
|
+
try {
|
|
106
|
+
const maybeWithPayload = (0, sdk_definitions_1.toGatewayMsg)(sdk_base_1.encoding.bytes.decode(payload));
|
|
107
|
+
nonce = maybeWithPayload.nonce;
|
|
108
|
+
payload = maybeWithPayload.payload
|
|
109
|
+
? sdk_base_1.encoding.bytes.encode(maybeWithPayload.payload)
|
|
110
|
+
: undefined;
|
|
111
|
+
const destChain = (0, sdk_base_1.toChain)(maybeWithPayload.chain);
|
|
112
|
+
// b64 decode the address to its string representation
|
|
113
|
+
const recipientAddress = sdk_base_1.encoding.bytes.decode(sdk_base_1.encoding.b64.decode(maybeWithPayload.recipient));
|
|
114
|
+
to = wormhole_1.Wormhole.chainAddress(destChain, recipientAddress);
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
/*Ignoring, throws if not the payload isnt JSON*/
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
const { chain, address, amount } = vaa.payload.token;
|
|
121
|
+
// Reconstruct the details
|
|
122
|
+
const details = {
|
|
123
|
+
token: { chain, address },
|
|
124
|
+
amount: amount,
|
|
125
|
+
// TODO: the `from.address` here is a lie, but we don't
|
|
126
|
+
// immediately have enough info to get the _correct_ one
|
|
127
|
+
from: { chain: from.chain, address: from.emitter },
|
|
128
|
+
to,
|
|
129
|
+
nonce,
|
|
130
|
+
payload: payload,
|
|
131
|
+
};
|
|
132
|
+
return details;
|
|
133
|
+
}
|
|
134
|
+
// Init from source tx hash, depending on the source chain
|
|
135
|
+
// we pull Transfer info from either IBC or a wh message
|
|
136
|
+
static async _fromTransaction(wh, from, timeout) {
|
|
137
|
+
const { chain, txid } = from;
|
|
138
|
+
const originChain = wh.getChain(chain);
|
|
139
|
+
// If its origin chain supports IBC, it should be an IBC message
|
|
140
|
+
if (originChain.supportsIbcBridge()) {
|
|
141
|
+
// Get the ibc tx info from the origin
|
|
142
|
+
const ibcBridge = await originChain.getIbcBridge();
|
|
143
|
+
const [xfer] = await ibcBridge.lookupTransferFromTx(from.txid);
|
|
144
|
+
return GatewayTransfer.ibcTransfertoGatewayTransfer(xfer);
|
|
145
|
+
}
|
|
146
|
+
// Otherwise grab the vaa details from the origin tx
|
|
147
|
+
const msgs = await wormhole_1.Wormhole.parseMessageFromTx(originChain, txid);
|
|
148
|
+
if (!msgs)
|
|
149
|
+
throw new Error("No messages found in transaction");
|
|
150
|
+
return await GatewayTransfer._fromMsgId(wh, msgs[0], timeout);
|
|
151
|
+
}
|
|
152
|
+
// Recover transfer info the first step in the transfer
|
|
153
|
+
static ibcTransfertoGatewayTransfer(xfer) {
|
|
154
|
+
const token = wormhole_1.Wormhole.tokenId(xfer.id.chain, xfer.data.denom);
|
|
155
|
+
const msg = (0, sdk_definitions_1.toGatewayMsg)(xfer.data.memo);
|
|
156
|
+
const destChain = (0, sdk_base_1.toChain)(msg.chain);
|
|
157
|
+
const _recip = sdk_base_1.encoding.b64.decode(msg.recipient);
|
|
158
|
+
const recipient = (0, sdk_base_1.chainToPlatform)(destChain) === "Cosmwasm"
|
|
159
|
+
? wormhole_1.Wormhole.chainAddress(destChain, sdk_base_1.encoding.bytes.decode(_recip))
|
|
160
|
+
: {
|
|
161
|
+
chain: destChain,
|
|
162
|
+
address: new sdk_definitions_1.UniversalAddress(_recip).toNative(destChain),
|
|
163
|
+
};
|
|
164
|
+
const payload = msg.payload ? sdk_base_1.encoding.bytes.encode(msg.payload) : undefined;
|
|
165
|
+
const details = {
|
|
166
|
+
token,
|
|
167
|
+
amount: BigInt(xfer.data.amount),
|
|
168
|
+
from: {
|
|
169
|
+
chain: xfer.id.chain,
|
|
170
|
+
address: (0, sdk_definitions_1.toNative)(xfer.id.chain, xfer.data.sender),
|
|
171
|
+
},
|
|
172
|
+
to: recipient,
|
|
173
|
+
fee: BigInt(msg.fee),
|
|
174
|
+
payload,
|
|
175
|
+
};
|
|
176
|
+
return details;
|
|
177
|
+
}
|
|
178
|
+
// start the WormholeTransfer by submitting transactions to the source chain
|
|
179
|
+
// returns a transaction hash
|
|
180
|
+
async initiateTransfer(signer) {
|
|
181
|
+
/*
|
|
182
|
+
0) Check current `state` is valid to call this (eg: state == Created)
|
|
183
|
+
1) Figure out where to call and issue transactions
|
|
184
|
+
2) Update state
|
|
185
|
+
3) return transaction ids
|
|
186
|
+
*/
|
|
187
|
+
if (this._state !== types_1.TransferState.Created)
|
|
188
|
+
throw new Error("Invalid state transition in `start`");
|
|
189
|
+
this.transactions = await (this.fromGateway()
|
|
190
|
+
? this._transferIbc(signer)
|
|
191
|
+
: this._transfer(signer));
|
|
192
|
+
// Update State Machine
|
|
193
|
+
this._state = types_1.TransferState.SourceInitiated;
|
|
194
|
+
return this.transactions.map((tx) => tx.txid);
|
|
195
|
+
}
|
|
196
|
+
async _transfer(signer) {
|
|
197
|
+
const tokenAddress = this.transfer.token.address;
|
|
198
|
+
const fromChain = this.wh.getChain(this.transfer.from.chain);
|
|
199
|
+
// Build the message needed to send a transfer through the gateway
|
|
200
|
+
const tb = await fromChain.getTokenBridge();
|
|
201
|
+
const xfer = tb.transfer(this.transfer.from.address, this.gatewayAddress, tokenAddress, this.transfer.amount, sdk_base_1.encoding.bytes.encode(JSON.stringify(this.msg)));
|
|
202
|
+
return (0, common_1.signSendWait)(fromChain, xfer, signer);
|
|
203
|
+
}
|
|
204
|
+
async _transferIbc(signer) {
|
|
205
|
+
if ((0, sdk_definitions_1.isNative)(this.transfer.token.address))
|
|
206
|
+
throw new Error("Native not supported for IBC transfers");
|
|
207
|
+
const fromChain = this.wh.getChain(this.transfer.from.chain);
|
|
208
|
+
const ibcBridge = await fromChain.getIbcBridge();
|
|
209
|
+
const xfer = ibcBridge.transfer(this.transfer.from.address, this.transfer.to, this.transfer.token.address, this.transfer.amount);
|
|
210
|
+
return (0, common_1.signSendWait)(fromChain, xfer, signer);
|
|
211
|
+
}
|
|
212
|
+
// wait for the Attestations to be ready
|
|
213
|
+
async fetchAttestation(timeout) {
|
|
214
|
+
// Note: this method probably does too much
|
|
215
|
+
if (this._state < types_1.TransferState.SourceInitiated || this._state > types_1.TransferState.Attested)
|
|
216
|
+
throw new Error("Invalid state transition in `fetchAttestation`");
|
|
217
|
+
const attestations = [];
|
|
218
|
+
const chain = this.wh.getChain(this.transfer.from.chain);
|
|
219
|
+
// collect ibc transfers and additional transaction ids
|
|
220
|
+
if (this.fromGateway()) {
|
|
221
|
+
// assume all the txs are from the same chain
|
|
222
|
+
// and get the ibc bridge once
|
|
223
|
+
const originIbcbridge = await chain.getIbcBridge();
|
|
224
|
+
// Ultimately we need to find the corresponding Wormchain transaction
|
|
225
|
+
// from the intitiating cosmos chain, this will contain the details of the
|
|
226
|
+
// outbound transaction to the destination chain
|
|
227
|
+
// start by getting the IBC transfers into wormchain
|
|
228
|
+
// from the cosmos chain
|
|
229
|
+
this.ibcTransfers = (await Promise.all(this.transactions.map((tx) => originIbcbridge.lookupTransferFromTx(tx.txid)))).flat();
|
|
230
|
+
// I don't know why this would happen so lmk if you see this
|
|
231
|
+
if (this.ibcTransfers.length != 1)
|
|
232
|
+
throw new Error("why?");
|
|
233
|
+
const [xfer] = this.ibcTransfers;
|
|
234
|
+
if (!this.toGateway()) {
|
|
235
|
+
// If we're leaving cosmos, grab the VAA from the gateway
|
|
236
|
+
// now find the corresponding wormchain transaction given the ibcTransfer info
|
|
237
|
+
const retryInterval = 5000;
|
|
238
|
+
const task = () => this.gatewayIbcBridge.lookupMessageFromIbcMsgId(xfer.id);
|
|
239
|
+
const whm = await (0, tasks_1.retry)(task, retryInterval, timeout, "Gateway:IbcBridge:LookupWormholeMessageFromIncomingIbcMessage");
|
|
240
|
+
if (!whm)
|
|
241
|
+
throw new Error("Matching wormhole message not found after retries exhausted");
|
|
242
|
+
const vaa = await GatewayTransfer.getTransferVaa(this.wh, whm);
|
|
243
|
+
this.vaas = [{ id: whm, vaa }];
|
|
244
|
+
attestations.push(whm);
|
|
245
|
+
}
|
|
246
|
+
else {
|
|
247
|
+
// Otherwise we need to get the transfer on the destination chain
|
|
248
|
+
// using the transfer from wormchain
|
|
249
|
+
const gatewayTransferTask = () => (0, tasks_1.fetchIbcXfer)(this.gatewayIbcBridge, xfer.id);
|
|
250
|
+
const gatewayIbcTransfers = await (0, tasks_1.retry)(gatewayTransferTask, 5000, timeout, "Gateway:IbcBridge:LookupWormchainIbcTransfer");
|
|
251
|
+
if (gatewayIbcTransfers === null)
|
|
252
|
+
throw new Error("Gateway IBC transfer not found after retries exhausted");
|
|
253
|
+
const toDestChainIbcTransfer = gatewayIbcTransfers[1];
|
|
254
|
+
const dstChain = this.wh.getChain(this.transfer.to.chain);
|
|
255
|
+
const dstIbcBridge = await dstChain.getIbcBridge();
|
|
256
|
+
const dstMsgTask = () => (0, tasks_1.fetchIbcXfer)(dstIbcBridge, toDestChainIbcTransfer.id);
|
|
257
|
+
const dstIbcTransfers = await (0, tasks_1.retry)(dstMsgTask, 5000, timeout, "Gateway:IbcBridge:LookupDestinationIbcTransfer");
|
|
258
|
+
if (!dstIbcTransfers)
|
|
259
|
+
throw new Error("Destination IBC transfer not found after retries exhausted");
|
|
260
|
+
this.ibcTransfers.push(dstIbcTransfers[0]);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
else {
|
|
264
|
+
// Otherwise, we're coming from outside cosmos and
|
|
265
|
+
// we need to find the wormchain ibc transaction information
|
|
266
|
+
// by searching for the transaction containing the
|
|
267
|
+
// GatewayTransferMsg
|
|
268
|
+
const transferTransaction = this.transactions[this.transactions.length - 1];
|
|
269
|
+
const [whm] = await wormhole_1.Wormhole.parseMessageFromTx(chain, transferTransaction.txid);
|
|
270
|
+
const vaa = await GatewayTransfer.getTransferVaa(this.wh, whm);
|
|
271
|
+
this.vaas = [{ id: whm, vaa }];
|
|
272
|
+
attestations.push(whm);
|
|
273
|
+
// TODO: conf for these settings? how do we choose them?
|
|
274
|
+
const vaaRedeemedRetryInterval = 2000;
|
|
275
|
+
const transferCompleteInterval = 5000;
|
|
276
|
+
// Wait until the vaa is redeemed before trying to look up the
|
|
277
|
+
// transfer message
|
|
278
|
+
const wcTb = await this.gateway.getTokenBridge();
|
|
279
|
+
// Since we want to retry until its redeemed, return null
|
|
280
|
+
// in the case that its not redeemed
|
|
281
|
+
const isRedeemedTask = () => (0, tasks_1.isTokenBridgeVaaRedeemed)(wcTb, vaa);
|
|
282
|
+
const redeemed = await (0, tasks_1.retry)(isRedeemedTask, vaaRedeemedRetryInterval, timeout, "Gateway:TokenBridge:IsVaaRedeemed");
|
|
283
|
+
if (!redeemed)
|
|
284
|
+
throw new Error("VAA not redeemed after retries exhausted");
|
|
285
|
+
// Next, get the IBC transactions from wormchain
|
|
286
|
+
// Note: Because we search by GatewayTransferMsg payload
|
|
287
|
+
// there is a possibility of dupe messages being returned
|
|
288
|
+
// using a nonce should help
|
|
289
|
+
const wcTransferTask = () => (0, tasks_1.fetchIbcXfer)(this.gatewayIbcBridge, this.msg);
|
|
290
|
+
const wcTransfers = await (0, tasks_1.retry)(wcTransferTask, vaaRedeemedRetryInterval, timeout, "Gateway:IbcBridge:WormchainTransferInitiated");
|
|
291
|
+
if (!wcTransfers)
|
|
292
|
+
throw new Error("Wormchain transfer not found after retries exhausted");
|
|
293
|
+
const [wcTransfer] = wcTransfers;
|
|
294
|
+
if (wcTransfer.pending) {
|
|
295
|
+
// TODO: check if pending and bail(?) if so
|
|
296
|
+
}
|
|
297
|
+
this.ibcTransfers.push(wcTransfer);
|
|
298
|
+
// Finally, get the IBC transfer to the destination chain
|
|
299
|
+
const destChain = this.wh.getChain(this.transfer.to.chain);
|
|
300
|
+
const destIbcBridge = await destChain.getIbcBridge();
|
|
301
|
+
const destTransferTask = () => (0, tasks_1.fetchIbcXfer)(destIbcBridge, wcTransfer.id);
|
|
302
|
+
const destTransfer = await (0, tasks_1.retry)(destTransferTask, transferCompleteInterval, timeout, "Destination:IbcBridge:WormchainTransferCompleted");
|
|
303
|
+
if (!destTransfer)
|
|
304
|
+
throw new Error("IBC Transfer into destination not found after retries exhausted" +
|
|
305
|
+
JSON.stringify(wcTransfer));
|
|
306
|
+
this.ibcTransfers.push(destTransfer[0]);
|
|
307
|
+
}
|
|
308
|
+
// Add transfers to attestations we return
|
|
309
|
+
// Note: there is no ordering guarantee here
|
|
310
|
+
attestations.push(...this.ibcTransfers.map((xfer) => xfer.id));
|
|
311
|
+
this._state = types_1.TransferState.Attested;
|
|
312
|
+
return attestations;
|
|
313
|
+
}
|
|
314
|
+
// finish the WormholeTransfer by submitting transactions to the destination chain
|
|
315
|
+
// returns a transaction hash
|
|
316
|
+
async completeTransfer(signer) {
|
|
317
|
+
/*
|
|
318
|
+
0) check that the current `state` is valid to call this (eg: state == Ready)
|
|
319
|
+
1) prepare the transactions and sign them given the signer
|
|
320
|
+
2) submit the VAA and transactions on chain
|
|
321
|
+
3) return txid of submission
|
|
322
|
+
*/
|
|
323
|
+
if (this._state < types_1.TransferState.Attested)
|
|
324
|
+
throw new Error("Invalid state transition in `finish`. Be sure to call `fetchAttestation`.");
|
|
325
|
+
if (this.toGateway())
|
|
326
|
+
// TODO: assuming the last transaction captured is the one from gateway to the destination
|
|
327
|
+
return [this.transactions[this.transactions.length - 1].txid];
|
|
328
|
+
if (!this.vaas)
|
|
329
|
+
throw new Error("No VAA details available to redeem");
|
|
330
|
+
if (this.vaas.length > 1)
|
|
331
|
+
throw new Error("Expected 1 vaa");
|
|
332
|
+
const toChain = this.wh.getChain(signer.chain());
|
|
333
|
+
const toAddress = (0, sdk_definitions_1.toNative)(signer.chain(), signer.address());
|
|
334
|
+
const tb = await toChain.getTokenBridge();
|
|
335
|
+
const { vaa } = this.vaas[0];
|
|
336
|
+
if (!vaa)
|
|
337
|
+
throw new Error(`No VAA found for ${this.vaas[0].id.sequence}`);
|
|
338
|
+
const xfer = tb.redeem(toAddress, vaa);
|
|
339
|
+
const redeemTxs = await (0, common_1.signSendWait)(toChain, xfer, signer);
|
|
340
|
+
this.transactions.push(...redeemTxs);
|
|
341
|
+
this._state = types_1.TransferState.DestinationInitiated;
|
|
342
|
+
return redeemTxs.map(({ txid }) => txid);
|
|
343
|
+
}
|
|
344
|
+
static async getTransferVaa(wh, whm, timeout) {
|
|
345
|
+
const vaa = await wh.getVaa(whm, sdk_definitions_1.TokenBridge.getTransferDiscriminator(), timeout);
|
|
346
|
+
if (!vaa)
|
|
347
|
+
throw new Error(`No VAA Available: ${whm.chain}/${whm.emitter}/${whm.sequence}`);
|
|
348
|
+
return vaa;
|
|
349
|
+
}
|
|
350
|
+
static async destinationOverrides(srcChain, dstChain, gatewayChain, transfer) {
|
|
351
|
+
const _transfer = { ...transfer };
|
|
352
|
+
// Bit of (temporary) hackery until solana contracts support being
|
|
353
|
+
// sent a VAA with the primary address
|
|
354
|
+
if (transfer.to.chain === "Solana") {
|
|
355
|
+
const destinationToken = await GatewayTransfer.lookupDestinationToken(srcChain, dstChain, gatewayChain, _transfer.token);
|
|
356
|
+
_transfer.to = await dstChain.getTokenAccount(_transfer.to.address, destinationToken.address);
|
|
357
|
+
}
|
|
358
|
+
return _transfer;
|
|
359
|
+
}
|
|
360
|
+
// Lookup the token id for the destination chain given the source chain
|
|
361
|
+
// and token id
|
|
362
|
+
static async lookupDestinationToken(srcChain, dstChain, gatewayChain, token) {
|
|
363
|
+
// that will be minted when the transfer is redeemed
|
|
364
|
+
let lookup;
|
|
365
|
+
if ((0, sdk_definitions_1.isNative)(token.address)) {
|
|
366
|
+
// if native, get the wrapped asset id
|
|
367
|
+
lookup = await srcChain.getNativeWrappedTokenId();
|
|
368
|
+
}
|
|
369
|
+
else {
|
|
370
|
+
try {
|
|
371
|
+
// otherwise, check to see if it is a wrapped token locally
|
|
372
|
+
const tb = await srcChain.getTokenBridge();
|
|
373
|
+
lookup = await tb.getOriginalAsset(token.address);
|
|
374
|
+
}
|
|
375
|
+
catch (e) {
|
|
376
|
+
// not a from-chain native token, check the gateway chain
|
|
377
|
+
try {
|
|
378
|
+
const gtb = await gatewayChain.getTokenBridge();
|
|
379
|
+
lookup = await gtb.getOriginalAsset(token.address);
|
|
380
|
+
}
|
|
381
|
+
catch (e) {
|
|
382
|
+
lookup = token;
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
// if the token id is actually native to the destination, return it
|
|
387
|
+
if (lookup.chain === dstChain.chain) {
|
|
388
|
+
return lookup;
|
|
389
|
+
}
|
|
390
|
+
// otherwise, figure out what the token address representing the wormhole-wrapped token we're transferring
|
|
391
|
+
const dstTb = await dstChain.getTokenBridge();
|
|
392
|
+
const dstAddress = await dstTb.getWrappedAsset(lookup);
|
|
393
|
+
return { chain: dstChain.chain, address: dstAddress };
|
|
394
|
+
}
|
|
395
|
+
// Implicitly determine if the chain is Gateway enabled by
|
|
396
|
+
// checking to see if the Gateway IBC bridge has a transfer channel setup
|
|
397
|
+
// If this is a new chain, add the channels to the constants file
|
|
398
|
+
fromGateway() {
|
|
399
|
+
return this.gatewayIbcBridge.getTransferChannel(this.transfer.from.chain) !== null;
|
|
400
|
+
}
|
|
401
|
+
toGateway() {
|
|
402
|
+
return this.gatewayIbcBridge.getTransferChannel(this.transfer.to.chain) !== null;
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
exports.GatewayTransfer = GatewayTransfer;
|
|
406
|
+
//# sourceMappingURL=gatewayTransfer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gatewayTransfer.js","sourceRoot":"","sources":["../../../src/protocols/gatewayTransfer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { Chain, Network } from "@wormhole-foundation/sdk-base";
|
|
2
|
+
import { AttestationId, AutomaticTokenBridge, ChainContext, Signer, TokenBridge, TokenId, TokenTransferDetails, TransactionId, TxHash, WormholeMessageId } from "@wormhole-foundation/sdk-definitions";
|
|
3
|
+
import { AttestationReceipt, TransferQuote, TransferReceipt, TransferState } from "../types";
|
|
4
|
+
import { Wormhole } from "../wormhole";
|
|
5
|
+
import { WormholeTransfer } from "./wormholeTransfer";
|
|
6
|
+
export type TokenTransferProtocol = "TokenBridge" | "AutomaticTokenBridge";
|
|
7
|
+
export type TokenTransferVAA = TokenBridge.TransferVAA | AutomaticTokenBridge.VAA;
|
|
8
|
+
export type TokenTransferAttestationReceipt = AttestationReceipt<TokenTransferProtocol>;
|
|
9
|
+
export type TokenTransferReceipt<SC extends Chain = Chain, DC extends Chain = Chain> = TransferReceipt<TokenTransferAttestationReceipt, SC, DC>;
|
|
10
|
+
export declare class TokenTransfer<N extends Network = Network> implements WormholeTransfer<TokenTransferProtocol> {
|
|
11
|
+
private readonly wh;
|
|
12
|
+
fromChain: ChainContext<N, Chain>;
|
|
13
|
+
toChain: ChainContext<N, Chain>;
|
|
14
|
+
private _state;
|
|
15
|
+
transfer: TokenTransferDetails;
|
|
16
|
+
txids: TransactionId[];
|
|
17
|
+
attestations?: AttestationReceipt<TokenTransferProtocol>[];
|
|
18
|
+
private constructor();
|
|
19
|
+
getTransferState(): TransferState;
|
|
20
|
+
static from<N extends Network>(wh: Wormhole<N>, from: TokenTransferDetails, timeout?: number, fromChain?: ChainContext<N, Chain>, toChain?: ChainContext<N, Chain>): Promise<TokenTransfer<N>>;
|
|
21
|
+
static from<N extends Network>(wh: Wormhole<N>, from: WormholeMessageId, timeout?: number, fromChain?: ChainContext<N, Chain>, toChain?: ChainContext<N, Chain>): Promise<TokenTransfer<N>>;
|
|
22
|
+
static from<N extends Network>(wh: Wormhole<N>, from: TransactionId, timeout?: number, fromChain?: ChainContext<N, Chain>, toChain?: ChainContext<N, Chain>): Promise<TokenTransfer<N>>;
|
|
23
|
+
private static fromIdentifier;
|
|
24
|
+
private static fromTransaction;
|
|
25
|
+
initiateTransfer(signer: Signer): Promise<TxHash[]>;
|
|
26
|
+
fetchAttestation(timeout?: number): Promise<AttestationId[]>;
|
|
27
|
+
completeTransfer(signer: Signer): Promise<TxHash[]>;
|
|
28
|
+
static transfer<N extends Network>(fromChain: ChainContext<N, Chain>, transfer: TokenTransferDetails, signer: Signer<N, Chain>): Promise<TransactionId[]>;
|
|
29
|
+
static redeem<N extends Network>(toChain: ChainContext<N, Chain>, vaa: TokenTransferVAA, signer: Signer<N, Chain>): Promise<TransactionId[]>;
|
|
30
|
+
static isTransferComplete<N extends Network, C extends Chain>(toChain: ChainContext<N, C>, vaa: TokenTransferVAA): Promise<boolean>;
|
|
31
|
+
static getTransferMessage<N extends Network, C extends Chain>(chain: ChainContext<N, C>, txid: TxHash, timeout?: number): Promise<WormholeMessageId>;
|
|
32
|
+
static getTransferVaa<N extends Network>(wh: Wormhole<N>, key: WormholeMessageId | TxHash, timeout?: number): Promise<TokenTransferVAA>;
|
|
33
|
+
static lookupDestinationToken<N extends Network, SC extends Chain, DC extends Chain>(srcChain: ChainContext<N, SC>, dstChain: ChainContext<N, DC>, token: TokenId<SC>): Promise<TokenId<DC>>;
|
|
34
|
+
static validateTransferDetails<N extends Network>(wh: Wormhole<N>, transfer: TokenTransferDetails, fromChain?: ChainContext<N, Chain>, toChain?: ChainContext<N, Chain>): void;
|
|
35
|
+
static quoteTransfer<N extends Network>(wh: Wormhole<N>, srcChain: ChainContext<N, Chain>, dstChain: ChainContext<N, Chain>, transfer: TokenTransferDetails): Promise<TransferQuote>;
|
|
36
|
+
static destinationOverrides<N extends Network>(srcChain: ChainContext<N, Chain>, dstChain: ChainContext<N, Chain>, transfer: TokenTransferDetails): Promise<TokenTransferDetails>;
|
|
37
|
+
static getReceipt<N extends Network>(xfer: TokenTransfer<N>): TokenTransferReceipt;
|
|
38
|
+
static track<N extends Network, SC extends Chain, DC extends Chain>(wh: Wormhole<N>, receipt: TokenTransferReceipt<SC, DC>, timeout?: number, fromChain?: ChainContext<N, SC>, toChain?: ChainContext<N, DC>): AsyncGenerator<TokenTransferReceipt<SC, DC>>;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=tokenTransfer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokenTransfer.d.ts","sourceRoot":"","sources":["../../../src/protocols/tokenTransfer.ts"],"names":[],"mappings":"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"}
|