Skip to content

Commit

Permalink
Fix singAndBroadcast for substrate (#1182)
Browse files Browse the repository at this point in the history
* Fix singAndBroadcast for substrate

* Fix function interface

* Fix getAddress

* changeset

---------

Co-authored-by: Marek Epicode <[email protected]>
Co-authored-by: towan <[email protected]>
  • Loading branch information
3 people authored Feb 12, 2025
1 parent 6b9a5d7 commit 61058d8
Show file tree
Hide file tree
Showing 5 changed files with 84 additions and 35 deletions.
8 changes: 8 additions & 0 deletions .changeset/plenty-mirrors-lay.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
"@swapkit/toolbox-substrate": patch
"@swapkit/wallet-polkadotjs": patch
"@swapkit/plugin-chainflip": patch
"@swapkit/wallet-talisman": patch
---

Fix substrate signAndBroadcast and getAddress
59 changes: 31 additions & 28 deletions packages/plugins/chainflip/src/broker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ const registerAsBroker = (toolbox: Awaited<ReturnType<typeof ChainflipToolbox>>)
throw new SwapKitError("chainflip_broker_register");
}

return toolbox.signAndBroadcast(extrinsic);
return toolbox.signAndBroadcast({ tx: extrinsic, address: toolbox.getAddress() });
};

const withdrawFee =
Expand All @@ -71,35 +71,38 @@ const withdrawFee =
throw new SwapKitError("chainflip_broker_withdraw");
}

toolbox.signAndBroadcast(extrinsic, async (result) => {
if (!result.status?.isFinalized) {
return;
}
toolbox.signAndBroadcast({
tx: extrinsic,
callback: async (result) => {
if (!result.status?.isFinalized) {
return;
}

const withdrawEvent = result.events.find(
(event) => event.event.method === "WithdrawalRequested",
);

if (!withdrawEvent) {
throw new SwapKitError(
"chainflip_channel_error",
"Could not find 'WithdrawalRequested' event",
const withdrawEvent = result.events.find(
(event) => event.event.method === "WithdrawalRequested",
);
}

const {
event: {
data: { egressId, egressAsset, egressAmount, egressFee, destinationAddress },
},
} = withdrawEvent.toHuman() as any;

resolve({
egressId,
egressAsset,
egressAmount,
egressFee,
destinationAddress,
});

if (!withdrawEvent) {
throw new SwapKitError(
"chainflip_channel_error",
"Could not find 'WithdrawalRequested' event",
);
}

const {
event: {
data: { egressId, egressAsset, egressAmount, egressFee, destinationAddress },
},
} = withdrawEvent.toHuman() as any;

resolve({
egressId,
egressAsset,
egressAmount,
egressFee,
destinationAddress,
});
},
});
});
};
Expand Down
39 changes: 35 additions & 4 deletions packages/toolboxes/substrate/src/toolbox/baseSubstrateToolbox.ts
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,28 @@ const signAndBroadcast = (
return hash.toString();
};

const signAndBroadcastSigner = async ({
signer,
address,
tx,
callback,
api,
}: {
signer: Signer;
address: string;
tx: SubmittableExtrinsic<"promise">;
api: ApiPromise;
callback?: Callback<ISubmittableResult>;
}) => {
const nonce = await getNonce(api, address);
if (callback) {
tx.signAndSend(address, { nonce, signer }, callback);
}
const hash = tx.signAndSend(address, { nonce, signer });

return hash.toString();
};

function decodeAddress(address: string, networkPrefix?: number) {
return isHex(address)
? hexToU8a(address)
Expand Down Expand Up @@ -197,14 +219,23 @@ export const BaseSubstrateToolbox = ({
},
broadcast: (tx: SubmittableExtrinsic<"promise">, callback?: Callback<ISubmittableResult>) =>
broadcast(tx, callback),
signAndBroadcast: (
tx: SubmittableExtrinsic<"promise">,
callback?: Callback<ISubmittableResult>,
) => {
signAndBroadcast: ({
tx,
callback,
address,
}: {
tx: SubmittableExtrinsic<"promise">;
callback?: Callback<ISubmittableResult>;
address?: string;
}) => {
if (isKeyringPair(signer)) {
return signAndBroadcast(signer, tx, callback);
}

if (address) {
return signAndBroadcastSigner({ signer, address, tx, callback, api });
}

throw new SwapKitError(
"core_wallet_not_keypair_wallet",
"Signer does not have keyring pair capabilities required for signing.",
Expand Down
5 changes: 4 additions & 1 deletion packages/wallets/polkadotjs/src/helpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,10 @@ export const getWalletForChain = async ({
const subAddress: string = accounts[0].address;
const newPrefix = 0;
const address = convertAddress(subAddress, newPrefix);
return { walletMethods: toolbox, address };
return {
walletMethods: { ...toolbox, getAddress: () => address },
address,
};
}

default:
Expand Down
8 changes: 6 additions & 2 deletions packages/wallets/talisman/src/helpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -143,9 +143,13 @@ export const getWalletForChain = async ({
info: { wallet: WalletOption.TALISMAN, accounts, address: accounts[0]?.address },
});
}
const [{ address }] = accounts;

return { walletMethods: toolbox, address: convertAddress(address, Network[chain].prefix) };
const address = convertAddress(accounts[0].address, Network[chain].prefix);

return {
walletMethods: { ...toolbox, getAddress: () => address },
address,
};
}

default:
Expand Down

0 comments on commit 61058d8

Please sign in to comment.