Skip to content

Commit 5479cbc

Browse files
authored
fix signKavaTx and add kava example (#154)
* fix signKavaTx and add kava example * format
1 parent e3f137b commit 5479cbc

File tree

4 files changed

+59
-2
lines changed

4 files changed

+59
-2
lines changed

examples/kava.ts

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import { kavaToUkava, Kiln } from "../src/kiln";
2+
import fs from "node:fs";
3+
import 'dotenv/config'
4+
import type { FireblocksIntegration } from "../src/fireblocks.ts";
5+
6+
7+
const apiSecret = fs.readFileSync(`${__dirname}/fireblocks_secret_prod.key`, 'utf8');
8+
9+
const k = new Kiln({
10+
baseUrl: process.env.KILN_API_URL as string,
11+
apiToken: process.env.KILN_API_KEY as string,
12+
});
13+
14+
const vault: FireblocksIntegration = {
15+
provider: 'fireblocks',
16+
fireblocksApiKey: process.env.FIREBLOCKS_API_KEY as string,
17+
fireblocksSecretKey: apiSecret,
18+
vaultId: 37
19+
};
20+
21+
try {
22+
console.log('crafting...');
23+
const tx = await k.client.POST(
24+
'/v1/kava/transaction/stake',
25+
{
26+
body: {
27+
account_id: process.env.KILN_ACCOUNT_ID as string,
28+
pubkey: '0233335b6c68a85e01b85055d0e8c2fcef42fed977898422ef3a5f6baf9a9a413e',
29+
validator: 'kavavaloper1djqecw6nn5tydxq0shan7srv8j65clsf79myt8',
30+
amount_ukava: kavaToUkava('0.01').toString(),
31+
}
32+
}
33+
);
34+
console.log('signing...');
35+
if(!tx.data?.data) throw new Error('No data in response');
36+
const signResponse = await k.fireblocks.signKavaTx(vault, tx.data.data);
37+
console.log('broadcasting...');
38+
if(!signResponse.signed_tx?.data?.signed_tx_serialized) throw new Error('No signed_tx in response');
39+
const broadcastedTx = await k.client.POST("/v1/kava/transaction/broadcast", {
40+
body: {
41+
tx_serialized: signResponse.signed_tx.data.signed_tx_serialized,
42+
}
43+
});
44+
console.log(broadcastedTx);
45+
46+
} catch (err) {
47+
console.log(err);
48+
}

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@kilnfi/sdk",
3-
"version": "3.1.15",
3+
"version": "3.1.16",
44
"autor": "Kiln <[email protected]> (https://kiln.fi)",
55
"license": "BUSL-1.1",
66
"description": "JavaScript sdk for Kiln API",

src/fireblocks.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -414,18 +414,20 @@ export class FireblocksService {
414414
messages: [
415415
{
416416
content: tx.unsigned_tx_hash,
417+
derivationPath: [44, 459, integration.vaultId, 0, 0],
417418
preHash: {
418419
content: tx.unsigned_tx_serialized,
419420
hashAlgorithm: 'SHA256',
420421
},
421422
},
422423
],
424+
algorithm: SigningAlgorithm.MPC_ECDSA_SECP256K1,
423425
},
424426
};
425427

426428
const fbSigner = this.getSigner(integration);
427429
const fbNote = note ? note : 'KAVA tx from @kilnfi/sdk';
428-
const fbTx = await fbSigner.sign(payload, 'KAVA_KAVA', fbNote);
430+
const fbTx = await fbSigner.sign(payload, undefined, fbNote);
429431
const signature = fbTx.signedMessages?.[0]?.signature.fullSig;
430432

431433
if (!signature) {

src/utils.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,13 @@ export const tonToNanoton = (ton: string): bigint => {
6363
return parseUnits(ton, 9);
6464
};
6565

66+
/**
67+
* Convert KAVA to uKAVA
68+
*/
69+
export const kavaToUkava = (kava: string): bigint => {
70+
return parseUnits(kava, 6);
71+
};
72+
6673
/**
6774
* Convert uZETA to ZETA
6875
*/

0 commit comments

Comments
 (0)