sbtc-bridge-lib
Advanced tools
Comparing version 1.0.96 to 1.0.97
@@ -7,3 +7,3 @@ import * as btc from '@scure/btc-signer'; | ||
/** | ||
* buildOpReturnDepositTransaction:Transaction | ||
* buildDepositTransaction:Transaction | ||
* @param network (devnet|testnet|mainnet) | ||
@@ -16,3 +16,3 @@ * @param uiPayload:DepositPayloadUIType | ||
*/ | ||
export declare function buildOpReturnDepositTransaction(network: string, uiPayload: DepositPayloadUIType, btcFeeRates: any, addressInfo: any): Transaction; | ||
export declare function buildDepositTransaction(network: string, uiPayload: DepositPayloadUIType, btcFeeRates: any, addressInfo: any): Transaction; | ||
/** | ||
@@ -26,3 +26,3 @@ * @param network | ||
*/ | ||
export declare function buildOpDropDepositTransaction(network: string, uiPayload: DepositPayloadUIType, btcFeeRates: any, addressInfo: any, commitTxAddress: string): btc.Transaction; | ||
export declare function buildDepositTransactionOpDrop(network: string, uiPayload: DepositPayloadUIType, btcFeeRates: any, addressInfo: any, commitTxAddress: string): btc.Transaction; | ||
export declare function getOpReturnDepositRequest(network: string, uiPayload: DepositPayloadUIType, originator: string): BridgeTransactionType; | ||
@@ -29,0 +29,0 @@ export declare function getOpDropDepositRequest(network: string, uiPayload: DepositPayloadUIType, originator: string): BridgeTransactionType; |
@@ -5,3 +5,3 @@ import * as btc from '@scure/btc-signer'; | ||
import { hex } from '@scure/base'; | ||
import { toStorable, buildDepositPayload } from './payload_utils.js'; | ||
import { toStorable, buildDepositPayload, buildDepositPayloadOpDrop } from './payload_utils.js'; | ||
import { addInputs, getPegWalletAddressFromPublicKey, inputAmt } from './wallet_utils.js'; | ||
@@ -13,3 +13,3 @@ const concat = P.concatBytes; | ||
/** | ||
* buildOpReturnDepositTransaction:Transaction | ||
* buildDepositTransaction:Transaction | ||
* @param network (devnet|testnet|mainnet) | ||
@@ -22,7 +22,6 @@ * @param uiPayload:DepositPayloadUIType | ||
*/ | ||
export function buildOpReturnDepositTransaction(network, uiPayload, btcFeeRates, addressInfo) { | ||
export function buildDepositTransaction(network, uiPayload, btcFeeRates, addressInfo) { | ||
const net = (network === 'testnet') ? btc.TEST_NETWORK : btc.NETWORK; | ||
const sbtcWalletAddress = getPegWalletAddressFromPublicKey(network, uiPayload.sbtcWalletPublicKey); | ||
//const data = buildDepositPayloadOpReturn(network, uiPayload.principal); | ||
const data = buildDepositPayload(network, 0, uiPayload.principal, false, undefined); | ||
const data = buildDepositPayload(network, uiPayload.principal); | ||
const txFees = calculateDepositFees(network, false, uiPayload.amountSats, btcFeeRates.feeInfo, addressInfo, sbtcWalletAddress, data); | ||
@@ -47,3 +46,3 @@ const tx = new btc.Transaction({ allowUnknowInput: true, allowUnknowOutput: true, allowUnknownInputs: true, allowUnknownOutputs: true }); | ||
*/ | ||
export function buildOpDropDepositTransaction(network, uiPayload, btcFeeRates, addressInfo, commitTxAddress) { | ||
export function buildDepositTransactionOpDrop(network, uiPayload, btcFeeRates, addressInfo, commitTxAddress) { | ||
const net = (network === 'testnet') ? btc.TEST_NETWORK : btc.NETWORK; | ||
@@ -74,3 +73,3 @@ const txFees = calculateDepositFees(network, true, uiPayload.amountSats, btcFeeRates.feeInfo, addressInfo, commitTxAddress, undefined); | ||
const net = (network === 'testnet') ? btc.TEST_NETWORK : btc.NETWORK; | ||
const data = buildData(network, uiPayload.principal, uiPayload.amountSats, true); | ||
const data = buildData(network, uiPayload.principal, uiPayload.amountSats); | ||
const scripts = [ | ||
@@ -94,9 +93,4 @@ { script: btc.Script.encode([data, 'DROP', hex.decode(uiPayload.sbtcWalletPublicKey), 'CHECKSIG']) }, | ||
} | ||
function buildData(network, sigOrPrin, revealFee, opDrop) { | ||
const net = (network === 'testnet') ? btc.TEST_NETWORK : btc.NETWORK; | ||
if (opDrop) { | ||
return buildDepositPayload(net, revealFee, sigOrPrin, opDrop, undefined); | ||
} | ||
return buildDepositPayload(net, revealFee, sigOrPrin, opDrop, undefined); | ||
//Alpha: return buildDepositPayloadOpReturn(net, sigOrPrin); | ||
function buildData(network, sigOrPrin, revealFee) { | ||
return buildDepositPayloadOpDrop(network, sigOrPrin, revealFee); | ||
} | ||
@@ -103,0 +97,0 @@ export function maxCommit(addressInfo) { |
import { getParametersForProof, headerHex, hashPair, getLeafNodeDirectionInMerkleTree, generateMerkleRoot, generateMerkleTree, generateMerkleProof, ensureEven } from './proofs/merkle_utils.js'; | ||
export { getParametersForProof, headerHex, hashPair, getLeafNodeDirectionInMerkleTree, generateMerkleRoot, generateMerkleTree, generateMerkleProof, ensureEven }; | ||
import { MAGIC_BYTES_TESTNET, MAGIC_BYTES_MAINNET, PEGIN_OPCODE, PEGOUT_OPCODE, parseDepositPayload, parsePayloadFromTransaction, buildDepositPayload, buildWithdrawalPayload, parseWithdrawalPayload, amountToBigUint64, bigUint64ToAmount, getDataToSign, getStacksSimpleHashOfDataToSign, getStacksAddressFromSignature, readDepositValue, fromStorable, toStorable } from './payload_utils.js'; | ||
export { MAGIC_BYTES_TESTNET, MAGIC_BYTES_MAINNET, PEGIN_OPCODE, PEGOUT_OPCODE, parseDepositPayload, parsePayloadFromTransaction, buildDepositPayload, buildWithdrawalPayload, parseWithdrawalPayload, amountToBigUint64, bigUint64ToAmount, getDataToSign, getStacksSimpleHashOfDataToSign, getStacksAddressFromSignature, readDepositValue, fromStorable, toStorable }; | ||
import { MAGIC_BYTES_TESTNET, MAGIC_BYTES_MAINNET, PEGIN_OPCODE, PEGOUT_OPCODE, parseDepositPayload, parsePayloadFromTransaction, buildDepositPayload, buildDepositPayloadOpDrop, buildWithdrawalPayload, parseWithdrawalPayload, amountToBigUint64, bigUint64ToAmount, getDataToSign, getStacksSimpleHashOfDataToSign, getStacksAddressFromSignature, readDepositValue, fromStorable, toStorable } from './payload_utils.js'; | ||
export { MAGIC_BYTES_TESTNET, MAGIC_BYTES_MAINNET, PEGIN_OPCODE, PEGOUT_OPCODE, parseDepositPayload, parsePayloadFromTransaction, buildDepositPayload, buildDepositPayloadOpDrop, buildWithdrawalPayload, parseWithdrawalPayload, amountToBigUint64, bigUint64ToAmount, getDataToSign, getStacksSimpleHashOfDataToSign, getStacksAddressFromSignature, readDepositValue, fromStorable, toStorable }; | ||
import { buildRevealOrReclaimTransaction } from './reveal_utils.js'; | ||
export { buildRevealOrReclaimTransaction }; | ||
import { maxCommit, calculateDepositFees, getOpDropDepositRequest, getOpReturnDepositRequest, buildOpReturnDepositTransaction, buildOpDropDepositTransaction } from './deposit_utils.js'; | ||
export { maxCommit, calculateDepositFees, getOpDropDepositRequest, getOpReturnDepositRequest, buildOpReturnDepositTransaction, buildOpDropDepositTransaction }; | ||
import { maxCommit, calculateDepositFees, getOpDropDepositRequest, getOpReturnDepositRequest, buildDepositTransaction, buildDepositTransactionOpDrop } from './deposit_utils.js'; | ||
export { maxCommit, calculateDepositFees, getOpDropDepositRequest, getOpReturnDepositRequest, buildDepositTransaction, buildDepositTransactionOpDrop }; | ||
import { calculateWithdrawFees, getWithdrawScript, getOpDropWithdrawRequest, getOpReturnWithdrawRequest, buildOpDropWithdrawTransaction, buildOpReturnWithdrawTransaction } from './withdraw_utils.js'; | ||
@@ -10,0 +10,0 @@ export { calculateWithdrawFees, getWithdrawScript, getOpDropWithdrawRequest, getOpReturnWithdrawRequest, buildOpDropWithdrawTransaction, buildOpReturnWithdrawTransaction }; |
import { getParametersForProof, headerHex, hashPair, getLeafNodeDirectionInMerkleTree, generateMerkleRoot, generateMerkleTree, generateMerkleProof, ensureEven } from './proofs/merkle_utils.js'; | ||
export { getParametersForProof, headerHex, hashPair, getLeafNodeDirectionInMerkleTree, generateMerkleRoot, generateMerkleTree, generateMerkleProof, ensureEven }; | ||
import { MAGIC_BYTES_TESTNET, MAGIC_BYTES_MAINNET, PEGIN_OPCODE, PEGOUT_OPCODE, parseDepositPayload, parsePayloadFromTransaction, buildDepositPayload, buildWithdrawalPayload, parseWithdrawalPayload, amountToBigUint64, bigUint64ToAmount, getDataToSign, getStacksSimpleHashOfDataToSign, getStacksAddressFromSignature, readDepositValue, fromStorable, toStorable } from './payload_utils.js'; | ||
export { MAGIC_BYTES_TESTNET, MAGIC_BYTES_MAINNET, PEGIN_OPCODE, PEGOUT_OPCODE, parseDepositPayload, parsePayloadFromTransaction, buildDepositPayload, buildWithdrawalPayload, parseWithdrawalPayload, amountToBigUint64, bigUint64ToAmount, getDataToSign, getStacksSimpleHashOfDataToSign, getStacksAddressFromSignature, readDepositValue, fromStorable, toStorable }; | ||
import { MAGIC_BYTES_TESTNET, MAGIC_BYTES_MAINNET, PEGIN_OPCODE, PEGOUT_OPCODE, parseDepositPayload, parsePayloadFromTransaction, buildDepositPayload, buildDepositPayloadOpDrop, buildWithdrawalPayload, parseWithdrawalPayload, amountToBigUint64, bigUint64ToAmount, getDataToSign, getStacksSimpleHashOfDataToSign, getStacksAddressFromSignature, readDepositValue, fromStorable, toStorable } from './payload_utils.js'; | ||
export { MAGIC_BYTES_TESTNET, MAGIC_BYTES_MAINNET, PEGIN_OPCODE, PEGOUT_OPCODE, parseDepositPayload, parsePayloadFromTransaction, buildDepositPayload, buildDepositPayloadOpDrop, buildWithdrawalPayload, parseWithdrawalPayload, amountToBigUint64, bigUint64ToAmount, getDataToSign, getStacksSimpleHashOfDataToSign, getStacksAddressFromSignature, readDepositValue, fromStorable, toStorable }; | ||
import { buildRevealOrReclaimTransaction } from './reveal_utils.js'; | ||
export { buildRevealOrReclaimTransaction }; | ||
import { maxCommit, calculateDepositFees, getOpDropDepositRequest, getOpReturnDepositRequest, buildOpReturnDepositTransaction, buildOpDropDepositTransaction } from './deposit_utils.js'; | ||
export { maxCommit, calculateDepositFees, getOpDropDepositRequest, getOpReturnDepositRequest, buildOpReturnDepositTransaction, buildOpDropDepositTransaction }; | ||
import { maxCommit, calculateDepositFees, getOpDropDepositRequest, getOpReturnDepositRequest, buildDepositTransaction, buildDepositTransactionOpDrop } from './deposit_utils.js'; | ||
export { maxCommit, calculateDepositFees, getOpDropDepositRequest, getOpReturnDepositRequest, buildDepositTransaction, buildDepositTransactionOpDrop }; | ||
import { calculateWithdrawFees, getWithdrawScript, getOpDropWithdrawRequest, getOpReturnWithdrawRequest, buildOpDropWithdrawTransaction, buildOpReturnWithdrawTransaction } from './withdraw_utils.js'; | ||
@@ -10,0 +10,0 @@ export { calculateWithdrawFees, getWithdrawScript, getOpDropWithdrawRequest, getOpReturnWithdrawRequest, buildOpDropWithdrawTransaction, buildOpReturnWithdrawTransaction }; |
@@ -23,22 +23,7 @@ import type { PayloadType } from './types/sbtc_types.js'; | ||
} | ||
export declare function buildDepositPayload(network: string, stacksAddress: string): Uint8Array; | ||
export declare function buildDepositPayloadOpDrop(network: string, stacksAddress: string, revealFee: number): Uint8Array; | ||
/** | ||
* | ||
* @param net | ||
* @param address | ||
* @returns | ||
*/ | ||
export declare function buildDepositPayloadOpReturn(net: any, address: string): Uint8Array; | ||
/** | ||
* | ||
* @param net | ||
* @param amountSats | ||
* @param address | ||
* @param opDrop | ||
* @param memo | ||
* @returns | ||
*/ | ||
export declare function buildDepositPayload(net: any, amountSats: number, address: string, opDrop: boolean, memo: string | undefined): Uint8Array; | ||
/** | ||
* | ||
* @param net | ||
* @param amount | ||
@@ -45,0 +30,0 @@ * @param signature |
@@ -174,30 +174,10 @@ import * as secp from '@noble/secp256k1'; | ||
})(PrincipalType || (PrincipalType = {})); | ||
/** | ||
* | ||
* @param net | ||
* @param address | ||
* @returns | ||
*/ | ||
export function buildDepositPayloadOpReturn(net, address) { | ||
const magicBuf = (typeof net === 'object' && net.bech32 === 'tb') ? hex.decode(MAGIC_BYTES_TESTNET) : hex.decode(MAGIC_BYTES_MAINNET); | ||
const opCodeBuf = hex.decode(PEGIN_OPCODE); | ||
const addr = c32addressDecode(address.split('.')[0]); | ||
const addr0Buf = hex.decode(addr[0].toString(16)); | ||
const addr1Buf = hex.decode(addr[1]); | ||
const cnameLength = new Uint8Array(1); | ||
const principalType = (address.indexOf('.') > -1) ? hex.decode(PrincipalType.CONTRACT.valueOf()) : hex.decode(PrincipalType.STANDARD.valueOf()); | ||
let buf1 = concat(opCodeBuf, addr0Buf, addr1Buf); | ||
if (address.indexOf('.') > -1) { | ||
const cnameBuf = new TextEncoder().encode(address.split('.')[1]); | ||
const cnameLen = hex.decode(cnameBuf.length.toString(8)); | ||
if (cnameBuf.length > 40) | ||
throw new Error('Contract name is too long - max 40 characters'); | ||
buf1 = concat(buf1, cnameLen, cnameBuf); | ||
} | ||
else { | ||
cnameLength.fill(0); | ||
buf1 = concat(buf1, cnameLength); | ||
} | ||
return concat(magicBuf, buf1); | ||
export function buildDepositPayload(network, stacksAddress) { | ||
const net = (network === 'testnet') ? btc.TEST_NETWORK : btc.NETWORK; | ||
return buildDepositPayloadInternal(net, 0, stacksAddress, false); | ||
} | ||
export function buildDepositPayloadOpDrop(network, stacksAddress, revealFee) { | ||
const net = (network === 'testnet') ? btc.TEST_NETWORK : btc.NETWORK; | ||
return buildDepositPayloadInternal(net, revealFee, stacksAddress, true); | ||
} | ||
/** | ||
@@ -212,3 +192,3 @@ * | ||
*/ | ||
export function buildDepositPayload(net, amountSats, address, opDrop, memo) { | ||
function buildDepositPayloadInternal(net, amountSats, address, opDrop) { | ||
const magicBuf = (typeof net === 'object' && net.bech32 === 'tb') ? hex.decode(MAGIC_BYTES_TESTNET) : hex.decode(MAGIC_BYTES_MAINNET); | ||
@@ -215,0 +195,0 @@ const opCodeBuf = hex.decode(PEGIN_OPCODE); |
@@ -5,3 +5,3 @@ import * as secp from '@noble/secp256k1'; | ||
import * as P from 'micro-packed'; | ||
import { buildDepositPayload } from './payload_utils.js'; | ||
import { buildDepositPayloadOpDrop } from './payload_utils.js'; | ||
const concat = P.concatBytes; | ||
@@ -41,3 +41,3 @@ const privKey = hex.decode('0101010101010101010101010101010101010101010101010101010101010101'); | ||
throw new Error('No confirmed UTXOs'); | ||
const data = buildDepositPayload(net, 1000, 'ST1NXBK3K5YYMD6FD41MVNP3JS1GABZ8TRVX023PT', true, undefined); | ||
const data = buildDepositPayloadOpDrop(network, 'ST1NXBK3K5YYMD6FD41MVNP3JS1GABZ8TRVX023PT', 1000); | ||
tx.addOutput({ script: btc.Script.encode(['RETURN', data]), amount: BigInt(0) }); | ||
@@ -44,0 +44,0 @@ //tx.addOutput({ script: btc.OutScript.encode(btc.Address(net).decode(payeeAddress)), amount }); |
{ | ||
"name": "sbtc-bridge-lib", | ||
"version": "1.0.96", | ||
"version": "1.0.97", | ||
"description": "Library for sBTC Bridge web client and API apps ", | ||
@@ -5,0 +5,0 @@ "main": "dist/index.js", |
@@ -39,3 +39,3 @@ # SBTC SDK Documentation | ||
##### buildOpReturnDepositTransaction | ||
##### buildDepositTransaction | ||
@@ -51,3 +51,3 @@ Builds the PSBT the user signs to initiate deposit via op_return | ||
##### buildOpDropDepositTransaction | ||
##### buildDepositTransactionOpDrop | ||
@@ -93,7 +93,13 @@ Builds the PSBT the user signs to initiate deposit via op_drop | ||
- @param network | ||
- @param stacksAddress | ||
- @returns Uint8Array | ||
##### buildDepositPayloadOpDrop | ||
Builds the data to be transmitted in a deposit request via op_drop mechanism | ||
- @param net | ||
- @param amountSats | ||
- @param address | ||
- @param opDrop | ||
- @param memo | ||
- @param stacksAddress | ||
- @param revealFee | ||
- @returns Uint8Array | ||
@@ -100,0 +106,0 @@ |
@@ -7,3 +7,3 @@ import * as btc from '@scure/btc-signer'; | ||
import type { BridgeTransactionType, DepositPayloadUIType, UTXO } from './types/sbtc_types.js' | ||
import { toStorable, buildDepositPayload } from './payload_utils.js' | ||
import { toStorable, buildDepositPayload, buildDepositPayloadOpDrop } from './payload_utils.js' | ||
import { addInputs, getPegWalletAddressFromPublicKey, inputAmt } from './wallet_utils.js'; | ||
@@ -18,3 +18,3 @@ | ||
/** | ||
* buildOpReturnDepositTransaction:Transaction | ||
* buildDepositTransaction:Transaction | ||
* @param network (devnet|testnet|mainnet) | ||
@@ -27,7 +27,6 @@ * @param uiPayload:DepositPayloadUIType | ||
*/ | ||
export function buildOpReturnDepositTransaction(network:string, uiPayload:DepositPayloadUIType, btcFeeRates:any, addressInfo:any):Transaction { | ||
export function buildDepositTransaction(network:string, uiPayload:DepositPayloadUIType, btcFeeRates:any, addressInfo:any):Transaction { | ||
const net = (network === 'testnet') ? btc.TEST_NETWORK : btc.NETWORK; | ||
const sbtcWalletAddress = getPegWalletAddressFromPublicKey(network, uiPayload.sbtcWalletPublicKey) | ||
//const data = buildDepositPayloadOpReturn(network, uiPayload.principal); | ||
const data = buildDepositPayload(network, 0, uiPayload.principal, false, undefined); | ||
const data = buildDepositPayload(network, uiPayload.principal); | ||
@@ -53,3 +52,3 @@ const txFees = calculateDepositFees(network, false, uiPayload.amountSats, btcFeeRates.feeInfo, addressInfo, sbtcWalletAddress!, data) | ||
*/ | ||
export function buildOpDropDepositTransaction (network:string, uiPayload:DepositPayloadUIType, btcFeeRates:any, addressInfo:any, commitTxAddress:string) { | ||
export function buildDepositTransactionOpDrop (network:string, uiPayload:DepositPayloadUIType, btcFeeRates:any, addressInfo:any, commitTxAddress:string) { | ||
const net = (network === 'testnet') ? btc.TEST_NETWORK : btc.NETWORK; | ||
@@ -82,3 +81,3 @@ const txFees = calculateDepositFees(network, true, uiPayload.amountSats, btcFeeRates.feeInfo, addressInfo, commitTxAddress, undefined) | ||
const data = buildData(network, uiPayload.principal, uiPayload.amountSats, true); | ||
const data = buildData(network, uiPayload.principal, uiPayload.amountSats); | ||
const scripts = [ | ||
@@ -103,9 +102,4 @@ { script: btc.Script.encode([data, 'DROP', hex.decode(uiPayload.sbtcWalletPublicKey), 'CHECKSIG']) }, | ||
function buildData (network:string, sigOrPrin:string, revealFee:number, opDrop:boolean):Uint8Array { | ||
const net = (network === 'testnet') ? btc.TEST_NETWORK : btc.NETWORK; | ||
if (opDrop) { | ||
return buildDepositPayload(net, revealFee, sigOrPrin, opDrop, undefined); | ||
} | ||
return buildDepositPayload(net, revealFee, sigOrPrin, opDrop, undefined); | ||
//Alpha: return buildDepositPayloadOpReturn(net, sigOrPrin); | ||
function buildData (network:string, sigOrPrin:string, revealFee:number):Uint8Array { | ||
return buildDepositPayloadOpDrop(network, sigOrPrin, revealFee); | ||
} | ||
@@ -112,0 +106,0 @@ |
@@ -29,2 +29,3 @@ import { | ||
buildDepositPayload, | ||
buildDepositPayloadOpDrop, | ||
buildWithdrawalPayload, | ||
@@ -49,2 +50,3 @@ parseWithdrawalPayload, | ||
buildDepositPayload, | ||
buildDepositPayloadOpDrop, | ||
buildWithdrawalPayload, | ||
@@ -73,4 +75,4 @@ parseWithdrawalPayload, | ||
getOpReturnDepositRequest, | ||
buildOpReturnDepositTransaction, | ||
buildOpDropDepositTransaction | ||
buildDepositTransaction, | ||
buildDepositTransactionOpDrop | ||
} from './deposit_utils.js' | ||
@@ -82,4 +84,4 @@ export { | ||
getOpReturnDepositRequest, | ||
buildOpReturnDepositTransaction, | ||
buildOpDropDepositTransaction | ||
buildDepositTransaction, | ||
buildDepositTransactionOpDrop | ||
} | ||
@@ -86,0 +88,0 @@ |
@@ -195,29 +195,10 @@ import * as secp from '@noble/secp256k1'; | ||
/** | ||
* | ||
* @param net | ||
* @param address | ||
* @returns | ||
*/ | ||
export function buildDepositPayloadOpReturn(net:any, address:string):Uint8Array { | ||
const magicBuf = (typeof net === 'object' && net.bech32 === 'tb') ? hex.decode(MAGIC_BYTES_TESTNET) : hex.decode(MAGIC_BYTES_MAINNET); | ||
const opCodeBuf = hex.decode(PEGIN_OPCODE); | ||
const addr = c32addressDecode(address.split('.')[0]) | ||
const addr0Buf = hex.decode(addr[0].toString(16)); | ||
const addr1Buf = hex.decode(addr[1]); | ||
export function buildDepositPayload(network:string, stacksAddress:string) { | ||
const net = (network === 'testnet') ? btc.TEST_NETWORK : btc.NETWORK; | ||
return buildDepositPayloadInternal(net, 0, stacksAddress, false) | ||
} | ||
const cnameLength = new Uint8Array(1); | ||
const principalType = (address.indexOf('.') > -1) ? hex.decode(PrincipalType.CONTRACT.valueOf()) : hex.decode(PrincipalType.STANDARD.valueOf()); | ||
let buf1 = concat(opCodeBuf, addr0Buf, addr1Buf); | ||
if (address.indexOf('.') > -1) { | ||
const cnameBuf = new TextEncoder().encode(address.split('.')[1]); | ||
const cnameLen = hex.decode(cnameBuf.length.toString(8)); | ||
if (cnameBuf.length > 40) throw new Error('Contract name is too long - max 40 characters') | ||
buf1 = concat(buf1, cnameLen, cnameBuf); | ||
} else { | ||
cnameLength.fill(0); | ||
buf1 = concat(buf1, cnameLength); | ||
} | ||
return concat(magicBuf, buf1) | ||
export function buildDepositPayloadOpDrop(network:string, stacksAddress:string, revealFee:number) { | ||
const net = (network === 'testnet') ? btc.TEST_NETWORK : btc.NETWORK; | ||
return buildDepositPayloadInternal(net, revealFee, stacksAddress, true) | ||
} | ||
@@ -234,3 +215,3 @@ | ||
*/ | ||
export function buildDepositPayload(net:any, amountSats:number, address:string, opDrop:boolean, memo:string|undefined):Uint8Array { | ||
function buildDepositPayloadInternal(net:any, amountSats:number, address:string, opDrop:boolean):Uint8Array { | ||
const magicBuf = (typeof net === 'object' && net.bech32 === 'tb') ? hex.decode(MAGIC_BYTES_TESTNET) : hex.decode(MAGIC_BYTES_MAINNET); | ||
@@ -237,0 +218,0 @@ const opCodeBuf = hex.decode(PEGIN_OPCODE); |
@@ -5,3 +5,3 @@ import * as secp from '@noble/secp256k1'; | ||
import * as P from 'micro-packed'; | ||
import { buildDepositPayload } from './payload_utils.js' | ||
import { buildDepositPayloadOpDrop } from './payload_utils.js' | ||
@@ -48,3 +48,3 @@ const concat = P.concatBytes; | ||
if (tx.inputsLength === 0) throw new Error('No confirmed UTXOs') | ||
const data = buildDepositPayload(net, 1000, 'ST1NXBK3K5YYMD6FD41MVNP3JS1GABZ8TRVX023PT', true, undefined); | ||
const data = buildDepositPayloadOpDrop(network, 'ST1NXBK3K5YYMD6FD41MVNP3JS1GABZ8TRVX023PT', 1000); | ||
tx.addOutput({ script: btc.Script.encode(['RETURN', data]), amount: BigInt(0) }); | ||
@@ -51,0 +51,0 @@ //tx.addOutput({ script: btc.OutScript.encode(btc.Address(net).decode(payeeAddress)), amount }); |
import { beforeAll, beforeEach, expect, describe, it } from 'vitest' | ||
import { | ||
parseDepositPayload, buildDepositPayload, PayloadType | ||
parseDepositPayload, buildDepositPayloadOpDrop, buildDepositPayload, PayloadType | ||
} from '../src/index'; | ||
@@ -52,3 +52,3 @@ import { base58, hex } from '@scure/base'; | ||
it.concurrent('Check parsing and building deposit simple payload', async () => { | ||
const payloadUint8 = buildDepositPayload(btc.TEST_NETWORK, 5000, 'ST3N4AJFZZYC4BK99H53XP8KDGXFGQ2PRSPNET8TN', true, undefined); | ||
const payloadUint8 = buildDepositPayloadOpDrop('testnet', 'ST3N4AJFZZYC4BK99H53XP8KDGXFGQ2PRSPNET8TN', 5000); | ||
const payload = hex.encode(payloadUint8) | ||
@@ -72,3 +72,3 @@ expect(payload).equals('3c051aea4549ffff9845cd298947db226d875f0b8ad8cd000000000000001388') | ||
it.concurrent('Check parsing and building deposit with stacks principal', async () => { | ||
const payload = buildDepositPayload(btc.TEST_NETWORK, 123456675456, 'ST1R1061ZT6KPJXQ7PAXPFB6ZAZ6ZWW28G8HXK9G5', true, undefined); | ||
const payload = buildDepositPayloadOpDrop('testnet', 'ST1R1061ZT6KPJXQ7PAXPFB6ZAZ6ZWW28G8HXK9G5', 123456675456); | ||
console.log('Check parsing and building deposit with contract payload: ', hex.encode(payload)) | ||
@@ -90,3 +90,3 @@ const parsedPayload = parseDepositPayload(payload); | ||
it.concurrent('Check parse and build op_drop', async () => { | ||
const payload = buildDepositPayload(btc.TEST_NETWORK, 5000, 'ST1R1061ZT6KPJXQ7PAXPFB6ZAZ6ZWW28G8HXK9G5.contract-alpha', true, undefined); | ||
const payload = buildDepositPayloadOpDrop('testnet', 'ST1R1061ZT6KPJXQ7PAXPFB6ZAZ6ZWW28G8HXK9G5.contract-alpha', 5000); | ||
console.log('Check parsing and building deposit with contract payload: ', hex.encode(payload)) | ||
@@ -108,3 +108,3 @@ const parsedPayload = parseDepositPayload(payload); | ||
it.concurrent('Check parse and build op_return', async () => { | ||
const payload = buildDepositPayload(btc.TEST_NETWORK, 5000, 'ST1R1061ZT6KPJXQ7PAXPFB6ZAZ6ZWW28G8HXK9G5.contract-alpha', false, undefined); | ||
const payload = buildDepositPayload('testnet', 'ST1R1061ZT6KPJXQ7PAXPFB6ZAZ6ZWW28G8HXK9G5.contract-alpha'); | ||
console.log('Check parsing and building deposit with contract payload: ', hex.encode(payload)) | ||
@@ -126,3 +126,3 @@ const parsedPayload = parseDepositPayload(payload); | ||
it.concurrent('Check parsing and building deposit with contract and memo payload', async () => { | ||
const payload = buildDepositPayload(btc.TEST_NETWORK, 5000, 'ST1R1061ZT6KPJXQ7PAXPFB6ZAZ6ZWW28G8HXK9G5.contract', true, 'indefined'); | ||
const payload = buildDepositPayloadOpDrop('testnet', 'ST1R1061ZT6KPJXQ7PAXPFB6ZAZ6ZWW28G8HXK9G5.contract', 5000); | ||
const parsedPayload = parseDepositPayload(payload); | ||
@@ -129,0 +129,0 @@ deepStrictEqual(parsedPayload, { |
import { beforeAll, beforeEach, expect, describe, it } from 'vitest' | ||
import { | ||
parseDepositPayload, buildDepositPayload, | ||
amountToBigUint64, bigUint64ToAmount, | ||
buildWithdrawalPayload, parseWithdrawalPayload, | ||
getStacksSimpleHashOfDataToSign, getStacksAddressFromSignature, PayloadType, parsePayloadFromTransaction, getDataToSign | ||
PayloadType, parsePayloadFromTransaction | ||
} from '../src/index'; | ||
import { sbtcWallets } from '../src/index'; | ||
import { hex } from '@scure/base'; | ||
import { commit1 } from './payload.data'; | ||
import { fail, deepStrictEqual } from 'assert'; | ||
import assert from 'assert'; | ||
import * as btc from '@scure/btc-signer'; | ||
import * as secp from '@noble/secp256k1'; | ||
import { dust } from '../src/withdraw_utils'; | ||
import { getStacksAddressFromPubkey } from '../src/payload_utils'; | ||
@@ -17,0 +11,0 @@ |
201
217079
42
5190