@wormhole-foundation/sdk-solana 0.5.0-beta.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/README.md +1 -0
- package/dist/cjs/address.d.ts +26 -0
- package/dist/cjs/address.d.ts.map +1 -0
- package/dist/cjs/address.js +56 -0
- package/dist/cjs/address.js.map +1 -0
- package/dist/cjs/chain.d.ts +6 -0
- package/dist/cjs/chain.d.ts.map +1 -0
- package/dist/cjs/chain.js +19 -0
- package/dist/cjs/chain.js.map +1 -0
- package/dist/cjs/index.d.ts +8 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +24 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/platform.d.ts +29 -0
- package/dist/cjs/platform.d.ts.map +1 -0
- package/dist/cjs/platform.js +130 -0
- package/dist/cjs/platform.js.map +1 -0
- package/dist/cjs/signer.d.ts +38 -0
- package/dist/cjs/signer.d.ts.map +1 -0
- package/dist/cjs/signer.js +173 -0
- package/dist/cjs/signer.js.map +1 -0
- package/dist/cjs/testing/debug.d.ts +3 -0
- package/dist/cjs/testing/debug.d.ts.map +1 -0
- package/dist/cjs/testing/debug.js +14 -0
- package/dist/cjs/testing/debug.js.map +1 -0
- package/dist/cjs/testing/index.d.ts +7 -0
- package/dist/cjs/testing/index.d.ts.map +1 -0
- package/dist/cjs/testing/index.js +37 -0
- package/dist/cjs/testing/index.js.map +1 -0
- package/dist/cjs/testing/sendSigner.d.ts +18 -0
- package/dist/cjs/testing/sendSigner.d.ts.map +1 -0
- package/dist/cjs/testing/sendSigner.js +119 -0
- package/dist/cjs/testing/sendSigner.js.map +1 -0
- package/dist/cjs/testing/signer.d.ts +15 -0
- package/dist/cjs/testing/signer.d.ts.map +1 -0
- package/dist/cjs/testing/signer.js +39 -0
- package/dist/cjs/testing/signer.js.map +1 -0
- package/dist/cjs/types.d.ts +16 -0
- package/dist/cjs/types.d.ts.map +1 -0
- package/dist/cjs/types.js +10 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/cjs/unsignedTransaction.d.ts +16 -0
- package/dist/cjs/unsignedTransaction.d.ts.map +1 -0
- package/dist/cjs/unsignedTransaction.js +19 -0
- package/dist/cjs/unsignedTransaction.js.map +1 -0
- package/dist/cjs/utils/anchor/common.d.ts +3 -0
- package/dist/cjs/utils/anchor/common.d.ts.map +1 -0
- package/dist/cjs/utils/anchor/common.js +95 -0
- package/dist/cjs/utils/anchor/common.js.map +1 -0
- package/dist/cjs/utils/anchor/error.d.ts +4 -0
- package/dist/cjs/utils/anchor/error.d.ts.map +1 -0
- package/dist/cjs/utils/anchor/error.js +14 -0
- package/dist/cjs/utils/anchor/error.js.map +1 -0
- package/dist/cjs/utils/anchor/idl.d.ts +123 -0
- package/dist/cjs/utils/anchor/idl.d.ts.map +1 -0
- package/dist/cjs/utils/anchor/idl.js +58 -0
- package/dist/cjs/utils/anchor/idl.js.map +1 -0
- package/dist/cjs/utils/anchor/index.d.ts +4 -0
- package/dist/cjs/utils/anchor/index.d.ts.map +1 -0
- package/dist/cjs/utils/anchor/index.js +20 -0
- package/dist/cjs/utils/anchor/index.js.map +1 -0
- package/dist/cjs/utils/index.d.ts +5 -0
- package/dist/cjs/utils/index.d.ts.map +1 -0
- package/dist/cjs/utils/index.js +43 -0
- package/dist/cjs/utils/index.js.map +1 -0
- package/dist/cjs/utils/utils/account.d.ts +34 -0
- package/dist/cjs/utils/utils/account.d.ts.map +1 -0
- package/dist/cjs/utils/utils/account.js +59 -0
- package/dist/cjs/utils/utils/account.js.map +1 -0
- package/dist/cjs/utils/utils/bpfLoaderUpgradeable.d.ts +6 -0
- package/dist/cjs/utils/utils/bpfLoaderUpgradeable.d.ts.map +1 -0
- package/dist/cjs/utils/utils/bpfLoaderUpgradeable.js +14 -0
- package/dist/cjs/utils/utils/bpfLoaderUpgradeable.js.map +1 -0
- package/dist/cjs/utils/utils/connection.d.ts +4 -0
- package/dist/cjs/utils/utils/connection.d.ts.map +1 -0
- package/dist/cjs/utils/utils/connection.js +11 -0
- package/dist/cjs/utils/utils/connection.js.map +1 -0
- package/dist/cjs/utils/utils/index.d.ts +6 -0
- package/dist/cjs/utils/utils/index.d.ts.map +1 -0
- package/dist/cjs/utils/utils/index.js +27 -0
- package/dist/cjs/utils/utils/index.js.map +1 -0
- package/dist/cjs/utils/utils/secp256k1.d.ts +30 -0
- package/dist/cjs/utils/utils/secp256k1.d.ts.map +1 -0
- package/dist/cjs/utils/utils/secp256k1.js +111 -0
- package/dist/cjs/utils/utils/secp256k1.js.map +1 -0
- package/dist/cjs/utils/utils/splMetadata.d.ts +62 -0
- package/dist/cjs/utils/utils/splMetadata.d.ts.map +1 -0
- package/dist/cjs/utils/utils/splMetadata.js +212 -0
- package/dist/cjs/utils/utils/splMetadata.js.map +1 -0
- package/dist/cjs/utils/utils/transaction.d.ts +63 -0
- package/dist/cjs/utils/utils/transaction.d.ts.map +1 -0
- package/dist/cjs/utils/utils/transaction.js +128 -0
- package/dist/cjs/utils/utils/transaction.js.map +1 -0
- package/dist/esm/address.d.ts +26 -0
- package/dist/esm/address.d.ts.map +1 -0
- package/dist/esm/address.js +52 -0
- package/dist/esm/address.js.map +1 -0
- package/dist/esm/chain.d.ts +6 -0
- package/dist/esm/chain.d.ts.map +1 -0
- package/dist/esm/chain.js +15 -0
- package/dist/esm/chain.js.map +1 -0
- package/dist/esm/index.d.ts +8 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +8 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/platform.d.ts +29 -0
- package/dist/esm/platform.d.ts.map +1 -0
- package/dist/esm/platform.js +126 -0
- package/dist/esm/platform.js.map +1 -0
- package/dist/esm/signer.d.ts +38 -0
- package/dist/esm/signer.d.ts.map +1 -0
- package/dist/esm/signer.js +165 -0
- package/dist/esm/signer.js.map +1 -0
- package/dist/esm/testing/debug.d.ts +3 -0
- package/dist/esm/testing/debug.d.ts.map +1 -0
- package/dist/esm/testing/debug.js +10 -0
- package/dist/esm/testing/debug.js.map +1 -0
- package/dist/esm/testing/index.d.ts +7 -0
- package/dist/esm/testing/index.d.ts.map +1 -0
- package/dist/esm/testing/index.js +18 -0
- package/dist/esm/testing/index.js.map +1 -0
- package/dist/esm/testing/sendSigner.d.ts +18 -0
- package/dist/esm/testing/sendSigner.d.ts.map +1 -0
- package/dist/esm/testing/sendSigner.js +115 -0
- package/dist/esm/testing/sendSigner.js.map +1 -0
- package/dist/esm/testing/signer.d.ts +15 -0
- package/dist/esm/testing/signer.d.ts.map +1 -0
- package/dist/esm/testing/signer.js +35 -0
- package/dist/esm/testing/signer.js.map +1 -0
- package/dist/esm/types.d.ts +16 -0
- package/dist/esm/types.d.ts.map +1 -0
- package/dist/esm/types.js +7 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/esm/unsignedTransaction.d.ts +16 -0
- package/dist/esm/unsignedTransaction.d.ts.map +1 -0
- package/dist/esm/unsignedTransaction.js +15 -0
- package/dist/esm/unsignedTransaction.js.map +1 -0
- package/dist/esm/utils/anchor/common.d.ts +3 -0
- package/dist/esm/utils/anchor/common.d.ts.map +1 -0
- package/dist/esm/utils/anchor/common.js +91 -0
- package/dist/esm/utils/anchor/common.js.map +1 -0
- package/dist/esm/utils/anchor/error.d.ts +4 -0
- package/dist/esm/utils/anchor/error.d.ts.map +1 -0
- package/dist/esm/utils/anchor/error.js +10 -0
- package/dist/esm/utils/anchor/error.js.map +1 -0
- package/dist/esm/utils/anchor/idl.d.ts +123 -0
- package/dist/esm/utils/anchor/idl.d.ts.map +1 -0
- package/dist/esm/utils/anchor/idl.js +28 -0
- package/dist/esm/utils/anchor/idl.js.map +1 -0
- package/dist/esm/utils/anchor/index.d.ts +4 -0
- package/dist/esm/utils/anchor/index.d.ts.map +1 -0
- package/dist/esm/utils/anchor/index.js +4 -0
- package/dist/esm/utils/anchor/index.js.map +1 -0
- package/dist/esm/utils/index.d.ts +5 -0
- package/dist/esm/utils/index.d.ts.map +1 -0
- package/dist/esm/utils/index.js +15 -0
- package/dist/esm/utils/index.js.map +1 -0
- package/dist/esm/utils/utils/account.d.ts +34 -0
- package/dist/esm/utils/utils/account.d.ts.map +1 -0
- package/dist/esm/utils/utils/account.js +52 -0
- package/dist/esm/utils/utils/account.js.map +1 -0
- package/dist/esm/utils/utils/bpfLoaderUpgradeable.d.ts +6 -0
- package/dist/esm/utils/utils/bpfLoaderUpgradeable.d.ts.map +1 -0
- package/dist/esm/utils/utils/bpfLoaderUpgradeable.js +9 -0
- package/dist/esm/utils/utils/bpfLoaderUpgradeable.js.map +1 -0
- package/dist/esm/utils/utils/connection.d.ts +4 -0
- package/dist/esm/utils/utils/connection.d.ts.map +1 -0
- package/dist/esm/utils/utils/connection.js +7 -0
- package/dist/esm/utils/utils/connection.js.map +1 -0
- package/dist/esm/utils/utils/index.d.ts +6 -0
- package/dist/esm/utils/utils/index.d.ts.map +1 -0
- package/dist/esm/utils/utils/index.js +9 -0
- package/dist/esm/utils/utils/index.js.map +1 -0
- package/dist/esm/utils/utils/secp256k1.d.ts +30 -0
- package/dist/esm/utils/utils/secp256k1.d.ts.map +1 -0
- package/dist/esm/utils/utils/secp256k1.js +106 -0
- package/dist/esm/utils/utils/secp256k1.js.map +1 -0
- package/dist/esm/utils/utils/splMetadata.d.ts +62 -0
- package/dist/esm/utils/utils/splMetadata.d.ts.map +1 -0
- package/dist/esm/utils/utils/splMetadata.js +202 -0
- package/dist/esm/utils/utils/splMetadata.js.map +1 -0
- package/dist/esm/utils/utils/transaction.d.ts +63 -0
- package/dist/esm/utils/utils/transaction.d.ts.map +1 -0
- package/dist/esm/utils/utils/transaction.js +120 -0
- package/dist/esm/utils/utils/transaction.js.map +1 -0
- package/dist/tsconfig.cjs.tsbuildinfo +1 -0
- package/dist/tsconfig.esm.tsbuildinfo +1 -0
- package/package.json +56 -0
package/README.md
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# Solana Context
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Address, Platform, UniversalAddress } from '@wormhole-foundation/sdk-connect';
|
|
2
|
+
import { PublicKey } from '@solana/web3.js';
|
|
3
|
+
import { AnySolanaAddress } from './types';
|
|
4
|
+
export declare const SolanaZeroAddress = "11111111111111111111111111111111";
|
|
5
|
+
export declare class SolanaAddress implements Address {
|
|
6
|
+
static readonly byteSize = 32;
|
|
7
|
+
static readonly platform: Platform;
|
|
8
|
+
readonly type: string;
|
|
9
|
+
readonly address: PublicKey;
|
|
10
|
+
constructor(address: AnySolanaAddress);
|
|
11
|
+
unwrap(): PublicKey;
|
|
12
|
+
toString(): string;
|
|
13
|
+
toUint8Array(): Uint8Array;
|
|
14
|
+
toNative(): this;
|
|
15
|
+
toUniversalAddress(): UniversalAddress;
|
|
16
|
+
static instanceof(address: any): address is SolanaAddress;
|
|
17
|
+
equals(other: SolanaAddress | UniversalAddress): boolean;
|
|
18
|
+
}
|
|
19
|
+
declare global {
|
|
20
|
+
namespace Wormhole {
|
|
21
|
+
interface PlatformToNativeAddressMapping {
|
|
22
|
+
Solana: SolanaAddress;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=address.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"address.d.ts","sourceRoot":"","sources":["../../src/address.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,QAAQ,EACR,gBAAgB,EAGjB,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAa,MAAM,SAAS,CAAC;AAEtD,eAAO,MAAM,iBAAiB,qCAAqC,CAAC;AAEpE,qBAAa,aAAc,YAAW,OAAO;IAC3C,MAAM,CAAC,QAAQ,CAAC,QAAQ,MAAM;IAC9B,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAa;IAE/C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAY;IAEjC,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC;gBAEhB,OAAO,EAAE,gBAAgB;IAYrC,MAAM,IAAI,SAAS;IAGnB,QAAQ;IAGR,YAAY;IAGZ,QAAQ;IAGR,kBAAkB;IAIlB,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,IAAI,aAAa;IAIzD,MAAM,CAAC,KAAK,EAAE,aAAa,GAAG,gBAAgB,GAAG,OAAO;CAOzD;AAID,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,QAAQ,CAAC;QACjB,UAAiB,8BAA8B;YAC7C,MAAM,EAAE,aAAa,CAAC;SACvB;KACF;CACF"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SolanaAddress = exports.SolanaZeroAddress = void 0;
|
|
4
|
+
const sdk_connect_1 = require("@wormhole-foundation/sdk-connect");
|
|
5
|
+
const web3_js_1 = require("@solana/web3.js");
|
|
6
|
+
const types_1 = require("./types");
|
|
7
|
+
exports.SolanaZeroAddress = '11111111111111111111111111111111';
|
|
8
|
+
class SolanaAddress {
|
|
9
|
+
static byteSize = 32;
|
|
10
|
+
static platform = types_1._platform;
|
|
11
|
+
type = 'Native';
|
|
12
|
+
address;
|
|
13
|
+
constructor(address) {
|
|
14
|
+
if (SolanaAddress.instanceof(address)) {
|
|
15
|
+
this.address = address.address;
|
|
16
|
+
}
|
|
17
|
+
else if (sdk_connect_1.UniversalAddress.instanceof(address)) {
|
|
18
|
+
this.address = new web3_js_1.PublicKey(address.toUint8Array());
|
|
19
|
+
}
|
|
20
|
+
else if (typeof address === 'string' && sdk_connect_1.encoding.hex.valid(address)) {
|
|
21
|
+
this.address = new web3_js_1.PublicKey(sdk_connect_1.encoding.hex.decode(address));
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
this.address = new web3_js_1.PublicKey(address);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
unwrap() {
|
|
28
|
+
return this.address;
|
|
29
|
+
}
|
|
30
|
+
toString() {
|
|
31
|
+
return this.address.toBase58();
|
|
32
|
+
}
|
|
33
|
+
toUint8Array() {
|
|
34
|
+
return new Uint8Array(this.address.toBytes());
|
|
35
|
+
}
|
|
36
|
+
toNative() {
|
|
37
|
+
return this;
|
|
38
|
+
}
|
|
39
|
+
toUniversalAddress() {
|
|
40
|
+
return new sdk_connect_1.UniversalAddress(this.toUint8Array());
|
|
41
|
+
}
|
|
42
|
+
static instanceof(address) {
|
|
43
|
+
return address.constructor.platform === SolanaAddress.platform;
|
|
44
|
+
}
|
|
45
|
+
equals(other) {
|
|
46
|
+
if (SolanaAddress.instanceof(other)) {
|
|
47
|
+
return other.unwrap().equals(this.unwrap());
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
return this.toUniversalAddress().equals(other);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
exports.SolanaAddress = SolanaAddress;
|
|
55
|
+
(0, sdk_connect_1.registerNative)(types_1._platform, SolanaAddress);
|
|
56
|
+
//# sourceMappingURL=address.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"address.js","sourceRoot":"","sources":["../../src/address.ts"],"names":[],"mappings":";;;AAAA,kEAM0C;AAE1C,6CAA4C;AAC5C,mCAAsD;AAEzC,QAAA,iBAAiB,GAAG,kCAAkC,CAAC;AAEpE,MAAa,aAAa;IACxB,MAAM,CAAU,QAAQ,GAAG,EAAE,CAAC;IAC9B,MAAM,CAAU,QAAQ,GAAa,iBAAS,CAAC;IAEtC,IAAI,GAAW,QAAQ,CAAC;IAExB,OAAO,CAAY;IAE5B,YAAY,OAAyB;QACnC,IAAI,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;YACrC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;SAChC;aAAM,IAAI,8BAAgB,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;YAC/C,IAAI,CAAC,OAAO,GAAG,IAAI,mBAAS,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;SACtD;aAAM,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,sBAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;YACrE,IAAI,CAAC,OAAO,GAAG,IAAI,mBAAS,CAAC,sBAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;SAC5D;aAAM;YACL,IAAI,CAAC,OAAO,GAAG,IAAI,mBAAS,CAAC,OAAO,CAAC,CAAC;SACvC;IACH,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IACD,QAAQ;QACN,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;IACjC,CAAC;IACD,YAAY;QACV,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAChD,CAAC;IACD,QAAQ;QACN,OAAO,IAAI,CAAC;IACd,CAAC;IACD,kBAAkB;QAChB,OAAO,IAAI,8BAAgB,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,OAAY;QAC5B,OAAO,OAAO,CAAC,WAAW,CAAC,QAAQ,KAAK,aAAa,CAAC,QAAQ,CAAC;IACjE,CAAC;IAED,MAAM,CAAC,KAAuC;QAC5C,IAAI,aAAa,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;YACnC,OAAO,KAAK,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;SAC7C;aAAM;YACL,OAAO,IAAI,CAAC,kBAAkB,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;SAChD;IACH,CAAC;;AA9CH,sCA+CC;AAYD,IAAA,4BAAc,EAAC,iBAAS,EAAE,aAAa,CAAC,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { ChainAddress, ChainContext, Network, UniversalOrNative } from '@wormhole-foundation/sdk-connect';
|
|
2
|
+
import { SolanaChains } from './types';
|
|
3
|
+
export declare class SolanaChain<N extends Network, C extends SolanaChains = SolanaChains> extends ChainContext<N, C> {
|
|
4
|
+
getTokenAccount(address: UniversalOrNative<C>, token: UniversalOrNative<C>): Promise<ChainAddress<C>>;
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=chain.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chain.d.ts","sourceRoot":"","sources":["../../src/chain.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EACZ,YAAY,EAEZ,OAAO,EACP,iBAAiB,EAClB,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,qBAAa,WAAW,CACtB,CAAC,SAAS,OAAO,EACjB,CAAC,SAAS,YAAY,GAAG,YAAY,CACrC,SAAQ,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC;IACX,eAAe,CAC5B,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAC7B,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAC1B,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;CAU5B"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SolanaChain = void 0;
|
|
4
|
+
const spl_token_1 = require("@solana/spl-token");
|
|
5
|
+
const sdk_connect_1 = require("@wormhole-foundation/sdk-connect");
|
|
6
|
+
const address_1 = require("./address");
|
|
7
|
+
class SolanaChain extends sdk_connect_1.ChainContext {
|
|
8
|
+
async getTokenAccount(address, token) {
|
|
9
|
+
const mint = new address_1.SolanaAddress(token).unwrap();
|
|
10
|
+
const owner = new address_1.SolanaAddress(address).unwrap();
|
|
11
|
+
const ata = await (0, spl_token_1.getAssociatedTokenAddress)(mint, owner);
|
|
12
|
+
return {
|
|
13
|
+
chain: this.chain,
|
|
14
|
+
address: new address_1.SolanaAddress(ata.toString()),
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
exports.SolanaChain = SolanaChain;
|
|
19
|
+
//# sourceMappingURL=chain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chain.js","sourceRoot":"","sources":["../../src/chain.ts"],"names":[],"mappings":";;;AAAA,iDAA8D;AAC9D,kEAM0C;AAC1C,uCAA0C;AAG1C,MAAa,WAGX,SAAQ,0BAAkB;IACjB,KAAK,CAAC,eAAe,CAC5B,OAA6B,EAC7B,KAA2B;QAE3B,MAAM,IAAI,GAAG,IAAI,uBAAa,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;QAC/C,MAAM,KAAK,GAAG,IAAI,uBAAa,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC;QAElD,MAAM,GAAG,GAAG,MAAM,IAAA,qCAAyB,EAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACzD,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,OAAO,EAAE,IAAI,uBAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAqB;SAC/D,CAAC;IACJ,CAAC;CACF;AAjBD,kCAiBC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,uBAAuB,CAAC;AACtC,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./address"), exports);
|
|
18
|
+
__exportStar(require("./platform"), exports);
|
|
19
|
+
__exportStar(require("./chain"), exports);
|
|
20
|
+
__exportStar(require("./unsignedTransaction"), exports);
|
|
21
|
+
__exportStar(require("./types"), exports);
|
|
22
|
+
__exportStar(require("./utils"), exports);
|
|
23
|
+
__exportStar(require("./signer"), exports);
|
|
24
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4CAA0B;AAC1B,6CAA2B;AAC3B,0CAAwB;AACxB,wDAAsC;AACtC,0CAAwB;AACxB,0CAAwB;AACxB,2CAAyB"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Balances, Chain, ChainsConfig, Network, PlatformContext, SignedTx, StaticPlatformMethods, TokenId, TxHash } from '@wormhole-foundation/sdk-connect';
|
|
2
|
+
import { SolanaChain } from './chain';
|
|
3
|
+
import { Commitment, Connection, ConnectionConfig, SendOptions } from '@solana/web3.js';
|
|
4
|
+
import { AnySolanaAddress, SolanaChains, SolanaPlatformType } from './types';
|
|
5
|
+
/**
|
|
6
|
+
* @category Solana
|
|
7
|
+
*/
|
|
8
|
+
export declare class SolanaPlatform<N extends Network> extends PlatformContext<N, SolanaPlatformType> implements StaticPlatformMethods<SolanaPlatformType, typeof SolanaPlatform> {
|
|
9
|
+
static _platform: "Solana";
|
|
10
|
+
constructor(network: N, config?: ChainsConfig<N, SolanaPlatformType>);
|
|
11
|
+
getRpc<C extends SolanaChains>(chain: C, config?: ConnectionConfig): Connection;
|
|
12
|
+
getChain<C extends SolanaChains>(chain: C, rpc?: Connection): SolanaChain<N, C>;
|
|
13
|
+
static nativeTokenId<N extends Network, C extends SolanaChains>(network: N, chain: C): TokenId<C>;
|
|
14
|
+
static isNativeTokenId<N extends Network, C extends SolanaChains>(network: N, chain: C, tokenId: TokenId): boolean;
|
|
15
|
+
static isSupportedChain(chain: Chain): boolean;
|
|
16
|
+
static getDecimals(chain: Chain, rpc: Connection, token: AnySolanaAddress): Promise<number>;
|
|
17
|
+
static getBalance(chain: Chain, rpc: Connection, walletAddress: string, token: AnySolanaAddress): Promise<bigint | null>;
|
|
18
|
+
static getBalances(chain: Chain, rpc: Connection, walletAddress: string, tokens: AnySolanaAddress[]): Promise<Balances>;
|
|
19
|
+
static sendWait(chain: Chain, rpc: Connection, stxns: SignedTx[], opts?: SendOptions): Promise<TxHash[]>;
|
|
20
|
+
static latestBlock(rpc: Connection, commitment?: Commitment): Promise<{
|
|
21
|
+
blockhash: string;
|
|
22
|
+
lastValidBlockHeight: number;
|
|
23
|
+
}>;
|
|
24
|
+
static getLatestBlock(rpc: Connection): Promise<number>;
|
|
25
|
+
static getLatestFinalizedBlock(rpc: Connection): Promise<number>;
|
|
26
|
+
static chainFromChainId(genesisHash: string): [Network, SolanaChains];
|
|
27
|
+
static chainFromRpc(rpc: Connection): Promise<[Network, SolanaChains]>;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=platform.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../../src/platform.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,KAAK,EACL,YAAY,EACZ,OAAO,EACP,eAAe,EACf,QAAQ,EACR,qBAAqB,EACrB,OAAO,EACP,MAAM,EAOP,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAGtC,OAAO,EACL,UAAU,EACV,UAAU,EACV,gBAAgB,EAGhB,WAAW,EACZ,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,kBAAkB,EAEnB,MAAM,SAAS,CAAC;AAEjB;;GAEG;AACH,qBAAa,cAAc,CAAC,CAAC,SAAS,OAAO,CAC3C,SAAQ,eAAe,CAAC,CAAC,EAAE,kBAAkB,CAC7C,YAAW,qBAAqB,CAAC,kBAAkB,EAAE,OAAO,cAAc,CAAC;IAE3E,MAAM,CAAC,SAAS,WAAa;gBAEjB,OAAO,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,YAAY,CAAC,CAAC,EAAE,kBAAkB,CAAC;IAOpE,MAAM,CAAC,CAAC,SAAS,YAAY,EAC3B,KAAK,EAAE,CAAC,EACR,MAAM,GAAE,gBAGP,GACA,UAAU;IAMb,QAAQ,CAAC,CAAC,SAAS,YAAY,EAC7B,KAAK,EAAE,CAAC,EACR,GAAG,CAAC,EAAE,UAAU,GACf,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC;IAKpB,MAAM,CAAC,aAAa,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,YAAY,EAC5D,OAAO,EAAE,CAAC,EACV,KAAK,EAAE,CAAC,GACP,OAAO,CAAC,CAAC,CAAC;IAMb,MAAM,CAAC,eAAe,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,YAAY,EAC9D,OAAO,EAAE,CAAC,EACV,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,OAAO,GACf,OAAO;IAOV,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO;WAKjC,WAAW,CACtB,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,UAAU,EACf,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,MAAM,CAAC;WAeL,UAAU,CACrB,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,UAAU,EACf,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;WAcZ,WAAW,CACtB,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,UAAU,EACf,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,gBAAgB,EAAE,GACzB,OAAO,CAAC,QAAQ,CAAC;WA4BP,QAAQ,CACnB,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,UAAU,EACf,KAAK,EAAE,QAAQ,EAAE,EACjB,IAAI,CAAC,EAAE,WAAW,GACjB,OAAO,CAAC,MAAM,EAAE,CAAC;WAoCP,WAAW,CACtB,GAAG,EAAE,UAAU,EACf,UAAU,CAAC,EAAE,UAAU,GACtB,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,oBAAoB,EAAE,MAAM,CAAA;KAAE,CAAC;WAIlD,cAAc,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;WAIhD,uBAAuB,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAKtE,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,CAAC,OAAO,EAAE,YAAY,CAAC;WAexD,YAAY,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;CAI7E"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SolanaPlatform = void 0;
|
|
4
|
+
const sdk_connect_1 = require("@wormhole-foundation/sdk-connect");
|
|
5
|
+
const chain_1 = require("./chain");
|
|
6
|
+
const spl_token_1 = require("@solana/spl-token");
|
|
7
|
+
const web3_js_1 = require("@solana/web3.js");
|
|
8
|
+
const address_1 = require("./address");
|
|
9
|
+
const types_1 = require("./types");
|
|
10
|
+
/**
|
|
11
|
+
* @category Solana
|
|
12
|
+
*/
|
|
13
|
+
class SolanaPlatform extends sdk_connect_1.PlatformContext {
|
|
14
|
+
static _platform = types_1._platform;
|
|
15
|
+
constructor(network, config) {
|
|
16
|
+
super(network, config ?? (0, sdk_connect_1.networkPlatformConfigs)(network, SolanaPlatform._platform));
|
|
17
|
+
}
|
|
18
|
+
getRpc(chain, config = {
|
|
19
|
+
commitment: 'confirmed',
|
|
20
|
+
disableRetryOnRateLimit: true,
|
|
21
|
+
}) {
|
|
22
|
+
if (chain in this.config)
|
|
23
|
+
return new web3_js_1.Connection(this.config[chain].rpc, config);
|
|
24
|
+
throw new Error('No configuration available for chain: ' + chain);
|
|
25
|
+
}
|
|
26
|
+
getChain(chain, rpc) {
|
|
27
|
+
if (chain in this.config)
|
|
28
|
+
return new chain_1.SolanaChain(chain, this, rpc);
|
|
29
|
+
throw new Error('No configuration available for chain: ' + chain);
|
|
30
|
+
}
|
|
31
|
+
static nativeTokenId(network, chain) {
|
|
32
|
+
if (!SolanaPlatform.isSupportedChain(chain))
|
|
33
|
+
throw new Error(`invalid chain: ${chain}`);
|
|
34
|
+
return sdk_connect_1.Wormhole.chainAddress(chain, address_1.SolanaZeroAddress);
|
|
35
|
+
}
|
|
36
|
+
static isNativeTokenId(network, chain, tokenId) {
|
|
37
|
+
if (!this.isSupportedChain(chain))
|
|
38
|
+
return false;
|
|
39
|
+
if (tokenId.chain !== chain)
|
|
40
|
+
return false;
|
|
41
|
+
const native = this.nativeTokenId(network, chain);
|
|
42
|
+
return native == tokenId;
|
|
43
|
+
}
|
|
44
|
+
static isSupportedChain(chain) {
|
|
45
|
+
const platform = (0, sdk_connect_1.chainToPlatform)(chain);
|
|
46
|
+
return platform === SolanaPlatform._platform;
|
|
47
|
+
}
|
|
48
|
+
static async getDecimals(chain, rpc, token) {
|
|
49
|
+
if ((0, sdk_connect_1.isNative)(token))
|
|
50
|
+
return sdk_connect_1.decimals.nativeDecimals(SolanaPlatform._platform);
|
|
51
|
+
let mint = await rpc.getParsedAccountInfo(new address_1.SolanaAddress(token).unwrap());
|
|
52
|
+
if (!mint || !mint.value)
|
|
53
|
+
throw new Error('could not fetch token details');
|
|
54
|
+
const { decimals: numDecimals } = mint.value.data
|
|
55
|
+
.parsed.info;
|
|
56
|
+
return numDecimals;
|
|
57
|
+
}
|
|
58
|
+
static async getBalance(chain, rpc, walletAddress, token) {
|
|
59
|
+
if ((0, sdk_connect_1.isNative)(token))
|
|
60
|
+
return BigInt(await rpc.getBalance(new web3_js_1.PublicKey(walletAddress)));
|
|
61
|
+
const splToken = await rpc.getTokenAccountsByOwner(new web3_js_1.PublicKey(walletAddress), { mint: new address_1.SolanaAddress(token).unwrap() });
|
|
62
|
+
if (!splToken.value[0])
|
|
63
|
+
return null;
|
|
64
|
+
const balance = await rpc.getTokenAccountBalance(splToken.value[0].pubkey);
|
|
65
|
+
return BigInt(balance.value.amount);
|
|
66
|
+
}
|
|
67
|
+
static async getBalances(chain, rpc, walletAddress, tokens) {
|
|
68
|
+
let native;
|
|
69
|
+
if (tokens.includes('native')) {
|
|
70
|
+
native = BigInt(await rpc.getBalance(new web3_js_1.PublicKey(walletAddress)));
|
|
71
|
+
}
|
|
72
|
+
const splParsedTokenAccounts = await rpc.getParsedTokenAccountsByOwner(new web3_js_1.PublicKey(walletAddress), {
|
|
73
|
+
programId: new web3_js_1.PublicKey(spl_token_1.TOKEN_PROGRAM_ID),
|
|
74
|
+
});
|
|
75
|
+
const balancesArr = tokens.map((token) => {
|
|
76
|
+
if ((0, sdk_connect_1.isNative)(token)) {
|
|
77
|
+
return { ['native']: native };
|
|
78
|
+
}
|
|
79
|
+
const addrString = new address_1.SolanaAddress(token).toString();
|
|
80
|
+
const amount = splParsedTokenAccounts.value.find((v) => v?.account.data.parsed?.info?.mint === token)?.account.data.parsed?.info?.tokenAmount?.amount;
|
|
81
|
+
if (!amount)
|
|
82
|
+
return { [addrString]: null };
|
|
83
|
+
return { [addrString]: BigInt(amount) };
|
|
84
|
+
});
|
|
85
|
+
return balancesArr.reduce((obj, item) => Object.assign(obj, item), {});
|
|
86
|
+
}
|
|
87
|
+
static async sendWait(chain, rpc, stxns, opts) {
|
|
88
|
+
const { blockhash, lastValidBlockHeight } = await this.latestBlock(rpc);
|
|
89
|
+
const txhashes = await Promise.all(stxns.map((stxn) => rpc.sendRawTransaction(stxn,
|
|
90
|
+
// Set the commitment level to match the rpc commitment level
|
|
91
|
+
// otherwise, it defaults to finalized
|
|
92
|
+
opts ?? { preflightCommitment: rpc.commitment })));
|
|
93
|
+
const results = await Promise.all(txhashes.map((signature) => {
|
|
94
|
+
return rpc.confirmTransaction({
|
|
95
|
+
signature,
|
|
96
|
+
blockhash,
|
|
97
|
+
lastValidBlockHeight,
|
|
98
|
+
}, rpc.commitment);
|
|
99
|
+
}));
|
|
100
|
+
const erroredTxs = results
|
|
101
|
+
.filter((result) => result.value.err)
|
|
102
|
+
.map((result) => result.value.err);
|
|
103
|
+
if (erroredTxs.length > 0)
|
|
104
|
+
throw new Error(`Failed to confirm transaction: ${erroredTxs}`);
|
|
105
|
+
return txhashes;
|
|
106
|
+
}
|
|
107
|
+
static async latestBlock(rpc, commitment) {
|
|
108
|
+
return rpc.getLatestBlockhash(commitment ?? rpc.commitment);
|
|
109
|
+
}
|
|
110
|
+
static async getLatestBlock(rpc) {
|
|
111
|
+
return await rpc.getSlot();
|
|
112
|
+
}
|
|
113
|
+
static async getLatestFinalizedBlock(rpc) {
|
|
114
|
+
const { lastValidBlockHeight } = await this.latestBlock(rpc, 'finalized');
|
|
115
|
+
return lastValidBlockHeight;
|
|
116
|
+
}
|
|
117
|
+
static chainFromChainId(genesisHash) {
|
|
118
|
+
const netChain = sdk_connect_1.nativeChainIds.platformNativeChainIdToNetworkChain(SolanaPlatform._platform, genesisHash);
|
|
119
|
+
if (!netChain)
|
|
120
|
+
throw new Error(`No matching genesis hash to determine network and chain: ${genesisHash}`);
|
|
121
|
+
const [network, chain] = netChain;
|
|
122
|
+
return [network, chain];
|
|
123
|
+
}
|
|
124
|
+
static async chainFromRpc(rpc) {
|
|
125
|
+
const gh = await rpc.getGenesisHash();
|
|
126
|
+
return SolanaPlatform.chainFromChainId(gh);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
exports.SolanaPlatform = SolanaPlatform;
|
|
130
|
+
//# sourceMappingURL=platform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../../src/platform.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { Connection, Keypair, SendOptions, Transaction } from '@solana/web3.js';
|
|
3
|
+
import { Network, SignAndSendSigner, SignOnlySigner, Signer, UnsignedTransaction } from '@wormhole-foundation/sdk-connect';
|
|
4
|
+
import { SolanaChains } from './types';
|
|
5
|
+
import { SolanaUnsignedTransaction } from './unsignedTransaction';
|
|
6
|
+
export declare function getSolanaSigner(rpc: Connection, privateKey: string): Promise<Signer>;
|
|
7
|
+
export declare function getSolanaSignAndSendSigner(rpc: Connection, privateKey: string, opts?: {
|
|
8
|
+
debug?: boolean;
|
|
9
|
+
sendOpts?: SendOptions;
|
|
10
|
+
priorityFeeAmount?: bigint;
|
|
11
|
+
computeLimit?: bigint;
|
|
12
|
+
}): Promise<Signer>;
|
|
13
|
+
export declare class SolanaSigner<N extends Network, C extends SolanaChains = 'Solana'> implements SignOnlySigner<N, C> {
|
|
14
|
+
private _chain;
|
|
15
|
+
private _keypair;
|
|
16
|
+
private _rpc;
|
|
17
|
+
private _debug;
|
|
18
|
+
constructor(_chain: C, _keypair: Keypair, _rpc: Connection, _debug?: boolean);
|
|
19
|
+
chain(): C;
|
|
20
|
+
address(): string;
|
|
21
|
+
sign(tx: SolanaUnsignedTransaction<N>[]): Promise<Buffer[]>;
|
|
22
|
+
}
|
|
23
|
+
export declare class SolanaSendSigner<N extends Network, C extends SolanaChains = 'Solana'> implements SignAndSendSigner<N, C> {
|
|
24
|
+
private _rpc;
|
|
25
|
+
private _chain;
|
|
26
|
+
private _keypair;
|
|
27
|
+
private _debug;
|
|
28
|
+
private _sendOpts?;
|
|
29
|
+
private _priotifyFeeAmount?;
|
|
30
|
+
private _computeUnitLimit?;
|
|
31
|
+
constructor(_rpc: Connection, _chain: C, _keypair: Keypair, _debug?: boolean, _sendOpts?: SendOptions | undefined, _priotifyFeeAmount?: bigint | undefined, _computeUnitLimit?: bigint | undefined);
|
|
32
|
+
chain(): C;
|
|
33
|
+
address(): string;
|
|
34
|
+
private retryable;
|
|
35
|
+
signAndSend(tx: UnsignedTransaction[]): Promise<any[]>;
|
|
36
|
+
}
|
|
37
|
+
export declare function logTxDetails(transaction: Transaction): void;
|
|
38
|
+
//# sourceMappingURL=signer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signer.d.ts","sourceRoot":"","sources":["../../src/signer.ts"],"names":[],"mappings":";AAAA,OAAO,EAEL,UAAU,EACV,OAAO,EACP,WAAW,EAEX,WAAW,EAEZ,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,OAAO,EACP,iBAAiB,EACjB,cAAc,EACd,MAAM,EACN,mBAAmB,EAEpB,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAGlE,wBAAsB,eAAe,CACnC,GAAG,EAAE,UAAU,EACf,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC,CAOjB;AAGD,wBAAsB,0BAA0B,CAC9C,GAAG,EAAE,UAAU,EACf,UAAU,EAAE,MAAM,EAClB,IAAI,CAAC,EAAE;IACL,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GACA,OAAO,CAAC,MAAM,CAAC,CAWjB;AAED,qBAAa,YAAY,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,YAAY,GAAG,QAAQ,CAC5E,YAAW,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC;IAG7B,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,MAAM;gBAHN,MAAM,EAAE,CAAC,EACT,QAAQ,EAAE,OAAO,EACjB,IAAI,EAAE,UAAU,EAChB,MAAM,GAAE,OAAe;IAGjC,KAAK,IAAI,CAAC;IAIV,OAAO,IAAI,MAAM;IAIX,IAAI,CAAC,EAAE,EAAE,yBAAyB,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAoBlE;AAED,qBAAa,gBAAgB,CAC3B,CAAC,SAAS,OAAO,EACjB,CAAC,SAAS,YAAY,GAAG,QAAQ,CACjC,YAAW,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC;IAGhC,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,SAAS,CAAC;IAClB,OAAO,CAAC,kBAAkB,CAAC;IAC3B,OAAO,CAAC,iBAAiB,CAAC;gBANlB,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,CAAC,EACT,QAAQ,EAAE,OAAO,EACjB,MAAM,GAAE,OAAe,EACvB,SAAS,CAAC,yBAAa,EACvB,kBAAkB,CAAC,oBAAQ,EAC3B,iBAAiB,CAAC,oBAAQ;IAOpC,KAAK,IAAI,CAAC;IAIV,OAAO,IAAI,MAAM;IASjB,OAAO,CAAC,SAAS;IA4BX,WAAW,CAAC,EAAE,EAAE,mBAAmB,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;CAoF7D;AAED,wBAAgB,YAAY,CAAC,WAAW,EAAE,WAAW,QAWpD"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.logTxDetails = exports.SolanaSendSigner = exports.SolanaSigner = exports.getSolanaSignAndSendSigner = exports.getSolanaSigner = void 0;
|
|
4
|
+
const web3_js_1 = require("@solana/web3.js");
|
|
5
|
+
const sdk_connect_1 = require("@wormhole-foundation/sdk-connect");
|
|
6
|
+
const platform_1 = require("./platform");
|
|
7
|
+
// returns a SignOnlySigner for the Solana platform
|
|
8
|
+
async function getSolanaSigner(rpc, privateKey) {
|
|
9
|
+
const [_, chain] = await platform_1.SolanaPlatform.chainFromRpc(rpc);
|
|
10
|
+
return new SolanaSigner(chain, web3_js_1.Keypair.fromSecretKey(sdk_connect_1.encoding.b58.decode(privateKey)), rpc);
|
|
11
|
+
}
|
|
12
|
+
exports.getSolanaSigner = getSolanaSigner;
|
|
13
|
+
// returns a SignAndSendSigner for the Solana platform
|
|
14
|
+
async function getSolanaSignAndSendSigner(rpc, privateKey, opts) {
|
|
15
|
+
const [_, chain] = await platform_1.SolanaPlatform.chainFromRpc(rpc);
|
|
16
|
+
return new SolanaSendSigner(rpc, chain, web3_js_1.Keypair.fromSecretKey(sdk_connect_1.encoding.b58.decode(privateKey)), opts?.debug ?? false, opts?.sendOpts, opts?.priorityFeeAmount, opts?.computeLimit);
|
|
17
|
+
}
|
|
18
|
+
exports.getSolanaSignAndSendSigner = getSolanaSignAndSendSigner;
|
|
19
|
+
class SolanaSigner {
|
|
20
|
+
_chain;
|
|
21
|
+
_keypair;
|
|
22
|
+
_rpc;
|
|
23
|
+
_debug;
|
|
24
|
+
constructor(_chain, _keypair, _rpc, _debug = false) {
|
|
25
|
+
this._chain = _chain;
|
|
26
|
+
this._keypair = _keypair;
|
|
27
|
+
this._rpc = _rpc;
|
|
28
|
+
this._debug = _debug;
|
|
29
|
+
}
|
|
30
|
+
chain() {
|
|
31
|
+
return this._chain;
|
|
32
|
+
}
|
|
33
|
+
address() {
|
|
34
|
+
return this._keypair.publicKey.toBase58();
|
|
35
|
+
}
|
|
36
|
+
async sign(tx) {
|
|
37
|
+
const { blockhash } = await platform_1.SolanaPlatform.latestBlock(this._rpc);
|
|
38
|
+
const signed = [];
|
|
39
|
+
for (const txn of tx) {
|
|
40
|
+
const { description, transaction: { transaction, signers: extraSigners }, } = txn;
|
|
41
|
+
console.log(`Signing: ${description} for ${this.address()}`);
|
|
42
|
+
if (this._debug)
|
|
43
|
+
logTxDetails(transaction);
|
|
44
|
+
transaction.recentBlockhash = blockhash;
|
|
45
|
+
transaction.partialSign(this._keypair, ...(extraSigners ?? []));
|
|
46
|
+
signed.push(transaction.serialize());
|
|
47
|
+
}
|
|
48
|
+
return signed;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
exports.SolanaSigner = SolanaSigner;
|
|
52
|
+
class SolanaSendSigner {
|
|
53
|
+
_rpc;
|
|
54
|
+
_chain;
|
|
55
|
+
_keypair;
|
|
56
|
+
_debug;
|
|
57
|
+
_sendOpts;
|
|
58
|
+
_priotifyFeeAmount;
|
|
59
|
+
_computeUnitLimit;
|
|
60
|
+
constructor(_rpc, _chain, _keypair, _debug = false, _sendOpts, _priotifyFeeAmount, _computeUnitLimit) {
|
|
61
|
+
this._rpc = _rpc;
|
|
62
|
+
this._chain = _chain;
|
|
63
|
+
this._keypair = _keypair;
|
|
64
|
+
this._debug = _debug;
|
|
65
|
+
this._sendOpts = _sendOpts;
|
|
66
|
+
this._priotifyFeeAmount = _priotifyFeeAmount;
|
|
67
|
+
this._computeUnitLimit = _computeUnitLimit;
|
|
68
|
+
this._sendOpts = this._sendOpts ?? {
|
|
69
|
+
preflightCommitment: this._rpc.commitment,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
chain() {
|
|
73
|
+
return this._chain;
|
|
74
|
+
}
|
|
75
|
+
address() {
|
|
76
|
+
return this._keypair.publicKey.toBase58();
|
|
77
|
+
}
|
|
78
|
+
// Handles retrying a Transaction if the error is deemed to be
|
|
79
|
+
// recoverable. Currently handles:
|
|
80
|
+
// - Transaction expired
|
|
81
|
+
// - Blockhash not found
|
|
82
|
+
// - Not enough bytes (storage account not seen yet)
|
|
83
|
+
retryable(e) {
|
|
84
|
+
// Tx expired, set a new block hash and retry
|
|
85
|
+
if (e instanceof web3_js_1.TransactionExpiredBlockheightExceededError)
|
|
86
|
+
return true;
|
|
87
|
+
// Besides tx expiry, only handle SendTransactionError
|
|
88
|
+
if (!(e instanceof web3_js_1.SendTransactionError))
|
|
89
|
+
return false;
|
|
90
|
+
// Only handle simulation errors
|
|
91
|
+
if (!e.message.includes('Transaction simulation failed'))
|
|
92
|
+
return false;
|
|
93
|
+
// Blockhash not found, similar to expired, resend with new blockhash
|
|
94
|
+
if (e.message.includes('Blockhash not found'))
|
|
95
|
+
return true;
|
|
96
|
+
// Find the log message with the error details
|
|
97
|
+
const loggedErr = e.logs?.find((log) => log.startsWith('Program log: Error: '));
|
|
98
|
+
// who knows
|
|
99
|
+
if (!loggedErr)
|
|
100
|
+
return false;
|
|
101
|
+
// Probably caused by storage account not seen yet
|
|
102
|
+
if (loggedErr.includes('Not enough bytes'))
|
|
103
|
+
return true;
|
|
104
|
+
if (loggedErr.includes('Unexpected length of input'))
|
|
105
|
+
return true;
|
|
106
|
+
return false;
|
|
107
|
+
}
|
|
108
|
+
async signAndSend(tx) {
|
|
109
|
+
let { blockhash, lastValidBlockHeight } = await platform_1.SolanaPlatform.latestBlock(this._rpc);
|
|
110
|
+
const txids = [];
|
|
111
|
+
for (const txn of tx) {
|
|
112
|
+
const { description, transaction: { transaction, signers: extraSigners }, } = txn;
|
|
113
|
+
console.log(`Signing: ${description} for ${this.address()}`);
|
|
114
|
+
if (this._priotifyFeeAmount)
|
|
115
|
+
transaction.add(web3_js_1.ComputeBudgetProgram.setComputeUnitPrice({
|
|
116
|
+
microLamports: this._priotifyFeeAmount,
|
|
117
|
+
}));
|
|
118
|
+
if (this._computeUnitLimit)
|
|
119
|
+
transaction.add(web3_js_1.ComputeBudgetProgram.setComputeUnitLimit({
|
|
120
|
+
units: Number(this._computeUnitLimit),
|
|
121
|
+
}));
|
|
122
|
+
if (this._debug)
|
|
123
|
+
logTxDetails(transaction);
|
|
124
|
+
// Try to send the transaction up to 5 times
|
|
125
|
+
const maxRetries = 5;
|
|
126
|
+
for (let i = 0; i < maxRetries; i++) {
|
|
127
|
+
try {
|
|
128
|
+
transaction.recentBlockhash = blockhash;
|
|
129
|
+
transaction.partialSign(this._keypair, ...(extraSigners ?? []));
|
|
130
|
+
const txid = await this._rpc.sendRawTransaction(transaction.serialize(), this._sendOpts);
|
|
131
|
+
txids.push(txid);
|
|
132
|
+
break;
|
|
133
|
+
}
|
|
134
|
+
catch (e) {
|
|
135
|
+
// No point checking if retryable if we're on the last retry
|
|
136
|
+
if (i === maxRetries - 1)
|
|
137
|
+
throw e;
|
|
138
|
+
// If it's not retryable, throw
|
|
139
|
+
if (!this.retryable(e))
|
|
140
|
+
throw e;
|
|
141
|
+
// If it is retryable, we need to grab a new block hash
|
|
142
|
+
const { blockhash: newBlockhash, lastValidBlockHeight: newBlockHeight, } = await platform_1.SolanaPlatform.latestBlock(this._rpc);
|
|
143
|
+
lastValidBlockHeight = newBlockHeight;
|
|
144
|
+
blockhash = newBlockhash;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
// Wait for finalization
|
|
149
|
+
const results = await Promise.all(txids.map((signature) => this._rpc.confirmTransaction({
|
|
150
|
+
signature,
|
|
151
|
+
blockhash,
|
|
152
|
+
lastValidBlockHeight,
|
|
153
|
+
}, this._rpc.commitment)));
|
|
154
|
+
const erroredTxs = results
|
|
155
|
+
.filter((result) => result.value.err)
|
|
156
|
+
.map((result) => result.value.err);
|
|
157
|
+
if (erroredTxs.length > 0)
|
|
158
|
+
throw new Error(`Failed to confirm transaction: ${erroredTxs}`);
|
|
159
|
+
return txids;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
exports.SolanaSendSigner = SolanaSendSigner;
|
|
163
|
+
function logTxDetails(transaction) {
|
|
164
|
+
console.log(transaction.signatures);
|
|
165
|
+
console.log(transaction.feePayer);
|
|
166
|
+
transaction.instructions.forEach((ix) => {
|
|
167
|
+
console.log('Program', ix.programId.toBase58());
|
|
168
|
+
console.log('Data: ', ix.data.toString('hex'));
|
|
169
|
+
console.log('Keys: ', ix.keys.map((k) => [k, k.pubkey.toBase58()]));
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
exports.logTxDetails = logTxDetails;
|
|
173
|
+
//# sourceMappingURL=signer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signer.js","sourceRoot":"","sources":["../../src/signer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../../src/testing/debug.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,wBAAgB,YAAY,CAAC,WAAW,EAAE,WAAW,QAWpD"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.logTxDetails = void 0;
|
|
4
|
+
function logTxDetails(transaction) {
|
|
5
|
+
console.log(transaction.signatures);
|
|
6
|
+
console.log(transaction.feePayer);
|
|
7
|
+
transaction.instructions.forEach((ix) => {
|
|
8
|
+
console.log('Program', ix.programId.toBase58());
|
|
9
|
+
console.log('Data: ', ix.data.toString('hex'));
|
|
10
|
+
console.log('Keys: ', ix.keys.map((k) => [k, k.pubkey.toBase58()]));
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
exports.logTxDetails = logTxDetails;
|
|
14
|
+
//# sourceMappingURL=debug.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debug.js","sourceRoot":"","sources":["../../../src/testing/debug.ts"],"names":[],"mappings":";;;AAEA,SAAgB,YAAY,CAAC,WAAwB;IACnD,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAClC,WAAW,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;QACtC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CACT,QAAQ,EACR,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAC7C,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAXD,oCAWC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Connection } from '@solana/web3.js';
|
|
2
|
+
import { Signer } from '@wormhole-foundation/connect-sdk';
|
|
3
|
+
export declare function getSolanaSigner(rpc: Connection, privateKey: string): Promise<Signer>;
|
|
4
|
+
export declare function getSolanaSignAndSendSigner(rpc: Connection, privateKey: string): Promise<Signer>;
|
|
5
|
+
export * from './signer';
|
|
6
|
+
export * from './sendSigner';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/testing/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAW,MAAM,iBAAiB,CAAC;AAGtD,OAAO,EAAE,MAAM,EAAY,MAAM,kCAAkC,CAAC;AAIpE,wBAAsB,eAAe,CACnC,GAAG,EAAE,UAAU,EACf,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC,CAOjB;AAGD,wBAAsB,0BAA0B,CAC9C,GAAG,EAAE,UAAU,EACf,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC,CAOjB;AAED,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC"}
|