sbtc-bridge-lib
Advanced tools
Comparing version 1.0.24 to 1.0.25
@@ -1,3 +0,3 @@ | ||
import { MAGIC_BYTES_TESTNET, MAGIC_BYTES_MAINNET, PEGIN_OPCODE, PEGOUT_OPCODE, parseDepositPayload, buildDepositPayload, buildWithdrawalPayload, parseWithdrawalPayload, amountToUint8, uint8ToAmount, getDataToSign, getStacksSimpleHashOfDataToSign, getStacksAddressFromSignature, parseSbtcWalletAddress, parseOutputs, readDepositValue, fromStorable, toStorable } from './payload_utils.js'; | ||
export { MAGIC_BYTES_TESTNET, MAGIC_BYTES_MAINNET, PEGIN_OPCODE, PEGOUT_OPCODE, parseDepositPayload, buildDepositPayload, buildWithdrawalPayload, parseWithdrawalPayload, amountToUint8, uint8ToAmount, getDataToSign, getStacksSimpleHashOfDataToSign, getStacksAddressFromSignature, parseSbtcWalletAddress, parseOutputs, readDepositValue, fromStorable, toStorable }; | ||
import { MAGIC_BYTES_TESTNET, MAGIC_BYTES_MAINNET, PEGIN_OPCODE, PEGOUT_OPCODE, parseDepositPayload, buildDepositPayload, buildWithdrawalPayload, parseWithdrawalPayload, amountToBigUint64, bigUint64ToAmount, getDataToSign, getStacksSimpleHashOfDataToSign, getStacksAddressFromSignature, parseSbtcWalletAddress, parseOutputs, readDepositValue, fromStorable, toStorable } from './payload_utils.js'; | ||
export { MAGIC_BYTES_TESTNET, MAGIC_BYTES_MAINNET, PEGIN_OPCODE, PEGOUT_OPCODE, parseDepositPayload, buildDepositPayload, buildWithdrawalPayload, parseWithdrawalPayload, amountToBigUint64, bigUint64ToAmount, getDataToSign, getStacksSimpleHashOfDataToSign, getStacksAddressFromSignature, parseSbtcWalletAddress, parseOutputs, readDepositValue, fromStorable, toStorable }; | ||
import { approxTxFees } from './transaction_utils.js'; | ||
@@ -4,0 +4,0 @@ export { approxTxFees, }; |
@@ -1,3 +0,3 @@ | ||
import { MAGIC_BYTES_TESTNET, MAGIC_BYTES_MAINNET, PEGIN_OPCODE, PEGOUT_OPCODE, parseDepositPayload, buildDepositPayload, buildWithdrawalPayload, parseWithdrawalPayload, amountToUint8, uint8ToAmount, getDataToSign, getStacksSimpleHashOfDataToSign, getStacksAddressFromSignature, parseSbtcWalletAddress, parseOutputs, readDepositValue, fromStorable, toStorable } from './payload_utils.js'; | ||
export { MAGIC_BYTES_TESTNET, MAGIC_BYTES_MAINNET, PEGIN_OPCODE, PEGOUT_OPCODE, parseDepositPayload, buildDepositPayload, buildWithdrawalPayload, parseWithdrawalPayload, amountToUint8, uint8ToAmount, getDataToSign, getStacksSimpleHashOfDataToSign, getStacksAddressFromSignature, parseSbtcWalletAddress, parseOutputs, readDepositValue, fromStorable, toStorable }; | ||
import { MAGIC_BYTES_TESTNET, MAGIC_BYTES_MAINNET, PEGIN_OPCODE, PEGOUT_OPCODE, parseDepositPayload, buildDepositPayload, buildWithdrawalPayload, parseWithdrawalPayload, amountToBigUint64, bigUint64ToAmount, getDataToSign, getStacksSimpleHashOfDataToSign, getStacksAddressFromSignature, parseSbtcWalletAddress, parseOutputs, readDepositValue, fromStorable, toStorable } from './payload_utils.js'; | ||
export { MAGIC_BYTES_TESTNET, MAGIC_BYTES_MAINNET, PEGIN_OPCODE, PEGOUT_OPCODE, parseDepositPayload, buildDepositPayload, buildWithdrawalPayload, parseWithdrawalPayload, amountToBigUint64, bigUint64ToAmount, getDataToSign, getStacksSimpleHashOfDataToSign, getStacksAddressFromSignature, parseSbtcWalletAddress, parseOutputs, readDepositValue, fromStorable, toStorable }; | ||
import { approxTxFees, } from './transaction_utils.js'; | ||
@@ -4,0 +4,0 @@ export { approxTxFees, }; |
@@ -7,4 +7,20 @@ import type { withdrawalPayloadType, depositPayloadType } from './types/sbtc_types.js'; | ||
export declare function parseDepositPayload(d1: Uint8Array, amountSats: number): depositPayloadType; | ||
export declare function amountToUint8(amt: number, size: number): Uint8Array; | ||
export declare function uint8ToAmount(buf: Uint8Array): number; | ||
/** | ||
export function amountToUint8(amt:number, size:number):Uint8Array { | ||
const buffer = new ArrayBuffer(size); | ||
const view = new DataView(buffer); | ||
view.setUint32(0, amt); // Max unsigned 32-bit integer | ||
const res = new Uint8Array(view.buffer); | ||
return res; | ||
} | ||
export function uint8ToAmount(buf:Uint8Array):number { | ||
const hmmm = hex.decode(hex.encode(buf)) // needed to make work ? | ||
const view = new DataView(hmmm.buffer); | ||
const amt = view.getUint32(0); | ||
return amt; | ||
} | ||
*/ | ||
export declare function amountToBigUint64(amt: number, size: number): Uint8Array; | ||
export declare function bigUint64ToAmount(buf: Uint8Array): number; | ||
export declare function parseWithdrawalPayload(network: string, d1: Uint8Array, sbtcWallet: string, compression: number): withdrawalPayloadType; | ||
@@ -11,0 +27,0 @@ export declare function buildDepositPayload(net: any, revealFee: number, address: string, opDrop: boolean, memo: string | undefined): Uint8Array; |
@@ -56,3 +56,3 @@ import * as secp from '@noble/secp256k1'; | ||
const rev = d1.subarray(current); | ||
const revealFee = uint8ToAmount(rev); | ||
const revealFee = bigUint64ToAmount(rev); | ||
//console.log('payload rev: ', revealFee) | ||
@@ -73,3 +73,4 @@ if (opcode.toUpperCase() !== PEGIN_OPCODE) | ||
} | ||
export function amountToUint8(amt, size) { | ||
/** | ||
export function amountToUint8(amt:number, size:number):Uint8Array { | ||
const buffer = new ArrayBuffer(size); | ||
@@ -81,4 +82,5 @@ const view = new DataView(buffer); | ||
} | ||
export function uint8ToAmount(buf) { | ||
const hmmm = hex.decode(hex.encode(buf)); // needed to make work ? | ||
export function uint8ToAmount(buf:Uint8Array):number { | ||
const hmmm = hex.decode(hex.encode(buf)) // needed to make work ? | ||
const view = new DataView(hmmm.buffer); | ||
@@ -88,2 +90,15 @@ const amt = view.getUint32(0); | ||
} | ||
*/ | ||
export function amountToBigUint64(amt, size) { | ||
const buffer = new ArrayBuffer(size); | ||
const view = new DataView(buffer); | ||
view.setBigUint64(0, BigInt(amt)); // Max unsigned 32-bit integer | ||
const res = new Uint8Array(view.buffer); | ||
return res; | ||
} | ||
export function bigUint64ToAmount(buf) { | ||
const view = new DataView(buf.buffer, 0, 8); | ||
const amt = view.getBigUint64(0); | ||
return Number(amt); | ||
} | ||
export function parseWithdrawalPayload(network, d1, sbtcWallet, compression) { | ||
@@ -101,3 +116,3 @@ const magicOp = getMagicAndOpCode(d1); | ||
//console.log('parseWithdrawalPayloadNoMagic opcode: ', opcode) | ||
const amountSats = uint8ToAmount(d1.subarray(1, 10)); | ||
const amountSats = bigUint64ToAmount(d1.subarray(1, 10)); | ||
//console.log('parseWithdrawalPayloadNoMagic amountSats: ', amountSats) | ||
@@ -146,3 +161,3 @@ const signature = (hex.encode(d1.subarray(10, 75))); | ||
} | ||
const feeBuf = amountToUint8(revealFee, 8); | ||
const feeBuf = amountToBigUint64(revealFee, 8); | ||
buf1 = concat(buf1, feeBuf); | ||
@@ -156,5 +171,5 @@ if (!opDrop) | ||
const opCodeBuf = hex.decode(PEGOUT_OPCODE); | ||
const amountBuf = amountToUint8(amount, 9); | ||
const amountBuf = amountToBigUint64(amount, 9); | ||
//console.log('parseWithdrawalPayloadNoMagic amountBuf: ', hex.encode(amountBuf)) | ||
//console.log('parseWithdrawalPayloadNoMagic amount: ', uint8ToAmount(amountBuf)) | ||
//console.log('parseWithdrawalPayloadNoMagic amount: ', bigUint64ToAmount(amountBuf)) | ||
let data = concat(opCodeBuf, amountBuf, signature); | ||
@@ -214,3 +229,3 @@ if (!opDrop) | ||
export function getDataToSign(network, amount, sbtcWalletAddress) { | ||
const amtBuf = amountToUint8(amount, 9); | ||
const amtBuf = amountToBigUint64(amount, 9); | ||
const net = (network === 'testnet') ? btc.TEST_NETWORK : btc.NETWORK; | ||
@@ -217,0 +232,0 @@ const script = btc.OutScript.encode(btc.Address(net).decode(sbtcWalletAddress)); |
{ | ||
"name": "sbtc-bridge-lib", | ||
"version": "1.0.24", | ||
"version": "1.0.25", | ||
"description": "Library for sBTC Bridge web client and API apps ", | ||
@@ -5,0 +5,0 @@ "main": "dist/index.js", |
@@ -10,4 +10,4 @@ import { | ||
parseWithdrawalPayload, | ||
amountToUint8, | ||
uint8ToAmount, | ||
amountToBigUint64, | ||
bigUint64ToAmount, | ||
getDataToSign, | ||
@@ -31,4 +31,4 @@ getStacksSimpleHashOfDataToSign, | ||
parseWithdrawalPayload, | ||
amountToUint8, | ||
uint8ToAmount, | ||
amountToBigUint64, | ||
bigUint64ToAmount, | ||
getDataToSign, | ||
@@ -35,0 +35,0 @@ getStacksSimpleHashOfDataToSign, |
@@ -67,3 +67,3 @@ import * as secp from '@noble/secp256k1'; | ||
const rev = d1.subarray(current); | ||
const revealFee = uint8ToAmount(rev); | ||
const revealFee = bigUint64ToAmount(rev); | ||
//console.log('payload rev: ', revealFee) | ||
@@ -87,2 +87,3 @@ | ||
/** | ||
export function amountToUint8(amt:number, size:number):Uint8Array { | ||
@@ -102,2 +103,15 @@ const buffer = new ArrayBuffer(size); | ||
} | ||
*/ | ||
export function amountToBigUint64(amt:number, size:number) { | ||
const buffer = new ArrayBuffer(size); | ||
const view = new DataView(buffer); | ||
view.setBigUint64(0, BigInt(amt)); // Max unsigned 32-bit integer | ||
const res = new Uint8Array(view.buffer); | ||
return res; | ||
} | ||
export function bigUint64ToAmount(buf:Uint8Array):number { | ||
const view = new DataView(buf.buffer, 0, 8); | ||
const amt = view.getBigUint64(0); | ||
return Number(amt); | ||
} | ||
@@ -116,3 +130,3 @@ export function parseWithdrawalPayload(network:string, d1:Uint8Array, sbtcWallet:string, compression:number):withdrawalPayloadType { | ||
//console.log('parseWithdrawalPayloadNoMagic opcode: ', opcode) | ||
const amountSats = uint8ToAmount(d1.subarray(1, 10)); | ||
const amountSats = bigUint64ToAmount(d1.subarray(1, 10)); | ||
//console.log('parseWithdrawalPayloadNoMagic amountSats: ', amountSats) | ||
@@ -162,3 +176,3 @@ const signature = (hex.encode(d1.subarray(10, 75))); | ||
} | ||
const feeBuf = amountToUint8(revealFee, 8) | ||
const feeBuf = amountToBigUint64(revealFee, 8) | ||
buf1 = concat(buf1, feeBuf) | ||
@@ -173,5 +187,5 @@ | ||
const opCodeBuf = hex.decode(PEGOUT_OPCODE); | ||
const amountBuf = amountToUint8(amount, 9); | ||
const amountBuf = amountToBigUint64(amount, 9); | ||
//console.log('parseWithdrawalPayloadNoMagic amountBuf: ', hex.encode(amountBuf)) | ||
//console.log('parseWithdrawalPayloadNoMagic amount: ', uint8ToAmount(amountBuf)) | ||
//console.log('parseWithdrawalPayloadNoMagic amount: ', bigUint64ToAmount(amountBuf)) | ||
let data = concat(opCodeBuf, amountBuf, signature) | ||
@@ -230,3 +244,3 @@ if (!opDrop) data = concat(magicBuf, opCodeBuf, amountBuf, signature); | ||
export function getDataToSign(network:string, amount:number, sbtcWalletAddress:string):Uint8Array { | ||
const amtBuf = amountToUint8(amount, 9); | ||
const amtBuf = amountToBigUint64(amount, 9); | ||
const net = (network === 'testnet') ? btc.TEST_NETWORK : btc.NETWORK; | ||
@@ -233,0 +247,0 @@ const script = btc.OutScript.encode(btc.Address(net).decode(sbtcWalletAddress)) |
import { beforeAll, beforeEach, expect, describe, it } from 'vitest' | ||
import { | ||
parseDepositPayload, buildDepositPayload, | ||
amountToUint8, uint8ToAmount, | ||
amountToBigUint64, bigUint64ToAmount, | ||
buildWithdrawalPayload, parseWithdrawalPayload, | ||
@@ -26,11 +26,11 @@ getStacksSimpleHashOfDataToSign, getStacksAddressFromSignature | ||
// first byte is length | ||
let s = amountToUint8(100, 20) | ||
let y = uint8ToAmount(s) | ||
let s = amountToBigUint64(100, 20) | ||
let y = bigUint64ToAmount(s) | ||
assert(y === 100) | ||
s = amountToUint8(5000, 8) | ||
y = uint8ToAmount(s) | ||
s = amountToBigUint64(5000, 8) | ||
y = bigUint64ToAmount(s) | ||
assert(y === 5000) | ||
y = uint8ToAmount(hex.decode('0000138800000000')) | ||
y = bigUint64ToAmount(hex.decode('0000138800000000')) | ||
assert(y === 5000) | ||
y = uint8ToAmount(hex.decode('00001388')) | ||
y = bigUint64ToAmount(hex.decode('00001388')) | ||
assert(y === 5000) | ||
@@ -37,0 +37,0 @@ }) |
76929
1970