fsl-js-sdk
Version:
sdk for web
626 lines (625 loc) • 32.3 kB
JavaScript
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (g && (g = 0, op[0] && (_ = 0)), _) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.SolanaLz = exports.LzKits = exports.LzArgs = exports.initProgram = exports.OFT = exports.OFT_TEST = exports.program = void 0;
var anchor_1 = require("@coral-xyz/anchor");
var ggusd_oft_1 = __importDefault(require("./target/idl/ggusd_oft"));
var web3_js_1 = require("@solana/web3.js");
var bn_js_1 = require("bn.js");
var spl_token_1 = require("@solana/spl-token");
var lz_v2_utilities_1 = require("@layerzerolabs/lz-v2-utilities");
var oft_v2_solana_sdk_1 = require("@layerzerolabs/oft-v2-solana-sdk");
var umi_public_keys_1 = require("@metaplex-foundation/umi-public-keys");
var umi_bundle_defaults_1 = require("@metaplex-foundation/umi-bundle-defaults");
var mpl_toolbox_1 = require("@metaplex-foundation/mpl-toolbox");
var lz_solana_sdk_v2_1 = require("@layerzerolabs/lz-solana-sdk-v2");
var lz_definitions_1 = require("@layerzerolabs/lz-definitions");
var nodewallet_1 = __importDefault(require("@coral-xyz/anchor/dist/cjs/nodewallet"));
// noinspection JSUnusedGlobalSymbols,JSUnusedLocalSymbols
var OFT_STAGE = {
programId: '8MXrVQgxtDKQ74nwypF966WUnuMKowy4nQGkaMSf4MVt',
mint: 'MMUSDMbcL4vWzW2AFCan4R8VDfk27m1JFHyZN2QitZs',
mintAuthority: 'Ds3izwrmqwZqy44qDwMykqfZFktoKb4TYKbPspFpcMkb',
escrow: '5Cw4uPDAK5rEuAQMHpgZZgHXmgXhPCSmnSULrXWYkqXM',
oftStore: 'Ds3izwrmqwZqy44qDwMykqfZFktoKb4TYKbPspFpcMkb',
};
// noinspection JSUnusedGlobalSymbols,JSUnusedLocalSymbols
var OFT_MAINNET = {
programId: 'LZoFTceDb1ByqS6y6hkFa8mvSzbtcQiMX4mT9aMeWRy',
mint: 'GGUSDyBUPFg5RrgWwqEqhXoha85iYGs6cL57SyK4G2Y7',
mintAuthority: '2SHAuyFQ1yecRFA28iQ99B5BXbQ3MhjSroZGTWK9p9SW',
escrow: '5HErqiEwt5hPsJ58ufdWdgioZionvtAVf7SexYBM6sBm',
oftStore: '2SHAuyFQ1yecRFA28iQ99B5BXbQ3MhjSroZGTWK9p9SW',
};
// noinspection JSUnusedGlobalSymbols,JSUnusedLocalSymbols
exports.OFT_TEST = {
programId: 'MoLyZZiu5kb1JBVHfhLgqB7suEftg5vEpwDQqVgd1pg',
mint: 'GGUSDrZc64SxsMRB1DNhzYwixrq5YEMdps4skLVRDkR3',
escrow: '3dxJjfPF7a2ijnpcjitSWxZvBAECXHb8FRob8jkY89aa',
oftStore: 'Baqegac1Gtq1AvCDQ3aZd5oCNNwfpDDbEhdp1n3FG1Gk',
};
exports.OFT = OFT_MAINNET;
/** * Initializes the program with the given connection and keypair. */
function initProgram(connection, keyPair) {
try {
var wallet = keyPair instanceof web3_js_1.Keypair ? new nodewallet_1.default(keyPair) : keyPair;
var provider = new anchor_1.AnchorProvider(connection, wallet, anchor_1.AnchorProvider.defaultOptions());
(0, anchor_1.setProvider)(provider);
exports.program = new anchor_1.Program(ggusd_oft_1.default, exports.OFT.programId, provider);
}
catch (e) {
console.log(e);
throw e;
}
}
exports.initProgram = initProgram;
var LzArgs;
(function (LzArgs) {
function createSetOFTConfigParams(arg) {
switch (arg.__kind) {
case 'Admin':
return { admin: arg.fields };
case 'Delegate':
return { delegate: arg.fields };
case 'DefaultFee':
return { defaultFee: arg.fields };
case 'Paused':
return { paused: arg.fields };
case 'Pauser':
return { pauser: arg.fields };
case 'Unpauser':
return { unpauser: arg.fields };
case 'FeeReceiver':
return { feeReceiver: arg.fields };
case 'AddWhitelist':
return { addWhitelist: arg.fields };
case 'DelWhitelist':
return { delWhitelist: arg.fields };
default:
throw new Error('Invalid action');
}
}
LzArgs.createSetOFTConfigParams = createSetOFTConfigParams;
function storeAdmin() {
return __awaiter(this, void 0, void 0, function () {
var store;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, exports.program.account.oftStore.fetch(exports.OFT.oftStore)];
case 1:
store = _a.sent();
return [2 /*return*/, store.admin];
}
});
});
}
LzArgs.storeAdmin = storeAdmin;
function feeReceiver() {
return __awaiter(this, void 0, void 0, function () {
var store;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, exports.program.account.oftStore.fetch(exports.OFT.oftStore)];
case 1:
store = _a.sent();
return [2 /*return*/, store.feeReceiver];
}
});
});
}
LzArgs.feeReceiver = feeReceiver;
})(LzArgs = exports.LzArgs || (exports.LzArgs = {}));
var LzKits;
(function (LzKits) {
var _a;
var _this = this;
var LOOKUP_TABLE_ADDRESS = (_a = {},
_a[lz_definitions_1.EndpointId.SOLANA_V2_MAINNET] = toPublicKey('AokBxha6VMLLgf97B5VYHEtqztamWmYERBmmFvjuTzJB'),
_a[lz_definitions_1.EndpointId.SOLANA_V2_TESTNET] = toPublicKey('9thqPdbR27A1yLWw2spwJLySemiGMXxPnEvfmXVk4KuK'),
_a);
function toPublicKey(key) {
return typeof key === 'string' ? new web3_js_1.PublicKey(key) : key;
}
LzKits.toPublicKey = toPublicKey;
function getLayerZeroConnection(rpcEndpoint) {
try {
var nodeRequire = typeof require === 'function' ? require : undefined;
if (!nodeRequire) {
throw new Error('CommonJS require is not available');
}
var path = nodeRequire('path');
var lzSdkDir = path.dirname(nodeRequire.resolve('@layerzerolabs/lz-solana-sdk-v2/package.json'));
var LayerZeroConnection = nodeRequire(path.join(lzSdkDir, 'node_modules/@solana/web3.js/lib/index.cjs.js')).Connection;
return new LayerZeroConnection(rpcEndpoint, 'confirmed');
}
catch (e) {
return new web3_js_1.Connection(rpcEndpoint, 'confirmed');
}
}
function createLayerZeroUmi(connection) {
var umi = (0, umi_bundle_defaults_1.createUmi)(connection).use((0, mpl_toolbox_1.mplToolbox)());
umi.rpc.connection = getLayerZeroConnection(connection.rpcEndpoint);
return umi;
}
LzKits.createLayerZeroUmi = createLayerZeroUmi;
LzKits.deriveConnection = function () { return __awaiter(_this, void 0, void 0, function () {
var connection, umi;
return __generator(this, function (_a) {
connection = new web3_js_1.Connection(exports.program.provider.connection.rpcEndpoint);
umi = createLayerZeroUmi(connection);
return [2 /*return*/, { connection: connection, umi: umi }];
});
}); };
function getSendLibraryProgram(connection, endpoint, payer, oftStore, remoteEid) {
return __awaiter(this, void 0, void 0, function () {
var sendLibInfo, msgLibProgram, msgLibVersion;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, endpoint.getSendLibrary(connection, toPublicKey(oftStore), remoteEid)];
case 1:
sendLibInfo = _a.sent();
if (!sendLibInfo.programId) {
throw new Error('Send library not initialized or blocked message library');
}
msgLibProgram = sendLibInfo.programId;
return [4 /*yield*/, endpoint.getMessageLibVersion(connection, toPublicKey(payer), msgLibProgram)];
case 2:
msgLibVersion = _a.sent();
if (msgLibVersion.major.toString() === '0' &&
msgLibVersion.minor == 0 &&
msgLibVersion.endpointVersion == 2) {
return [2 /*return*/, new lz_solana_sdk_v2_1.SimpleMessageLibProgram.SimpleMessageLib(msgLibProgram)];
}
else if (msgLibVersion.major.toString() === '3' &&
msgLibVersion.minor == 0 &&
msgLibVersion.endpointVersion == 2) {
return [2 /*return*/, new lz_solana_sdk_v2_1.UlnProgram.Uln(msgLibProgram)];
}
throw new Error("Unsupported message library version: ".concat(JSON.stringify(msgLibVersion, null, 2)));
}
});
});
}
LzKits.getSendLibraryProgram = getSendLibraryProgram;
LzKits.getAddressLookupTable = function (connection, umi, fromEid) { return __awaiter(_this, void 0, void 0, function () {
var lookupTableAddress, LookupTablePublicKey, lookupTableAccount;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
lookupTableAddress = LOOKUP_TABLE_ADDRESS[fromEid];
if (!lookupTableAddress) {
throw new Error("No lookup table found for ".concat(fromEid));
}
LookupTablePublicKey = (0, umi_public_keys_1.publicKey)(lookupTableAddress);
return [4 /*yield*/, (0, mpl_toolbox_1.fetchAddressLookupTable)(umi, LookupTablePublicKey)];
case 1:
if (!(_a.sent())) {
throw new Error("No address lookup table found for ".concat(lookupTableAddress));
}
return [4 /*yield*/, connection.getAddressLookupTable(lookupTableAddress)];
case 2:
lookupTableAccount = (_a.sent()).value;
if (!lookupTableAccount) {
throw new Error("No address lookup table account found for ".concat(lookupTableAddress));
}
return [2 /*return*/, LookupTablePublicKey];
}
});
}); };
function versionedTransaction(fromEid, payer, instructions) {
return __awaiter(this, void 0, void 0, function () {
var latestBlockhash, lookupTableKey, lookupTableAccount, messageV0;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, exports.program.provider.connection.getLatestBlockhash('finalized')];
case 1:
latestBlockhash = (_a.sent()).blockhash;
lookupTableKey = LOOKUP_TABLE_ADDRESS[fromEid];
return [4 /*yield*/, exports.program.provider.connection.getAddressLookupTable(lookupTableKey)];
case 2:
lookupTableAccount = (_a.sent()).value;
if (!lookupTableAccount) {
throw new Error('Lookup table not found for address: ' + lookupTableKey.toBase58());
}
messageV0 = new web3_js_1.TransactionMessage({
payerKey: toPublicKey(payer),
recentBlockhash: latestBlockhash,
instructions: instructions,
}).compileToV0Message([lookupTableAccount]);
return [2 /*return*/, new web3_js_1.VersionedTransaction(messageV0)];
}
});
});
}
LzKits.versionedTransaction = versionedTransaction;
})(LzKits = exports.LzKits || (exports.LzKits = {}));
var SolanaLz;
(function (SolanaLz) {
var toPublicKey = LzKits.toPublicKey;
function defaultSendOptions() {
return Buffer.from(lz_v2_utilities_1.Options.newOptions().addExecutorLzReceiveOption(127000, 0).toBytes());
}
/** Quote the native fee for sending tokens via OFT. */
function quoteSend(arg) {
return __awaiter(this, void 0, void 0, function () {
var recipientAddressBytes32, options, _a, connection, umi, nativeFee, _b, _c, _d;
return __generator(this, function (_e) {
switch (_e.label) {
case 0:
recipientAddressBytes32 = (0, lz_v2_utilities_1.addressToBytes32)(arg.dstWallet);
options = defaultSendOptions();
return [4 /*yield*/, LzKits.deriveConnection()];
case 1:
_a = _e.sent(), connection = _a.connection, umi = _a.umi;
_c = (_b = oft_v2_solana_sdk_1.oft).quote;
_d = [umi.rpc,
{
payer: (0, umi_public_keys_1.publicKey)(arg.srcWallet),
tokenMint: (0, umi_public_keys_1.publicKey)(exports.OFT.mint),
tokenEscrow: (0, umi_public_keys_1.publicKey)(exports.OFT.escrow),
},
{
payInLzToken: false,
to: Buffer.from(recipientAddressBytes32),
dstEid: arg.dstEid,
amountLd: BigInt(arg.amount),
minAmountLd: BigInt(1),
options: options,
composeMsg: undefined,
},
{
oft: (0, umi_public_keys_1.publicKey)(exports.OFT.programId),
},
[]];
return [4 /*yield*/, LzKits.getAddressLookupTable(connection, umi, arg.srcEid)];
case 2: return [4 /*yield*/, _c.apply(_b, _d.concat([_e.sent()]))];
case 3:
nativeFee = (_e.sent()).nativeFee;
return [2 /*return*/, nativeFee];
}
});
});
}
SolanaLz.quoteSend = quoteSend;
/**
* Sends tokens from the source wallet to the destination wallet on the specified endpoint.
* @param arg.endpointId - The endpoint ID for the destination chain.
* @param arg.srcEid - The source endpoint ID.
* @param arg.dstEid - The destination endpoint ID.
* @param arg.srcWallet - The source wallet address.
* @param arg.dstWallet - The destination wallet address.
* @param arg.amount - The amount of tokens to send.
* @returns A Promise transaction object for sending tokens.
*/
function send(arg) {
return __awaiter(this, void 0, void 0, function () {
var tx;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, sendBy(arg)];
case 1:
tx = _a.sent();
return [4 /*yield*/, LzKits.versionedTransaction(arg.srcEid, arg.srcWallet, tx.instructions)];
case 2: return [2 /*return*/, _a.sent()];
}
});
});
}
SolanaLz.send = send;
function sendBy(arg) {
var _a;
return __awaiter(this, void 0, void 0, function () {
var recipientAddressBytes32, options, umi, lzConnection, deriver, peer, nativeFee, param, wallet, tokenAccount, accounts, endpoint, msgLibProgram, peerConfig, solanaPacketPath, remainingAccounts, tx, _b, _c;
return __generator(this, function (_d) {
switch (_d.label) {
case 0:
recipientAddressBytes32 = (0, lz_v2_utilities_1.addressToBytes32)(arg.dstWallet);
options = defaultSendOptions();
return [4 /*yield*/, LzKits.deriveConnection()];
case 1:
umi = (_d.sent()).umi;
lzConnection = umi.rpc.connection;
deriver = new oft_v2_solana_sdk_1.OftPDA((0, umi_public_keys_1.publicKey)(exports.OFT.programId));
peer = deriver.peer((0, umi_public_keys_1.publicKey)(exports.OFT.oftStore), arg.dstEid)[0];
return [4 /*yield*/, quoteSend(arg)];
case 2:
nativeFee = _d.sent();
param = {
dstEid: arg.dstEid,
to: Array.from(recipientAddressBytes32),
amountLd: new bn_js_1.BN(arg.amount),
minAmountLd: new bn_js_1.BN(arg.amount).div(new bn_js_1.BN(2)),
options: options,
composeMsg: null,
nativeFee: new bn_js_1.BN(nativeFee.toString(10)),
lzTokenFee: new bn_js_1.BN(0),
};
wallet = toPublicKey(arg.srcWallet);
tokenAccount = (0, spl_token_1.getAssociatedTokenAddressSync)(toPublicKey(exports.OFT.mint), wallet, true, spl_token_1.TOKEN_PROGRAM_ID, spl_token_1.ASSOCIATED_TOKEN_PROGRAM_ID);
accounts = {
signer: wallet,
peer: peer,
oftStore: exports.OFT.oftStore,
tokenSource: tokenAccount,
tokenEscrow: exports.OFT.escrow,
tokenMint: exports.OFT.mint,
tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
};
endpoint = new lz_solana_sdk_v2_1.EndpointProgram.Endpoint(toPublicKey((_a = arg.endpoint) !== null && _a !== void 0 ? _a : '76y77prsiCMvXMjuoZ5VRrhG5qYBrUMYTE5WgHqgjEn6'));
return [4 /*yield*/, LzKits.getSendLibraryProgram(lzConnection, endpoint, arg.srcWallet, exports.OFT.oftStore, arg.dstEid)];
case 3:
msgLibProgram = _d.sent();
return [4 /*yield*/, exports.program.account.peerConfig.fetch(peer)];
case 4:
peerConfig = _d.sent();
solanaPacketPath = {
sender: '0x' + toPublicKey(exports.OFT.oftStore).toBuffer().toString('hex'),
dstEid: arg.dstEid,
receiver: '0x' + Buffer.from(peerConfig.peerAddress).toString('hex'),
};
return [4 /*yield*/, endpoint.getSendIXAccountMetaForCPI(lzConnection, toPublicKey(arg.srcWallet), solanaPacketPath, msgLibProgram)];
case 5:
remainingAccounts = _d.sent();
tx = new web3_js_1.Transaction();
tx.add(anchor_1.web3.ComputeBudgetProgram.setComputeUnitLimit({
units: 400000,
}));
_c = (_b = tx).add;
return [4 /*yield*/, exports.program.methods
.send(param)
.accounts(accounts)
.remainingAccounts(remainingAccounts)
.instruction()];
case 6:
_c.apply(_b, [_d.sent()]);
return [2 /*return*/, tx];
}
});
});
}
/**
* Withdraws the fee collected from the OFT transactions.
* @param para - Parameters for withdrawing the fee.
* @param para.fee - The amount of fee to withdraw, if fee==0, will withdraw all available fees.
* @param para.receiver - The receiver's public key or address.
* @returns A Promise transaction object for withdrawing the fee.
*/
function withdrawFee(para) {
var _a, _b;
return __awaiter(this, void 0, void 0, function () {
var store, receiver, ata, accounts;
return __generator(this, function (_c) {
switch (_c.label) {
case 0: return [4 /*yield*/, exports.program.account.oftStore.fetch(exports.OFT.oftStore)];
case 1:
store = _c.sent();
receiver = toPublicKey((_a = para.receiver) !== null && _a !== void 0 ? _a : store.feeReceiver);
if (receiver.toString() === web3_js_1.PublicKey.default.toString()) {
throw new Error('feeReceiver is not set');
}
ata = (0, spl_token_1.getAssociatedTokenAddressSync)(store.tokenMint, receiver, true);
accounts = {
admin: toPublicKey(para.payer),
oftStore: exports.OFT.oftStore,
tokenMint: exports.OFT.mint,
tokenEscrow: exports.OFT.escrow,
tokenDest: ata,
tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
};
return [2 /*return*/, exports.program.methods
.withdrawFee({
feeLd: new bn_js_1.BN((_b = para.fee) !== null && _b !== void 0 ? _b : 0),
})
.accounts(accounts)
.transaction()];
}
});
});
}
SolanaLz.withdrawFee = withdrawFee;
/**
* Sends tokens and withdraws the fee in a single transaction.
* @param arg - Arguments for sending tokens.
* @returns A Promise transaction object that includes both sending tokens and withdrawing the fee.
*/
function sendAndWithdrawFee(arg) {
return __awaiter(this, void 0, void 0, function () {
var receiver, tx, _a, _b, _c, _d;
return __generator(this, function (_e) {
switch (_e.label) {
case 0: return [4 /*yield*/, LzArgs.feeReceiver()];
case 1:
receiver = _e.sent();
tx = new web3_js_1.Transaction();
_b = (_a = tx).add;
return [4 /*yield*/, sendBy(arg)];
case 2:
_b.apply(_a, [_e.sent()]);
if (!(receiver.toBase58() != web3_js_1.PublicKey.default.toBase58())) return [3 /*break*/, 4];
_d = (_c = tx).add;
return [4 /*yield*/, withdrawFee({
payer: arg.srcWallet,
receiver: receiver,
})];
case 3:
_d.apply(_c, [_e.sent()]);
_e.label = 4;
case 4: return [4 /*yield*/, LzKits.versionedTransaction(arg.srcEid, arg.srcWallet, tx.instructions)];
case 5: return [2 /*return*/, _e.sent()];
}
});
});
}
SolanaLz.sendAndWithdrawFee = sendAndWithdrawFee;
/**
* Sets the configuration parameters for the OFT store.
* @param para - Parameters for setting the configuration.
* @param para.__kind - The kind of configuration parameter to set.
* @param para.fields - The fields associated with the configuration parameter.
* @param para.admin - The admin's public key or address.
* @returns A Promise transaction object for setting the configuration.
*/
function setConfig(para) {
var _a;
return __awaiter(this, void 0, void 0, function () {
var admin, _b, arg, accounts;
return __generator(this, function (_c) {
switch (_c.label) {
case 0:
if (!((_a = para.admin) !== null && _a !== void 0)) return [3 /*break*/, 1];
_b = _a;
return [3 /*break*/, 3];
case 1: return [4 /*yield*/, LzArgs.storeAdmin()];
case 2:
_b = (_c.sent());
_c.label = 3;
case 3:
admin = _b;
arg = LzArgs.createSetOFTConfigParams(para);
accounts = {
admin: toPublicKey(admin),
oftStore: exports.OFT.oftStore,
};
return [2 /*return*/, exports.program.methods
.setOftConfig(arg)
.accounts(accounts)
.transaction()];
}
});
});
}
SolanaLz.setConfig = setConfig;
/**
* Sets the fee basis points and receiver for the OFT store.
* @param defaultBps - The default fee basis points.
* @param feeReceiver - The fee receiver's public key or address.
* @returns A Promise transaction object for setting the fee basis points and receiver.
*/
function setFeeBpsAndReceiver(defaultBps, feeReceiver) {
return __awaiter(this, void 0, void 0, function () {
var tx, admin, _a, _b, _c, _d;
return __generator(this, function (_e) {
switch (_e.label) {
case 0:
tx = new web3_js_1.Transaction();
return [4 /*yield*/, LzArgs.storeAdmin()];
case 1:
admin = _e.sent();
_b = (_a = tx).add;
return [4 /*yield*/, setConfig({ __kind: 'DefaultFee', fields: [defaultBps], admin: admin })];
case 2:
_b.apply(_a, [_e.sent()]);
if (!feeReceiver) return [3 /*break*/, 4];
_d = (_c = tx).add;
return [4 /*yield*/, setConfig({
__kind: 'FeeReceiver',
fields: [toPublicKey(feeReceiver)],
admin: admin,
})];
case 3:
_d.apply(_c, [_e.sent()]);
_e.label = 4;
case 4: return [2 /*return*/, tx];
}
});
});
}
SolanaLz.setFeeBpsAndReceiver = setFeeBpsAndReceiver;
function getStoreConfig() {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, exports.program.account.oftStore.fetch(exports.OFT.oftStore)];
case 1: return [2 /*return*/, _a.sent()];
}
});
});
}
SolanaLz.getStoreConfig = getStoreConfig;
/** Sets the fee basis points for a specific endpoint ID.
* @param dstEid - The destination endpoint ID.
* @param feeBps - The fee basis points to set.
* @returns A Promise transaction object for setting the fee basis points.
*/
function setEidFeeBps(dstEid, feeBps) {
return __awaiter(this, void 0, void 0, function () {
var deriver, peer, _a, _b;
var _c;
return __generator(this, function (_d) {
switch (_d.label) {
case 0:
deriver = new oft_v2_solana_sdk_1.OftPDA((0, umi_public_keys_1.publicKey)(exports.OFT.programId));
peer = deriver.peer((0, umi_public_keys_1.publicKey)(exports.OFT.oftStore), dstEid)[0];
_b = (_a = exports.program.methods
.setPeerConfig({
remoteEid: dstEid,
config: { feeBps: [feeBps !== null && feeBps !== void 0 ? feeBps : null] },
}))
.accounts;
_c = {};
return [4 /*yield*/, LzArgs.storeAdmin()];
case 1: return [2 /*return*/, _b.apply(_a, [(_c.admin = _d.sent(),
_c.peer = peer,
_c.oftStore = exports.OFT.oftStore,
_c.systemProgram = web3_js_1.SystemProgram.programId,
_c)])
.transaction()];
}
});
});
}
SolanaLz.setEidFeeBps = setEidFeeBps;
function getPeerConfig(dstEid) {
return __awaiter(this, void 0, void 0, function () {
var deriver, peerConfig;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
deriver = new oft_v2_solana_sdk_1.OftPDA((0, umi_public_keys_1.publicKey)(exports.OFT.programId));
peerConfig = deriver.peer((0, umi_public_keys_1.publicKey)(exports.OFT.oftStore), dstEid)[0];
return [4 /*yield*/, exports.program.account.peerConfig.fetch(peerConfig)];
case 1: return [2 /*return*/, _a.sent()];
}
});
});
}
SolanaLz.getPeerConfig = getPeerConfig;
})(SolanaLz = exports.SolanaLz || (exports.SolanaLz = {}));