Skip to content

Send bitcoins to SilentPayment static payment codes, in pure typescript

Notifications You must be signed in to change notification settings

BlueWallet/SilentPayments

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Sep 27, 2024
8bf48d2 · Sep 27, 2024

History

46 Commits
Aug 24, 2023
May 31, 2024
May 31, 2024
Aug 24, 2023
Jul 29, 2023
Jun 16, 2023
Sep 27, 2024
Jun 16, 2023
Aug 24, 2023
Aug 24, 2023
May 31, 2024
Aug 24, 2023

Repository files navigation

SilentPayments (BIP-352)

Send bitcoins to SilentPayment static payment codes, in pure typescript.

Installation

  • npm i "github:BlueWallet/SilentPayments" --save

Library is implemented in pure typescript without js-compiled version committed - you might need to configure javascript build on your side. For example, to use it in jest tests:

package.json:

  "jest": {
    "transform": {
      "^.+\\.(ts|tsx)$": "ts-jest"
    },
    "transformIgnorePatterns": [
      "node_modules/(?!((jest-)?react-native(-.*)?|@react-native(-community)?)|silent-payments/)"
    ],

If youre using webpack you might need to add a loader in webpack.config.js, something like this:

...
    {
        test: /node_modules\/silent-payments\/.*\.ts$/,
        use: [
          {
            loader: require.resolve('ts-loader'),
            options: {
              allowTsInNodeModules: true,
              getCustomTransformers: () => ({
                before: [isDevelopment && ReactRefreshTypeScript()].filter(
                  Boolean
                ),
              }),
              transpileOnly: isDevelopment,
            },
          },
        ],
      },
...

Usage

You must provide UTXOs and targets (which might or might not include SilentPayment codes):

createTransaction(utxos: UTXO[], targets: Target[]): Target[]

Finally:

const sp = new SilentPayment();

const targets = sp.createTransaction(
      [
        {
          txid: "f4184fc596403b9d638783cf57adfe4c75c605f6356fbc91338530e9831e9e16",
          vout: 0,
          wif: ECPair.fromPrivateKey(Buffer.from("1cd5e8f6b3f29505ed1da7a5806291ebab6491c6a172467e44debe255428a192", "hex")).toWIF(),
          utxoType: "p2wpkh",
        },
      ],
      [
        {
          address: "3FiYaHYHQTmD8n2SJxVYobDeN1uQKvzkLe",
          value: 11_111,
        },
        {
          address: "sp1qqgste7k9hx0qftg6qmwlkqtwuy6cycyavzmzj85c6qdfhjdpdjtdgqjuexzk6murw56suy3e0rd2cgqvycxttddwsvgxe2usfpxumr70xc9pkqwv",
          value: 22_222,
        },
        {
          // no address, which should be interpreted as change
          value: 33_333,
        },
      ]
    ),

Library will unwrap sp1... codes into correct receivers address. You must provide correct UTXO types to the library, and you must use the same UTXOs in an actual transaction you create. Library will not do coin selection for you.

Development

  • npm i
  • npm t

License

MIT

References