From 6e08273ebab36edd6e538dec64b65ab4102386db Mon Sep 17 00:00:00 2001 From: ltardivo Date: Fri, 12 Apr 2024 17:29:32 -0300 Subject: [PATCH 1/7] Fixes .dockerignore to exclude packages --- .dockerignore | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/.dockerignore b/.dockerignore index dc6c49ca2..853f13566 100644 --- a/.dockerignore +++ b/.dockerignore @@ -10,23 +10,21 @@ packages/node/test packages/node/*.log packages/node/scripts/__pycache__ +packages/lib/*.log + packages/chat -packages/components/ +packages/components packages/cra-template packages/docs packages/explorer packages/nft packages/nodejs-template packages/secp256k1 -packages/swap -packages/TBC20/ -packages/TBC20-app -packages/TBC404 -packages/TBC404-app -packages/TBC721/ -packages/TBC721-app +packages/swap/ +packages/TBC*/ packages/wallet packages/website +.env Dockerfile .dockerignore \ No newline at end of file From 54b8b89deb99006b541d1d2b591ca2608a424881 Mon Sep 17 00:00:00 2001 From: ltardivo Date: Fri, 12 Apr 2024 17:39:09 -0300 Subject: [PATCH 2/7] Adds functions script.fromPublicKey and address.fromPublicKey --- packages/nakamotojs/src/address.d.ts | 1 + packages/nakamotojs/src/address.js | 14 +++ packages/nakamotojs/src/networks.d.ts | 1 + packages/nakamotojs/src/networks.js | 8 ++ packages/nakamotojs/src/script.d.ts | 2 + packages/nakamotojs/src/script.js | 21 ++++ packages/nakamotojs/test/address.spec.ts | 53 +++++---- .../nakamotojs/test/fixtures/address.json | 106 +++++++++++++++++- packages/nakamotojs/test/fixtures/script.json | 13 ++- packages/nakamotojs/test/script.spec.ts | 29 +++++ packages/nakamotojs/ts_src/address.ts | 21 ++++ packages/nakamotojs/ts_src/networks.ts | 9 ++ packages/nakamotojs/ts_src/script.ts | 29 +++++ 13 files changed, 277 insertions(+), 30 deletions(-) diff --git a/packages/nakamotojs/src/address.d.ts b/packages/nakamotojs/src/address.d.ts index 7790100f4..cadb368da 100644 --- a/packages/nakamotojs/src/address.d.ts +++ b/packages/nakamotojs/src/address.d.ts @@ -16,3 +16,4 @@ export declare function toBase58Check(hash: Buffer, version: number): string; export declare function toBech32(data: Buffer, version: number, prefix: string): string; export declare function fromOutputScript(output: Buffer, network?: Network): string; export declare function toOutputScript(address: string, network?: Network): Buffer; +export declare function fromPublicKey(publicKey: Buffer, type: string, network?: Network): string; diff --git a/packages/nakamotojs/src/address.js b/packages/nakamotojs/src/address.js index ea53294c6..12459344d 100644 --- a/packages/nakamotojs/src/address.js +++ b/packages/nakamotojs/src/address.js @@ -2,6 +2,7 @@ import * as networks from './networks.js'; import * as payments from './payments/index.js'; import * as bscript from './script.js'; import { typeforce, tuple, Hash160bit, UInt8 } from './types.js'; +import { toXOnly } from './psbt/bip371.js'; import { bech32, bech32m } from 'bech32'; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore @@ -145,3 +146,16 @@ export function toOutputScript(address, network) { } throw new Error(address + ' has no matching Script'); } +export function fromPublicKey(publicKey, type, network) { + network = network || networks.bitcoin; + if (type === 'p2pkh') + return payments.p2pkh({ pubkey: publicKey, network }).address; + if (type === 'p2wpkh') + return payments.p2wpkh({ pubkey: publicKey, network }).address; + if (type === 'p2tr') + return payments.p2tr({ + internalPubkey: toXOnly(publicKey), + network, + }).address; + throw new Error('Unknown or unsupported type'); +} diff --git a/packages/nakamotojs/src/networks.d.ts b/packages/nakamotojs/src/networks.d.ts index 9c28d43a3..da39a7d39 100644 --- a/packages/nakamotojs/src/networks.d.ts +++ b/packages/nakamotojs/src/networks.d.ts @@ -16,4 +16,5 @@ export declare const testnet: Network; export declare const litecoin: Network; export declare const litecoinregtest: Network; export declare const litecointestnet: Network; +export declare const NETWORKS: any; export {}; diff --git a/packages/nakamotojs/src/networks.js b/packages/nakamotojs/src/networks.js index d50df817c..288bb802a 100644 --- a/packages/nakamotojs/src/networks.js +++ b/packages/nakamotojs/src/networks.js @@ -64,3 +64,11 @@ export const litecointestnet = { scriptHash: 0x3a, wif: 0xef, }; +export const NETWORKS = Object.assign({ + litecoin, + bitcoin, + regtest, + testnet, + litecoinregtest, + litecointestnet, +}); diff --git a/packages/nakamotojs/src/script.d.ts b/packages/nakamotojs/src/script.d.ts index 4f9123631..b6a50d413 100644 --- a/packages/nakamotojs/src/script.d.ts +++ b/packages/nakamotojs/src/script.d.ts @@ -1,5 +1,6 @@ /// import { OPS } from './ops.js'; +import { Network } from './networks.js'; import { Stack } from './payments/index.js'; import * as scriptNumber from './script_number.js'; import * as scriptSignature from './script_signature.js'; @@ -11,6 +12,7 @@ export declare function compile(chunks: Buffer | Stack): Buffer; export declare function decompile(buffer: Buffer | Array): Array | null; export declare function toASM(chunks: Buffer | Array): string; export declare function fromASM(asm: string): Buffer; +export declare function fromPublicKey(publicKey: Buffer, type: string, network?: Network): Buffer; export declare function toStack(chunks: Buffer | Array): Buffer[]; export declare function isCanonicalPubKey(buffer: Buffer): boolean; export declare function isDefinedHashType(hashType: number): boolean; diff --git a/packages/nakamotojs/src/script.js b/packages/nakamotojs/src/script.js index 37d51f668..78b44d0da 100644 --- a/packages/nakamotojs/src/script.js +++ b/packages/nakamotojs/src/script.js @@ -1,5 +1,8 @@ import * as bip66 from './bip66.js'; import { OPS, REVERSE_OPS } from './ops.js'; +import { toXOnly } from './psbt/bip371.js'; +import * as networks from './networks.js'; +import * as payments from './payments/index.js'; import * as pushdata from './push_data.js'; import * as scriptNumber from './script_number.js'; import * as scriptSignature from './script_signature.js'; @@ -142,6 +145,24 @@ export function fromASM(asm) { }), ); } +export function fromPublicKey(publicKey, type, network) { + network = network || networks.bitcoin; + if (type === 'p2pkh') + return payments.p2pkh({ pubkey: publicKey, network }).output; + if (type === 'p2wpkh') + return payments.p2wpkh({ pubkey: publicKey, network }).output; + if (type === 'p2tr') + return payments.p2tr({ + internalPubkey: toXOnly(publicKey), + network, + }).output; + if (type === 'p2pk') + return payments.p2pk({ + pubkey: publicKey, + network, + }).output; + throw new Error('Unknown or unsupported script type'); +} export function toStack(chunks) { chunks = decompile(chunks); typeforce(isPushOnly, chunks); diff --git a/packages/nakamotojs/test/address.spec.ts b/packages/nakamotojs/test/address.spec.ts index cf3229b6d..97ff96a5a 100644 --- a/packages/nakamotojs/test/address.spec.ts +++ b/packages/nakamotojs/test/address.spec.ts @@ -5,14 +5,7 @@ import { describe, it } from 'mocha'; import * as ecc from '@bitcoin-computer/tiny-secp256k1'; import * as baddress from '../src/address.js'; import * as bscript from '../src/script.js'; -import { - bitcoin, - regtest, - testnet, - litecoin, - litecoinregtest, - litecointestnet, -} from '../src/networks.js'; +import { NETWORKS } from '../src/networks.js'; import * as fixturesModule from './fixtures/address.json' assert { type: 'json' }; const fixtures: typeof import('./fixtures/address.json') = @@ -21,25 +14,6 @@ const fixtures: typeof import('./fixtures/address.json') = import { initEccLib } from '../src/index.js'; -const NETWORKS = Object.assign({ - litecoin: { - messagePrefix: '\x19Litecoin Signed Message:\n', - bip32: { - public: 0x019da462, - private: 0x019d9cfe, - }, - pubKeyHash: 0x30, - scriptHash: 0x32, - wif: 0xb0, - }, - bitcoin, - regtest, - testnet, - litecoinregtest, - litecointestnet, -}); -NETWORKS.litecoin = litecoin; - describe('address', () => { describe('fromBase58Check', () => { fixtures.standard.forEach(f => { @@ -170,4 +144,29 @@ describe('address', () => { }); }); }); + + describe('fromPublicKey', () => { + fixtures.valid.forEach(f => { + f.types.forEach(t => { + if (!t.address) return; + it( + 'decodes ' + + f.publicKey.slice(0, 10) + + '... (' + + f.network + + ') to ' + + t.scriptType, + () => { + const addr = baddress.fromPublicKey( + Buffer.from(f.publicKey, 'hex'), + t.scriptType, + NETWORKS[f.network], + ); + + assert.strictEqual(addr, t.address); + }, + ); + }); + }); + }); }); diff --git a/packages/nakamotojs/test/fixtures/address.json b/packages/nakamotojs/test/fixtures/address.json index 0430b7887..279a1238a 100644 --- a/packages/nakamotojs/test/fixtures/address.json +++ b/packages/nakamotojs/test/fixtures/address.json @@ -326,5 +326,107 @@ "paymentException": "TypeError: Invalid pubkey for p2tr" } ] - } -} + }, + "valid": [ + { + "network": "bitcoin", + "publicKey": "029143dbd1a870e4498901c35d800671f20e21f1aec3c1df014c7f8cb74e72cdf9", + "types": [ + { + "scriptType": "p2pkh", + "address": "1FU7tCdYESrudBsELdFMY7EiM8iv7hc434", + "script": "OP_DUP OP_HASH160 9eb2bcc5576fefd4e555ad31fa5f7a3f4c94bf5f OP_EQUALVERIFY OP_CHECKSIG" + }, + { + "scriptType": "p2wpkh", + "address": "bc1qn6ete32hdlhafe2445cl5hm68axff06lyyzw4f", + "script": "OP_0 9eb2bcc5576fefd4e555ad31fa5f7a3f4c94bf5f" + }, + { + "scriptType": "p2tr", + "address": "bc1p9f2jgradpf2s2jdsue2lmfja55daktft3j5zxcyl7rrl7q63cm5s7g6thy", + "script": "OP_1 2a55240fad0a550549b0e655fda65da51bdb2d2b8ca823609ff0c7ff0351c6e9" + }, + { + "scriptType": "p2pk", + "script": "029143dbd1a870e4498901c35d800671f20e21f1aec3c1df014c7f8cb74e72cdf9 OP_CHECKSIG" + } + ] + }, + { + "network": "litecoin", + "publicKey": "029143dbd1a870e4498901c35d800671f20e21f1aec3c1df014c7f8cb74e72cdf9", + "types": [ + { + "scriptType": "p2pkh", + "address": "LZh59QwNK76xszZPWmEep8JUZM6CGy6mx3", + "script": "OP_DUP OP_HASH160 9eb2bcc5576fefd4e555ad31fa5f7a3f4c94bf5f OP_EQUALVERIFY OP_CHECKSIG" + }, + { + "scriptType": "p2wpkh", + "address": "ltc1qn6ete32hdlhafe2445cl5hm68axff06lqcc2de", + "script": "OP_0 9eb2bcc5576fefd4e555ad31fa5f7a3f4c94bf5f" + }, + { + "scriptType": "p2tr", + "address": "ltc1p9f2jgradpf2s2jdsue2lmfja55daktft3j5zxcyl7rrl7q63cm5sav5mdp", + "script": "OP_1 2a55240fad0a550549b0e655fda65da51bdb2d2b8ca823609ff0c7ff0351c6e9" + }, + { + "scriptType": "p2pk", + "script": "029143dbd1a870e4498901c35d800671f20e21f1aec3c1df014c7f8cb74e72cdf9 OP_CHECKSIG" + } + ] + }, + { + "network": "testnet", + "publicKey": "029143dbd1a870e4498901c35d800671f20e21f1aec3c1df014c7f8cb74e72cdf9", + "types": [ + { + "scriptType": "p2pkh", + "address": "muz5BFiX3UJAQJLr4CDjN2T3D8KczqP7p7", + "script": "OP_DUP OP_HASH160 9eb2bcc5576fefd4e555ad31fa5f7a3f4c94bf5f OP_EQUALVERIFY OP_CHECKSIG" + }, + { + "scriptType": "p2wpkh", + "address": "tb1qn6ete32hdlhafe2445cl5hm68axff06lwzeaw6", + "script": "OP_0 9eb2bcc5576fefd4e555ad31fa5f7a3f4c94bf5f" + }, + { + "scriptType": "p2tr", + "address": "tb1p9f2jgradpf2s2jdsue2lmfja55daktft3j5zxcyl7rrl7q63cm5sfqvydt", + "script": "OP_1 2a55240fad0a550549b0e655fda65da51bdb2d2b8ca823609ff0c7ff0351c6e9" + }, + { + "scriptType": "p2pk", + "script": "029143dbd1a870e4498901c35d800671f20e21f1aec3c1df014c7f8cb74e72cdf9 OP_CHECKSIG" + } + ] + }, + { + "network": "litecointestnet", + "publicKey": "029143dbd1a870e4498901c35d800671f20e21f1aec3c1df014c7f8cb74e72cdf9", + "types": [ + { + "scriptType": "p2pkh", + "address": "muz5BFiX3UJAQJLr4CDjN2T3D8KczqP7p7", + "script": "OP_DUP OP_HASH160 9eb2bcc5576fefd4e555ad31fa5f7a3f4c94bf5f OP_EQUALVERIFY OP_CHECKSIG" + }, + { + "scriptType": "p2wpkh", + "address": "tltc1qn6ete32hdlhafe2445cl5hm68axff06lh2mr7n", + "script": "OP_0 9eb2bcc5576fefd4e555ad31fa5f7a3f4c94bf5f" + }, + { + "scriptType": "p2tr", + "address": "tltc1p9f2jgradpf2s2jdsue2lmfja55daktft3j5zxcyl7rrl7q63cm5skrs9j5", + "script": "OP_1 2a55240fad0a550549b0e655fda65da51bdb2d2b8ca823609ff0c7ff0351c6e9" + }, + { + "scriptType": "p2pk", + "script": "029143dbd1a870e4498901c35d800671f20e21f1aec3c1df014c7f8cb74e72cdf9 OP_CHECKSIG" + } + ] + } + ] +} \ No newline at end of file diff --git a/packages/nakamotojs/test/fixtures/script.json b/packages/nakamotojs/test/fixtures/script.json index 545c8f3bb..ece6e8008 100644 --- a/packages/nakamotojs/test/fixtures/script.json +++ b/packages/nakamotojs/test/fixtures/script.json @@ -287,6 +287,17 @@ "522102359c6e3f04cefbf089cf1d6670dc47c3fb4df68e2bad1fa5a369f9ce4b42bbd1210395a9d84d47d524548f79f435758c01faec5da2b7e551d3b8c995b7e06326ae4a52ae" ] }, + { + "type": "taproot", + "pubKey": "02359c6e3f04cefbf089cf1d6670dc47c3fb4df68e2bad1fa5a369f9ce4b42bbd1", + "signature": "304402207515cf147d201f411092e6be5a64a6006f9308fad7b2a8fdaab22cd86ce764c202200974b8aca7bf51dbf54150d3884e1ae04f675637b926ec33bf75939446f6ca2801", + "output": "OP_1 a7622c736ca5945b66773e7a5cdfbaad03a148e6bf40f79b4c2ec91d1da24773", + "outputHex": "5120a7622c736ca5945b66773e7a5cdfbaad03a148e6bf40f79b4c2ec91d1da24773", + "inputStack": [ + "304402207515cf147d201f411092e6be5a64a6006f9308fad7b2a8fdaab22cd86ce764c202200974b8aca7bf51dbf54150d3884e1ae04f675637b926ec33bf75939446f6ca2801", + "02359c6e3f04cefbf089cf1d6670dc47c3fb4df68e2bad1fa5a369f9ce4b42bbd1" + ] + }, { "type": "nulldata", "data": [ @@ -462,4 +473,4 @@ } ] } -} +} \ No newline at end of file diff --git a/packages/nakamotojs/test/script.spec.ts b/packages/nakamotojs/test/script.spec.ts index bfa46938c..469c81ea4 100644 --- a/packages/nakamotojs/test/script.spec.ts +++ b/packages/nakamotojs/test/script.spec.ts @@ -3,6 +3,8 @@ import assert from 'assert'; import { describe, it } from 'mocha'; import * as bscript from '../src/script.js'; +import * as ecc from '@bitcoin-computer/tiny-secp256k1'; +import { initEccLib } from '../src/ecc_lib.js'; import * as fixturesModule from './fixtures/script.json' assert { type: 'json' }; const fixtures: typeof import('./fixtures/script.json') = // @ts-ignore @@ -83,6 +85,33 @@ describe('script', () => { }); }); + describe('fromPublicKey', () => { + before('Before', () => { + initEccLib(ecc); + }); + const types = Object.assign({ + pubkey: 'p2pk', + pubkeyhash: 'p2pkh', + scripthash: 'p2sh', + multisig: 'p2ms', + witnesspubkeyhash: 'p2wpkh', + witnessscripthash: 'p2wsh', + taproot: 'p2tr', + nonstandard: 'nonstandard', + }); + fixtures.valid2.forEach(f => { + if (!f.pubKey) return; + it('decodes ' + f.pubKey.slice(0, 10) + '... to ' + types[f.type], () => { + const script = bscript.fromPublicKey( + Buffer.from(f.pubKey, 'hex'), + types[f.type], + ); + + assert.strictEqual(bscript.toASM(script), f.output); + }); + }); + }); + describe('isPushOnly', () => { fixtures.valid.forEach(f => { it('returns ' + !!f.stack + ' for ' + f.asm, () => { diff --git a/packages/nakamotojs/ts_src/address.ts b/packages/nakamotojs/ts_src/address.ts index 5f19d5ae8..760eb3c3c 100644 --- a/packages/nakamotojs/ts_src/address.ts +++ b/packages/nakamotojs/ts_src/address.ts @@ -3,6 +3,7 @@ import * as networks from './networks.js'; import * as payments from './payments/index.js'; import * as bscript from './script.js'; import { typeforce, tuple, Hash160bit, UInt8 } from './types.js'; +import { toXOnly } from './psbt/bip371.js'; import { bech32, bech32m } from 'bech32'; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore @@ -190,3 +191,23 @@ export function toOutputScript(address: string, network?: Network): Buffer { throw new Error(address + ' has no matching Script'); } + +export function fromPublicKey( + publicKey: Buffer, + type: string, + network?: Network, +): string { + network = network || networks.bitcoin; + + if (type === 'p2pkh') + return payments.p2pkh({ pubkey: publicKey, network }).address as string; + if (type === 'p2wpkh') + return payments.p2wpkh({ pubkey: publicKey, network }).address as string; + if (type === 'p2tr') + return payments.p2tr({ + internalPubkey: toXOnly(publicKey), + network, + }).address as string; + + throw new Error('Unknown or unsupported type'); +} diff --git a/packages/nakamotojs/ts_src/networks.ts b/packages/nakamotojs/ts_src/networks.ts index 161f59ccc..efb576962 100644 --- a/packages/nakamotojs/ts_src/networks.ts +++ b/packages/nakamotojs/ts_src/networks.ts @@ -83,3 +83,12 @@ export const litecointestnet: Network = { scriptHash: 0x3a, wif: 0xef, }; + +export const NETWORKS = Object.assign({ + litecoin, + bitcoin, + regtest, + testnet, + litecoinregtest, + litecointestnet, +}); diff --git a/packages/nakamotojs/ts_src/script.ts b/packages/nakamotojs/ts_src/script.ts index 299ddfff0..ef08ebee8 100644 --- a/packages/nakamotojs/ts_src/script.ts +++ b/packages/nakamotojs/ts_src/script.ts @@ -1,6 +1,10 @@ import * as bip66 from './bip66.js'; import { OPS, REVERSE_OPS } from './ops.js'; +import { Network } from './networks.js'; +import { toXOnly } from './psbt/bip371.js'; import { Stack } from './payments/index.js'; +import * as networks from './networks.js'; +import * as payments from './payments/index.js'; import * as pushdata from './push_data.js'; import * as scriptNumber from './script_number.js'; import * as scriptSignature from './script_signature.js'; @@ -184,6 +188,31 @@ export function fromASM(asm: string): Buffer { ); } +export function fromPublicKey( + publicKey: Buffer, + type: string, + network?: Network, +): Buffer { + network = network || networks.bitcoin; + + if (type === 'p2pkh') + return payments.p2pkh({ pubkey: publicKey, network }).output as Buffer; + if (type === 'p2wpkh') + return payments.p2wpkh({ pubkey: publicKey, network }).output as Buffer; + if (type === 'p2tr') + return payments.p2tr({ + internalPubkey: toXOnly(publicKey), + network, + }).output as Buffer; + if (type === 'p2pk') + return payments.p2pk({ + pubkey: publicKey, + network, + }).output as Buffer; + + throw new Error('Unknown or unsupported script type'); +} + export function toStack(chunks: Buffer | Array): Buffer[] { chunks = decompile(chunks) as Stack; typeforce(isPushOnly, chunks); From 04a7f3313afc35476eaeac7d0e18cf9aacdcc60f Mon Sep 17 00:00:00 2001 From: ltardivo Date: Fri, 12 Apr 2024 19:07:17 -0300 Subject: [PATCH 3/7] Updates docs. Adds information about addresses types --- packages/docs/API/constructor.md | 23 +++++++++++++---------- packages/docs/API/getAddress.md | 2 +- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/packages/docs/API/constructor.md b/packages/docs/API/constructor.md index 3d7e5090d..87557061a 100644 --- a/packages/docs/API/constructor.md +++ b/packages/docs/API/constructor.md @@ -11,6 +11,7 @@ new (config: { mnemonic?: string, path?: string, passphrase?: string + addressType?: 'p2pkh' | 'p2wpkh' | 'p2tr', url?: string, satPerByte?: number dustRelayFee?: number @@ -28,16 +29,17 @@ new Computer(config) A configuration object {.compact} -| Key | Description | Default Value | -|--------------|-------------------------------------------------------------|---------------------------------| -| chain | Target blockchain. Values can be 'LTC' or 'BTC' | LTC | -| network | Target network. Values in 'testnet', 'regtest' or 'mainnet' | testnet | -| mnemonic | BIP39 mnemonic phrase | Random phrase | -| path | BIP32 path | m/44'/0'/0' | -| passphrase | BIP32 passphrase | The empty string | -| url | Url of a Bitcoin Computer Node | https://node.bitcoincomputer.io | -| satPerByte | Fee in satoshi per byte | 2 | -| dustRelayFee | Dust relay fee | 30000 on LTC and 3000 on BTC | +| Key | Description | Default Value | +|--------------|-------------------------------------------------------------|--------------------------------------| +| chain | Target blockchain. Values can be 'LTC' or 'BTC' | LTC | +| network | Target network. Values in 'testnet', 'regtest' or 'mainnet' | regtest | +| mnemonic | BIP39 mnemonic phrase | Random phrase | +| path | BIP32 path | m/44'/0'/0' | +| passphrase | BIP32 passphrase | The empty string | +| addressType | The address script type. Values in 'p2pkh', 'p2wpkh', 'p2tr'| p2pkh | +| url | Url of a Bitcoin Computer Node | https://rltc.node.bitcoincomputer.io | +| satPerByte | Fee in satoshi per byte | 2 | +| dustRelayFee | Dust relay fee | 30000 on LTC and 3000 on BTC | ### Return Value @@ -61,6 +63,7 @@ const computer3 = new Computer({ chain: 'LTC' network: 'mainnet', mnemonic: 'replace this seed' + addressType: 'p2wpkh', path: "m/44'/0'/0'/0", url: 'https://my-ltc-node.com', satPerByte: 1 diff --git a/packages/docs/API/getAddress.md b/packages/docs/API/getAddress.md index f91f76690..013283321 100644 --- a/packages/docs/API/getAddress.md +++ b/packages/docs/API/getAddress.md @@ -1,6 +1,6 @@ # getAddress -Returns a string encoding Bitcoin address. +Returns a string encoding Bitcoin address. Will return an address according to the type set in the Computer constructor. ### Type ```ts From cc6572c309f20d7a3282e6c6a28f980923b0a2a4 Mon Sep 17 00:00:00 2001 From: ltardivo Date: Fri, 12 Apr 2024 19:24:16 -0300 Subject: [PATCH 4/7] Update types --- packages/lib/computer.d.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/lib/computer.d.ts b/packages/lib/computer.d.ts index f375fa75c..76aa4db4e 100644 --- a/packages/lib/computer.d.ts +++ b/packages/lib/computer.d.ts @@ -104,6 +104,7 @@ declare class RestClient { readonly mnemonic: string; readonly path: string; readonly passphrase: string; + readonly addressType: AddressType; readonly bcn: UrlFetch; readonly dustRelayTxFee: number; readonly _keyPair: any; @@ -115,6 +116,7 @@ declare class RestClient { mnemonic, path, passphrase, + addressType, url, satPerByte, dustRelayFee, @@ -182,6 +184,8 @@ type Network = "testnet" | "mainnet" | "regtest"; type Fee = Partial<{ fee: number; }>; +type AddressType = 'p2pkh' | 'p2wpkh' | 'p2tr' + type ProgramMetaData = JObject & Partial<{ _amount: number; @@ -330,7 +334,7 @@ declare class Contract { } declare class Computer { - wallet: Wallet; + walletBITCOIN: Wallet; constructor(params?: ComputerOptions); new( constructor: T, From 8c58e94805ba47dd9c8af43a4db71ff9dcec4a9a Mon Sep 17 00:00:00 2001 From: ltardivo Date: Fri, 12 Apr 2024 19:24:39 -0300 Subject: [PATCH 5/7] Updates utxos views to exclude rows in nonStandard table --- packages/node/db/db_schema.sql | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/node/db/db_schema.sql b/packages/node/db/db_schema.sql index b72ab1158..f38764432 100644 --- a/packages/node/db/db_schema.sql +++ b/packages/node/db/db_schema.sql @@ -80,4 +80,7 @@ CREATE TABLE IF NOT EXISTS CREATE VIEW "Utxos" AS SELECT "rev", "address", "satoshis", "scriptPubKey", "publicKeys" FROM "Output" WHERE NOT EXISTS -(SELECT "ip"."outputSpent" FROM "Input" ip WHERE "ip"."outputSpent" = "Output".rev) +(SELECT 1 FROM "Input" ip WHERE "ip"."outputSpent" = "Output".rev +union +select 1 from "NonStandard" ns where "ns"."rev" = "Output".rev) + From 2973e25a390e04bf231a9e51f9473109bfbf2686 Mon Sep 17 00:00:00 2001 From: ltardivo Date: Fri, 12 Apr 2024 19:48:24 -0300 Subject: [PATCH 6/7] Fixes types --- packages/lib/computer.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/lib/computer.d.ts b/packages/lib/computer.d.ts index 76aa4db4e..5cf78d4b6 100644 --- a/packages/lib/computer.d.ts +++ b/packages/lib/computer.d.ts @@ -334,7 +334,7 @@ declare class Contract { } declare class Computer { - walletBITCOIN: Wallet; + wallet: Wallet; constructor(params?: ComputerOptions); new( constructor: T, From d60d0db0f3d9280dcee5cce6676b70e1caa06ab2 Mon Sep 17 00:00:00 2001 From: ltardivo Date: Fri, 19 Apr 2024 10:21:09 -0300 Subject: [PATCH 7/7] Removes Object.assign in network object definition --- packages/nakamotojs/src/networks.d.ts | 2 +- packages/nakamotojs/src/networks.js | 4 ++-- packages/nakamotojs/ts_src/networks.ts | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/nakamotojs/src/networks.d.ts b/packages/nakamotojs/src/networks.d.ts index da39a7d39..5abe4d1ee 100644 --- a/packages/nakamotojs/src/networks.d.ts +++ b/packages/nakamotojs/src/networks.d.ts @@ -16,5 +16,5 @@ export declare const testnet: Network; export declare const litecoin: Network; export declare const litecoinregtest: Network; export declare const litecointestnet: Network; -export declare const NETWORKS: any; +export declare const NETWORKS: Record; export {}; diff --git a/packages/nakamotojs/src/networks.js b/packages/nakamotojs/src/networks.js index 288bb802a..6de8e623a 100644 --- a/packages/nakamotojs/src/networks.js +++ b/packages/nakamotojs/src/networks.js @@ -64,11 +64,11 @@ export const litecointestnet = { scriptHash: 0x3a, wif: 0xef, }; -export const NETWORKS = Object.assign({ +export const NETWORKS = { litecoin, bitcoin, regtest, testnet, litecoinregtest, litecointestnet, -}); +}; diff --git a/packages/nakamotojs/ts_src/networks.ts b/packages/nakamotojs/ts_src/networks.ts index efb576962..cc1f8e2b3 100644 --- a/packages/nakamotojs/ts_src/networks.ts +++ b/packages/nakamotojs/ts_src/networks.ts @@ -84,11 +84,11 @@ export const litecointestnet: Network = { wif: 0xef, }; -export const NETWORKS = Object.assign({ +export const NETWORKS: Record = { litecoin, bitcoin, regtest, testnet, litecoinregtest, litecointestnet, -}); +};