@chainberry/berry-signer 1.0.0 → 1.0.2
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 +76 -0
- package/dist/btc/btc-sign.d.ts +8 -0
- package/dist/btc/btc-sign.d.ts.map +1 -0
- package/dist/btc/btc-sign.js +24 -0
- package/dist/btc/btc-sign.js.map +1 -0
- package/dist/evm/evm-sign.d.ts +19 -0
- package/dist/evm/evm-sign.d.ts.map +1 -0
- package/dist/evm/evm-sign.js +34 -0
- package/dist/evm/evm-sign.js.map +1 -0
- package/{src/index.ts → dist/index.d.ts} +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -0
- package/dist/ltc/ltc-sign.d.ts +14 -0
- package/dist/ltc/ltc-sign.d.ts.map +1 -0
- package/dist/ltc/ltc-sign.js +55 -0
- package/dist/ltc/ltc-sign.js.map +1 -0
- package/dist/sol/sol-sign.d.ts +7 -0
- package/dist/sol/sol-sign.d.ts.map +1 -0
- package/dist/sol/sol-sign.js +37 -0
- package/dist/sol/sol-sign.js.map +1 -0
- package/dist/ton/ton-sign.d.ts +15 -0
- package/dist/ton/ton-sign.d.ts.map +1 -0
- package/dist/ton/ton-sign.js +33 -0
- package/dist/ton/ton-sign.js.map +1 -0
- package/dist/trx/trx-sign.d.ts +8 -0
- package/dist/trx/trx-sign.d.ts.map +1 -0
- package/dist/trx/trx-sign.js +22 -0
- package/dist/trx/trx-sign.js.map +1 -0
- package/dist/tsconfig.lib.tsbuildinfo +1 -0
- package/dist/utxo/parse-private-key.d.ts +6 -0
- package/dist/utxo/parse-private-key.d.ts.map +1 -0
- package/dist/utxo/parse-private-key.js +19 -0
- package/dist/utxo/parse-private-key.js.map +1 -0
- package/dist/xrp/xrp-sign.d.ts +8 -0
- package/dist/xrp/xrp-sign.d.ts.map +1 -0
- package/dist/xrp/xrp-sign.js +24 -0
- package/dist/xrp/xrp-sign.js.map +1 -0
- package/package.json +2 -1
- package/src/btc/btc-sign.ts +0 -22
- package/src/evm/evm-sign.ts +0 -43
- package/src/ltc/ltc-sign.ts +0 -53
- package/src/sol/sol-sign.ts +0 -31
- package/src/ton/ton-sign.ts +0 -38
- package/src/trx/trx-sign.ts +0 -17
- package/src/utxo/parse-private-key.ts +0 -14
- package/src/xrp/xrp-sign.ts +0 -21
- package/tsconfig.json +0 -11
- package/tsconfig.lib.json +0 -15
package/src/sol/sol-sign.ts
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import bs58 from "bs58";
|
|
2
|
-
import { Keypair, Transaction } from "@solana/web3.js";
|
|
3
|
-
|
|
4
|
-
function getSolKeypairFromPrivateKey(privateKey: string): Keypair {
|
|
5
|
-
const cleanedKey = privateKey.startsWith("0x") ? privateKey.slice(2) : privateKey;
|
|
6
|
-
let secretKey: Uint8Array;
|
|
7
|
-
if (/^[0-9a-fA-F]+$/.test(cleanedKey)) {
|
|
8
|
-
secretKey = Uint8Array.from(Buffer.from(cleanedKey, "hex"));
|
|
9
|
-
} else {
|
|
10
|
-
try {
|
|
11
|
-
secretKey = bs58.decode(cleanedKey);
|
|
12
|
-
} catch (error) {
|
|
13
|
-
throw new Error(`Invalid private key encoding: not valid hex or base58 (${(error as Error).message})`);
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
if (secretKey.length === 64) return Keypair.fromSecretKey(secretKey);
|
|
17
|
-
if (secretKey.length === 32) return Keypair.fromSeed(secretKey);
|
|
18
|
-
throw new Error(`Invalid private key length: ${secretKey.length} bytes. Expected 32 or 64 bytes.`);
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Pure signing — no network calls. `unsignedTxBase64` must already carry
|
|
23
|
-
* recentBlockhash/feePayer/instructions (see wallet-broadcast's
|
|
24
|
-
* prepareSolTransaction, a read-only RPC call).
|
|
25
|
-
*/
|
|
26
|
-
export function signSolTransaction(privateKey: string, unsignedTxBase64: string): string {
|
|
27
|
-
const keypair = getSolKeypairFromPrivateKey(privateKey);
|
|
28
|
-
const transaction = Transaction.from(Buffer.from(unsignedTxBase64, "base64"));
|
|
29
|
-
transaction.sign(keypair);
|
|
30
|
-
return transaction.serialize().toString("base64");
|
|
31
|
-
}
|
package/src/ton/ton-sign.ts
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { external, storeMessage } from "@ton/core";
|
|
2
|
-
import { keyPairFromSeed } from "@ton/crypto";
|
|
3
|
-
import { Address, beginCell, Cell, internal, toNano, WalletContractV4 } from "@ton/ton";
|
|
4
|
-
|
|
5
|
-
function getKeyPairFromPrivateKey(privateKeyHex: string): { publicKey: Buffer; secretKey: Buffer } {
|
|
6
|
-
const raw = privateKeyHex.replace(/^0x/i, "");
|
|
7
|
-
if (raw.length !== 64) throw new Error(`Invalid TON private key length: ${raw.length} hex chars. Expected 64 (32 bytes).`);
|
|
8
|
-
return keyPairFromSeed(Buffer.from(raw, "hex"));
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export type SignedTonTx = { bocBase64: string; txHash: string };
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Pure signing — no network calls. `seqno` comes from wallet-broadcast's
|
|
15
|
-
* fetchTonSeqno (a read-only RPC call).
|
|
16
|
-
*/
|
|
17
|
-
export function signTonTransaction(
|
|
18
|
-
privateKeyHex: string,
|
|
19
|
-
params: { toAddress: string; amount: string; seqno: number; memoId?: string }
|
|
20
|
-
): SignedTonTx {
|
|
21
|
-
const keyPair = getKeyPairFromPrivateKey(privateKeyHex);
|
|
22
|
-
const wallet = WalletContractV4.create({ workchain: 0, publicKey: keyPair.publicKey });
|
|
23
|
-
const walletAddress = wallet.address;
|
|
24
|
-
|
|
25
|
-
const recipientAddress = Address.parse(params.toAddress.trim());
|
|
26
|
-
const amountInNano = toNano(params.amount);
|
|
27
|
-
let body: Cell | undefined;
|
|
28
|
-
if (params.memoId) {
|
|
29
|
-
body = beginCell().storeUint(0, 32).storeStringTail(params.memoId).endCell();
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
const internalMessage = internal({ to: recipientAddress, value: amountInNano, body, bounce: false });
|
|
33
|
-
const transferBody = wallet.createTransfer({ secretKey: keyPair.secretKey, messages: [internalMessage], seqno: params.seqno });
|
|
34
|
-
const extMessage = external({ to: walletAddress, init: params.seqno === 0 ? wallet.init : undefined, body: transferBody });
|
|
35
|
-
const bocBytes = beginCell().store(storeMessage(extMessage)).endCell().toBoc();
|
|
36
|
-
|
|
37
|
-
return { bocBase64: Buffer.from(bocBytes).toString("base64"), txHash: transferBody.hash().toString("hex") };
|
|
38
|
-
}
|
package/src/trx/trx-sign.ts
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
2
|
-
let TronWeb = require("tronweb");
|
|
3
|
-
if (TronWeb.TronWeb) TronWeb = TronWeb.TronWeb;
|
|
4
|
-
else if (TronWeb.default) TronWeb = TronWeb.default;
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Pure signing — TronWeb's signing call itself makes no network request, but its
|
|
8
|
-
* constructor still requires node URLs (an SDK quirk, not an actual dependency for
|
|
9
|
-
* signing). `rpcUrl` can be any reachable TRON node; it is never called during sign.
|
|
10
|
-
* `unsignedTx` comes from wallet-broadcast's prepareTrxTransaction (a read-only call).
|
|
11
|
-
*/
|
|
12
|
-
export async function signTrxTransaction(privateKey: string, unsignedTx: unknown, rpcUrl: string): Promise<string> {
|
|
13
|
-
const cleanPrivateKey = privateKey.startsWith("0x") ? privateKey.slice(2) : privateKey;
|
|
14
|
-
const tronWeb = new TronWeb({ fullNode: rpcUrl, solidityNode: rpcUrl, eventServer: rpcUrl, privateKey: cleanPrivateKey });
|
|
15
|
-
const signedTx = await tronWeb.trx.sign(unsignedTx, cleanPrivateKey);
|
|
16
|
-
return JSON.stringify(signedTx);
|
|
17
|
-
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Decodes a raw UTXO-chain private key from either a 32-byte hex string or the
|
|
3
|
-
* legacy hex-of-UTF8-bytes-of-comma-separated-decimal format used by older wallets.
|
|
4
|
-
*/
|
|
5
|
-
export function parsePrivateKey(decryptedKey: string, coinLabel = "UTXO"): Buffer {
|
|
6
|
-
const raw = Buffer.from(decryptedKey.replace(/^0x/, ""), "hex");
|
|
7
|
-
if (raw.length === 32) return raw;
|
|
8
|
-
const asString = raw.toString("utf8");
|
|
9
|
-
const parts = asString.split(",").map(Number);
|
|
10
|
-
if (parts.length === 32 && parts.every((b) => Number.isInteger(b) && b >= 0 && b <= 255)) {
|
|
11
|
-
return Buffer.from(parts);
|
|
12
|
-
}
|
|
13
|
-
throw new Error(`Invalid ${coinLabel} private key: expected 32 bytes, got ${raw.length}`);
|
|
14
|
-
}
|
package/src/xrp/xrp-sign.ts
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import * as ecc from "tiny-secp256k1";
|
|
2
|
-
import { Payment, Wallet as XrplWallet } from "xrpl";
|
|
3
|
-
|
|
4
|
-
function buildXrplWallet(privateKeyHex: string): XrplWallet {
|
|
5
|
-
const raw = privateKeyHex.replace(/^0x/i, "");
|
|
6
|
-
const pubKeyBuf = ecc.pointFromScalar(Buffer.from(raw, "hex"), true);
|
|
7
|
-
if (!pubKeyBuf) throw new Error("Failed to derive XRP public key from private key");
|
|
8
|
-
const pubKeyHex = Buffer.from(pubKeyBuf).toString("hex").toUpperCase();
|
|
9
|
-
const prefixedPriv = raw.startsWith("00") ? raw : `00${raw}`;
|
|
10
|
-
return new XrplWallet(pubKeyHex, prefixedPriv);
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Pure signing — no network calls. `preparedTx` must already carry
|
|
15
|
-
* Sequence/Fee/LastLedgerSequence (xrpl's autofill, a read-only RPC call —
|
|
16
|
-
* see wallet-broadcast's prepareXrpTransaction).
|
|
17
|
-
*/
|
|
18
|
-
export function signXrpTransaction(privateKeyHex: string, preparedTx: Payment): string {
|
|
19
|
-
const wallet = buildXrplWallet(privateKeyHex);
|
|
20
|
-
return wallet.sign(preparedTx).tx_blob;
|
|
21
|
-
}
|
package/tsconfig.json
DELETED
package/tsconfig.lib.json
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"extends": "../../tsconfig.base.json",
|
|
3
|
-
"compilerOptions": {
|
|
4
|
-
"baseUrl": "../../",
|
|
5
|
-
"rootDir": "src",
|
|
6
|
-
"outDir": "dist",
|
|
7
|
-
"tsBuildInfoFile": "dist/tsconfig.lib.tsbuildinfo",
|
|
8
|
-
"emitDeclarationOnly": false,
|
|
9
|
-
"module": "CommonJS",
|
|
10
|
-
"moduleResolution": "Node10",
|
|
11
|
-
"types": ["node"]
|
|
12
|
-
},
|
|
13
|
-
"include": ["src/**/*.ts"],
|
|
14
|
-
"references": []
|
|
15
|
-
}
|