From b4218a996c938f30461f7d0aa50aeb37b88c142a Mon Sep 17 00:00:00 2001 From: Ivan Frolov Date: Mon, 18 Aug 2025 16:31:49 -0400 Subject: [PATCH 01/19] feat: added ci to update contracts --- .github/workflows/update-contracts.yaml | 46 +++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 .github/workflows/update-contracts.yaml diff --git a/.github/workflows/update-contracts.yaml b/.github/workflows/update-contracts.yaml new file mode 100644 index 0000000..e58460c --- /dev/null +++ b/.github/workflows/update-contracts.yaml @@ -0,0 +1,46 @@ +on: + push: + tags: + - 'btc-bridge-v[0-9]+.[0-9]+.[0-9]+*' + + workflow_dispatch: + +name: Update Contracts +jobs: + update-contracts: + runs-on: ubuntu-latest + name: Update Contracts + permissions: + contents: write + steps: + - name: Setup SSH + uses: webfactory/ssh-agent@v0.7.0 + + - name: Clone the repository + uses: actions/checkout@v3 + + - name: Install cargo-near + run: | + curl --proto '=https' --tlsv1.2 -LsSf https://github.com/near/cargo-near/releases/latest/download/cargo-near-installer.sh | sh + + - name: Build NEAR contracts + run: | + make release + timeout-minutes: 60 + + - name: Archive built WASM files + env: + RAW_TAG: ${{ github.ref_name }} + run: | + SAFE_TAG="${RAW_TAG//./-}" + ZIP_NAME="${SAFE_TAG}.zip" + mkdir -p artifacts + find ./res -name "*.wasm" -exec cp {} artifacts/ \; + zip -j "$ZIP_NAME" artifacts/* + shell: bash + + - name: Create Release + uses: softprops/action-gh-release@v2 + with: + tag_name: ${{ github.ref_name }} + files: "*.zip" From 7261945ccaa35123e1806f3af8013e58dc894973 Mon Sep 17 00:00:00 2001 From: Ivan Frolov Date: Mon, 18 Aug 2025 16:33:26 -0400 Subject: [PATCH 02/19] chore: removed ssh agent --- .github/workflows/update-contracts.yaml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/update-contracts.yaml b/.github/workflows/update-contracts.yaml index e58460c..b8711a3 100644 --- a/.github/workflows/update-contracts.yaml +++ b/.github/workflows/update-contracts.yaml @@ -13,9 +13,6 @@ jobs: permissions: contents: write steps: - - name: Setup SSH - uses: webfactory/ssh-agent@v0.7.0 - - name: Clone the repository uses: actions/checkout@v3 From af66cd93b900190384c312194903c2af91f2808d Mon Sep 17 00:00:00 2001 From: Olga Kunyavskaya Date: Thu, 28 Aug 2025 21:52:59 +0100 Subject: [PATCH 03/19] provide max gas fee --- contracts/satoshi-bridge/src/api/token_receiver.rs | 3 +++ contracts/satoshi-bridge/src/psbt.rs | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/contracts/satoshi-bridge/src/api/token_receiver.rs b/contracts/satoshi-bridge/src/api/token_receiver.rs index 28432a0..0f52a18 100644 --- a/contracts/satoshi-bridge/src/api/token_receiver.rs +++ b/contracts/satoshi-bridge/src/api/token_receiver.rs @@ -9,6 +9,7 @@ pub enum TokenReceiverMessage { target_btc_address: String, input: Vec, output: Vec, + max_gas_fee: Option, }, } @@ -47,6 +48,7 @@ impl FungibleTokenReceiver for Contract { target_btc_address, input, output, + max_gas_fee, } => { let (psbt, utxo_storage_keys, vutxos) = self.generate_psbt_and_vutxos(input, output); @@ -69,6 +71,7 @@ impl FungibleTokenReceiver for Contract { &vutxos, amount, withdraw_fee, + max_gas_fee ); let need_signature_num = psbt.unsigned_tx.input.len(); diff --git a/contracts/satoshi-bridge/src/psbt.rs b/contracts/satoshi-bridge/src/psbt.rs index 7090c25..f1cbf7c 100644 --- a/contracts/satoshi-bridge/src/psbt.rs +++ b/contracts/satoshi-bridge/src/psbt.rs @@ -9,6 +9,7 @@ impl Contract { vutxos: &[VUTXO], amount: u128, withdraw_fee: u128, + max_gas_fee: Option, ) -> (u128, u128) { let config = self.internal_config(); let utxo_num = self.data().utxos.len() + vutxos.len() as u32; @@ -20,6 +21,10 @@ impl Contract { amount, withdraw_fee, ); + + if let Some(max_gas_fee) = max_gas_fee { + require!(gas_fee <= max_gas_fee.0, format!("Gas fee does not match the provided max fee (gas fee = {}; max gas fee = {})", gas_fee, max_gas_fee.0)); + } require!( change_num <= config.max_change_number as usize, From 4dfb588a5c2e079ae3f6e9eb30f9c33074ca5af1 Mon Sep 17 00:00:00 2001 From: karim-en Date: Tue, 2 Sep 2025 12:29:11 +0100 Subject: [PATCH 04/19] Bump version --- Cargo.lock | 2 +- contracts/satoshi-bridge/Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4b15e5a..08a8f7a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2929,7 +2929,7 @@ checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" [[package]] name = "satoshi-bridge" -version = "0.5.0" +version = "0.5.1" dependencies = [ "bitcoin", "crypto-shared", diff --git a/contracts/satoshi-bridge/Cargo.toml b/contracts/satoshi-bridge/Cargo.toml index 97f38c8..128301f 100644 --- a/contracts/satoshi-bridge/Cargo.toml +++ b/contracts/satoshi-bridge/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "satoshi-bridge" -version = "0.5.0" +version = "0.5.1" edition.workspace = true publish.workspace = true repository.workspace = true From da0c1d6c9ac3006a94a135f5ed5b63dfaa5abaed Mon Sep 17 00:00:00 2001 From: Karim Date: Wed, 17 Sep 2025 13:58:35 +0100 Subject: [PATCH 05/19] Fix release repo (#7) --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index e331aff..10aa8c2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,7 +7,7 @@ members = [ [workspace.package] edition = "2021" publish = false -repository = "https://github.com/Near-Bridge-Lab/btc-bridge" +repository = "https://github.com/Near-One/btc-bridge" [workspace.dependencies] near-sdk = { version = "5.14.0", features = ["unstable", "unit-testing"] } From fc6028136e94d3640c0d6a30384535dc5114a5e8 Mon Sep 17 00:00:00 2001 From: Olga Kunyavskaya Date: Fri, 19 Sep 2025 15:18:35 +0100 Subject: [PATCH 06/19] Add Zcash support (#2) * provide metadata for nBTC * fix satoshi bridge cargo toml * address -> script_pubkey * btc-p2wpkh -> utxo_chain * remove btc_network * draft zcash tx impl * fix consenses decode * zcash_primitives * fix cargo toml * test for script * fix get output * change signhash * Refactor transaction type * Bump zcash_primitives version * Convert btc tx into zcash tx * Set `final_script_sig` * Fix sighash * fix * fix sequence * zcash build * add zcash features * AddressInner -> Address * new line * test parse address * test from pubkey * improve tests * fix warnings * check zcash fee * safe expiry height * fix expiry_height * add rbf * fix sequence * extract expire_height for cancel_withdraw * fix cancel active utxo managment * fix active utxo managment * utxo_mamagment extract block height * gap into config * Replace last_block_header with last_block_height * construct output for zcash * add simple try from address * parse unified address * script pubkey * fmt for unified address * fix find receiver in list * fix warnings * safe psbt wraper * deserialize * move het hash to sign * extract tx byte * save signature * incapsulate psbt * separate transaction * separate expiry hight * separate psbt creation * separate chain specific functions * separate zcash functions * separate zcash * fix btc * fix warnings * optimize get min fee * remove psbt for zcash * remove unsed function * add get_input_num and get_output_num * fix satoshi bridge * fix new * make psbt field private * reduce copy past * reduce copypast * fix test contract config for zcash * don't panic * fmt * reduce include * updaye zcash_protocol * fix chain id * remove default * add version * fix bitcoin connector * remove bytes_to_btc_transaction * don't use fully-qualified name * fix bitcoin tests * fix check block heigth for branch id * save block height * fix * fix make * fix valid confiramtions range * Bump version * fix: use `U128` type for amount in `ft_on_transfer_callback` * provide max gas fee --------- Co-authored-by: karim-en Co-authored-by: Ivan Frolov --- Cargo.lock | 1885 +++++++++++++---- Makefile | 24 +- contracts/nbtc/Cargo.toml | 2 +- contracts/nbtc/src/lib.rs | 19 +- contracts/satoshi-bridge/Cargo.toml | 28 +- contracts/satoshi-bridge/src/api/bridge.rs | 189 +- .../satoshi-bridge/src/api/token_receiver.rs | 150 +- .../src/bitcoin_utils/contract_methods.rs | 94 + .../satoshi-bridge/src/bitcoin_utils/mod.rs | 3 + .../src/bitcoin_utils/psbt_wrapper.rs | 161 ++ .../src/bitcoin_utils/transaction.rs | 41 + .../src/btc_light_client/mod.rs | 15 +- .../satoshi-bridge/src/btc_pending_info.rs | 89 +- .../satoshi-bridge/src/chain_signature.rs | 48 +- contracts/satoshi-bridge/src/config.rs | 24 +- contracts/satoshi-bridge/src/kdf.rs | 23 +- contracts/satoshi-bridge/src/legacy.rs | 3 + contracts/satoshi-bridge/src/lib.rs | 28 +- contracts/satoshi-bridge/src/nbtc/burn.rs | 16 +- contracts/satoshi-bridge/src/network.rs | 436 ++++ contracts/satoshi-bridge/src/psbt.rs | 99 +- .../src/rbf/active_utxo_management.rs | 12 +- .../src/rbf/cancel_active_utxo_management.rs | 8 +- .../satoshi-bridge/src/rbf/cancel_withdraw.rs | 13 +- contracts/satoshi-bridge/src/rbf/mod.rs | 7 +- contracts/satoshi-bridge/src/rbf/withdraw.rs | 22 +- contracts/satoshi-bridge/src/unit/mod.rs | 10 + contracts/satoshi-bridge/src/utxo.rs | 10 +- .../src/zcash_utils/contract_methods.rs | 192 ++ .../satoshi-bridge/src/zcash_utils/mod.rs | 3 + .../src/zcash_utils/psbt_wrapper.rs | 332 +++ .../src/zcash_utils/transaction.rs | 109 + .../satoshi-bridge/tests/setup/context.rs | 9 +- 33 files changed, 3329 insertions(+), 775 deletions(-) create mode 100644 contracts/satoshi-bridge/src/bitcoin_utils/contract_methods.rs create mode 100644 contracts/satoshi-bridge/src/bitcoin_utils/mod.rs create mode 100644 contracts/satoshi-bridge/src/bitcoin_utils/psbt_wrapper.rs create mode 100644 contracts/satoshi-bridge/src/bitcoin_utils/transaction.rs create mode 100644 contracts/satoshi-bridge/src/network.rs create mode 100644 contracts/satoshi-bridge/src/zcash_utils/contract_methods.rs create mode 100644 contracts/satoshi-bridge/src/zcash_utils/mod.rs create mode 100644 contracts/satoshi-bridge/src/zcash_utils/psbt_wrapper.rs create mode 100644 contracts/satoshi-bridge/src/zcash_utils/transaction.rs diff --git a/Cargo.lock b/Cargo.lock index 08a8f7a..be6de1c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -27,13 +27,23 @@ version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" +[[package]] +name = "aead" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" +dependencies = [ + "crypto-common 0.1.6", + "generic-array", +] + [[package]] name = "aes" version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" dependencies = [ - "cfg-if 1.0.1", + "cfg-if 1.0.3", "cipher", "cpufeatures", ] @@ -70,19 +80,25 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.98" +version = "1.0.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" +checksum = "b0674a1ddeecb70197781e945de4b3b8ffb61fa939a5597bcf48503737663100" [[package]] name = "arbitrary" -version = "1.4.1" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dde20b3d026af13f561bdd0f15edf01fc734f0dafcedbaf42bba506a9517f223" +checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1" dependencies = [ "derive_arbitrary", ] +[[package]] +name = "arrayref" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" + [[package]] name = "arrayvec" version = "0.7.6" @@ -91,13 +107,13 @@ checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] name = "async-trait" -version = "0.1.88" +version = "0.1.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" +checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.102", + "syn 2.0.106", ] [[package]] @@ -108,9 +124,9 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "autocfg" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "backtrace" @@ -119,12 +135,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" dependencies = [ "addr2line", - "cfg-if 1.0.1", + "cfg-if 1.0.3", "libc", "miniz_oxide", "object", "rustc-demangle", - "windows-targets", + "windows-targets 0.52.6", ] [[package]] @@ -167,6 +183,22 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d965446196e3b7decd44aa7ee49e31d630118f90ef12f97900f262eb915c951d" +[[package]] +name = "bellman" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9afceed28bac7f9f5a508bca8aeeff51cdfa4770c0b967ac55c621e2ddfd6171" +dependencies = [ + "bitvec", + "blake2s_simd", + "byteorder", + "ff", + "group", + "pairing", + "rand_core", + "subtle", +] + [[package]] name = "binary-install" version = "0.2.0" @@ -185,11 +217,27 @@ dependencies = [ "zip", ] +[[package]] +name = "bip32" +version = "0.6.0-pre.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "143f5327f23168716be068f8e1014ba2ea16a6c91e8777bc8927da7b51e1df1f" +dependencies = [ + "bs58 0.5.1", + "hmac 0.13.0-pre.4", + "rand_core", + "ripemd 0.2.0-pre.4", + "secp256k1 0.29.1", + "sha2 0.11.0-pre.4", + "subtle", + "zeroize", +] + [[package]] name = "bitcoin" -version = "0.32.6" +version = "0.32.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad8929a18b8e33ea6b3c09297b687baaa71fb1b97353243a3f1029fad5c59c5b" +checksum = "0fda569d741b895131a88ee5589a467e73e9c4718e958ac9308e4f7dc44b6945" dependencies = [ "base58ck", "bech32", @@ -247,9 +295,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.9.1" +version = "2.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" +checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" [[package]] name = "bitvec" @@ -269,7 +317,29 @@ version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" dependencies = [ - "digest", + "digest 0.10.7", +] + +[[package]] +name = "blake2b_simd" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06e903a20b159e944f91ec8499fe1e55651480c541ea0a584f5d967c49ad9d99" +dependencies = [ + "arrayref", + "arrayvec", + "constant_time_eq 0.3.1", +] + +[[package]] +name = "blake2s_simd" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e90f7deecfac93095eb874a40febd69427776e24e1bd7f87f33ac62d6f0174df" +dependencies = [ + "arrayref", + "arrayvec", + "constant_time_eq 0.3.1", ] [[package]] @@ -281,6 +351,28 @@ dependencies = [ "generic-array", ] +[[package]] +name = "block-buffer" +version = "0.11.0-rc.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fd016a0ddc7cb13661bf5576073ce07330a693f8608a1320b4e20561cc12cdc" +dependencies = [ + "hybrid-array", +] + +[[package]] +name = "bls12_381" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7bc6d6292be3a19e6379786dac800f551e5865a5bb51ebbe3064ab80433f403" +dependencies = [ + "ff", + "group", + "pairing", + "rand_core", + "subtle", +] + [[package]] name = "blst" version = "0.3.15" @@ -295,9 +387,9 @@ dependencies = [ [[package]] name = "bon" -version = "3.6.4" +version = "3.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f61138465baf186c63e8d9b6b613b508cd832cba4ce93cf37ce5f096f91ac1a6" +checksum = "c2529c31017402be841eb45892278a6c21a000c0a17643af326c73a73f83f0fb" dependencies = [ "bon-macros", "rustversion", @@ -305,17 +397,17 @@ dependencies = [ [[package]] name = "bon-macros" -version = "3.6.4" +version = "3.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40d1dad34aa19bf02295382f08d9bc40651585bd497266831d40ee6296fb49ca" +checksum = "d82020dadcb845a345591863adb65d74fa8dc5c18a0b6d408470e13b7adc7005" dependencies = [ - "darling 0.20.11", + "darling 0.21.3", "ident_case", - "prettyplease 0.2.33", + "prettyplease 0.2.37", "proc-macro2", "quote", "rustversion", - "syn 2.0.102", + "syn 2.0.106", ] [[package]] @@ -338,7 +430,7 @@ dependencies = [ "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.102", + "syn 2.0.106", ] [[package]] @@ -353,14 +445,15 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" dependencies = [ + "sha2 0.10.9", "tinyvec", ] [[package]] name = "bumpalo" -version = "3.18.1" +version = "3.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db76d6187cd04dff33004d8e6c9cc4e05cd330500379d2394209271b4aeee" +checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" [[package]] name = "byteorder" @@ -405,9 +498,9 @@ dependencies = [ [[package]] name = "camino" -version = "1.1.10" +version = "1.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0da45bc31171d8d6960122e222a67740df867c1dd53b4d51caa297084c185cab" +checksum = "dd0b03af37dad7a14518b7691d81acb0f8222604ad3d1b02f6b4bed5188c0cd5" dependencies = [ "serde", ] @@ -429,7 +522,7 @@ dependencies = [ "indenter", "pathdiff", "rustc_version", - "sha2", + "sha2 0.10.9", "tracing", ] @@ -456,12 +549,22 @@ dependencies = [ "thiserror 1.0.69", ] +[[package]] +name = "cbc" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26b52a9543ae338f279b96b0b9fed9c8093744685043739079ce85cd58f289a6" +dependencies = [ + "cipher", +] + [[package]] name = "cc" -version = "1.2.26" +version = "1.2.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "956a5e21988b87f372569b66183b78babf23ebc2e744b733e4350a752c4dafac" +checksum = "5252b3d2648e5eedbc1a6f501e3c795e07025c1e93bbf8bbdd6eef7f447a6d54" dependencies = [ + "find-msvc-tools", "jobserver", "libc", "shlex", @@ -475,9 +578,9 @@ checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" [[package]] name = "cfg-if" -version = "1.0.1" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" +checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" [[package]] name = "cfg_aliases" @@ -485,6 +588,30 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" +[[package]] +name = "chacha20" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818" +dependencies = [ + "cfg-if 1.0.3", + "cipher", + "cpufeatures", +] + +[[package]] +name = "chacha20poly1305" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35" +dependencies = [ + "aead", + "chacha20", + "cipher", + "poly1305", + "zeroize", +] + [[package]] name = "chrono" version = "0.4.41" @@ -506,8 +633,9 @@ version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" dependencies = [ - "crypto-common", + "crypto-common 0.1.6", "inout", + "zeroize", ] [[package]] @@ -532,6 +660,12 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" +[[package]] +name = "constant_time_eq" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" + [[package]] name = "convert_case" version = "0.5.0" @@ -554,6 +688,15 @@ version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" +[[package]] +name = "core2" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "239fa3ae9b63c2dc74bd3fa852d4792b8b305ae64eeede946265b6af62f1fff3" +dependencies = [ + "memchr", +] + [[package]] name = "cpufeatures" version = "0.2.17" @@ -565,11 +708,11 @@ dependencies = [ [[package]] name = "crc32fast" -version = "1.4.2" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" dependencies = [ - "cfg-if 1.0.1", + "cfg-if 1.0.3", ] [[package]] @@ -599,9 +742,9 @@ checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crunchy" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929" +checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" [[package]] name = "crypto-bigint" @@ -625,6 +768,15 @@ dependencies = [ "typenum", ] +[[package]] +name = "crypto-common" +version = "0.2.0-rc.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0b8ce8218c97789f16356e7896b3714f26c2ee1079b79c0b7ae7064bb9089fa" +dependencies = [ + "hybrid-array", +] + [[package]] name = "crypto-shared" version = "0.1.0" @@ -648,10 +800,10 @@ version = "4.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" dependencies = [ - "cfg-if 1.0.1", + "cfg-if 1.0.3", "cpufeatures", "curve25519-dalek-derive", - "digest", + "digest 0.10.7", "fiat-crypto", "rustc_version", "subtle", @@ -666,7 +818,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.102", + "syn 2.0.106", ] [[package]] @@ -689,6 +841,16 @@ dependencies = [ "darling_macro 0.20.11", ] +[[package]] +name = "darling" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" +dependencies = [ + "darling_core 0.21.3", + "darling_macro 0.21.3", +] + [[package]] name = "darling_core" version = "0.13.4" @@ -714,7 +876,21 @@ dependencies = [ "proc-macro2", "quote", "strsim 0.11.1", - "syn 2.0.102", + "syn 2.0.106", +] + +[[package]] +name = "darling_core" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.11.1", + "syn 2.0.106", ] [[package]] @@ -736,7 +912,18 @@ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core 0.20.11", "quote", - "syn 2.0.102", + "syn 2.0.106", +] + +[[package]] +name = "darling_macro" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" +dependencies = [ + "darling_core 0.21.3", + "quote", + "syn 2.0.106", ] [[package]] @@ -751,9 +938,9 @@ dependencies = [ [[package]] name = "deranged" -version = "0.4.0" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" +checksum = "d630bccd429a5bb5a64b5e94f693bfc48c9f8566418fda4c494cc94f911f87cc" dependencies = [ "powerfmt", "serde", @@ -761,13 +948,13 @@ dependencies = [ [[package]] name = "derive_arbitrary" -version = "1.4.1" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800" +checksum = "1e567bd82dcff979e4b03460c307b3cdc9e96fde3d73bed1496d2bc75d9dd62a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.102", + "syn 2.0.106", ] [[package]] @@ -776,7 +963,16 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" dependencies = [ - "derive_more-impl", + "derive_more-impl 1.0.0", +] + +[[package]] +name = "derive_more" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "093242cf7570c207c83073cf82f79706fe7b8317e98620a47d5be7c3d8497678" +dependencies = [ + "derive_more-impl 2.0.1", ] [[package]] @@ -787,7 +983,18 @@ checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" dependencies = [ "proc-macro2", "quote", - "syn 2.0.102", + "syn 2.0.106", +] + +[[package]] +name = "derive_more-impl" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", ] [[package]] @@ -796,9 +1003,20 @@ version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ - "block-buffer", + "block-buffer 0.10.4", "const-oid", - "crypto-common", + "crypto-common 0.1.6", + "subtle", +] + +[[package]] +name = "digest" +version = "0.11.0-pre.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf2e3d6615d99707295a9673e889bf363a04b2a466bd320c65a72536f7577379" +dependencies = [ + "block-buffer 0.11.0-rc.3", + "crypto-common 0.2.0-rc.1", "subtle", ] @@ -808,7 +1026,7 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" dependencies = [ - "cfg-if 1.0.1", + "cfg-if 1.0.3", "dirs-sys-next", ] @@ -831,7 +1049,16 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.102", + "syn 2.0.106", +] + +[[package]] +name = "document-features" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95249b50c6c185bee49034bcb378a49dc2b5dff0be90ff6616d31d64febab05d" +dependencies = [ + "litrs", ] [[package]] @@ -842,9 +1069,9 @@ checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" [[package]] name = "dyn-clone" -version = "1.0.19" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c7a8fb8a9fbf66c1f703fe16184d10ca0ee9d23be5b4436400408ba54a95005" +checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" [[package]] name = "easy-ext" @@ -859,7 +1086,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" dependencies = [ "der", - "digest", + "digest 0.10.7", "elliptic-curve", "rfc6979", "serdect", @@ -879,15 +1106,15 @@ dependencies = [ [[package]] name = "ed25519-dalek" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a3daa8e81a3963a60642bcc1f90a670680bd4a77535faa384e9d1c79d620871" +checksum = "70e796c081cee67dc755e1a36a0a172b897fab85fc3f6bc48307991f64e4eca9" dependencies = [ "curve25519-dalek", "ed25519", "rand_core", "serde", - "sha2", + "sha2 0.10.9", "subtle", "zeroize", ] @@ -906,7 +1133,7 @@ checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" dependencies = [ "base16ct", "crypto-bigint", - "digest", + "digest 0.10.7", "ff", "generic-array", "group", @@ -924,7 +1151,7 @@ version = "0.8.35" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" dependencies = [ - "cfg-if 1.0.1", + "cfg-if 1.0.3", ] [[package]] @@ -944,7 +1171,17 @@ checksum = "f282cfdfe92516eb26c2af8589c274c7c17681f5ecc03c18255fe741c6aa64eb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.102", + "syn 2.0.106", +] + +[[package]] +name = "equihash" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca4f333d4ccc9d23c06593733673026efa71a332e028b00f12cf427b9677dce9" +dependencies = [ + "blake2b_simd", + "core2", ] [[package]] @@ -955,12 +1192,12 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" -version = "0.3.12" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cea14ef9355e3beab063703aa9dab15afd25f0667c341310c1e5274bb1d0da18" +checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -973,6 +1210,15 @@ dependencies = [ "once_cell", ] +[[package]] +name = "f4jumble" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d42773cb15447644d170be20231a3268600e0c4cea8987d013b93ac973d3cf7" +dependencies = [ + "blake2b_simd", +] + [[package]] name = "fastrand" version = "2.3.0" @@ -985,6 +1231,7 @@ version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" dependencies = [ + "bitvec", "rand_core", "subtle", ] @@ -997,16 +1244,22 @@ checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" [[package]] name = "filetime" -version = "0.2.25" +version = "0.2.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" +checksum = "bc0505cd1b6fa6580283f6bdf70a73fcf4aba1184038c90902b92b3dd0df63ed" dependencies = [ - "cfg-if 1.0.1", + "cfg-if 1.0.3", "libc", "libredox", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] +[[package]] +name = "find-msvc-tools" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fd99930f64d146689264c637b5af2f0233a933bef0d8570e2526bf9e083192d" + [[package]] name = "fixed-hash" version = "0.7.0" @@ -1064,13 +1317,27 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] name = "form_urlencoded" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" dependencies = [ "percent-encoding", ] +[[package]] +name = "fpe" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26c4b37de5ae15812a764c958297cfc50f5c010438f60c6ce75d11b802abd404" +dependencies = [ + "cbc", + "cipher", + "libm", + "num-bigint 0.4.6", + "num-integer", + "num-traits", +] + [[package]] name = "fs2" version = "0.4.3" @@ -1143,7 +1410,7 @@ version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" dependencies = [ - "cfg-if 1.0.1", + "cfg-if 1.0.3", "libc", "wasi 0.11.1+wasi-snapshot-preview1", ] @@ -1154,10 +1421,22 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" dependencies = [ - "cfg-if 1.0.1", + "cfg-if 1.0.3", "libc", "r-efi", - "wasi 0.14.2+wasi-0.2.4", + "wasi 0.14.3+wasi-0.2.4", +] + +[[package]] +name = "getset" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cf0fc11e47561d47397154977bc219f4cf809b2974facc3ccb3b89e2436f912" +dependencies = [ + "proc-macro-error2", + "proc-macro2", + "quote", + "syn 2.0.106", ] [[package]] @@ -1168,9 +1447,9 @@ checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" [[package]] name = "glob" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" +checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" [[package]] name = "group" @@ -1179,15 +1458,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" dependencies = [ "ff", + "memuse", "rand_core", "subtle", ] [[package]] name = "h2" -version = "0.4.10" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9421a676d1b147b16b82c9225157dc629087ef8ec4d5e2960f9437a90dac0a5" +checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386" dependencies = [ "atomic-waker", "bytes", @@ -1195,13 +1475,68 @@ dependencies = [ "futures-core", "futures-sink", "http", - "indexmap 2.9.0", + "indexmap 2.11.0", "slab", "tokio", "tokio-util", "tracing", ] +[[package]] +name = "halo2_gadgets" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73a5e510d58a07d8ed238a5a8a436fe6c2c79e1bb2611f62688bc65007b4e6e7" +dependencies = [ + "arrayvec", + "bitvec", + "ff", + "group", + "halo2_poseidon", + "halo2_proofs", + "lazy_static", + "pasta_curves", + "rand", + "sinsemilla", + "subtle", + "uint", +] + +[[package]] +name = "halo2_legacy_pdqsort" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47716fe1ae67969c5e0b2ef826f32db8c3be72be325e1aa3c1951d06b5575ec5" + +[[package]] +name = "halo2_poseidon" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa3da60b81f02f9b33ebc6252d766f843291fb4d2247a07ae73d20b791fc56f" +dependencies = [ + "bitvec", + "ff", + "group", + "pasta_curves", +] + +[[package]] +name = "halo2_proofs" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "019561b5f3be60731e7b72f3f7878c5badb4174362d860b03d3cf64cb47f90db" +dependencies = [ + "blake2b_simd", + "ff", + "group", + "halo2_legacy_pdqsort", + "indexmap 1.9.3", + "maybe-rayon", + "pasta_curves", + "rand_core", + "tracing", +] + [[package]] name = "hashbrown" version = "0.12.3" @@ -1210,9 +1545,9 @@ checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" [[package]] name = "hashbrown" -version = "0.15.4" +version = "0.15.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" dependencies = [ "allocator-api2", "equivalent", @@ -1233,9 +1568,9 @@ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hermit-abi" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f154ce46856750ed433c8649605bf7ed2de3bc35fd9d2a9f30cddd873c80cb08" +checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" [[package]] name = "hex" @@ -1267,16 +1602,25 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "digest", + "digest 0.10.7", ] [[package]] -name = "home" -version = "0.5.11" +name = "hmac" +version = "0.13.0-pre.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" +checksum = "e4b1fb14e4df79f9406b434b60acef9f45c26c50062cccf1346c6103b8c47d58" dependencies = [ - "windows-sys 0.59.0", + "digest 0.11.0-pre.9", +] + +[[package]] +name = "home" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" +dependencies = [ + "windows-sys 0.59.0", ] [[package]] @@ -1319,21 +1663,32 @@ version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" +[[package]] +name = "hybrid-array" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2d35805454dc9f8662a98d6d61886ffe26bd465f5960e0e55345c70d5c0d2a9" +dependencies = [ + "typenum", +] + [[package]] name = "hyper" -version = "1.6.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" +checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e" dependencies = [ + "atomic-waker", "bytes", "futures-channel", - "futures-util", + "futures-core", "h2", "http", "http-body", "httparse", "itoa", "pin-project-lite", + "pin-utils", "smallvec", "tokio", "want", @@ -1373,9 +1728,9 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.14" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc2fdfdbff08affe55bb779f33b053aa1fe5dd5b54c257343c17edfa55711bdb" +checksum = "8d9b05277c7e8da2c93a568989bb6207bef0112e8d17df7a6eda4a3cf143bc5e" dependencies = [ "base64 0.22.1", "bytes", @@ -1515,9 +1870,9 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "idna" -version = "1.0.3" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" dependencies = [ "idna_adapter", "smallvec", @@ -1534,11 +1889,20 @@ dependencies = [ "icu_properties", ] +[[package]] +name = "incrementalmerkletree" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30821f91f0fa8660edca547918dc59812893b497d07c1144f326f07fdd94aba9" +dependencies = [ + "either", +] + [[package]] name = "indenter" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" +checksum = "964de6e86d545b246d84badc0fef527924ace5134f30641c203ef52ba83f58d5" [[package]] name = "indexmap" @@ -1553,12 +1917,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.9.0" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" +checksum = "f2481980430f9f78649238835720ddccc57e52df14ffce1c6f37391d61b563e9" dependencies = [ "equivalent", - "hashbrown 0.15.4", + "hashbrown 0.15.5", "serde", ] @@ -1571,6 +1935,17 @@ dependencies = [ "generic-array", ] +[[package]] +name = "io-uring" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "046fa2d4d00aea763528b4950358d0ead425372445dc8ff86312b3c69ff7727b" +dependencies = [ + "bitflags 2.9.4", + "cfg-if 1.0.3", + "libc", +] + [[package]] name = "ipnet" version = "2.11.0" @@ -1613,9 +1988,9 @@ checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" [[package]] name = "jobserver" -version = "0.1.33" +version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" +checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" dependencies = [ "getrandom 0.3.3", "libc", @@ -1623,9 +1998,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.77" +version = "0.3.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +checksum = "0c0b063578492ceec17683ef2f8c5e89121fbd0b172cbc280635ab7567db2738" dependencies = [ "once_cell", "wasm-bindgen", @@ -1660,18 +2035,32 @@ dependencies = [ "serde_json", ] +[[package]] +name = "jubjub" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8499f7a74008aafbecb2a2e608a3e13e4dd3e84df198b604451efe93f2de6e61" +dependencies = [ + "bitvec", + "bls12_381", + "ff", + "group", + "rand_core", + "subtle", +] + [[package]] name = "k256" version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" dependencies = [ - "cfg-if 1.0.1", + "cfg-if 1.0.3", "ecdsa", "elliptic-curve", "once_cell", "serdect", - "sha2", + "sha2 0.10.9", "signature", ] @@ -1695,17 +2084,23 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.172" +version = "0.2.175" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543" + +[[package]] +name = "libm" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" +checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" [[package]] name = "libredox" -version = "0.1.3" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +checksum = "391290121bad3d37fbddad76d8f5d1c1c314cfc646d143d7e07a3086ddff0ce3" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "libc", "redox_syscall", ] @@ -1722,6 +2117,12 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" +[[package]] +name = "litrs" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5e54036fe321fd421e10d732f155734c4e4afd610dd556d9a82833ab3ee0bed" + [[package]] name = "lock_api" version = "0.4.13" @@ -1734,9 +2135,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.27" +version = "0.4.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" +checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" [[package]] name = "lru" @@ -1744,14 +2145,23 @@ version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" dependencies = [ - "hashbrown 0.15.4", + "hashbrown 0.15.5", +] + +[[package]] +name = "maybe-rayon" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea1f30cedd69f0a2954655f7188c6a834246d2bcf1e315e2ac40c4b24dc9519" +dependencies = [ + "cfg-if 1.0.3", ] [[package]] name = "memchr" -version = "2.7.4" +version = "2.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" +checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" [[package]] name = "memory_units" @@ -1759,6 +2169,12 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8452105ba047068f40ff7093dd1d9da90898e63dd61736462e9cdda6a90ad3c3" +[[package]] +name = "memuse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d97bbf43eb4f088f8ca469930cde17fa036207c9a5e02ccc5107c4e8b17c964" + [[package]] name = "mime" version = "0.3.17" @@ -1827,7 +2243,7 @@ dependencies = [ [[package]] name = "nbtc" -version = "0.1.0" +version = "0.2.0" dependencies = [ "near-contract-standards", "near-sdk", @@ -1840,7 +2256,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c49593c9e94454a2368a4c0a511bf4bf1413aff4d23f16e1d8f4e64b5215351" dependencies = [ "borsh", - "schemars", + "schemars 0.8.22", "semver", "serde", ] @@ -1871,7 +2287,7 @@ dependencies = [ "near_schemafy_lib", "proc-macro2", "quote", - "schemars", + "schemars 0.8.22", "serde_json", ] @@ -1887,9 +2303,9 @@ dependencies = [ [[package]] name = "near-account-id" -version = "1.1.1" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ed69d94899cfdfba16182bd681ad9e6b7f888e29532b04c56da9ae05a4c5bc4" +checksum = "8542f031adc257a27ba46ad904c241a88470ee95130663a9e5c08cf8e124f4d4" dependencies = [ "borsh", "serde", @@ -1897,23 +2313,23 @@ dependencies = [ [[package]] name = "near-chain-configs" -version = "0.30.1" +version = "0.30.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35aca612e6aee487a185766f51f5218e305257270136f0b911f2ecd4184c8986" +checksum = "b309d3b1f8adee89167babb4695ae1fdfe1102ef019b9f44dc1dbc5389327c42" dependencies = [ "anyhow", "bytesize", "chrono", - "derive_more", - "near-config-utils", - "near-crypto", - "near-parameters", - "near-primitives", - "near-time", + "derive_more 1.0.0", + "near-config-utils 0.30.3", + "near-crypto 0.30.3", + "near-parameters 0.30.3", + "near-primitives 0.30.3", + "near-time 0.30.3", "num-rational", "serde", "serde_json", - "sha2", + "sha2 0.10.9", "smart-default", "time", "tracing", @@ -1921,68 +2337,114 @@ dependencies = [ [[package]] name = "near-config-utils" -version = "0.30.1" +version = "0.30.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbb6045fa1f9503c61665af42d1534b04a854a6b4aeecb33fd53a5acaa4635b7" +dependencies = [ + "anyhow", + "json_comments", + "thiserror 2.0.16", + "tracing", +] + +[[package]] +name = "near-config-utils" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f94d5cbc85fdf0bf4ce0836d22243ab156b8d9491de04128eb2e1a334f3f9aec" +checksum = "4627060004177ea30e122644de51aaf2ea076fd1b6d22f6f3d19e7dfb86af949" dependencies = [ "anyhow", "json_comments", - "thiserror 2.0.12", + "thiserror 2.0.16", "tracing", ] [[package]] name = "near-contract-standards" -version = "5.14.0" +version = "5.17.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef23d0204b2c12ff54bb04c6cb83fadf8d74ea77acde09263f279b3b9c97a684" +checksum = "deeee26550aaf4b670eab42e56bd1f329a29759d26424db5a97a9277eb27fa3f" dependencies = [ "near-sdk", ] [[package]] name = "near-crypto" -version = "0.30.1" +version = "0.30.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8808d0d9674795fd6f5c78a4d50b80d297cedb79731525a8111c960aa110f9e" +checksum = "7c635fb7ddbd807d92e1a8a3dc57d45e92faa15eaf2a8f0fbc977f6bc8fda6ce" dependencies = [ "blake2", "borsh", "bs58 0.4.0", "curve25519-dalek", - "derive_more", + "derive_more 1.0.0", "ed25519-dalek", "hex", "near-account-id", - "near-config-utils", - "near-schema-checker-lib", - "near-stdx", + "near-config-utils 0.30.3", + "near-schema-checker-lib 0.30.3", + "near-stdx 0.30.3", "primitive-types", "rand", "secp256k1 0.27.0", "serde", "serde_json", "subtle", - "thiserror 2.0.12", + "thiserror 2.0.16", +] + +[[package]] +name = "near-crypto" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40596a621b4cbf7c07189dac59ebf1239f8108ef4755620622db5b86743e0c3a" +dependencies = [ + "blake2", + "borsh", + "bs58 0.4.0", + "curve25519-dalek", + "derive_more 2.0.1", + "ed25519-dalek", + "hex", + "near-account-id", + "near-config-utils 0.31.1", + "near-schema-checker-lib 0.31.1", + "near-stdx 0.31.1", + "primitive-types", + "secp256k1 0.27.0", + "serde", + "serde_json", + "subtle", + "thiserror 2.0.16", ] [[package]] name = "near-fmt" -version = "0.30.1" +version = "0.30.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64c0e4d846b9c27b30e5f24e788fb8cc55c046f72e2048e2539dbcb04d9a71c4" +checksum = "32d6b26918e71a60b56b0fe6604198d0b29df4e0b27dc944cad7af3e1ada6976" dependencies = [ - "near-primitives-core", + "near-primitives-core 0.30.3", +] + +[[package]] +name = "near-fmt" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96e9fa3af54e4b13f4f0657e3ae640e63f7f8953a5fbedf836bc47b43f973dde" +dependencies = [ + "near-primitives-core 0.31.1", ] [[package]] name = "near-gas" -version = "0.3.0" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "180edcc7dc2fac41f93570d0c7b759c1b6d492f6ad093d749d644a40b4310a97" +checksum = "41ca4044222f2f392ab61d27d0aefc5106b1ece4dcd22c5c987e3c75371d2a37" dependencies = [ "borsh", - "schemars", + "schemars 0.8.22", "serde", ] @@ -1996,49 +2458,68 @@ dependencies = [ "lazy_static", "log", "near-chain-configs", - "near-crypto", + "near-crypto 0.30.3", "near-jsonrpc-primitives", - "near-primitives", + "near-primitives 0.30.3", "reqwest", "serde", "serde_json", - "thiserror 2.0.12", + "thiserror 2.0.16", ] [[package]] name = "near-jsonrpc-primitives" -version = "0.30.1" +version = "0.30.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63ac3e779b1ad979957f05e43c92a79fbe7e1315647ab4d530e2a9a66bc62f5e" +checksum = "963e3051ebca3bb37a4a411b44d5744efdfa0b227dbcad5e03732dd0b9672b2d" dependencies = [ "arbitrary", "near-chain-configs", - "near-crypto", - "near-primitives", - "near-schema-checker-lib", + "near-crypto 0.30.3", + "near-primitives 0.30.3", + "near-schema-checker-lib 0.30.3", "serde", "serde_json", - "thiserror 2.0.12", + "thiserror 2.0.16", "time", ] [[package]] name = "near-parameters" -version = "0.30.1" +version = "0.30.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dbb139bec6b7088d6afab0a3662725e5ee82d0ad725b67c1d45447c3d45fe55" +checksum = "3e364f850512d7f1ee1eb398e1da85fd3ef95eb3cbce8db2d505eed054bbe848" dependencies = [ "borsh", "enum-map", "near-account-id", - "near-primitives-core", - "near-schema-checker-lib", + "near-primitives-core 0.30.3", + "near-schema-checker-lib 0.30.3", "num-rational", "serde", "serde_repr", "serde_yaml", "strum 0.24.1", - "thiserror 2.0.12", + "thiserror 2.0.16", +] + +[[package]] +name = "near-parameters" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a261341fca84a5322710f6f4eae45d809fce24a19b9913333e436da5d4de3574" +dependencies = [ + "borsh", + "enum-map", + "near-account-id", + "near-primitives-core 0.31.1", + "near-schema-checker-lib 0.31.1", + "num-rational", + "serde", + "serde_repr", + "serde_yaml", + "strum 0.24.1", + "thiserror 2.0.16", ] [[package]] @@ -2066,9 +2547,9 @@ dependencies = [ [[package]] name = "near-primitives" -version = "0.30.1" +version = "0.30.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f06d70f10eb505600ec6627f5fd64a1d1700af71098282e339c993e6319151d" +checksum = "1ca734a17b2a973e4753658dd4370f6b35e106ff6c0f9620cbe5283988597833" dependencies = [ "arbitrary", "base64 0.21.7", @@ -2076,20 +2557,20 @@ dependencies = [ "borsh", "bytes", "bytesize", - "cfg-if 1.0.1", + "cfg-if 1.0.3", "chrono", - "derive_more", + "derive_more 1.0.0", "easy-ext", "enum-map", "hex", "itertools", - "near-crypto", - "near-fmt", - "near-parameters", - "near-primitives-core", - "near-schema-checker-lib", - "near-stdx", - "near-time", + "near-crypto 0.30.3", + "near-fmt 0.30.3", + "near-parameters 0.30.3", + "near-primitives-core 0.30.3", + "near-schema-checker-lib 0.30.3", + "near-stdx 0.30.3", + "near-time 0.30.3", "num-rational", "ordered-float", "primitive-types", @@ -2101,30 +2582,90 @@ dependencies = [ "sha3", "smart-default", "strum 0.24.1", - "thiserror 2.0.12", + "thiserror 2.0.16", + "tracing", + "zstd 0.13.3", +] + +[[package]] +name = "near-primitives" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "271dbac58be374c7dddbc511ade1f4eeeea7ae972ef368b358e3298facb2eec6" +dependencies = [ + "arbitrary", + "base64 0.21.7", + "bitvec", + "borsh", + "bytes", + "bytesize", + "chrono", + "derive_more 2.0.1", + "easy-ext", + "enum-map", + "hex", + "itertools", + "near-crypto 0.31.1", + "near-fmt 0.31.1", + "near-parameters 0.31.1", + "near-primitives-core 0.31.1", + "near-schema-checker-lib 0.31.1", + "near-stdx 0.31.1", + "near-time 0.31.1", + "num-rational", + "ordered-float", + "primitive-types", + "serde", + "serde_json", + "serde_with", + "sha3", + "smart-default", + "strum 0.24.1", + "thiserror 2.0.16", "tracing", "zstd 0.13.3", ] [[package]] name = "near-primitives-core" -version = "0.30.1" +version = "0.30.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "953534fb0dff03f2042a12a933e31d86dd79601c2640338307bba724919e1876" +dependencies = [ + "arbitrary", + "base64 0.21.7", + "borsh", + "bs58 0.4.0", + "derive_more 1.0.0", + "enum-map", + "near-account-id", + "near-schema-checker-lib 0.30.3", + "num-rational", + "serde", + "serde_repr", + "sha2 0.10.9", + "thiserror 2.0.16", +] + +[[package]] +name = "near-primitives-core" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "408abb7e360ae1353d5a3cde62b4a2f0abde96c9ff4045f23cabda15c22b6ec9" +checksum = "621c20e3fd77ba5e1d4fd33f6b7383dadcaca3faf60e2a8fc71a6cc7e4463c31" dependencies = [ "arbitrary", "base64 0.21.7", "borsh", "bs58 0.4.0", - "derive_more", + "derive_more 2.0.1", "enum-map", "near-account-id", - "near-schema-checker-lib", + "near-schema-checker-lib 0.31.1", "num-rational", "serde", "serde_repr", - "sha2", - "thiserror 2.0.12", + "sha2 0.10.9", + "thiserror 2.0.16", ] [[package]] @@ -2142,41 +2683,63 @@ dependencies = [ [[package]] name = "near-schema-checker-core" -version = "0.30.1" +version = "0.30.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed1fbfbc3c53b00aa893f8cb64abc5c12601edb8cecb878baf6f8f00e3184d3d" +checksum = "ecf3abb048646186aef4796d5bcda22c2c9246beaabaf3ea568c0cce2229257b" + +[[package]] +name = "near-schema-checker-core" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3515d1bd55d87bfb392f6889313dcfbcaaec4229bb4a4abb5640ab8dc5eda70c" [[package]] name = "near-schema-checker-lib" -version = "0.30.1" +version = "0.30.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f424ce08c8d715f529a8f8dcd246f574042f0ed0b393d0aaefdf3cc693d5a9f" +checksum = "1416c5b236ea30152895df73213eca04c997c7bd60d83a1c18141f8705759865" dependencies = [ - "near-schema-checker-core", - "near-schema-checker-macro", + "near-schema-checker-core 0.30.3", + "near-schema-checker-macro 0.30.3", ] +[[package]] +name = "near-schema-checker-lib" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93739f2bcb64be8bd04342beae187317836b9c2826b6cfba429c2001e4db73a8" +dependencies = [ + "near-schema-checker-core 0.31.1", + "near-schema-checker-macro 0.31.1", +] + +[[package]] +name = "near-schema-checker-macro" +version = "0.30.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a60d29f7f64c2fc6d2fd25139863a6887b4d7fbcc79db8caad9c72eca67f05e9" + [[package]] name = "near-schema-checker-macro" -version = "0.30.1" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d191936f902770069255b16c95d1fb8edd6f3c3817c9228933a20ec8466737a3" +checksum = "2dc45bb3760350de7f957c11827e1e20c5a4aff8d95d19fd2c0c492d795bfb02" [[package]] name = "near-sdk" -version = "5.14.0" +version = "5.17.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1477ca4eb6d4a70a0e5740c5d34c268eedacce936ca557d3450ed5bd873fd06" +checksum = "29b8a870f6bfe533f2f5b35f6f1fb1a818105de80b2de6c0d78000f78729e4cc" dependencies = [ "base64 0.22.1", "borsh", "bs58 0.5.1", "near-account-id", - "near-crypto", + "near-crypto 0.31.1", "near-gas", - "near-parameters", - "near-primitives", - "near-primitives-core", + "near-parameters 0.31.1", + "near-primitives 0.31.1", + "near-primitives-core 0.31.1", "near-sdk-macros", "near-sys", "near-token", @@ -2189,9 +2752,9 @@ dependencies = [ [[package]] name = "near-sdk-macros" -version = "5.14.0" +version = "5.17.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f29fe6d31a827e421d0d3f5c38fe3cc73f9f2a2aae41d2601d37c22d7ec1aae" +checksum = "342e608e586394911a799adb2536e3ac93c45e83cc472acdc882f603c18b6046" dependencies = [ "Inflector", "darling 0.20.11", @@ -2201,31 +2764,48 @@ dependencies = [ "serde_json", "strum 0.26.3", "strum_macros 0.26.4", - "syn 2.0.102", + "syn 2.0.106", ] [[package]] name = "near-stdx" -version = "0.30.1" +version = "0.30.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f292226fd8f4c7c21cf6b1da1c17e9b484ebc1b9aeb4251d69336d28b7917ace" +checksum = "13869f432b1b457c36c9332471d868da6b0ee971e2da0b94deb376aba8d27e6b" + +[[package]] +name = "near-stdx" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e3c38fc0843ef7c5bca717cc4daaf2af05441c3cb9cf259824e226387b18740" [[package]] name = "near-sys" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7d8e0ba9994e4d54cb4b301cd5fa9f2defcb69851148103512b9640a7e91572" +checksum = "e64e114297f37c94aa20df6a6f92822a1b41da76b4961298caf08ba80b7779b2" [[package]] name = "near-time" -version = "0.30.1" +version = "0.30.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "806ae1785ed79e99e9183646e5fe18ecee504385350a45c600ee189d904808a9" +checksum = "d1b143d7249e64ebfd1f6da7b1c15f4a9d0ee5d9be3556771a5b4b665a2c22cb" dependencies = [ "serde", "time", ] +[[package]] +name = "near-time" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "697acb90b55637c075ce47be4e7834654c34157b88036b199d7189ced6d0f89c" +dependencies = [ + "parking_lot", + "serde", + "time", +] + [[package]] name = "near-token" version = "0.3.0" @@ -2238,9 +2818,9 @@ dependencies = [ [[package]] name = "near-vm-runner" -version = "0.30.1" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8e44b5b6582676805ab61bc60e65e56eec1460c58a7c951dd662b7a5c677554" +checksum = "5ddefc8e4460b2c080b34f800b0bd06fd971b37d64ec7279552d792468228924" dependencies = [ "blst", "borsh", @@ -2248,23 +2828,23 @@ dependencies = [ "ed25519-dalek", "enum-map", "lru", - "near-crypto", - "near-parameters", - "near-primitives-core", - "near-schema-checker-lib", - "near-stdx", + "near-crypto 0.31.1", + "near-parameters 0.31.1", + "near-primitives-core 0.31.1", + "near-schema-checker-lib 0.31.1", + "near-stdx 0.31.1", "num-rational", + "parking_lot", "rand", "rayon", - "ripemd", + "ripemd 0.1.3", "rustix", "serde", - "serde_repr", - "sha2", + "sha2 0.10.9", "sha3", "strum 0.24.1", "tempfile", - "thiserror 2.0.12", + "thiserror 2.0.16", "tracing", "zeropool-bn", ] @@ -2285,18 +2865,18 @@ dependencies = [ "libc", "near-abi-client", "near-account-id", - "near-crypto", + "near-crypto 0.30.3", "near-gas", "near-jsonrpc-client", "near-jsonrpc-primitives", - "near-primitives", + "near-primitives 0.30.3", "near-sandbox-utils", "near-token", "rand", "reqwest", "serde", "serde_json", - "sha2", + "sha2 0.10.9", "tempfile", "thiserror 1.0.69", "tokio", @@ -2332,6 +2912,12 @@ dependencies = [ "uriparse", ] +[[package]] +name = "nonempty" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "549e471b99ccaf2f89101bec68f4d244457d5a95a9c3d0672e9564124397741d" + [[package]] name = "num-bigint" version = "0.3.3" @@ -2343,6 +2929,16 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", +] + [[package]] name = "num-conv" version = "0.1.0" @@ -2365,7 +2961,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "12ac428b1cb17fce6f731001d307d351ec70a6d202fc2e60f7d4c5e42d8f4f07" dependencies = [ "autocfg", - "num-bigint", + "num-bigint 0.3.3", "num-integer", "num-traits", "serde", @@ -2405,14 +3001,20 @@ version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" +[[package]] +name = "opaque-debug" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" + [[package]] name = "openssl" version = "0.10.73" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8" dependencies = [ - "bitflags 2.9.1", - "cfg-if 1.0.1", + "bitflags 2.9.4", + "cfg-if 1.0.3", "foreign-types", "libc", "once_cell", @@ -2428,7 +3030,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.102", + "syn 2.0.106", ] [[package]] @@ -2449,6 +3051,41 @@ dependencies = [ "vcpkg", ] +[[package]] +name = "orchard" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1ef66fcf99348242a20d582d7434da381a867df8dc155b3a980eca767c56137" +dependencies = [ + "aes", + "bitvec", + "blake2b_simd", + "core2", + "ff", + "fpe", + "getset", + "group", + "halo2_gadgets", + "halo2_poseidon", + "halo2_proofs", + "hex", + "incrementalmerkletree", + "lazy_static", + "memuse", + "nonempty", + "pasta_curves", + "rand", + "reddsa", + "serde", + "sinsemilla", + "subtle", + "tracing", + "visibility", + "zcash_note_encryption", + "zcash_spec", + "zip32", +] + [[package]] name = "ordered-float" version = "4.6.0" @@ -2461,6 +3098,15 @@ dependencies = [ "serde", ] +[[package]] +name = "pairing" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81fec4625e73cf41ef4bb6846cafa6d44736525f442ba45e407c4a000a13996f" +dependencies = [ + "group", +] + [[package]] name = "parking_lot" version = "0.12.4" @@ -2477,11 +3123,11 @@ version = "0.9.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" dependencies = [ - "cfg-if 1.0.1", + "cfg-if 1.0.3", "libc", "redox_syscall", "smallvec", - "windows-targets", + "windows-targets 0.52.6", ] [[package]] @@ -2495,6 +3141,21 @@ dependencies = [ "subtle", ] +[[package]] +name = "pasta_curves" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e57598f73cc7e1b2ac63c79c517b31a0877cd7c402cdcaa311b5208de7a095" +dependencies = [ + "blake2b_simd", + "ff", + "group", + "lazy_static", + "rand", + "static_assertions", + "subtle", +] + [[package]] name = "pathdiff" version = "0.2.3" @@ -2510,17 +3171,17 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" dependencies = [ - "digest", - "hmac", + "digest 0.10.7", + "hmac 0.12.1", "password-hash", - "sha2", + "sha2 0.10.9", ] [[package]] name = "percent-encoding" -version = "2.3.1" +version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "pin-project" @@ -2539,7 +3200,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn 2.0.102", + "syn 2.0.106", ] [[package]] @@ -2570,11 +3231,22 @@ version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" +[[package]] +name = "poly1305" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" +dependencies = [ + "cpufeatures", + "opaque-debug", + "universal-hash", +] + [[package]] name = "potential_utf" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" +checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a" dependencies = [ "zerovec", ] @@ -2606,12 +3278,12 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.2.33" +version = "0.2.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dee91521343f4c5c6a63edd65e54f31f5c92fe8978c40a4282f8372194c6a7d" +checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", - "syn 2.0.102", + "syn 2.0.106", ] [[package]] @@ -2637,16 +3309,38 @@ dependencies = [ name = "proc-macro-crate" version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" +checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" +dependencies = [ + "toml_edit", +] + +[[package]] +name = "proc-macro-error-attr2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" +dependencies = [ + "proc-macro2", + "quote", +] + +[[package]] +name = "proc-macro-error2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" dependencies = [ - "toml_edit", + "proc-macro-error-attr2", + "proc-macro2", + "quote", + "syn 2.0.106", ] [[package]] name = "proc-macro2" -version = "1.0.95" +version = "1.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" +checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" dependencies = [ "unicode-ident", ] @@ -2662,9 +3356,9 @@ dependencies = [ [[package]] name = "r-efi" -version = "5.2.0" +version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" [[package]] name = "radium" @@ -2706,9 +3400,9 @@ dependencies = [ [[package]] name = "rayon" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" dependencies = [ "either", "rayon-core", @@ -2716,21 +3410,51 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.12.1" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" dependencies = [ "crossbeam-deque", "crossbeam-utils", ] +[[package]] +name = "reddsa" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78a5191930e84973293aa5f532b513404460cd2216c1cfb76d08748c15b40b02" +dependencies = [ + "blake2b_simd", + "byteorder", + "group", + "hex", + "jubjub", + "pasta_curves", + "rand_core", + "serde", + "thiserror 1.0.69", + "zeroize", +] + +[[package]] +name = "redjubjub" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89b0ac1bc6bb3696d2c6f52cff8fba57238b81da8c0214ee6cd146eb8fde364e" +dependencies = [ + "rand_core", + "reddsa", + "thiserror 1.0.69", + "zeroize", +] + [[package]] name = "redox_syscall" -version = "0.5.12" +version = "0.5.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "928fca9cf2aa042393a8325b9ead81d2f0df4cb12e1e24cef072922ccd99c5af" +checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", ] [[package]] @@ -2744,11 +3468,31 @@ dependencies = [ "thiserror 1.0.69", ] +[[package]] +name = "ref-cast" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a0ae411dbe946a674d89546582cea4ba2bb8defac896622d6496f14c23ba5cf" +dependencies = [ + "ref-cast-impl", +] + +[[package]] +name = "ref-cast-impl" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1165225c21bff1f3bbce98f5a1f889949bc902d3575308cc7b0de30b4f6d27c7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + [[package]] name = "regex" -version = "1.11.1" +version = "1.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +checksum = "23d7fd106d8c02486a8d64e778353d1cffe08ce79ac2e82f540c86d0facf6912" dependencies = [ "aho-corasick", "memchr", @@ -2758,9 +3502,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +checksum = "6b9458fa0bfeeac22b5ca447c63aaf45f28439a709ccd244698632f9aa6394d6" dependencies = [ "aho-corasick", "memchr", @@ -2769,15 +3513,15 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" +checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001" [[package]] name = "reqwest" -version = "0.12.20" +version = "0.12.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eabf4c97d9130e2bf606614eb937e86edac8292eaa6f422f995d7e8de1eb1813" +checksum = "d429f34c8092b2d42c7c93cec323bb4adeb7c67698f70839adec842ec10c7ceb" dependencies = [ "base64 0.22.1", "bytes", @@ -2819,7 +3563,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" dependencies = [ - "hmac", + "hmac 0.12.1", "subtle", ] @@ -2830,7 +3574,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ "cc", - "cfg-if 1.0.1", + "cfg-if 1.0.3", "getrandom 0.2.16", "libc", "untrusted", @@ -2843,14 +3587,23 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd124222d17ad93a644ed9d011a40f4fb64aa54275c08cc216524a9ea82fb09f" dependencies = [ - "digest", + "digest 0.10.7", +] + +[[package]] +name = "ripemd" +version = "0.2.0-pre.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e48cf93482ea998ad1302c42739bc73ab3adc574890c373ec89710e219357579" +dependencies = [ + "digest 0.11.0-pre.9", ] [[package]] name = "rustc-demangle" -version = "0.1.25" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "989e6739f80c4ad5b13e0fd7fe89531180375b18520cc8c82080e4dc4035b84f" +checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace" [[package]] name = "rustc-hex" @@ -2869,22 +3622,22 @@ dependencies = [ [[package]] name = "rustix" -version = "1.0.7" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266" +checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "errno", "libc", "linux-raw-sys", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] name = "rustls" -version = "0.23.27" +version = "0.23.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "730944ca083c1c233a75c09f199e973ca499344a2b7ba9e755c457e86fb4a321" +checksum = "c0ebcbd2f03de0fc1122ad9bb24b127a5a6cd51d72604a3f3c50ac459762b6cc" dependencies = [ "log", "once_cell", @@ -2906,9 +3659,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.103.3" +version = "0.103.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4a72fe2bcf7a6ac6fd7d0b9e5cb68aeb7d4c0a0271730218b3e92d43b4eb435" +checksum = "0a17884ae0c1b773f1ccd2bd4a8c72f16da897310a98b0e84bf349ad5ead92fc" dependencies = [ "ring", "rustls-pki-types", @@ -2917,9 +3670,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.21" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" [[package]] name = "ryu" @@ -2927,11 +3680,45 @@ version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" +[[package]] +name = "sapling-crypto" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9d3c081c83f1dc87403d9d71a06f52301c0aa9ea4c17da2a3435bbf493ffba4" +dependencies = [ + "aes", + "bellman", + "bitvec", + "blake2b_simd", + "blake2s_simd", + "bls12_381", + "core2", + "document-features", + "ff", + "fpe", + "getset", + "group", + "hex", + "incrementalmerkletree", + "jubjub", + "lazy_static", + "memuse", + "rand", + "rand_core", + "redjubjub", + "subtle", + "tracing", + "zcash_note_encryption", + "zcash_spec", + "zip32", +] + [[package]] name = "satoshi-bridge" -version = "0.5.1" +version = "0.6.0" dependencies = [ "bitcoin", + "core2", "crypto-shared", "ed25519-dalek", "getrandom 0.2.16", @@ -2942,6 +3729,10 @@ dependencies = [ "near-sdk", "near-workspaces", "tokio", + "zcash_address", + "zcash_primitives", + "zcash_protocol", + "zcash_transparent", ] [[package]] @@ -2965,6 +3756,30 @@ dependencies = [ "serde_json", ] +[[package]] +name = "schemars" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + +[[package]] +name = "schemars" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82d20c4491bc164fa2f6c5d44565947a52ad80b9505d8e36f8d54c27c739fcd0" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + [[package]] name = "schemars_derive" version = "0.8.22" @@ -2974,7 +3789,7 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 2.0.102", + "syn 2.0.106", ] [[package]] @@ -3005,7 +3820,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "25996b82292a7a57ed3508f052cfff8640d38d32018784acd714758b43da9c8f" dependencies = [ "rand", - "secp256k1-sys 0.8.1", + "secp256k1-sys 0.8.2", ] [[package]] @@ -3021,9 +3836,9 @@ dependencies = [ [[package]] name = "secp256k1-sys" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70a129b9e9efbfb223753b9163c4ab3b13cff7fd9c7f010fbac25ab4099fa07e" +checksum = "4473013577ec77b4ee3668179ef1186df3146e2cf2d927bd200974c6fe60fd99" dependencies = [ "cc", ] @@ -3043,7 +3858,7 @@ version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "core-foundation", "core-foundation-sys", "libc", @@ -3086,7 +3901,7 @@ checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" dependencies = [ "proc-macro2", "quote", - "syn 2.0.102", + "syn 2.0.106", ] [[package]] @@ -3097,14 +3912,14 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn 2.0.102", + "syn 2.0.106", ] [[package]] name = "serde_json" -version = "1.0.140" +version = "1.0.143" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" +checksum = "d401abef1d108fbd9cbaebc3e46611f4b1021f714a0597a71f41ee463f5f4a5a" dependencies = [ "itoa", "memchr", @@ -3120,7 +3935,7 @@ checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.102", + "syn 2.0.106", ] [[package]] @@ -3137,15 +3952,17 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.12.0" +version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6b6f7f2fcb69f747921f79f3926bd1e203fce4fef62c268dd3abfb6d86029aa" +checksum = "f2c45cd61fefa9db6f254525d46e392b852e0e61d9a1fd36e5bd183450a556d5" dependencies = [ "base64 0.22.1", "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.9.0", + "indexmap 2.11.0", + "schemars 0.9.0", + "schemars 1.0.4", "serde", "serde_derive", "serde_json", @@ -3155,14 +3972,14 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.12.0" +version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d00caa5193a3c8362ac2b73be6b9e768aa5a4b2f721d8f4b339600c3cb51f8e" +checksum = "de90945e6565ce0d9a25098082ed4ee4002e047cb59892c318d66821e14bb30f" dependencies = [ "darling 0.20.11", "proc-macro2", "quote", - "syn 2.0.102", + "syn 2.0.106", ] [[package]] @@ -3171,7 +3988,7 @@ version = "0.9.34+deprecated" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" dependencies = [ - "indexmap 2.9.0", + "indexmap 2.11.0", "itoa", "ryu", "serde", @@ -3194,9 +4011,9 @@ version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ - "cfg-if 1.0.1", + "cfg-if 1.0.3", "cpufeatures", - "digest", + "digest 0.10.7", ] [[package]] @@ -3205,9 +4022,20 @@ version = "0.10.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ - "cfg-if 1.0.1", + "cfg-if 1.0.3", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "sha2" +version = "0.11.0-pre.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "540c0893cce56cdbcfebcec191ec8e0f470dd1889b6e7a0b503e310a94a168f5" +dependencies = [ + "cfg-if 1.0.3", "cpufeatures", - "digest", + "digest 0.11.0-pre.9", ] [[package]] @@ -3216,7 +4044,7 @@ version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" dependencies = [ - "digest", + "digest 0.10.7", "keccak", ] @@ -3228,9 +4056,9 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "signal-hook-registry" -version = "1.4.5" +version = "1.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9203b8055f63a2a00e2f593bb0510367fe707d7ff1e5c872de2f537b339e5410" +checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" dependencies = [ "libc", ] @@ -3241,10 +4069,21 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ - "digest", + "digest 0.10.7", "rand_core", ] +[[package]] +name = "sinsemilla" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d268ae0ea06faafe1662e9967cd4f9022014f5eeb798e0c302c876df8b7af9c" +dependencies = [ + "group", + "pasta_curves", + "subtle", +] + [[package]] name = "siphasher" version = "0.3.11" @@ -3253,12 +4092,9 @@ checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" [[package]] name = "slab" -version = "0.4.9" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" -dependencies = [ - "autocfg", -] +checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" [[package]] name = "smallvec" @@ -3274,17 +4110,17 @@ checksum = "0eb01866308440fc64d6c44d9e86c5cc17adfe33c4d6eed55da9145044d0ffc1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.102", + "syn 2.0.106", ] [[package]] name = "socket2" -version = "0.5.10" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" +checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -3365,7 +4201,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.102", + "syn 2.0.106", ] [[package]] @@ -3387,9 +4223,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.102" +version = "2.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6397daf94fa90f058bd0fd88429dd9e5738999cca8d701813c80723add80462" +checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" dependencies = [ "proc-macro2", "quote", @@ -3413,7 +4249,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.102", + "syn 2.0.106", ] [[package]] @@ -3422,7 +4258,7 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "core-foundation", "system-configuration-sys", ] @@ -3456,15 +4292,15 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.20.0" +version = "3.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1" +checksum = "15b61f8f20e3a6f7e0649d825294eaf317edce30f82cf6026e7e4cb9222a7d1e" dependencies = [ "fastrand", "getrandom 0.3.3", "once_cell", "rustix", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -3478,11 +4314,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.12" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" +checksum = "3467d614147380f2e4e374161426ff399c91084acd2363eaf549172b3d5e60c0" dependencies = [ - "thiserror-impl 2.0.12", + "thiserror-impl 2.0.16", ] [[package]] @@ -3493,18 +4329,18 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.102", + "syn 2.0.106", ] [[package]] name = "thiserror-impl" -version = "2.0.12" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" +checksum = "6c5e1be1c48b9172ee610da68fd9cd2770e7a4056cb3fc98710ee6906f0c7960" dependencies = [ "proc-macro2", "quote", - "syn 2.0.102", + "syn 2.0.106", ] [[package]] @@ -3518,12 +4354,11 @@ dependencies = [ [[package]] name = "time" -version = "0.3.41" +version = "0.3.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" +checksum = "83bde6f1ec10e72d583d91623c939f623002284ef622b87de38cfd546cbf2031" dependencies = [ "deranged", - "itoa", "num-conv", "powerfmt", "serde", @@ -3533,15 +4368,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.4" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" +checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" [[package]] name = "time-macros" -version = "0.2.22" +version = "0.2.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" +checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" dependencies = [ "num-conv", "time-core", @@ -3559,9 +4394,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" +checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" dependencies = [ "tinyvec_macros", ] @@ -3574,20 +4409,22 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.45.1" +version = "1.47.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75ef51a33ef1da925cea3e4eb122833cb377c61439ca401b770f54902b806779" +checksum = "89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038" dependencies = [ "backtrace", "bytes", + "io-uring", "libc", "mio", "parking_lot", "pin-project-lite", "signal-hook-registry", + "slab", "socket2", "tokio-macros", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -3598,7 +4435,7 @@ checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.102", + "syn 2.0.106", ] [[package]] @@ -3634,9 +4471,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.15" +version = "0.7.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df" +checksum = "14307c986784f72ef81c89db7d9e28d6ac26d16213b109ea501696195e6e3ce5" dependencies = [ "bytes", "futures-core", @@ -3666,7 +4503,7 @@ version = "0.22.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ - "indexmap 2.9.0", + "indexmap 2.11.0", "toml_datetime", "winnow", ] @@ -3692,7 +4529,7 @@ version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "bytes", "futures-util", "http", @@ -3729,13 +4566,13 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.29" +version = "0.1.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b1ffbcf9c6f6b99d386e7444eb608ba646ae452a36b39737deb9663b610f662" +checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" dependencies = [ "proc-macro2", "quote", - "syn 2.0.102", + "syn 2.0.106", ] [[package]] @@ -3777,6 +4614,16 @@ version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" +[[package]] +name = "universal-hash" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" +dependencies = [ + "crypto-common 0.1.6", + "subtle", +] + [[package]] name = "unsafe-libyaml" version = "0.2.11" @@ -3817,9 +4664,9 @@ dependencies = [ [[package]] name = "url" -version = "2.5.4" +version = "2.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" +checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" dependencies = [ "form_urlencoded", "idna", @@ -3845,6 +4692,17 @@ version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" +[[package]] +name = "visibility" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d674d135b4a8c1d7e813e2f8d1c9a58308aee4a680323066025e53132218bd91" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + [[package]] name = "want" version = "0.3.1" @@ -3862,46 +4720,47 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasi" -version = "0.14.2+wasi-0.2.4" +version = "0.14.3+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +checksum = "6a51ae83037bdd272a9e28ce236db8c07016dd0d50c27038b3f407533c030c95" dependencies = [ - "wit-bindgen-rt", + "wit-bindgen", ] [[package]] name = "wasm-bindgen" -version = "0.2.100" +version = "0.2.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +checksum = "7e14915cadd45b529bb8d1f343c4ed0ac1de926144b746e2710f9cd05df6603b" dependencies = [ - "cfg-if 1.0.1", + "cfg-if 1.0.3", "once_cell", "rustversion", "wasm-bindgen-macro", + "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.100" +version = "0.2.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" +checksum = "e28d1ba982ca7923fd01448d5c30c6864d0a14109560296a162f80f305fb93bb" dependencies = [ "bumpalo", "log", "proc-macro2", "quote", - "syn 2.0.102", + "syn 2.0.106", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.50" +version = "0.4.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" +checksum = "0ca85039a9b469b38336411d6d6ced91f3fc87109a2a27b0c197663f5144dffe" dependencies = [ - "cfg-if 1.0.1", + "cfg-if 1.0.3", "js-sys", "once_cell", "wasm-bindgen", @@ -3910,9 +4769,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.100" +version = "0.2.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" +checksum = "7c3d463ae3eff775b0c45df9da45d68837702ac35af998361e2c84e7c5ec1b0d" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -3920,31 +4779,31 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.100" +version = "0.2.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" +checksum = "7bb4ce89b08211f923caf51d527662b75bdc9c9c7aab40f86dcb9fb85ac552aa" dependencies = [ "proc-macro2", "quote", - "syn 2.0.102", + "syn 2.0.106", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.100" +version = "0.2.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +checksum = "f143854a3b13752c6950862c906306adb27c7e839f7414cec8fea35beab624c1" dependencies = [ "unicode-ident", ] [[package]] name = "web-sys" -version = "0.3.77" +version = "0.3.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" +checksum = "77e4b637749ff0d92b8fad63aa1f7cff3cbe125fd49c175cd6345e7272638b12" dependencies = [ "js-sys", "wasm-bindgen", @@ -3956,14 +4815,14 @@ version = "0.26.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" dependencies = [ - "webpki-roots 1.0.0", + "webpki-roots 1.0.2", ] [[package]] name = "webpki-roots" -version = "1.0.0" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2853738d1cc4f2da3a225c18ec6c3721abb31961096e9dbf5ab35fa88b19cfdb" +checksum = "7e8983c3ab33d6fb807cfcdad2491c4ea8cbc8ed839181c7dfd9c67c83e261b2" dependencies = [ "rustls-pki-types", ] @@ -4023,7 +4882,7 @@ checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" dependencies = [ "proc-macro2", "quote", - "syn 2.0.102", + "syn 2.0.106", ] [[package]] @@ -4034,20 +4893,20 @@ checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.102", + "syn 2.0.106", ] [[package]] name = "windows-link" -version = "0.1.1" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38" +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" [[package]] name = "windows-registry" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3bab093bdd303a1240bb99b8aba8ea8a69ee19d34c9e2ef9594e708a4878820" +checksum = "5b8a9ed28765efc97bbc954883f4e6796c33a06546ebafacbabee9696967499e" dependencies = [ "windows-link", "windows-result", @@ -4078,7 +4937,7 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets", + "windows-targets 0.52.6", ] [[package]] @@ -4087,7 +4946,16 @@ version = "0.59.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" dependencies = [ - "windows-targets", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +dependencies = [ + "windows-targets 0.53.3", ] [[package]] @@ -4096,14 +4964,31 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_gnullvm", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm 0.52.6", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.53.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91" +dependencies = [ + "windows-link", + "windows_aarch64_gnullvm 0.53.0", + "windows_aarch64_msvc 0.53.0", + "windows_i686_gnu 0.53.0", + "windows_i686_gnullvm 0.53.0", + "windows_i686_msvc 0.53.0", + "windows_x86_64_gnu 0.53.0", + "windows_x86_64_gnullvm 0.53.0", + "windows_x86_64_msvc 0.53.0", ] [[package]] @@ -4112,65 +4997,110 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" + [[package]] name = "windows_aarch64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" + [[package]] name = "windows_i686_gnu" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" +[[package]] +name = "windows_i686_gnu" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" + [[package]] name = "windows_i686_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" + [[package]] name = "windows_i686_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" +[[package]] +name = "windows_i686_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" + [[package]] name = "windows_x86_64_gnu" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" + [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" + [[package]] name = "windows_x86_64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" +[[package]] +name = "windows_x86_64_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" + [[package]] name = "winnow" -version = "0.7.11" +version = "0.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74c7b26e3480b707944fc872477815d29a8e429d2f93a1ce000f5fa84a15cbcd" +checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" dependencies = [ "memchr", ] [[package]] -name = "wit-bindgen-rt" -version = "0.39.0" +name = "wit-bindgen" +version = "0.45.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" -dependencies = [ - "bitflags 2.9.1", -] +checksum = "5c573471f125075647d03df72e026074b7203790d41351cd6edc96f46bcccd36" [[package]] name = "writeable" @@ -4189,9 +5119,9 @@ dependencies = [ [[package]] name = "xattr" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d65cbf2f12c15564212d48f4e3dfb87923d25d611f2aed18f4cb23f0413d89e" +checksum = "af3a19837351dc82ba89f8a125e22a3c475f05aba604acc023d62b2739ae2909" dependencies = [ "libc", "rustix", @@ -4217,28 +5147,151 @@ checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.102", + "syn 2.0.106", "synstructure", ] +[[package]] +name = "zcash_address" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c984ae01367a4a3d20e9d34ae4e4cc0dca004b22d9a10a51eec43f43934612e" +dependencies = [ + "bech32", + "bs58 0.5.1", + "core2", + "f4jumble", + "zcash_encoding", + "zcash_protocol", +] + +[[package]] +name = "zcash_encoding" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bca38087e6524e5f51a5b0fb3fc18f36d7b84bf67b2056f494ca0c281590953d" +dependencies = [ + "core2", + "nonempty", +] + +[[package]] +name = "zcash_note_encryption" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77efec759c3798b6e4d829fcc762070d9b229b0f13338c40bf993b7b609c2272" +dependencies = [ + "chacha20", + "chacha20poly1305", + "cipher", + "rand_core", + "subtle", +] + +[[package]] +name = "zcash_primitives" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a0c26140f2e6b760dcf052d22bd01f1a8773cdefb650ff5829430798a21b85b" +dependencies = [ + "bip32", + "blake2b_simd", + "block-buffer 0.11.0-rc.3", + "bs58 0.5.1", + "core2", + "crypto-common 0.2.0-rc.1", + "equihash", + "ff", + "fpe", + "getset", + "group", + "hex", + "incrementalmerkletree", + "jubjub", + "memuse", + "nonempty", + "orchard", + "rand", + "rand_core", + "redjubjub", + "ripemd 0.1.3", + "sapling-crypto", + "secp256k1 0.29.1", + "sha2 0.10.9", + "subtle", + "tracing", + "zcash_address", + "zcash_encoding", + "zcash_note_encryption", + "zcash_protocol", + "zcash_spec", + "zcash_transparent", + "zip32", +] + +[[package]] +name = "zcash_protocol" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9cfe9e3fb08e6851efe3d0ced457e4cb2c305daa928f64cb0d70c040f8f8336" +dependencies = [ + "core2", + "document-features", + "hex", + "memuse", +] + +[[package]] +name = "zcash_spec" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ded3f58b93486aa79b85acba1001f5298f27a46489859934954d262533ee2915" +dependencies = [ + "blake2b_simd", +] + +[[package]] +name = "zcash_transparent" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a7c162a8aa6f708e842503ed5157032465dadfb1d7f63adf9db2d45213a0b11" +dependencies = [ + "bip32", + "blake2b_simd", + "bs58 0.5.1", + "core2", + "document-features", + "getset", + "hex", + "ripemd 0.1.3", + "secp256k1 0.29.1", + "sha2 0.10.9", + "subtle", + "zcash_address", + "zcash_encoding", + "zcash_protocol", + "zcash_spec", + "zip32", +] + [[package]] name = "zerocopy" -version = "0.8.25" +version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1702d9583232ddb9174e01bb7c15a2ab8fb1bc6f227aa1233858c351a3ba0cb" +checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.25" +version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28a6e20d751156648aa063f3800b706ee209a32c0b4d9f24be3d980b01be55ef" +checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" dependencies = [ "proc-macro2", "quote", - "syn 2.0.102", + "syn 2.0.106", ] [[package]] @@ -4258,7 +5311,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.102", + "syn 2.0.106", "synstructure", ] @@ -4279,7 +5332,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.102", + "syn 2.0.106", ] [[package]] @@ -4308,9 +5361,9 @@ dependencies = [ [[package]] name = "zerovec" -version = "0.11.2" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428" +checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" dependencies = [ "yoke", "zerofrom", @@ -4325,7 +5378,7 @@ checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.102", + "syn 2.0.106", ] [[package]] @@ -4337,17 +5390,29 @@ dependencies = [ "aes", "byteorder", "bzip2", - "constant_time_eq", + "constant_time_eq 0.1.5", "crc32fast", "crossbeam-utils", "flate2", - "hmac", + "hmac 0.12.1", "pbkdf2", "sha1", "time", "zstd 0.11.2+zstd.1.5.2", ] +[[package]] +name = "zip32" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13ff9ea444cdbce820211f91e6aa3d3a56bde7202d3c0961b7c38f793abf5637" +dependencies = [ + "blake2b_simd", + "memuse", + "subtle", + "zcash_spec", +] + [[package]] name = "zstd" version = "0.11.2+zstd.1.5.2" @@ -4387,9 +5452,9 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "2.0.15+zstd.1.5.7" +version = "2.0.16+zstd.1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb81183ddd97d0c74cedf1d50d85c8d08c1b8b68ee863bdee9e706eedba1a237" +checksum = "91e19ebc2adc8f83e43039e79776e3fda8ca919132d68a1fed6a5faca2683748" dependencies = [ "cc", "pkg-config", diff --git a/Makefile b/Makefile index bf88113..00b2269 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,8 @@ +.PHONY: zcash-bridge + RFLAGS="-C link-arg=-s" -build: lint satoshi-bridge nbtc mock-chain-signatures mock-btc-light-client mock-dapp +build: lint satoshi-bridge zcash-bridge nbtc mock-chain-signatures mock-btc-light-client mock-dapp lint: @cargo fmt --all @@ -9,6 +11,9 @@ lint: satoshi-bridge: contracts/satoshi-bridge $(call local_build_wasm,satoshi-bridge,satoshi_bridge) +zcash-bridge: contracts/satoshi-bridge + $(call local_build_zcash_wasm) + nbtc: contracts/nbtc $(call local_build_wasm,nbtc,nbtc) @@ -28,6 +33,7 @@ count: release: $(call build_release_wasm,satoshi-bridge,satoshi_bridge) $(call build_release_wasm,nbtc,nbtc) + $(call build_release_zcash_wasm) clean: cargo clean @@ -51,4 +57,18 @@ define build_release_wasm @rustup target add wasm32-unknown-unknown @cargo near build reproducible-wasm --manifest-path ./contracts/${PACKAGE_NAME}/Cargo.toml @cp target/near/${WASM_NAME}/$(WASM_NAME).wasm ./res/$(WASM_NAME)_release.wasm -endef \ No newline at end of file +endef + +define build_release_zcash_wasm + @mkdir -p res + @rustup target add wasm32-unknown-unknown + @cargo near build reproducible-wasm --manifest-path ./contracts/satoshi-bridge/Cargo.toml --variant zcash + @cp target/near/satoshi_bridge/satoshi_bridge.wasm ./res/zcash_connector_release.wasm +endef + +define local_build_zcash_wasm + @mkdir -p res + @rustup target add wasm32-unknown-unknown + @cargo near build non-reproducible-wasm --manifest-path ./contracts/satoshi-bridge/Cargo.toml --locked --no-abi --no-default-features --features zcash + @cp target/near/satoshi_bridge/satoshi_bridge.wasm ./res/zcash.wasm +endef diff --git a/contracts/nbtc/Cargo.toml b/contracts/nbtc/Cargo.toml index 8f7de57..623515a 100644 --- a/contracts/nbtc/Cargo.toml +++ b/contracts/nbtc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "nbtc" -version = "0.1.0" +version = "0.2.0" edition.workspace = true publish.workspace = true repository.workspace = true diff --git a/contracts/nbtc/src/lib.rs b/contracts/nbtc/src/lib.rs index 1ac578c..4aaf38e 100644 --- a/contracts/nbtc/src/lib.rs +++ b/contracts/nbtc/src/lib.rs @@ -26,8 +26,6 @@ pub struct Contract { metadata: LazyOption, } -const DATA_IMAGE_SVG_NEAR_ICON: &str = "data:image/svg+xml,%3Csvg%20width%3D%2232%22%20height%3D%2232%22%20viewBox%3D%220%200%2032%2032%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20clip-path%3D%22url(%23clip0_2351_779)%22%3E%3Cpath%20d%3D%22M16%2032C24.8366%2032%2032%2024.8366%2032%2016C32%207.16344%2024.8366%200%2016%200C7.16344%200%200%207.16344%200%2016C0%2024.8366%207.16344%2032%2016%2032Z%22%20fill%3D%22%2300E99F%22%2F%3E%3Cpath%20d%3D%22M16.0006%2028.2858C22.7858%2028.2858%2028.2863%2022.7853%2028.2863%2016.0001C28.2863%209.21486%2022.7858%203.71436%2016.0006%203.71436C9.21535%203.71436%203.71484%209.21486%203.71484%2016.0001C3.71484%2022.7853%209.21535%2028.2858%2016.0006%2028.2858Z%22%20stroke%3D%22black%22%2F%3E%3Cpath%20d%3D%22M27.1412%2016C27.1412%2022.1541%2022.1524%2027.1429%2015.9983%2027.1429C9.84427%2027.1429%204.85547%2022.1541%204.85547%2016C4.85547%209.84598%209.84427%204.85718%2015.9983%204.85718C22.1524%204.85718%2027.1412%209.84598%2027.1412%2016Z%22%20stroke%3D%22black%22%20stroke-width%3D%220.5%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M16.2167%2011.1743C15.9198%2011.1643%2015.6095%2011.1622%2015.2868%2011.1668V9.32056H13.8907V11.2217C13.1583%2011.2659%2012.3792%2011.3332%2011.5625%2011.4149V12.811H12.9586V18.8607H11.7952V20.4895H13.8893V22.5836H15.2854V20.4895H16.2161V22.5836H17.3795V20.4895C18.4654%2020.4119%2020.6836%2019.7915%2020.8698%2017.93C21.0559%2016.0686%2019.7064%2015.6032%2019.0083%2015.6032C19.5512%2015.3705%2020.544%2014.5328%2020.1717%2013.0436C19.9215%2012.043%2019.0072%2011.5204%2017.6128%2011.2984V9.32164H16.2167V11.1743ZM18.0737%2013.9723C18.0737%2012.8554%2016.2122%2012.7313%2015.2815%2012.8088V15.1356C16.2122%2015.2132%2018.0737%2015.0891%2018.0737%2013.9723ZM15.2826%2016.5322V18.8591C16.2133%2018.9366%2018.3075%2018.859%2018.3075%2017.6956C18.3075%2016.2994%2016.2133%2016.4547%2015.2826%2016.5322Z%22%20fill%3D%22black%22%2F%3E%3C%2Fg%3E%3Cdefs%3E%3CclipPath%20id%3D%22clip0_2351_779%22%3E%3Crect%20width%3D%2232%22%20height%3D%2232%22%20fill%3D%22white%22%2F%3E%3C%2FclipPath%3E%3C%2Fdefs%3E%3C%2Fsvg%3E"; - const GAS_FOR_RESOLVE_TRANSFER: Gas = Gas::from_tgas(5); const GAS_FOR_FT_TRANSFER_CALL: Gas = Gas::from_tgas(30); @@ -53,7 +51,14 @@ pub struct PostAction { #[near] impl Contract { #[init] - pub fn new(controller: AccountId, bridge_id: AccountId) -> Self { + pub fn new( + controller: AccountId, + bridge_id: AccountId, + name: String, + symbol: String, + icon: Option, + decimals: u8, + ) -> Self { require!(!env::state_exists(), "Already initialized"); Self { controller, @@ -63,12 +68,12 @@ impl Contract { StorageKey::Metadata, Some(&FungibleTokenMetadata { spec: FT_METADATA_SPEC.to_string(), - name: "Near WTC".to_string(), - symbol: "NBTC".to_string(), - icon: Some(DATA_IMAGE_SVG_NEAR_ICON.to_string()), + name, + symbol, + icon, reference: None, reference_hash: None, - decimals: 8, + decimals, }), ), } diff --git a/contracts/satoshi-bridge/Cargo.toml b/contracts/satoshi-bridge/Cargo.toml index 128301f..cc7f540 100644 --- a/contracts/satoshi-bridge/Cargo.toml +++ b/contracts/satoshi-bridge/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "satoshi-bridge" -version = "0.5.1" +version = "0.6.0" edition.workspace = true publish.workspace = true repository.workspace = true @@ -21,6 +21,19 @@ container_build_command = [ "--no-abi", ] +[package.metadata.near.reproducible_build.variant.zcash] +container_build_command = [ + "cargo", + "near", + "build", + "non-reproducible-wasm", + "--locked", + "--no-abi", + "--no-default-features", + "--features", + "zcash" +] + [dependencies] near-sdk.workspace = true near-contract-standards.workspace = true @@ -28,8 +41,13 @@ bitcoin.workspace = true hex.workspace = true near-plugins.workspace = true k256 = "0.13.1" -ed25519-dalek="2.1.0" -crypto-shared = { git = "https://github.com/near/mpc_old", rev = "0afee9004a1b1c3386940e60c28cff7cf1b5978c"} +ed25519-dalek = "2.1.0" +crypto-shared = { git = "https://github.com/near/mpc_old", rev = "0afee9004a1b1c3386940e60c28cff7cf1b5978c" } +zcash_primitives = { version = "0.24.0", default-features = false, features = ["circuits", "transparent-inputs"], optional = true } +zcash_transparent = { version = "0.4.0", features = ["transparent-inputs"], optional = true } +zcash_protocol = { version = "0.6.1" } +core2 = { version = "0.3", optional = true } +zcash_address = { version = "0.9.0" } [target.'cfg(target_arch = "wasm32")'.dependencies] getrandom = { version = "0.2.12", features = ["custom"] } @@ -37,3 +55,7 @@ getrandom = { version = "0.2.12", features = ["custom"] } [dev-dependencies] near-workspaces = { version = "0.20", features = ["unstable"] } tokio = { version = "1.12.0", features = ["full"] } + +[features] +default = [] +zcash = ["zcash_primitives", "zcash_transparent", "core2"] diff --git a/contracts/satoshi-bridge/src/api/bridge.rs b/contracts/satoshi-bridge/src/api/bridge.rs index 683807a..f96fa0a 100644 --- a/contracts/satoshi-bridge/src/api/bridge.rs +++ b/contracts/satoshi-bridge/src/api/bridge.rs @@ -1,3 +1,4 @@ +use crate::psbt_wrapper::PsbtWrapper; use crate::*; use near_plugins::{access_control_any, pause}; @@ -28,17 +29,20 @@ impl Contract { merkle_proof: Vec, ) -> Promise { let path = get_deposit_path(&deposit_msg); - let transaction = bytes_to_btc_transaction(&tx_bytes); - let deposit_amount = transaction.output[vout].value.to_sat() as u128; + let transaction = WrappedTransaction::decode(&tx_bytes, &self.internal_config().chain) + .expect("Deserialization tx_bytes failed"); + let deposit_amount = transaction.output()[vout].value.to_sat() as u128; require!(deposit_amount > 0, "Invalid deposit_amount"); require!( - transaction.lock_time == LockTime::ZERO, + transaction.lock_time() == LockTime::ZERO, "Tx with a non-zero lock_time are not supported." ); - let deposit_address = self.generate_btc_p2wpkh_address(&path); - let deposit_address_script_pubkey = deposit_address.script_pubkey(); + let deposit_address = self.generate_utxo_chain_address(&path); + let deposit_address_script_pubkey = deposit_address + .script_pubkey() + .expect("Invalid deposit address"); require!( - deposit_address_script_pubkey == transaction.output[vout].script_pubkey, + deposit_address_script_pubkey == transaction.output()[vout].script_pubkey, "Invalid deposit tx_bytes" ); @@ -46,7 +50,7 @@ impl Contract { path, tx_bytes, vout, - balance: transaction.output[vout].value.to_sat(), + balance: transaction.output()[vout].value.to_sat(), }; let tx_id = transaction.compute_txid().to_string(); let utxo_storage_key = generate_utxo_storage_key(tx_id.clone(), vout as u32); @@ -120,15 +124,8 @@ impl Contract { .is_none(), "Previous btc tx has not been signed" ); - let btc_pending_id = - self.internal_withdraw_rbf(&account_id, original_btc_pending_verify_id, output); - self.internal_unwrap_mut_account(&account_id) - .btc_pending_sign_id = Some(btc_pending_id.clone()); - Event::GenerateBtcPendingInfo { - account_id: &account_id, - btc_pending_id: &btc_pending_id, - } - .emit(); + + self.withdraw_rbf_chain_specific(account_id, original_btc_pending_verify_id, output); } /// If the user's Withdraw is not verified within a certain time, the protocol can actively cancel the Withdraw through RBF, with the gas fee borne by the user. @@ -152,14 +149,12 @@ impl Contract { .is_none(), "Assisted user previous btc tx has not been signed" ); - let btc_pending_id = self.internal_cancel_withdraw(original_btc_pending_verify_id, output); - self.internal_unwrap_mut_account(&user_account_id) - .btc_pending_sign_id = Some(btc_pending_id.clone()); - Event::GenerateBtcPendingInfo { - account_id: &user_account_id, - btc_pending_id: &btc_pending_id, - } - .emit(); + + self.cancel_withdraw_chain_specific( + user_account_id, + original_btc_pending_verify_id, + output, + ); } /// Verify that the active utxo management has been successful, and then burn the corresponding amount of tokens. @@ -215,60 +210,7 @@ impl Contract { pub fn active_utxo_management(&mut self, input: Vec, output: Vec) { assert_one_yocto(); let account_id = env::predecessor_account_id(); - let account = self.internal_unwrap_account(&account_id); - require!( - account.btc_pending_sign_id.is_none(), - "Previous btc tx has not been signed" - ); - let (psbt, utxo_storage_keys, vutxos) = self.generate_psbt_and_vutxos(input, output); - let (actual_received_amount, gas_fee) = - self.check_active_management_psbt_valid(&psbt, &vutxos); - require!( - gas_fee <= self.data().cur_available_protocol_fee, - "Insufficient protocol_fee" - ); - self.data_mut().cur_available_protocol_fee -= gas_fee; - self.data_mut().cur_reserved_protocol_fee += gas_fee; - - let need_signature_num = psbt.unsigned_tx.input.len(); - let psbt_hex = psbt.serialize_hex(); - let btc_pending_id = psbt.extract_tx().unwrap().compute_txid().to_string(); - let btc_pending_info = BTCPendingInfo { - account_id: account_id.clone(), - btc_pending_id: btc_pending_id.clone(), - transfer_amount: 0, - actual_received_amount, - withdraw_fee: 0, - gas_fee, - burn_amount: gas_fee, - psbt_hex, - vutxos, - signatures: vec![None; need_signature_num], - tx_bytes_with_sign: None, - create_time_sec: nano_to_sec(env::block_timestamp()), - last_sign_time_sec: 0, - state: PendingInfoState::ActiveUtxoManagementOriginal(OriginalState { - stage: PendingInfoStage::PendingSign, - max_gas_fee: gas_fee, - last_rbf_time_sec: None, - cancel_rbf_reserved: None, - }), - }; - require!( - self.data_mut() - .btc_pending_infos - .insert(btc_pending_id.clone(), btc_pending_info.into()) - .is_none(), - "pending info already exist" - ); - self.internal_unwrap_mut_account(&account_id) - .btc_pending_sign_id = Some(btc_pending_id.clone()); - Event::UtxoRemoved { utxo_storage_keys }.emit(); - Event::GenerateBtcPendingInfo { - account_id: &account_id, - btc_pending_id: &btc_pending_id, - } - .emit(); + self.active_utxo_management_chain_specific(account_id, input, output); } /// The initiator of active UTXO management accelerates the transaction by increasing the gas fee. @@ -293,18 +235,11 @@ impl Contract { .is_none(), "Previous btc tx has not been signed" ); - let btc_pending_id = self.internal_active_utxo_management_rbf( - &account_id, + self.active_utxo_management_rbf_chain_specific( + account_id, original_btc_pending_verify_id, output, ); - self.internal_unwrap_mut_account(&account_id) - .btc_pending_sign_id = Some(btc_pending_id.clone()); - Event::GenerateBtcPendingInfo { - account_id: &account_id, - btc_pending_id: &btc_pending_id, - } - .emit(); } /// Active UTXO management transactions that have not been verified for a long time are allowed to be canceled through RBF. @@ -332,15 +267,11 @@ impl Contract { .is_none(), "Assisted user previous btc tx has not been signed" ); - let btc_pending_id = - self.internal_cancel_active_utxo_management(original_btc_pending_verify_id, output); - self.internal_unwrap_mut_account(&user_account_id) - .btc_pending_sign_id = Some(btc_pending_id.clone()); - Event::GenerateBtcPendingInfo { - account_id: &user_account_id, - btc_pending_id: &btc_pending_id, - } - .emit(); + self.cancel_active_utxo_management_chain_specific( + user_account_id, + original_btc_pending_verify_id, + output, + ); } /// Since there can be many RBFs, removing all RBF pending info at once after verifying the transaction on-chain might not have enough gas. @@ -377,7 +308,7 @@ impl Contract { pub fn get_user_deposit_address(&self, deposit_msg: DepositMsg) -> String { let path = get_deposit_path(&deposit_msg); - let deposit_address = self.generate_btc_p2wpkh_address(&path).to_string(); + let deposit_address = self.generate_utxo_chain_address(&path).to_string(); Event::LogDepositAddress { deposit_msg, path, @@ -392,3 +323,67 @@ impl Contract { config.change_address.clone() } } + +impl Contract { + pub fn create_active_utxo_management_pending_info( + &mut self, + account_id: AccountId, + psbt: &mut PsbtWrapper, + ) { + let account = self.internal_unwrap_account(&account_id); + require!( + account.btc_pending_sign_id.is_none(), + "Previous btc tx has not been signed" + ); + + let (utxo_storage_keys, vutxos) = self.generate_vutxos(psbt); + let (actual_received_amount, gas_fee) = + self.check_active_management_psbt_valid(psbt, &vutxos); + require!( + gas_fee <= self.data().cur_available_protocol_fee, + "Insufficient protocol_fee" + ); + self.data_mut().cur_available_protocol_fee -= gas_fee; + self.data_mut().cur_reserved_protocol_fee += gas_fee; + + let need_signature_num = psbt.get_input_num(); + let psbt_hex = psbt.serialize(); + let btc_pending_id = psbt.get_pending_id(); + let btc_pending_info = BTCPendingInfo { + account_id: account_id.clone(), + btc_pending_id: btc_pending_id.clone(), + transfer_amount: 0, + actual_received_amount, + withdraw_fee: 0, + gas_fee, + burn_amount: gas_fee, + psbt_hex, + vutxos, + signatures: vec![None; need_signature_num], + tx_bytes_with_sign: None, + create_time_sec: nano_to_sec(env::block_timestamp()), + last_sign_time_sec: 0, + state: PendingInfoState::ActiveUtxoManagementOriginal(OriginalState { + stage: PendingInfoStage::PendingSign, + max_gas_fee: gas_fee, + last_rbf_time_sec: None, + cancel_rbf_reserved: None, + }), + }; + require!( + self.data_mut() + .btc_pending_infos + .insert(btc_pending_id.clone(), btc_pending_info.into()) + .is_none(), + "pending info already exist" + ); + self.internal_unwrap_mut_account(&account_id) + .btc_pending_sign_id = Some(btc_pending_id.clone()); + Event::UtxoRemoved { utxo_storage_keys }.emit(); + Event::GenerateBtcPendingInfo { + account_id: &account_id, + btc_pending_id: &btc_pending_id, + } + .emit(); + } +} diff --git a/contracts/satoshi-bridge/src/api/token_receiver.rs b/contracts/satoshi-bridge/src/api/token_receiver.rs index 0f52a18..f0a261c 100644 --- a/contracts/satoshi-bridge/src/api/token_receiver.rs +++ b/contracts/satoshi-bridge/src/api/token_receiver.rs @@ -1,7 +1,10 @@ +use crate::psbt_wrapper::PsbtWrapper; use crate::*; use near_contract_standards::fungible_token::receiver::FungibleTokenReceiver; use near_plugins::pause; +pub const GAS_FOR_FT_ON_TRANSFER_CALL_BACK: Gas = Gas::from_tgas(100); + #[near(serializers = [json])] pub enum TokenReceiverMessage { DepositProtocolFee, @@ -48,73 +51,90 @@ impl FungibleTokenReceiver for Contract { target_btc_address, input, output, - max_gas_fee, - } => { - let (psbt, utxo_storage_keys, vutxos) = - self.generate_psbt_and_vutxos(input, output); - require!( - self.internal_unwrap_or_create_mut_account(&sender_id) - .btc_pending_sign_id - .is_none(), - "Previous btc tx has not been signed" - ); - let target_address_script_pubkey = - string_to_btc_address(&target_btc_address).script_pubkey(); + max_gas_fee + } => self.ft_on_transfer_withdraw_chain_specific( + sender_id, + amount, + target_btc_address, + input, + output, + max_gas_fee + ), + } + } +} + +impl Contract { + pub(crate) fn create_btc_pending_info( + &mut self, + sender_id: AccountId, + amount: u128, + target_btc_address: String, + psbt: &mut PsbtWrapper, + max_gas_fee: Option, + ) { + let (utxo_storage_keys, vutxos) = self.generate_vutxos(psbt); + require!( + self.internal_unwrap_or_create_mut_account(&sender_id) + .btc_pending_sign_id + .is_none(), + "Previous btc tx has not been signed" + ); + let target_address_script_pubkey = self + .internal_config() + .string_to_script_pubkey(&target_btc_address); - let withdraw_change_address_script_pubkey = - self.internal_config().get_change_address().script_pubkey(); - let withdraw_fee = self.internal_config().withdraw_bridge_fee.get_fee(amount); - let (actual_received_amount, gas_fee) = self.check_withdraw_psbt_valid( - &target_address_script_pubkey, - &withdraw_change_address_script_pubkey, - &psbt, - &vutxos, - amount, - withdraw_fee, - max_gas_fee - ); + let withdraw_change_address_script_pubkey = + self.internal_config().get_change_script_pubkey(); + let withdraw_fee = self.internal_config().withdraw_bridge_fee.get_fee(amount); + let (actual_received_amount, gas_fee) = self.check_withdraw_psbt_valid( + &target_address_script_pubkey, + &withdraw_change_address_script_pubkey, + psbt, + &vutxos, + amount, + withdraw_fee, + max_gas_fee + ); - let need_signature_num = psbt.unsigned_tx.input.len(); - let psbt_hex = psbt.serialize_hex(); - let btc_pending_id = psbt.extract_tx().unwrap().compute_txid().to_string(); - let btc_pending_info = BTCPendingInfo { - account_id: sender_id.clone(), - btc_pending_id: btc_pending_id.clone(), - transfer_amount: amount, - actual_received_amount, - withdraw_fee, - gas_fee, - burn_amount: actual_received_amount + gas_fee, - psbt_hex, - vutxos, - signatures: vec![None; need_signature_num], - tx_bytes_with_sign: None, - create_time_sec: nano_to_sec(env::block_timestamp()), - last_sign_time_sec: 0, - state: PendingInfoState::WithdrawOriginal(OriginalState { - stage: PendingInfoStage::PendingSign, - max_gas_fee: gas_fee, - last_rbf_time_sec: None, - cancel_rbf_reserved: None, - }), - }; - require!( - self.data_mut() - .btc_pending_infos - .insert(btc_pending_id.clone(), btc_pending_info.into()) - .is_none(), - "pending info already exist" - ); - self.internal_unwrap_mut_account(&sender_id) - .btc_pending_sign_id = Some(btc_pending_id.clone()); - Event::UtxoRemoved { utxo_storage_keys }.emit(); - Event::GenerateBtcPendingInfo { - account_id: &sender_id, - btc_pending_id: &btc_pending_id, - } - .emit(); - PromiseOrValue::Value(U128(0)) - } + let need_signature_num = psbt.get_input_num(); + let psbt_hex = psbt.serialize(); + let btc_pending_id = psbt.get_pending_id(); + let btc_pending_info = BTCPendingInfo { + account_id: sender_id.clone(), + btc_pending_id: btc_pending_id.clone(), + transfer_amount: amount, + actual_received_amount, + withdraw_fee, + gas_fee, + burn_amount: actual_received_amount + gas_fee, + psbt_hex, + vutxos, + signatures: vec![None; need_signature_num], + tx_bytes_with_sign: None, + create_time_sec: nano_to_sec(env::block_timestamp()), + last_sign_time_sec: 0, + state: PendingInfoState::WithdrawOriginal(OriginalState { + stage: PendingInfoStage::PendingSign, + max_gas_fee: gas_fee, + last_rbf_time_sec: None, + cancel_rbf_reserved: None, + }), + }; + require!( + self.data_mut() + .btc_pending_infos + .insert(btc_pending_id.clone(), btc_pending_info.into()) + .is_none(), + "pending info already exist" + ); + self.internal_unwrap_mut_account(&sender_id) + .btc_pending_sign_id = Some(btc_pending_id.clone()); + Event::UtxoRemoved { utxo_storage_keys }.emit(); + Event::GenerateBtcPendingInfo { + account_id: &sender_id, + btc_pending_id: &btc_pending_id, } + .emit(); } } diff --git a/contracts/satoshi-bridge/src/bitcoin_utils/contract_methods.rs b/contracts/satoshi-bridge/src/bitcoin_utils/contract_methods.rs new file mode 100644 index 0000000..55d6f07 --- /dev/null +++ b/contracts/satoshi-bridge/src/bitcoin_utils/contract_methods.rs @@ -0,0 +1,94 @@ +use crate::psbt_wrapper::PsbtWrapper; +use crate::{BTCPendingInfo, Contract, Event}; +use bitcoin::{OutPoint, TxOut}; +use near_sdk::json_types::U128; +use near_sdk::{require, AccountId, PromiseOrValue}; + +macro_rules! define_rbf_method { + ($method:ident, $internal_fn:ident) => { + pub(crate) fn $method( + &mut self, + account_id: AccountId, + original_btc_pending_verify_id: String, + output: Vec, + ) { + let original_tx_btc_pending_info = + self.internal_unwrap_btc_pending_info(&original_btc_pending_verify_id); + + let new_psbt = self.generate_psbt_from_original_psbt_and_new_output( + original_tx_btc_pending_info, + output, + ); + + let btc_pending_id = + self.$internal_fn(&account_id, original_btc_pending_verify_id, new_psbt); + + self.internal_unwrap_mut_account(&account_id) + .btc_pending_sign_id = Some(btc_pending_id.clone()); + + Event::GenerateBtcPendingInfo { + account_id: &account_id, + btc_pending_id: &btc_pending_id, + } + .emit(); + } + }; +} + +impl Contract { + pub(crate) fn check_psbt_chain_specific(&self, _psbt: &PsbtWrapper, _gas_fee: u128) {} + + pub(crate) fn check_withdraw_chain_specific( + original_tx_btc_pending_info: &BTCPendingInfo, + gas_fee: u128, + ) { + // Ensure that the RBF transaction pays more gas than the previous transaction. + let max_gas_fee = original_tx_btc_pending_info.get_max_gas_fee(); + let additional_gas_amount = gas_fee.saturating_sub(max_gas_fee); + require!(additional_gas_amount > 0, "No gas increase."); + } + + pub(crate) fn ft_on_transfer_withdraw_chain_specific( + &mut self, + sender_id: AccountId, + amount: u128, + target_btc_address: String, + input: Vec, + output: Vec, + max_gas_fee: Option, + ) -> PromiseOrValue { + let mut psbt = PsbtWrapper::new(input, output); + self.create_btc_pending_info(sender_id, amount, target_btc_address, &mut psbt, max_gas_fee); + PromiseOrValue::Value(U128(0)) + } + + define_rbf_method!(withdraw_rbf_chain_specific, internal_withdraw_rbf); + define_rbf_method!(cancel_withdraw_chain_specific, internal_cancel_withdraw); + define_rbf_method!( + cancel_active_utxo_management_chain_specific, + internal_cancel_active_utxo_management + ); + define_rbf_method!( + active_utxo_management_rbf_chain_specific, + internal_active_utxo_management_rbf + ); + + pub(crate) fn active_utxo_management_chain_specific( + &mut self, + account_id: AccountId, + input: Vec, + output: Vec, + ) { + let mut psbt = PsbtWrapper::new(input, output); + self.create_active_utxo_management_pending_info(account_id, &mut psbt); + } + + pub(crate) fn generate_psbt_from_original_psbt_and_new_output( + &self, + original_tx_btc_pending_info: &BTCPendingInfo, + output: Vec, + ) -> PsbtWrapper { + let original_psbt = original_tx_btc_pending_info.get_psbt(); + PsbtWrapper::from_original_psbt(original_psbt, output) + } +} diff --git a/contracts/satoshi-bridge/src/bitcoin_utils/mod.rs b/contracts/satoshi-bridge/src/bitcoin_utils/mod.rs new file mode 100644 index 0000000..89ef353 --- /dev/null +++ b/contracts/satoshi-bridge/src/bitcoin_utils/mod.rs @@ -0,0 +1,3 @@ +pub mod contract_methods; +pub mod psbt_wrapper; +pub mod transaction; diff --git a/contracts/satoshi-bridge/src/bitcoin_utils/psbt_wrapper.rs b/contracts/satoshi-bridge/src/bitcoin_utils/psbt_wrapper.rs new file mode 100644 index 0000000..cea9346 --- /dev/null +++ b/contracts/satoshi-bridge/src/bitcoin_utils/psbt_wrapper.rs @@ -0,0 +1,161 @@ +use crate::*; + +use bitcoin::absolute::LockTime; +use bitcoin::consensus::serialize; +use bitcoin::hashes::Hash; +use bitcoin::psbt::Psbt; +use bitcoin::sighash::SighashCache; +use bitcoin::transaction::Version; +use bitcoin::Transaction as BtcTransaction; +use bitcoin::{OutPoint, TxIn, TxOut, Witness}; +use near_sdk::require; + +pub struct PsbtWrapper { + psbt: Psbt, +} +impl PsbtWrapper { + pub fn new(input: Vec, output: Vec) -> Self { + require!(!input.is_empty(), "empty input"); + require!(!output.is_empty(), "empty output"); + + let sequence = bitcoin::Sequence::ENABLE_RBF_NO_LOCKTIME; + + let transaction = BtcTransaction { + version: Version::TWO, + lock_time: LockTime::ZERO, + input: input + .into_iter() + .map(|previous_output| TxIn { + previous_output, + sequence, + ..Default::default() + }) + .collect(), + output, + }; + let psbt = Psbt::from_unsigned_tx(transaction).expect("Failed to generate PSBT"); + + Self { psbt } + } + + pub fn from_original_psbt( + original_psbt: crate::psbt_wrapper::PsbtWrapper, + output: Vec, + ) -> Self { + let sequence = bitcoin::Sequence::MAX; + + let transaction = BtcTransaction { + version: Version::TWO, + lock_time: LockTime::ZERO, + input: original_psbt + .psbt + .unsigned_tx + .input + .into_iter() + .map(|original_psbt_input| TxIn { + previous_output: original_psbt_input.previous_output, + sequence, + ..Default::default() + }) + .collect(), + output, + }; + let mut psbt = Psbt::from_unsigned_tx(transaction).expect("Failed to generate PSBT"); + original_psbt + .psbt + .inputs + .iter() + .enumerate() + .for_each(|(i, v)| { + psbt.inputs[i].witness_utxo.clone_from(&v.witness_utxo); + }); + Self { psbt } + } + + pub fn set_input_utxo(&mut self, input_utxo: Vec) { + input_utxo + .iter() + .enumerate() + .for_each(|(i, v)| self.psbt.inputs[i].witness_utxo = Some(v.clone())); + } + + pub fn get_output(&self) -> &Vec { + &self.psbt.unsigned_tx.output + } + + pub fn get_input_num(&self) -> usize { + self.psbt.unsigned_tx.input.len() + } + + pub fn get_output_num(&self) -> usize { + self.psbt.unsigned_tx.output.len() + } + + pub fn get_utxo_storage_keys(&self) -> Vec { + self.psbt + .unsigned_tx + .input + .clone() + .into_iter() + .map(|out_point| { + generate_utxo_storage_key( + out_point.previous_output.txid.to_string(), + out_point.previous_output.vout, + ) + }) + .collect() + } + pub fn serialize(&self) -> String { + self.psbt.serialize_hex() + } + + pub fn deserialize(psbt_hex: &String) -> Self { + let psbt_bytes = hex::decode(psbt_hex).unwrap(); + Self { + psbt: Psbt::deserialize(&psbt_bytes).expect("ERR_INVALID_PSBT_HEX"), + } + } + + pub fn extract_tx_bytes_with_sign(&self) -> Vec { + serialize(&self.psbt.clone().extract_tx().expect("extract_tx failed")) + } + + pub fn get_pending_id(&self) -> String { + self.psbt + .clone() + .extract_tx() + .unwrap() + .compute_txid() + .to_string() + } + + #[allow(unused_variables)] + pub fn get_hash_to_sign(&self, vin: usize, public_key: &bitcoin::PublicKey) -> [u8; 32] { + let tx = self.psbt.unsigned_tx.clone(); + let mut cache = SighashCache::new(tx); + cache + .p2wpkh_signature_hash( + vin, + &self.psbt.inputs[vin] + .witness_utxo + .as_ref() + .unwrap() + .script_pubkey, + self.psbt.inputs[vin].witness_utxo.as_ref().unwrap().value, + bitcoin::EcdsaSighashType::All, + ) + .unwrap() + .to_raw_hash() + .to_byte_array() + } + + pub fn save_signature( + &mut self, + sign_index: usize, + signature: SignatureResponse, + public_key: bitcoin::secp256k1::PublicKey, + ) { + self.psbt.inputs[sign_index].final_script_witness = + Some(Witness::p2wpkh(&signature.to_btc_signature(), &public_key)); + } +} diff --git a/contracts/satoshi-bridge/src/bitcoin_utils/transaction.rs b/contracts/satoshi-bridge/src/bitcoin_utils/transaction.rs new file mode 100644 index 0000000..15349d2 --- /dev/null +++ b/contracts/satoshi-bridge/src/bitcoin_utils/transaction.rs @@ -0,0 +1,41 @@ +use crate::network; +use bitcoin::consensus::{Decodable, Encodable}; +use bitcoin::{absolute, Transaction as BtcTransaction, TxOut, Txid}; + +#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct Transaction { + pub inner_tx: BtcTransaction, +} + +impl Transaction { + pub fn compute_txid(&self) -> Txid { + self.inner_tx.compute_txid() + } + + pub fn output(&self) -> Vec { + self.inner_tx.output.clone() + } + + pub fn lock_time(&self) -> absolute::LockTime { + self.inner_tx.lock_time + } + + pub fn encode(&self) -> Result, bitcoin::io::Error> { + let mut buf = Vec::new(); + self.inner_tx.consensus_encode(&mut buf)?; + Ok(buf) + } + + pub fn decode( + data: &[u8], + _chain: &network::Chain, + ) -> Result { + let mut cursor = bitcoin::io::Cursor::new(data); + let tx = BtcTransaction::consensus_decode(&mut cursor)?; + Ok(Self { inner_tx: tx }) + } + + pub fn tx_bytes_with_sign(tx: bitcoin::Transaction) -> Result, bitcoin::io::Error> { + Transaction { inner_tx: tx }.encode() + } +} diff --git a/contracts/satoshi-bridge/src/btc_light_client/mod.rs b/contracts/satoshi-bridge/src/btc_light_client/mod.rs index b74cc6f..8e743ad 100644 --- a/contracts/satoshi-bridge/src/btc_light_client/mod.rs +++ b/contracts/satoshi-bridge/src/btc_light_client/mod.rs @@ -11,10 +11,15 @@ pub mod deposit; pub mod withdraw; pub const GAS_FOR_VERIFY_TRANSACTION_INCLUSION: Gas = Gas::from_tgas(10); - +pub const GAS_FOR_GET_LAST_BLOCK_HEIGHT: Gas = Gas::from_tgas(3); #[near(serializers = [borsh])] +#[derive(Clone, Debug, PartialEq, Eq)] pub struct H256(pub [u8; 32]); +#[near(serializers = [borsh, json])] +#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Default)] +pub struct U256(u128, u128); + impl FromStr for H256 { type Err = hex::FromHexError; @@ -106,6 +111,7 @@ impl Serialize for H256 { #[ext_contract(ext_btc_light_client)] pub trait BtcLightClient { fn verify_transaction_inclusion(&self, #[serializer(borsh)] args: ProofArgs) -> bool; + fn get_last_block_height(&self) -> u32; } impl Contract { @@ -128,4 +134,11 @@ impl Contract { confirmations, )) } + + pub fn get_last_block_height_promise(&self) -> Promise { + let config = self.internal_config(); + ext_btc_light_client::ext(config.btc_light_client_account_id.clone()) + .with_static_gas(GAS_FOR_GET_LAST_BLOCK_HEIGHT) + .get_last_block_height() + } } diff --git a/contracts/satoshi-bridge/src/btc_pending_info.rs b/contracts/satoshi-bridge/src/btc_pending_info.rs index dc1eaa9..c519c03 100644 --- a/contracts/satoshi-bridge/src/btc_pending_info.rs +++ b/contracts/satoshi-bridge/src/btc_pending_info.rs @@ -1,5 +1,6 @@ use std::borrow::{Borrow, BorrowMut}; +use crate::psbt_wrapper::PsbtWrapper; use crate::*; #[near(serializers = [borsh, json])] @@ -275,16 +276,18 @@ impl BTCPendingInfo { self.signatures.iter().all(|v| v.is_some()) } - pub fn get_psbt(&self) -> Psbt { - to_psbt(&self.psbt_hex) + pub fn get_psbt(&self) -> PsbtWrapper { + PsbtWrapper::deserialize(&self.psbt_hex) } - pub fn get_transaction(&self) -> BtcTransaction { - bytes_to_btc_transaction( + pub fn get_transaction(&self, chain: &network::Chain) -> WrappedTransaction { + WrappedTransaction::decode( self.tx_bytes_with_sign .as_ref() .expect("Missing tx_bytes_with_sign"), + chain, ) + .expect("Deserialization tx_bytes failed") } } @@ -397,11 +400,77 @@ pub fn generate_btc_pending_sign_id(payload_preimages: &[Vec]) -> String { hex::encode(hash_bytes) } -pub fn bytes_to_btc_transaction(tx_bytes: &[u8]) -> BtcTransaction { - deserialize(tx_bytes).expect("Deserialization tx_bytes failed") -} +#[cfg(test)] +#[cfg(feature = "zcash")] +mod tests { + use crate::network::{Address, Chain}; + use crate::{get_deposit_path, network, DepositMsg, WrappedTransaction}; + use bitcoin::PublicKey as BtcPublicKey; + use k256::elliptic_curve::sec1::ToEncodedPoint; + use near_sdk::PublicKey; + use std::str::FromStr; + + pub fn generate_public_key(path: &str) -> Vec { + let mpc_pk = crypto_shared::near_public_key_to_affine_point( + PublicKey::from_str("secp256k1:4NfTiv3UsGahebgTaHyD9vF8KYKMBnfd6kh94mK6xv8fGBiJB8TBtFMP5WWXz6B89Ac1fbpzPwAvoyQebemHFwx3").unwrap(), + ); + let epsilon = crypto_shared::derive_epsilon( + &"zcash_connector-20250714-143829.testnet".parse().unwrap(), + path, + ); + let user_pk = crypto_shared::derive_key(mpc_pk, epsilon); + let user_pk_encoded_point = user_pk.to_encoded_point(false); + user_pk_encoded_point.as_bytes().to_vec() + } + + pub fn generate_btc_public_key(path: &str) -> BtcPublicKey { + let public_key_bytes = generate_public_key(path); + let uncompressed_btc_public_key = + BtcPublicKey::from_slice(&public_key_bytes).expect("Invalid public key bytes"); + uncompressed_btc_public_key + .inner + .to_string() + .parse() + .unwrap() + } + + pub fn generate_utxo_chain_address(path: &str) -> Address { + let btc_public_key = generate_btc_public_key(path); + Address::from_pubkey(Chain::ZcashTestnet, btc_public_key).unwrap() + } + + #[test] + #[cfg(feature = "zcash")] + fn test_zcash_tx_bytes() { + let tx_zcash_hex = "050000800a27a7265510e7c80000000085443500000160ae0a00000000001976a914f97c1d1cb17b5657d889cf7503a69e53c9da081988ac000002af1f4b1e9f842c3f878efee2b9ab4403500c5fc1ab3eb14442ad3463880cc387c8769e71b1a858a7aa268cfc17b6c4e414e69e2cc257e2f289d4780516d4a82149fdc0abd4061824c43a7c17f94a7bc0736eeaa20429dffca2180c8094ab779acbc03ab3bdf2c30bd31a859c96032ffda141549d189045ec43ac1b9dc6f15c2875afe1f1fa3ff2bb4b03599506062fe118a097008de7d5af99f09a78819bb93fe143e8c888eeab1ed2421660ca46d416bf6b9da01e54663bf18ad79dfe6bcd46587b32fb47efb0b49e1a99f6ec6812fdaa9d178eb21f6487adcdac88553580c61137b7b7169029cb26bb8c09869ba866ff8185d4d31e2d6c431ed86338fea3db03faf5b164d851d00e4dbaf608b8415a31196d3fd33246490252c8f6bb7bc3dfe0d9400bab0ce0015a9e23cf730e5aa5211d9906aef91c4591c4d2b2e3cc913809990f1bd0fdc3b828ea5fd416e1459a12364b502f65d9eda45615850942991ed3f7aa4b12700c6493bc89e969b2320d11d0b5deea814c2d9f2c20fd2635f7eb1172a9009ed31fa3e281a7632b68a023fbf232e890023505fa08f806c3f71b31f76ac480795e01d8249758c30b18f9be9d126b077a338bc1aa8e2a4d1ebea6f48717cad84488be5b7f7a1a323f4016c0d38c2bba099420ad2bab8a68068831264de585c8f2d62dbe8bab7b692a6047793774d40b9b3311a824b670ea64fa80389a1923f49e5485c850665c53d160c2bb4c230576099057f9167270678a82e80ab4e05c28e1ecd57b8145ad3b11bbca8c160478f44086c5f2d43417e78d2aa19ec136f9d6e34306da957990a125e45df52dccf8efce76df8b5ec2fe3cc17b855c00e18ef62f84de0b1d1085973967222f1e7c8230943cf7a51c4c50ce343117b278c81af6241ddca5af47e2afef683fc66aa194d90fcefb13cb58a478e9765e323d8a0da292c5792455dc9434e53292b8b8cec2da1c1b2c39f00aff5081aa21adfbdea6f7fd153794bc94701a7aae3fa5bc94060452ca1c1d965fe4e37f60315f87d091c79caa9dfe33261c377d837ef273436615d295be073385bc4374bf743aeb4df84622407afee6e63a8c9389ece0e50c8ebf031b0a61dd9615c5ef92d99e3b01345afd1cfa4216f10da8ccfc2d56314c5c0f49c69f33a19c073e655f606b55ea19b91bdcc9a7d4c054e9e3bbd5efac4ddd213b666ea6f1a0612e765a38a94fc1edd5f6c6dd5dba50db01a1172436ef86e30fb8ffd055670f9fa83f28d5a757da33feb35ff4ada98bbee715f2b9883f109420943462e51fee9ad4282ee6876820c74d32b30a1bcaa5b22ddc73dc62e28ee516afb866a0305dc7e8b3ca3cf380187b33076932fbbdea8339f59c6360adefa086d85019fdcf441cb724a0f890775e6fd4e00ed950bf618e5f258e1c485f9c3b512e616126eba07b3d4ae08046a446a52c8107a5a62ef8ecb4662dfaf53b05e8e71bcc537a3e32e225920a4b989432ad47b5c31897919bc989c6f48cac1579c1f525b481c0bcc9e019bae4d9eeeef18e4e33888f1cc00df3c06408ab6b4064b40496dce7c905b8c19335025debe5f54ad535d7395e3b4f75989983ed76791230ab52bfe98e562175d4f0cb1933a0929aed49a7a0e1e76638dab0e3703f5577ba6e3088f44e590633cf13d9b679ca7f7561e9906bddd6a05244be421003b3a1a54693cbef7ce2632040b4be9072f7a632fa3a9afbfdb25414bda9ee82866c439d0fbb148e294e9bcc8759aae703d37f9d492c3afddf5b1f6fe93a8b059e7d6c5ab53667262656746e405515fe4a7ddc156b8e8f3c6a9e345fdf49e6ff654b6111022198324655a522b58c6ef9a14b78b739802ec8b87b5cb1ad986aa769ba2958ee98bcc00f7e86e806f2d344e22ec25d57abefa84d3de3440c5fb779784c5b0d240fe9cea509d76744a8a06ff0f9caed6095f0f56c89451cfef6eec39470016c9b99cd7736821b9b426d4b3731faca55e903756e9506712e5c0cc63ea040e6ba5396797e42edecef69dedebb725acb6678fc9ccba24873659a8b7a253dfece816d5f1028197ca09574488c4405b2b3129d2dde643ba6852878eb337baf9f7a2388e6c29a9ee281f3fe1c96647c5bcb485e60953d895e4016cf2a679425450de1c7ffe99cc4dcc141dde4c480b445544bda0afb18c0465c75de100b24547ec90c978939ae32a6d14b5a61380382aa75652963aa9d140a66ff0016bb50fcd11749a24601224ae4f444ffb5d80a618f7843a6b5a88a74bf2149a8a3e08be36194e76902b98a1134123fae6474056b860b474762125d1803f8e80a000000000032861203d8fd375ba5aa472daea41c5c9d2a015551d67437e267bbec1fe2e109fd601c6e99d1bdf653d9b2595d9f9898341989654e99c643e98bc7cd196dd5d946630009a3c02403849254ca01f6afcff0c28a622fd397980e2fa8f35b49ace0ece09b75499feaf26293d18f917ecde6bc9f930614661ce1d32d76d0e863e520fb4583174b43c77c3e6859b53f02447159dcb02069d7b5eabf504c96829c5cc50d742043ddacf37eb14759b345f3851d4aa397c0b4fe99bf0ff748e2a538ace4275e22a063da15d86ff72572c480c4fe1760318b141c440732d72947da4e27578eef24762543315eb0e4d8c487ca449ec2a1e60b5205722f0d16e5583831bb7fbf9fa40a0cd5a6a9ec36d8f68d779c36fbd09122f59f4f9f4179c5d45a2301a5fcf292600e3e930c4c9819a659bce76799df2c7dd78163a59fe4aea354aeed56a2ea15d18c9bb5001c1774930eca2ed94f1010785e3c92bfb2633c80ea42a3373d301657e21fb540d6e6dd869c79f6b846ee225762ebac40d0949e56d4f85f09e4ad981e7af031a0b5e8fac04f0a6fe02acac9a499903fcdad4ec8c997f1cd88cd2120a53f2726ed09b8d05ded97b637401bb74f5a1cf408c60a112b7f4bcfe18685baa22eda0e16f02f423c8678e7cbbcc99f132c1ba2c0d6c05ba83d43d7b5b5ab0cb00c1685fff14e5e8592edae5a276186ca43481e55a340761ff4a29f0b7def0a6f23ea96fdecbbfa53bc3270d0acb38fa352143ba2632565d623070c9b72ed9e7e0d43e547d7864fcf507b110c3a36f4a6745e916d945bc3803f6847ca774a8fd9d2104d9436efad03ac5daac19cd7cb1f70c542e971b817d5ef3566e2ccac26c48f7d49dc2176ba1c24263c61f70411e76ab1e72714c8cd0ddbc8294392d78504d22cca19b1a532f899cbbe079599caf35478719d2af9f1fb767cdc5d7b031e14cab5d5f7205aa1b33c01cbfa1347eea2d8b7309bfb8f54cbc5764d87f5249885ab87918ed38a48a4a8440f17b9b799f07ff4f86b0ef5af6a9850f2cfe8282427873d94c7f5d93b7edbec8cdcdd6044ba08db4ae876236d16b6fccce61130b1f32d446d8d3e74de5d412be069dea6bfa3f55f15184acbde502cd55b5ab653146e933424bc85dd4af01c603a205fd2343aa7fed6867051e7905394bbb3699694ec6a6fd8b68f41ebf2060e8ea54e45e9c294c9121408128b920d980f2bf915b3781f1bec74afbf30958b20833806fc3d7982f982154bcfaa9d88a0f87a0df2a63dca46c9d4bed436cdf50e73967b4405c3cbdcb3ec2c1c0f872d1884cbb08992a2faaa829d590ed750a7783c36ef19c9a76a4bb4a5bd1b84f2eec26ad62f0d8279e42cf0e017785fc90aa0c72e734abd9614856e0ae86a49a0f4574fae547032741c741345f372a5c823b952dc95b10c13f142ef084d72661f33395c4ec53792f4d3b5cbcd67e1603c366aa8dd70dc3a7b3bbc81c0069eb7c69ece8dd744988c6754178bbb0ed8dc72cc621cedee47a202db52cec49cab2fe198325c2fd30b17bde4358eb25d7d573171b862c747a33c11df2e7bb5781e79dca58e181b8c2b116bd8383b15aa78c1732c8e6155fc3f095fb77e1dbd2ab9dfef26a936d489158e1d3dde3eb1d3f727548138d9faf5f55ced3b8e014051e58bd99f752d58e839999df3f60f903b768d2a1ff097769664acd034e6a0f3596985db17da232f29863267b10e0ed34c71ded167fb2b4feeec465ef6af0d17d248d3cc0e577e027c51a7d90eec4a90783f37b5e48cd1c474a590e790a548ff204bc775ac61c66777f0230d7f107d2ffedc6ef2b92dda1d7e79f40d5b85a2eaf623f543165260b8e67fb0b58ca46dca0c4fc048f8593c6223d0652f57bfa1e33d7923644afd4fb0c1e4028ced5c9e9296780570644225b20631d1c53fb904e932e7620256e06777bff2a89d7dff2c7fecb5a2d48ab2b9abdd8021938efe8e78f5ba13452100d87aee8d298a7e1a80b844dc6457be7c28f6715a7de70773bd3aa380d8969e105ccad6f22dce0ae344f0a57a4fd63dc9ecb4aa2eb17c9283cc701123ad448b994e3d5e8523329d31dda9af4dde215f7c35033f527074c1d746e0b4ff05d93996d0afb9892dfd7bb6ba7097bd8d4b234b6172b6948f7fc80e66c7bae3bb211b68676fa3d21152eb38f27cfbaa3b718b3a7462eb0d2ec7550b6046c52b70ee54d5035bdc4f8f93bf87cb2bc0a7b899d8d51c55527efea11917b0d09791961b564624f978a6881b5540b3792f07f93c180a856d7553f91079814590f1d76c2dc0089036a61d38c81a8b24e6a34da7483a1cc2174bcf133a651afc145b8702bd6a20ba888f54ac50da3d44a9cb1b7c2248cb5da3d41e60cd1ceeb5892f0cf72b25bc3e2559d98c068c02d26ed1d04e2f9bf89569675821f1feb4e4445125be19a354ad6f870a3b57fd0e69d04b90d622b338e22d447b3b5647c15d4282e8801f9f6dbab5f1cf297f1ab7230d04433a5c16bf06830f3160b04dce7b2a3ae4edc4dd63fbb6484133b6ad1f580456a7f6cb6b7128f4f52e6e066a8476ee181d9298f69e07e8a153023dc5f2f581d6caad44b63be0f87433a9d8aee7a68135bb683a1bc9fe169ea41bb8f9be123e8723cf3ba0abbfbd2d0ff15dbd374ce3a0e6a2b81e557584095530f1d05bcb2cffb079ed056ff9b4d67cfbce4af3a3d52f1c300621d7045b56010b8d01e539396079ab966126391263b722dab43f002516d4cbd890171d5f01852a3b5c4613086f9a1fe25389100f3e442a20a106cd9c73ebd5be2dfdc691a8d729bd56508be1d5edc02a2518758084f05d42059c1e352af53274baa8ba317a931c8452bbef8f04939343433afae01b9489fc10d5651c0e491265e0fa65f114503bddf462b216ac6e26000f44497e577377ee6e2d3b3af7c34654dc89adbcac132ee78c9d5166b5702ed5c5222b98e1c5176686e3d19a86c3b2eb1f95b1d2279f3ef11c865637f76dcc241a8e71e8c833c949746c348e403d463bd87c6c53eae605508480e108c5387975b6e98285c3035535c0efd3a3fc21957431f82717abfe03e71cd9a077f61cef2b28e7e6480b769b9c0f1a466b8201ce37fe51b13574c73da11cb5aea806a1438059b2ab42f912812f7b4ae4363a16688eebe733730da70c1854d8ad2ffdadbed118e91017aa516a49f19e9a68850f79c6f17d470198422ee1cdb6c1f5e900941f6a5a6757bb2f72c1183b7e2d6a6b4510e6a46969ed3e1a2e813513583d65c2f539844c4bd0e97a53b6ca45fc2d7156579366ab6ff9542888a56728404d014eb4019994dda53aee376e57719f081f939f85392e27fbe72a5cf65510d148270d1ed22c2f46863e325133d6a722fb55c5a900f7308e874317595ef4cafcd40fa844338344c0dc4e8e05218ad3565a50ab9143b63b333e360d1fbf3fc9fe341bd9403bc3013f3440039d923b2b6adc9e2435e8b9ffb78fce1b88109e13c948984ddc8924f5da1e77380f5a2f7ad81d31d047e6be45a774ca3082353dc9ef14c421b8129042d8ca11cb77806f3f93fdd6f537ae731f137728120b5750d69ca674545cf09d81f29b0f53e73373383befbb7ddaa39ceb45a84a0c268687fe307a3ad501e9bb0d19a5b223d67a8a32d6e3c2c3e090c06c92834b09634ece2fcf520a8337e4b28da57410b7084fdeb1f9b55b308b17164cb72e9503600ce2ca6c70bc32e4269bd87cdf22c1e45a6cda1bf658c98dedd878186fab3978cbe48184e02a05b39c4c286fe20158e581d3e2b5e4e5e2d438439125fe2e05d3f2fea69d0934c7e6eaac4e793ac5a7feaa4760ce7575677ca9ad9d1c8c803ba96e937d7cec429a770f68270f1813fd74dcde6956714650cf54b3ea24b8771389ecd3ee1ac0c4eaac2341918c819ed65af8671cd3bb58c0bb6c1a27db24f21686373dfe2274699c54c16c4986fb22d9a8caae2222be12d235c78a50a2489610cdf97c7761e0fad69c966ff8f1a41cd2307d1f4adbb094aa34eac0cbf8b6bf0aa60aef8314c37d3217bd36b7726c51bab1aa8705215b0d1fe973f59fcb8c9513e3310c32b88ae4156a292fa1d02acf6204555fd6b692f80346a100b3c2232b158a94d7558facb635b69dc5c87c7cf2d2495ade53fcdb50ae0163d4798749d62ecedef3919193ea4c0034403489d09c2f76e7f251dfacd60f9bb824579e6e983cfc448d8afb75088891e8bc5fa0854de7457c5810106751a7f412b12a995b8c29a4b6734a0477a373be1674007d969465f27e95c9a0a3c292a3b51272584ec802471323ef4b8e0b39cb34da4b7ae870728464dd73c5a7c5bfcf65e8afc800572be59b9f1b6f30a42215f75b56172a2ec29320288a666623fade667b4d84b16632c5972ee16fbd69fe81d194ce510cb48f4d47081ace37ee8b1531a90f9831da160cda269151dd7dbaeeeb7942c513c10a19ac9f38995f2cf49c1d3c03c909ca3a564458cc4e483790e9be82047fbf84084a97ad6c452c29e794b9046b69b93223281737979c23047f95c41d29dc552ad85c3db2e7da9003b9105e030dca309229e4e89a10fcb0f5456bc06283ccb3938a8e0d5958ce693911f3fcfb7e34d41219d1c7bea4683396e6ac547b62bf80f0a84e5381825baaab9fdf346a6a939d6538e535a028e1a0f9e545e11441f8bb717d67943de3f1ff11f212c0af480b6d6927b9a2631176b63536d489c1a8a4ba7892a84b393e5e8793458a12ca5f795651021ffdb236344adec8bf6012d22260727a44777b5685575724525ce1b82fd83b2689944cffc8388ae4527d7eaa6b7708ac6f5163c2d62fcc13f9830bafcfd3eb1e9bebe7ac1b1a2d38b2c0c387e0156a9fd2be9d8685bf7b4442960045bfa0571817c966921b723d5d783a7245b6f98c8bb5abc08c1938da45d66ca89cc8bf243c860e264cf5906a6d9545dbe3778c2552929b2d8989af3a92e5df28872f63aa0ba09355d01f2b5a0f2d7d4fc20454d9e4a9340f21589cf2b9ab88dc19fd6774205b3988b719ec5d74957952c0efa64fd425aaab5367b61d9634344a0f32f7a01d0e61db9ae1e240078293239712d52f741b8e1aef58c3a4fa9c0d40a154ec0e23a7f12fb438632d64282171fe705cbcca36d5c331b4cc446b6f215833d941bd3d0cb2c8b63d579388c59096983c93da17a55c9f58e0da42f4a29e88be7eeeaa1898b624352f9e93dc8ee1ef0297cbfe0a38d19d89bf572f26cf80dda465e7741067b75a0f6f5e2079753a1b106a67efb204a121a78c7017487860360b90ad1103dc9afcd1f5faed05acafcf5b776efc91b894b5a8895eea5217609b5935f669049513305aa10a9f62de1f824f550ddee657f1b0d7a338b19d18e4b3e26aec17217d0f58a5aa6e39a835f3443f5caf522988294d756b036bed298c4693a30c933867c4c92989c122e0d3da3c3358b219ce8e9b2e99fe2c6346b9cb581b86f85c2e33d2d34b405aca83ac915608732b7b258965a55beee0f9ea166f558ad9d06d07d4137a030772520dbddd3a057e6d2ac4d3079a34731c56de2f8291b59f05330912caf5ac13c25a1dc2131f90e17998f14f62cc70831f43afb4183ee498e77c0566d42997468fa83a53899df2b1b67a0fe11454033ce03f7ebc5002218c2f4e266da31796bb06c1f6aa1c3f879d5d21f9f81062bddb28c805050fe63a55789f1fc50dd67a11bbbfd870b53cc296d719cf403663303e3503547e323f10f74bc707648a3318a1c6abd0428c24df43fa0a208c67ad855dafb0fa115669664515dd2782a32098ef68850b7c2533d55af6560d248154148335dd84b2de3eaab3554c265ab235361b161ba52d79db25e24190ebe26795f78e4c1a97cf40284ad278f216dc27ed90c85eaa2b9cda7708c73fa45bd3792559207b2812b47da176282df71ca4e25dde19e9758e93b8dff9b4d6f6bb81abff143ad08c952e426a151db1f8326c37a54a3dee38de00dce18987c216dcb821fb76f06aaf596a1937b314a23535313017e5a3bd02bf3e6cfaa1e2643f0a26318abb70eed77fc9896e32d060693537069191a96db3b51b4978ed0826cb9f7a017396b99e6545b4c40c21e9c3f8215a584aa0c780ee42689f51a605631b9d7a9397734b9077d4fd5f00bcc1ecf13380598a8025195cb9cce565af0012f7d8063d9337088759fcd20101d6ffa8a3390b006d4583e3291b79e6cdf0813bcf88d9955f98d2371aa2b4d91dd555129714823cd9d7ac58695dbac826057b8a76818891c37395973987ce6a2be088eed92fdff7bd9852737f84461e304a96b8a258ac201fbadf618954278ff9912e8a2e2be415f7ae6af565cfc8724c8f4d0e1df9046d6bcd49bc3f77daaab84f24ad3530d703c16466ab20c208e3aa9722cc73da0d5107644f6fd0f4bc9bf40149584e239e543f24ce5765d23483a337e0ebf7ff6e1e00112108a5a50e838892b86a92226cd615ed8a5920c73f63d2129c853dfb9a54c1a7e5210850d5ae7c49243b423a5471d381acfe94300feba23b166859517f56f91cca5dbee19e15e87cf9aa4028b42ceea7efc56b1a6f828176ca63bd27aead72bbefa5312c7a4a6fec59dd1f291b0a58f650f3b6ce5f437519edcbfc7b58cdf83da36d3baf5762ed625b52411380acfac0109437710443ea4dd5042013d1b77c27c330521ada326fbe94a28003d7e270728d06eea4d652317d81d2845384c5f774b8906e2644764c3dc67acd3836ea045f046f5644b79a972d42864a0367d3e6d26112c88485d63ed3906fa336bba0a8300ab56ead40af49d04dc32fac383eb4a876534634197372b0f9001e0b9d01e6ee17484f3276907314b510f86b4b22be1cb84fa5dcdb67e7874b531e12ff6896e5041eba791f741151362c03ca66685b4e85f8cd38595e9d4855655426b23dbda6a50ec4b43091cdf2a6adc32797cb3af7e73404f40e158a06505feb155aa6e96dd4973aab68c0bdc2d9ae6dbd84b67d2742802d983eea7ed679328626cf4c477bcdef597da667d294cdb82a0a7e7fc6717839d1da8a8aec5e44e7123a1246f7fbddac2f5c48e69cefcf5eb2a628caa77b91d28be700985d261cca3c2048c35417c34204e035f07017c55176cd4bddb0b04d3f98a756f39856baa43e11e8777e4a9d1d79a5ac8c9413e913e56a0814314cf09ff1a51a02f4a8e51b800c998ed11b996a7828aa2fa1d384245fe097954a5ef75c6c19125f01027c1872240e3c585a3b9769d2c8d47a91a5721ae5503981b2fc02a7f0e6c203c195facd1544640eea2c354976f79acb57ae479c235522f30267c2bcf0eb186b8b0570620e38072041309f3ee79382af7fd1e087c987005210a594ac452cf4f8cd1befd81a844e7ed2d13963ef77be237210056e6251712ef6bf3cf686ef7ec62bcec5fd314a2f80e036167946645cd1d40399d4c78aa45e78cae99f9e7845a17e1162ad2dfc26426d830a1f5c0846cbb01d85cb2b5488727df8f4e77af49943bbdc85f412c1986315bfeb7f4b2761463f4e3992080ec64bc47485f5388c0c147a77998d344a51d60be16438a6986c65028e9a390691c9aef240f7f0514c0e1e9b3f2849006df8949ee45a5c5b2996fd1c497a7260a6cd5fce873e4d4185ca5d79da2ed7089cc1caadd75c9796595bfc3f6010b1817044e9b8123277441021827fe1c59c32c46359a2511dd1e4b751cfde29cbae57828a815764c127cc56d219020536fd3c41be7fecee24c5e7529117d3b6c70c751732fcb67f1b39e2a5e901288a6db820306b938ab21a0b808aa8f65e3c0b39905fd782f840beb3ff377dcbb46d5f75328823394fb6b8ff809fbd2eafe5be484c8abf5e30a84c70cef6bc175a343a2d14fbf531fadf8dadece387959a3a433a98316a81aa3ca1242a2d19556fed88d912e6749c8a941f20163165d0a1c1aa81d46012025a31156db63f8a1e3573bcdd1d5bd67413f9432ab50b741addfbec64b4f14cfd59d95a5b60f5b9167951676614f14b00472f4b4c8cfe65da0da7ac73810049a9c3609cddaf50f089df3986df1a51830004586351673cc9a9ebccd1edf71b0597b6369a34187bcd4aed53b994051a2b1c26f2ad6425f7cb22a6630739da814db1069f929a884173eeab9ec6f818fedd22eb828161978ab7b2a3f7396f8d23536ca2cfa4e93efd1224d7efa5c139cea99d89cf19c75aa3b305b783f58df099ed0ea64466031d764e3494deff2e3929f94dcd62b4eaf989d926fdc5bcedb7251b0af356a340c5e2564dfce9534723aef055882a88c0237455b2a26f6eadfe627ca776ecf208225730aed3f25d621a3c8ffb500ec5e2c523928ee49905486cc7cbc915b2519abadad770bc7e6e2f1712d07766b4d73a0f1b751de3bc2eb41b9b879c755af9e1b102569fbcb3d71a0058232dd51c1b9aa70dd23e82a9d5227df6404b9817460b636e3ef720eb045b370fd7b88c399710f78741dede33ee4d1a19c28f4ba82302fef4a7b167346ec03fab6e8eb489dfe5e2a85f9dc9da42b047283bdc1d1082ca2649a6d2fe889e9639e9c0f74f59aba9180aa9f9ef3d2ae4834307f2239794cb372f67d8e17046841ce83a8713bbe43b8a7bfb508421a3d6d49631407663e4eb909fdf39fcc166ec13346a4259cfc07bd4c2fe00861c9eebc78076d9f5bb8757f2fad939b493f0d81f373cc09e74f1db62fff487251ac0474babb4a42ba36b63bb77e107f4dc45fd33f40c00f0c0b043b480f15fa37c9397a3ade86d168e33c18c8d7d77e8f179d02986f402bc28f15f3715b17d2f932bebda8e0abb2176e4339a41c15b4fcd109f328ef71eff50ba94e591c12c4c197b006fa684f88725551920a8a419cc745b9a1b3594d80af9f6e5a92531a858ad72b5f0a0380bb3b3afab7249ac66769a5a083766ad5f00a21bd095874bb06e8183debb71f328eab7d538ed47601abd2cb4e0110229c450cbc0a3dacf77ca1be7d4c60f526564ffdbb13a0dfb03a3167be9091c282121905f21470f9b811bd730383ea1a28be7d048fea316d328e82e87917c0fa581b0c5880af1bcda5ecde40d116050a9bb2d1c5bbcac03cd65fff023558e0a99ef8f8e427c6b20885adb650cd19c3c7588298469ffe94212196e7cd2ca420f690f9158bbaf204f47e3c5ab0a37234946b7e482457fb6dfc188b864760b590c918d619e987faca0768aa466c274b3a5e1f16a37686487d147ba6ab1ba2b8d9be1fb26fe4f5baa94117d1f081da9adb3a193825630343a32fac6678b4a90b02f15669de1c26112fecb97b2c1d5d2fdad12aa4bb54a4b8c5c17c6970c0aef5a34c4a5760b8bc9071270de9ba3a015db8f8ed5e899b68a150720cefba8ea62bf30437a5a3e88eb76cd486924e5a22d8f93e0f281412a91e713dbcdf954fc6e8083eab4fa2e062ad815bb00166ad9fa66a6966f277dae5a5d920632659f727cd803692cdf439b5bd91dfb5102ca002ee0c045c83d2c001d1671c8375c1c72b9e02b6cecc1851f150056c7a0c280b711b68a376072d7ef7b42b140a6cc72677d789c8b3a72b93eb246669ceb58d993cc1b9042270625301b2cc84efb2b87a688b922bc83780d33db8c017258c49a0645156814bbfb910a158110bbe33b101932e985a4d39637487ed1f59cbd1419e6001f6be2065e981369388da39d917a2524bfa4261babd5dbc06c932639e5937c7f8e6ff88515f10115b1494ca4b74ca38be6be72bd0329ed8db64d22f612fa91eef917e528afce83866ce743784ece16ef98016a1fb86b358df345eecadc7a2dde8301f73c3633456cc55c0f606afd7680a98cf6cca852a43a0ba9b525f52fe9713f470a62e3902683f0757eee89bf16258a28a59e028c48378918550842acaf298c19956deaab130a625b771a92ba2d7ffe36750308e61f0b5ae4e2de3d4da9d4f53fb0e60524532574ac28fae9b2712c00884e68a6b561f75ca4bca149bcac141fd3be1ef0008356874eaf92c1f3abe032135f55569e8eafa1c1ad617b3d26a337e5daaf041f5c419f2e6c5985b686790c95ec70f70baa822b70e47036c51d10e80f2e3bc76f9cdbccdb649efd57612ba537f519beaf6cca54585e71542e1d355588255a95709f53c8e1025da0ddb2050ea0b8cbe6b32ad297867b2e362077aa1012c0344333cfb5ba48cda7469e78984eae21c4454786676a89f2ee997a8ec1e173f8422f3a98602882218ffdd1d3476c19f550b84e72993dbd2b4aac4bc804ddb5b61f5e3887f6d6db594bfe845296d50ee33e3f35b677dc781bde42be674442413f51447f8bc3886bb41d8504a9fed33db491bcc0275dede8e0fd1d9ce23bd83424ed8a93d3b91406830924d2a796a03b8a75ec16d80cbc4348a4b5baa26a8287414f74de464c1718d8bc6c4f3c15b31259f5e00f7a96539e173a0390bbbdbe84c5262a8e39a2fb44c02bdfadc4c392270863fbbf3855bb62273a2268b5c168b1bafb55ba4a086243efeeaddc98c6a907cd2f36b62e83656b05c44d943e9f0c8855c386fe09a65e5f9d6eddeaf0436e1e730d6a94feb3ac4a42f06517a11b25eeb97a8562f81ca354455adf40415ed901"; + let tx_zcash_bytes = hex::decode(tx_zcash_hex).unwrap(); + + let btc_tx = + WrappedTransaction::decode(&tx_zcash_bytes, &network::Chain::ZcashMainnet).unwrap(); + println!("ZCash tx: {:?}", btc_tx); + + let output_script_pubkey = btc_tx.output()[0].script_pubkey.clone(); + let deposit_msg = DepositMsg { + recipient_id: "omni_user_account-20250625-153431.testnet".parse().unwrap(), + post_actions: None, + extra_msg: None, + }; -pub fn to_psbt(psbt_hex: &String) -> Psbt { - let psbt_bytes = hex::decode(psbt_hex).unwrap(); - Psbt::deserialize(&psbt_bytes).expect("ERR_INVALID_PSBT_HEX") + let path = get_deposit_path(&deposit_msg); + println!("{:?}", path); + let deposit_address = generate_utxo_chain_address(&path); + let expected_script_pubkey = deposit_address.script_pubkey().unwrap(); + + println!("Deposit address: {:?}", deposit_address); + println!("Deposit address: {:?}", deposit_address.to_string()); + println!( + "Expected script pubkey: {}", + expected_script_pubkey.to_hex_string() + ); + println!( + "Output script pubkey: {}", + output_script_pubkey.to_hex_string() + ); + assert_eq!(expected_script_pubkey, output_script_pubkey); + } } diff --git a/contracts/satoshi-bridge/src/chain_signature.rs b/contracts/satoshi-bridge/src/chain_signature.rs index 10ec76f..46a3232 100644 --- a/contracts/satoshi-bridge/src/chain_signature.rs +++ b/contracts/satoshi-bridge/src/chain_signature.rs @@ -1,8 +1,5 @@ -use bitcoin::Witness; -use bitcoin::{ecdsa::Signature, hashes::Hash, sighash::SighashCache}; - use crate::*; - +use bitcoin::ecdsa::Signature; pub const GAS_FOR_SIGN_CALL: Gas = Gas::from_tgas(50); pub const GAS_FOR_SIGN_BTC_TRANSACTION_CALL_BACK: Gas = Gas::from_tgas(30); @@ -78,12 +75,21 @@ impl Contract { sign_index: usize, key_version: u32, ) -> Promise { + let public_key = self.generate_btc_public_key( + &self + .internal_unwrap_btc_pending_info(&btc_pending_sign_id) + .vutxos[sign_index] + .get_path(), + ); + let btc_pending_info = self.internal_unwrap_btc_pending_info(&btc_pending_sign_id); require!( btc_pending_info.signatures[sign_index].is_none(), "Already signed" ); - let payload = get_hash_to_sign(&btc_pending_info.get_psbt(), sign_index); + let payload = btc_pending_info + .get_psbt() + .get_hash_to_sign(sign_index, &public_key); let path = btc_pending_info.vutxos[sign_index].get_path(); self.sign_promise(SignRequest { payload, @@ -111,7 +117,7 @@ impl Contract { serde_json::from_slice::(&result_bytes).expect("Invalid PublicKey"); self.internal_mut_config().chain_signatures_root_public_key = Some(root_public_key); let change_address = self - .generate_btc_p2wpkh_address(env::current_account_id().as_str()) + .generate_utxo_chain_address(env::current_account_id().as_str()) .to_string(); self.internal_mut_config().change_address = Some(change_address); true @@ -153,12 +159,11 @@ impl Contract { } .emit(); let mut psbt = btc_pending_info.get_psbt(); - psbt.inputs[sign_index].final_script_witness = - Some(Witness::p2wpkh(&signature.to_btc_signature(), &public_key)); - btc_pending_info.psbt_hex = psbt.serialize_hex(); + psbt.save_signature(sign_index, signature, public_key); + + btc_pending_info.psbt_hex = psbt.serialize(); if btc_pending_info.is_all_signed() { - let transaction = psbt.extract_tx().expect("extract_tx failed"); - let tx_bytes_with_sign = serialize(&transaction); + let tx_bytes_with_sign = psbt.extract_tx_bytes_with_sign(); Event::SignedBtcTransaction { account_id: &account_id, tx_id: btc_pending_sign_id.clone(), @@ -185,24 +190,3 @@ impl Contract { } } } - -pub fn get_hash_to_sign(psbt: &Psbt, vin: usize) -> [u8; 32] { - let tx = psbt.unsigned_tx.clone(); - let mut cache = SighashCache::new(tx); - cache - .p2wpkh_signature_hash( - vin, - &psbt.inputs[vin] - .witness_utxo - .as_ref() - .unwrap() - .script_pubkey, - psbt.inputs[vin].witness_utxo.as_ref().unwrap().value, - bitcoin::EcdsaSighashType::All, - ) - .unwrap() - .to_raw_hash() - .to_byte_array() - // let payload = psbt.sighash_ecdsa(vin, &mut cache).unwrap(); - // *payload.0.as_ref() -} diff --git a/contracts/satoshi-bridge/src/config.rs b/contracts/satoshi-bridge/src/config.rs index a1926b2..06d2a94 100644 --- a/contracts/satoshi-bridge/src/config.rs +++ b/contracts/satoshi-bridge/src/config.rs @@ -1,3 +1,4 @@ +use crate::network::Address; use crate::*; pub const MAX_RATIO: u32 = 10000; @@ -39,6 +40,8 @@ impl BridgeFee { #[derive(Clone)] #[cfg_attr(not(target_arch = "wasm32"), derive(Debug))] pub struct Config { + // The chain id: BitconMainnet/BitcoinTestnet/ZcashMainnet/ZcashTestnet etc + pub chain: network::Chain, // The account id of btc light client contract pub btc_light_client_account_id: AccountId, // The account id of nbtc contract @@ -103,11 +106,13 @@ pub struct Config { pub max_btc_tx_pending_sec: u32, // UTXOs less than or equal to this amount are allowed to be merged through active management. pub unhealthy_utxo_amount: u64, + #[cfg(feature = "zcash")] + pub expiry_height_gap: u32, } impl Config { pub fn assert_valid(&self) { - let confirmations_valid_range = 2..=10; + let confirmations_valid_range = 2..=100; require!( self.confirmations_strategy .values() @@ -134,8 +139,21 @@ impl Config { ); } - pub fn get_change_address(&self) -> Address { - string_to_btc_address(self.change_address.as_ref().unwrap()) + pub fn get_change_script_pubkey(&self) -> ScriptBuf { + self.string_to_script_pubkey(self.change_address.as_ref().unwrap()) + } + + pub fn string_to_script_pubkey(&self, address_string: &str) -> ScriptBuf { + let chain = self.get_utxo_network(); + + Address::parse(address_string, chain) + .unwrap_or_else(|e| panic!("{address_string}: {e}")) + .script_pubkey() + .expect("Failed to get script pubkey") + } + + pub fn get_utxo_network(&self) -> network::Chain { + self.chain.clone() } pub fn get_confirmations(&self, satoshi_amount: u128) -> u64 { diff --git a/contracts/satoshi-bridge/src/kdf.rs b/contracts/satoshi-bridge/src/kdf.rs index 44f7e7c..dba715a 100644 --- a/contracts/satoshi-bridge/src/kdf.rs +++ b/contracts/satoshi-bridge/src/kdf.rs @@ -1,7 +1,6 @@ use crate::*; -use std::str::FromStr; - +use crate::network::Address; use k256::elliptic_curve::sec1::ToEncodedPoint; impl Contract { @@ -29,23 +28,9 @@ impl Contract { .unwrap() } - pub fn generate_btc_p2wpkh_address(&self, path: &str) -> Address { + pub fn generate_utxo_chain_address(&self, path: &str) -> Address { let btc_public_key = self.generate_btc_public_key(path); - Address::p2wpkh(&btc_public_key.try_into().unwrap(), btc_network()) - } -} - -pub fn string_to_btc_address(address_string: &str) -> Address { - Address::from_str(address_string) - .unwrap_or_else(|_| panic!("{address_string} not a valid btc address")) - .require_network(btc_network()) - .unwrap_or_else(|_| panic!("{address_string} network error")) -} - -pub fn btc_network() -> Network { - if env::current_account_id().to_string().ends_with(".near") { - Network::Bitcoin - } else { - Network::Testnet + Address::from_pubkey(self.internal_config().chain.clone(), btc_public_key) + .expect("Invalid public key") } } diff --git a/contracts/satoshi-bridge/src/legacy.rs b/contracts/satoshi-bridge/src/legacy.rs index ffd8007..4ff16dd 100644 --- a/contracts/satoshi-bridge/src/legacy.rs +++ b/contracts/satoshi-bridge/src/legacy.rs @@ -151,6 +151,7 @@ impl From for Config { } = c; Self { + chain: crate::network::Chain::BitcoinMainnet, btc_light_client_account_id, nbtc_account_id, chain_signatures_account_id, @@ -178,6 +179,8 @@ impl From for Config { rbf_num_limit, max_btc_tx_pending_sec, unhealthy_utxo_amount: 1000, + #[cfg(feature = "zcash")] + expiry_height_gap: 1000, } } } diff --git a/contracts/satoshi-bridge/src/lib.rs b/contracts/satoshi-bridge/src/lib.rs index 5511afb..001f5c3 100644 --- a/contracts/satoshi-bridge/src/lib.rs +++ b/contracts/satoshi-bridge/src/lib.rs @@ -13,16 +13,15 @@ use near_sdk::{ }; use std::collections::{HashMap, HashSet}; -use bitcoin::{ - absolute::LockTime, - consensus::{deserialize, serialize}, - transaction::Version, - Address, Amount, Network, OutPoint, Psbt, PublicKey as BtcPublicKey, ScriptBuf, - Transaction as BtcTransaction, TxIn, TxOut, -}; +use bitcoin::{absolute::LockTime, Amount, OutPoint, PublicKey as BtcPublicKey, ScriptBuf, TxOut}; pub mod account; pub mod api; +#[cfg(not(feature = "zcash"))] +pub mod bitcoin_utils; +#[cfg(feature = "zcash")] +pub mod zcash_utils; + pub mod btc_light_client; pub mod btc_pending_info; pub mod chain_signature; @@ -33,6 +32,7 @@ pub mod json_utils; pub mod kdf; pub mod legacy; pub mod nbtc; +mod network; pub mod psbt; pub mod rbf; pub mod token_transfer; @@ -50,13 +50,25 @@ pub use crate::config::*; pub use crate::deposit_msg::*; pub use crate::event::*; pub use crate::json_utils::*; -pub use crate::kdf::*; pub use crate::legacy::*; pub use crate::nbtc::*; pub use crate::rbf::*; pub use crate::token_transfer::*; pub use crate::utils::*; pub use crate::utxo::*; + +#[cfg(not(feature = "zcash"))] +pub use crate::bitcoin_utils::psbt_wrapper; +#[cfg(not(feature = "zcash"))] +pub use crate::bitcoin_utils::transaction::Transaction as WrappedTransaction; + +#[cfg(feature = "zcash")] +pub use crate::zcash_utils::contract_methods::*; +#[cfg(feature = "zcash")] +pub use crate::zcash_utils::psbt_wrapper; +#[cfg(feature = "zcash")] +pub use crate::zcash_utils::transaction::Transaction as WrappedTransaction; + #[cfg(test)] pub use unit::*; diff --git a/contracts/satoshi-bridge/src/nbtc/burn.rs b/contracts/satoshi-bridge/src/nbtc/burn.rs index 7af6b3a..d745798 100644 --- a/contracts/satoshi-bridge/src/nbtc/burn.rs +++ b/contracts/satoshi-bridge/src/nbtc/burn.rs @@ -74,11 +74,11 @@ impl Contract { }; if is_success { let tx_bytes = btc_pending_info.tx_bytes_with_sign.as_ref().unwrap(); - let transaction = bytes_to_btc_transaction(tx_bytes); - let withdraw_change_address = config.get_change_address(); - let withdraw_change_script_pubkey = withdraw_change_address.script_pubkey(); + let transaction = WrappedTransaction::decode(tx_bytes, &self.internal_config().chain) + .expect("Deserialization tx_bytes failed"); + let withdraw_change_script_pubkey = config.get_change_script_pubkey(); let mut utxo_storage_keys = vec![]; - for (index, output) in transaction.output.into_iter().enumerate() { + for (index, output) in transaction.output().into_iter().enumerate() { if withdraw_change_script_pubkey == output.script_pubkey { let utxo = UTXO { path: env::current_account_id().to_string(), @@ -152,12 +152,12 @@ impl Contract { }; if is_success { let tx_bytes = btc_pending_info.tx_bytes_with_sign.as_ref().unwrap(); - let transaction = bytes_to_btc_transaction(tx_bytes); + let transaction = WrappedTransaction::decode(tx_bytes, &self.internal_config().chain) + .expect("Deserialization tx_bytes failed"); let config = self.internal_config(); - let withdraw_change_address = config.get_change_address(); - let withdraw_change_script_pubkey = withdraw_change_address.script_pubkey(); + let withdraw_change_script_pubkey = config.get_change_script_pubkey(); let mut utxo_storage_keys = vec![]; - for (index, output) in transaction.output.into_iter().enumerate() { + for (index, output) in transaction.output().into_iter().enumerate() { if withdraw_change_script_pubkey == output.script_pubkey { let utxo = UTXO { path: env::current_account_id().to_string(), diff --git a/contracts/satoshi-bridge/src/network.rs b/contracts/satoshi-bridge/src/network.rs new file mode 100644 index 0000000..3634ce7 --- /dev/null +++ b/contracts/satoshi-bridge/src/network.rs @@ -0,0 +1,436 @@ +use bitcoin::bech32::Hrp; +use bitcoin::hashes::Hash; +use bitcoin::{base58, bech32, PubkeyHash, ScriptHash, WitnessProgram, WitnessVersion}; +use near_sdk::near; +use std::fmt; +use zcash_address::unified::{Container, Receiver}; +use zcash_address::{ConversionError, ToAddress, ZcashAddress}; +#[cfg(feature = "zcash")] +use zcash_protocol::consensus::BranchId; + +#[near(serializers = [borsh, json])] +#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub enum Chain { + BitcoinMainnet, + BitcoinTestnet, + LitecoinMainnet, + LitecoinTestnet, + ZcashMainnet, + ZcashTestnet, + DogecoinMainnet, + DogecoinTestnet, +} +#[cfg(feature = "zcash")] +pub struct BranchIdUpdateBlockHeight { + pub bu6_1_update: u32, +} + +#[cfg(feature = "zcash")] +impl BranchIdUpdateBlockHeight { + pub fn new(chain: &Chain) -> Self { + match chain { + Chain::ZcashMainnet => Self { bu6_1_update: 0 }, + Chain::ZcashTestnet => Self { + bu6_1_update: 3536500, + }, + _ => unreachable!(), + } + } +} +impl Chain { + #[cfg(feature = "zcash")] + pub fn get_branch_id(&self, block_height: u32) -> BranchId { + let block_height_update = BranchIdUpdateBlockHeight::new(self); + if block_height_update.bu6_1_update != 0 && block_height >= block_height_update.bu6_1_update + { + return BranchId::Nu6_1; + } + + BranchId::Nu6 + } +} + +#[derive(Debug, Clone, PartialEq, Eq, Hash)] +pub enum Address { + P2pkh { + hash: PubkeyHash, + chain: Chain, + }, + P2sh { + hash: ScriptHash, + chain: Chain, + }, + Segwit { + program: WitnessProgram, + chain: Chain, + }, + Unified { + address: zcash_address::unified::Address, + chain: Chain, + }, +} + +impl zcash_address::TryFromAddress for Address { + type Error = String; + fn try_from_transparent_p2pkh( + net: zcash_protocol::consensus::NetworkType, + data: [u8; 20], + ) -> Result> { + let chain = match net { + zcash_protocol::consensus::NetworkType::Main => Chain::ZcashMainnet, + zcash_protocol::consensus::NetworkType::Test => Chain::ZcashTestnet, + zcash_protocol::consensus::NetworkType::Regtest => { + return Err("Regtest network not supported".to_string().into()); + } + }; + + Ok(Self::P2pkh { + hash: PubkeyHash::from_slice(&data[..]).map_err(|e| { + ConversionError::::from(format!("Invalid pubkey hash: {e}")) + })?, + chain, + }) + } + + fn try_from_unified( + net: zcash_protocol::consensus::NetworkType, + data: zcash_address::unified::Address, + ) -> Result> { + let chain = match net { + zcash_protocol::consensus::NetworkType::Main => Chain::ZcashMainnet, + zcash_protocol::consensus::NetworkType::Test => Chain::ZcashTestnet, + zcash_protocol::consensus::NetworkType::Regtest => { + return Err("Regtest network not supported".to_string().into()); + } + }; + + Ok(Self::Unified { + address: data, + chain, + }) + } +} + +impl Address { + /// Parse an address string + chain into AddressInner + pub fn parse(address: &str, chain: Chain) -> Result { + if chain == Chain::ZcashMainnet || chain == Chain::ZcashTestnet { + let addr = ZcashAddress::try_from_encoded(address) + .map_err(|e| format!("Error on parsing ZCash Address: {e}"))?; + + let network = match chain { + Chain::ZcashMainnet => zcash_protocol::consensus::NetworkType::Main, + Chain::ZcashTestnet => zcash_protocol::consensus::NetworkType::Test, + _ => unreachable!(), + }; + + return addr + .convert_if_network::(network) + .map_err(|e| e.to_string()); + } + + if let Some(hrp) = get_segwit_hrp(&chain) { + if let Ok((decoded_hrp, witness_version, data)) = bech32::segwit::decode(address) { + if decoded_hrp.as_str() != hrp { + return Err(format!( + "Bech32 HRP mismatch: expected '{hrp}', got '{decoded_hrp}'" + )); + } + + let version = + WitnessVersion::try_from(witness_version).map_err(|err| format!("{err:?}"))?; + let program = WitnessProgram::new(version, &data).map_err(|err| { + format!("bech32 guarantees valid program length for witness: {err:?}") + })?; + + return Ok(Address::Segwit { program, chain }); + } + } + + let data = bitcoin::base58::decode_check(address) + .map_err(|e| format!("Base58 decode error: {e}"))?; + + let prefix = get_pubkey_address_prefix(&chain); + if data.starts_with(&prefix) { + let hash = PubkeyHash::from_slice(&data[prefix.len()..]) + .map_err(|e| format!("Invalid pubkey hash: {e}"))?; + return Ok(Address::P2pkh { hash, chain }); + } + + let prefix = get_script_address_prefix(&chain); + if data.starts_with(&prefix) { + let hash = ScriptHash::from_slice(&data[prefix.len()..]) + .map_err(|e| format!("Invalid script hash: {e}"))?; + return Ok(Address::P2sh { hash, chain }); + } + + Err("Unknown address format or unsupported chain".to_string()) + } + + /// Return the scriptPubKey corresponding to this address + pub fn script_pubkey(&self) -> Result { + match self { + Address::P2pkh { hash, .. } => Ok(bitcoin::ScriptBuf::new_p2pkh(hash)), + Address::P2sh { hash, .. } => Ok(bitcoin::ScriptBuf::new_p2sh(hash)), + Address::Segwit { program, .. } => Ok(bitcoin::ScriptBuf::new_witness_program(program)), + Address::Unified { address, .. } => { + let receiver_list = address.items_as_parsed(); + for receiver in receiver_list { + match receiver { + Receiver::P2pkh(data) => { + return Ok(bitcoin::ScriptBuf::new_p2pkh( + &PubkeyHash::from_slice(&data[..]).map_err(|err| { + format!("Error on parsing Pubkey Hash: {err:?}").to_string() + })?, + )) + } + Receiver::P2sh(data) => { + return Ok(bitcoin::ScriptBuf::new_p2sh( + &ScriptHash::from_slice(&data[..]).map_err(|err| { + format!("Error on parsing Script Hash: {err:?}").to_string() + })?, + )) + } + _ => continue, + }; + } + + Err("No receiver found in address".to_string()) + } + } + } + + pub fn from_pubkey(chain: Chain, pubkey: bitcoin::PublicKey) -> Result { + let pubkey_hash = pubkey.pubkey_hash(); + + if let Some(_hrp) = get_segwit_hrp(&chain) { + // Chain supports Bech32 SegWit + let wp = WitnessProgram::p2wpkh( + &pubkey + .try_into() + .map_err(|e| format!("Error on converting pubkey to bytes: {e}"))?, + ); + let wp = WitnessProgram::new(WitnessVersion::V0, wp.program().as_bytes()) + .map_err(|e| format!("bech32 guarantees valid program length for witness: {e}"))?; + Ok(Address::Segwit { program: wp, chain }) + } else { + // Legacy P2PKH + Ok(Address::P2pkh { + hash: pubkey_hash, + chain, + }) + } + } + + pub fn from_script(script: &bitcoin::Script, chain: Chain) -> Option { + // Try P2PKH + if script.is_p2pkh() { + let hash = bitcoin::PubkeyHash::from_slice(&script.as_bytes()[3..23]).ok()?; + return Some(Address::P2pkh { hash, chain }); + } + + // Try P2SH + if script.is_p2sh() { + let hash = bitcoin::ScriptHash::from_slice(&script.as_bytes()[2..22]).ok()?; + return Some(Address::P2sh { hash, chain }); + } + + if script.is_witness_program() { + let opcode = script.first_opcode()?; + + let version = WitnessVersion::try_from(opcode).ok()?; + let program = WitnessProgram::new(version, &script.as_bytes()[2..]).ok()?; + return Some(Address::Segwit { program, chain }); + } + + None + } +} + +/// Formats bech32 as upper case if alternate formatting is chosen (`{:#}`). +impl fmt::Display for Address { + fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { + use Address::*; + match self { + P2pkh { hash, chain } => { + let prefix = get_pubkey_address_prefix(chain); + let mut prefixed = Vec::with_capacity(20 + prefix.len()); + prefixed.extend(prefix); + prefixed.extend(&hash[..]); + base58::encode_check_to_fmt(fmt, &prefixed[..]) + } + P2sh { hash, chain } => { + let prefix = get_script_address_prefix(chain); + let mut prefixed = Vec::with_capacity(20 + prefix.len()); + prefixed.extend(prefix); + prefixed.extend(&hash[..]); + base58::encode_check_to_fmt(fmt, &prefixed[..]) + } + Segwit { program, chain } => { + let hrp = + Hrp::parse(get_segwit_hrp(chain).ok_or(fmt::Error)?).map_err(|_| fmt::Error)?; + let version = program.version().to_fe(); + let program = program.program().as_ref(); + + if fmt.alternate() { + bech32::segwit::encode_upper_to_fmt_unchecked(fmt, hrp, version, program) + } else { + bech32::segwit::encode_lower_to_fmt_unchecked(fmt, hrp, version, program) + } + } + Unified { address, chain } => { + let network = match chain { + Chain::ZcashMainnet => zcash_protocol::consensus::NetworkType::Main, + Chain::ZcashTestnet => zcash_protocol::consensus::NetworkType::Test, + _ => unreachable!(), + }; + + let str_address = ZcashAddress::from_unified(network, address.clone()).encode(); + write!(fmt, "{}", str_address) + } + } + } +} + +pub fn get_segwit_hrp(chain: &Chain) -> Option<&'static str> { + match chain { + // Bitcoin (Bech32 - BIP173) + Chain::BitcoinMainnet => Some("bc"), + Chain::BitcoinTestnet => Some("tb"), + + // Litecoin (Bech32) + Chain::LitecoinMainnet => Some("ltc"), + Chain::LitecoinTestnet => Some("tltc"), + + // Zcash (Bech32m) support unified addresses with hrp but not segwit + Chain::ZcashMainnet | Chain::ZcashTestnet => None, + + // Dogecoin (no native Bech32 support yet) + Chain::DogecoinMainnet | Chain::DogecoinTestnet => None, + } +} + +/// Returns the P2PKH (pubkey) address prefix as a Vec +fn get_pubkey_address_prefix(chain: &Chain) -> Vec { + match chain { + // Bitcoin + Chain::BitcoinMainnet => vec![0x00], // "1" + Chain::BitcoinTestnet => vec![0x6F], // "m" or "n" + + // Litecoin + Chain::LitecoinMainnet => vec![0x30], // "L" + Chain::LitecoinTestnet => vec![0x6F], + + // Zcash + Chain::ZcashMainnet => vec![0x1C, 0xB8], // "t1" + Chain::ZcashTestnet => vec![0x1D, 0x25], // "tm" + + // Dogecoin + Chain::DogecoinMainnet => vec![0x1E], // "D" + Chain::DogecoinTestnet => vec![0x71], // "n" + } +} + +/// Returns the P2SH (script) address prefix as a Vec +fn get_script_address_prefix(chain: &Chain) -> Vec { + match chain { + // Bitcoin + Chain::BitcoinMainnet => vec![0x05], // "3" + Chain::BitcoinTestnet => vec![0xC4], // "2" + + // Litecoin + Chain::LitecoinMainnet => vec![0x32], // "M" (was "3") + Chain::LitecoinTestnet => vec![0x3A], + + // Zcash + Chain::ZcashMainnet => vec![0x1C, 0xBD], // "t3" + Chain::ZcashTestnet => vec![0x1C, 0xBA], // "t2" + + // Dogecoin + Chain::DogecoinMainnet => vec![0x16], // "9" + Chain::DogecoinTestnet => vec![0xC4], // same as Bitcoin testnet + } +} + +#[cfg(test)] +mod tests { + use crate::network::{Address, Chain}; + use bitcoin::PublicKey as BtcPublicKey; + use k256::elliptic_curve::sec1::ToEncodedPoint; + use near_sdk::PublicKey; + use std::str::FromStr; + pub fn generate_public_key(path: &str) -> Vec { + let mpc_pk = crypto_shared::near_public_key_to_affine_point( + PublicKey::from_str("secp256k1:4NfTiv3UsGahebgTaHyD9vF8KYKMBnfd6kh94mK6xv8fGBiJB8TBtFMP5WWXz6B89Ac1fbpzPwAvoyQebemHFwx3").unwrap(), + ); + let epsilon = crypto_shared::derive_epsilon( + &"zcash_connector-20250714-143829.testnet".parse().unwrap(), + path, + ); + let user_pk = crypto_shared::derive_key(mpc_pk, epsilon); + let user_pk_encoded_point = user_pk.to_encoded_point(false); + user_pk_encoded_point.as_bytes().to_vec() + } + + pub fn generate_btc_public_key(path: &str) -> BtcPublicKey { + let public_key_bytes = generate_public_key(path); + let uncompressed_btc_public_key = + BtcPublicKey::from_slice(&public_key_bytes).expect("Invalid public key bytes"); + uncompressed_btc_public_key + .inner + .to_string() + .parse() + .unwrap() + } + + #[test] + fn test_parse_address() { + for (address, chain) in [ + ( + "bc1pwyzhgwy30q2juhau2f2c4qscasddle5ymw9m7scq5kc62t8kyzkqyz059k", + Chain::BitcoinMainnet, + ), + ( + "tb1pt34385rvqtyuz6muh9hr5ed4fy0cx89zz0faxm6dhku0vqp2pxxs0ymh7y", + Chain::BitcoinTestnet, + ), + ("LWrHnw5xztWiPafMhKYTQued8iuhaET7Yd", Chain::LitecoinMainnet), + ( + "tltc1q0c8899qaxq4e5m9zucq9vkvrn4npfwa8pww9d8", + Chain::LitecoinTestnet, + ), + ("t1ggQ7ZgHRoR34Z2xCcF155VcDe5zDZpZF1", Chain::ZcashMainnet), + ("tmJpMbYtRf9Hgi8HUJ4FGkoM3FUSHsu28wM", Chain::ZcashTestnet), + ("DKNmffVbxrBcNvQ9uJEDLe8f6prxSmH2Vm", Chain::DogecoinMainnet), + ("njyMWWyh1L7tSX6QkWRgetMVCVyVtfoDta", Chain::DogecoinTestnet), + ] { + let parse_address = Address::parse(address, chain.clone()).unwrap(); + let script_pubkey = parse_address.script_pubkey().unwrap(); + let address_from_script = Address::from_script(&script_pubkey, chain).unwrap(); + let display_address = address_from_script.to_string(); + assert_eq!(display_address, address); + } + } + + #[test] + fn test_from_pubkey() { + for chain in [ + Chain::BitcoinMainnet, + Chain::BitcoinTestnet, + Chain::LitecoinMainnet, + Chain::LitecoinTestnet, + Chain::ZcashMainnet, + Chain::ZcashTestnet, + Chain::DogecoinMainnet, + Chain::DogecoinTestnet, + ] { + let btc_public_key = generate_btc_public_key("path"); + let address = Address::from_pubkey(chain.clone(), btc_public_key).unwrap(); + let script_pubkey = address.script_pubkey().unwrap(); + let address_from_script = Address::from_script(&script_pubkey, chain.clone()).unwrap(); + assert_eq!(address, address_from_script); + let address_from_str = Address::parse(&address_from_script.to_string(), chain).unwrap(); + assert_eq!(address, address_from_str); + } + } +} diff --git a/contracts/satoshi-bridge/src/psbt.rs b/contracts/satoshi-bridge/src/psbt.rs index f1cbf7c..c2f5218 100644 --- a/contracts/satoshi-bridge/src/psbt.rs +++ b/contracts/satoshi-bridge/src/psbt.rs @@ -1,11 +1,12 @@ +use crate::network::Address; +use crate::psbt_wrapper::PsbtWrapper; use crate::*; - impl Contract { pub fn check_withdraw_psbt_valid( &self, target_address_script_pubkey: &ScriptBuf, withdraw_change_address_script_pubkey: &ScriptBuf, - withdraw_psbt: &Psbt, + withdraw_psbt: &PsbtWrapper, vutxos: &[VUTXO], amount: u128, withdraw_fee: u128, @@ -56,14 +57,14 @@ impl Contract { pub fn check_active_management_psbt_valid( &self, - psbt: &Psbt, + psbt: &PsbtWrapper, vutxos: &[VUTXO], ) -> (u128, u128) { let config = self.internal_config(); let utxo_num = self.data().utxos.len() + vutxos.len() as u32; - let input_num = psbt.unsigned_tx.input.len(); - let output_num = psbt.unsigned_tx.output.len(); + let input_num = psbt.get_input_num(); + let output_num = psbt.get_output_num(); if !is_merge_unhealthy_utxos(output_num, vutxos, config.unhealthy_utxo_amount) { if utxo_num < config.active_management_lower_limit { require!(input_num < output_num, "require input_num < output_num"); @@ -95,20 +96,19 @@ impl Contract { pub fn check_psbt_output_all_change_address( &self, - psbt: &Psbt, + psbt: &PsbtWrapper, vutxos: &[VUTXO], force_healthy_output: bool, is_cancel: bool, ) -> (u128, u128) { let config = self.internal_config(); - let withdraw_change_address_script_pubkey = config.get_change_address().script_pubkey(); + let withdraw_change_address_script_pubkey = config.get_change_script_pubkey(); let input_amount = vutxos .iter() .map(|vutxo| vutxo.get_amount() as u128) .sum::(); let output_amount = psbt - .unsigned_tx - .output + .get_output() .iter() .map(|v| { if force_healthy_output { @@ -146,7 +146,7 @@ impl Contract { pub fn check_withdraw_psbt( &self, - psbt: &Psbt, + psbt: &PsbtWrapper, target_address_script_pubkey: &ScriptBuf, withdraw_change_address_script_pubkey: &ScriptBuf, vutxos: &[VUTXO], @@ -160,7 +160,7 @@ impl Contract { let mut total_output_amount = 0; let mut actual_received_amounts = vec![]; let mut change_amounts = vec![]; - psbt.unsigned_tx.output.iter().for_each(|output| { + psbt.get_output().iter().for_each(|output| { let output_value = output.value.to_sat() as u128; total_output_amount += output_value; if &output.script_pubkey == target_address_script_pubkey { @@ -176,8 +176,9 @@ impl Contract { ); change_amounts.push(output_value); } else { - let output_address = Address::from_script(&output.script_pubkey, btc_network()) - .expect("Unsupported btc address type"); + let output_address = + Address::from_script(&output.script_pubkey, config.chain.clone()) + .expect("Unsupported btc address type"); env::panic_str( format!("Invalid transaction output address: {}", output_address).as_str(), ); @@ -188,7 +189,7 @@ impl Contract { "only one user output is allowed." ); let actual_received_amount = actual_received_amounts[0]; - let input_num = psbt.unsigned_tx.input.len(); + let input_num = psbt.get_input_num(); let change_num = change_amounts.len(); if input_num > change_num { require!( @@ -222,70 +223,30 @@ impl Contract { gas_fee, config.min_btc_gas_fee, config.max_btc_gas_fee ) ); + + self.check_psbt_chain_specific(psbt, gas_fee); (input_num, change_num, actual_received_amount, gas_fee) } } impl Contract { - pub fn generate_psbt_and_vutxos( - &mut self, - input: Vec, - output: Vec, - ) -> (Psbt, Vec, Vec) { - require!(!input.is_empty(), "empty input"); - require!(!output.is_empty(), "empty output"); - let transaction = BtcTransaction { - version: Version::TWO, - lock_time: LockTime::ZERO, - input: input - .into_iter() - .map(|previous_output| TxIn { - previous_output, - sequence: bitcoin::Sequence::ENABLE_RBF_NO_LOCKTIME, - ..Default::default() - }) - .collect(), - output, - }; - let mut psbt = Psbt::from_unsigned_tx(transaction).expect("Failed to generate PSBT"); - let (utxo_storage_keys, vutxos) = self.remove_vutxo_by_psbt(&psbt); - vutxos.iter().enumerate().for_each(|(i, v)| { - psbt.inputs[i].witness_utxo = Some(TxOut { + pub fn generate_vutxos(&mut self, psbt: &mut PsbtWrapper) -> (Vec, Vec) { + let (utxo_storage_keys, vutxos) = self.remove_vutxo_by_psbt(psbt); + + let input_utxo = vutxos + .iter() + .map(|v| TxOut { value: Amount::from_sat(v.get_amount()), script_pubkey: self - .generate_btc_p2wpkh_address(&v.get_path()) - .script_pubkey(), + .generate_utxo_chain_address(&v.get_path()) + .script_pubkey() + .expect("Invalid address"), }) - }); - (psbt, utxo_storage_keys, vutxos) - } + .collect(); - pub fn generate_psbt_from_original_psbt_and_new_output( - &self, - original_tx_btc_pending_info: &BTCPendingInfo, - output: Vec, - ) -> Psbt { - let original_psbt = original_tx_btc_pending_info.get_psbt(); - let transaction = BtcTransaction { - version: Version::TWO, - lock_time: LockTime::ZERO, - input: original_psbt - .unsigned_tx - .input - .into_iter() - .map(|original_psbt_input| TxIn { - previous_output: original_psbt_input.previous_output, - sequence: bitcoin::Sequence::ENABLE_RBF_NO_LOCKTIME, - ..Default::default() - }) - .collect(), - output, - }; - let mut psbt = Psbt::from_unsigned_tx(transaction).expect("Failed to generate PSBT"); - original_psbt.inputs.iter().enumerate().for_each(|(i, v)| { - psbt.inputs[i].witness_utxo.clone_from(&v.witness_utxo); - }); - psbt + psbt.set_input_utxo(input_utxo); + + (utxo_storage_keys, vutxos) } } diff --git a/contracts/satoshi-bridge/src/rbf/active_utxo_management.rs b/contracts/satoshi-bridge/src/rbf/active_utxo_management.rs index 2cffd4a..470c17a 100644 --- a/contracts/satoshi-bridge/src/rbf/active_utxo_management.rs +++ b/contracts/satoshi-bridge/src/rbf/active_utxo_management.rs @@ -1,14 +1,16 @@ +use crate::psbt_wrapper::PsbtWrapper; use crate::*; impl Contract { pub fn check_active_utxo_management_rbf_psbt_valid( &self, original_tx_btc_pending_info: &BTCPendingInfo, - active_utxo_management_rbf_psbt: &Psbt, + active_utxo_management_rbf_psbt: &PsbtWrapper, ) -> (u128, u128) { - let original_tx = original_tx_btc_pending_info.get_transaction(); + let original_tx = + original_tx_btc_pending_info.get_transaction(&self.internal_config().chain); require!( - original_tx.output.len() == active_utxo_management_rbf_psbt.unsigned_tx.output.len(), + original_tx.output().len() == active_utxo_management_rbf_psbt.get_output_num(), "Invalid output num" ); let (actual_received_amount, gas_fee) = self.check_psbt_output_all_change_address( @@ -24,7 +26,7 @@ impl Contract { &mut self, account_id: &AccountId, original_btc_pending_verify_id: String, - output: Vec, + active_utxo_management_rbf_psbt: PsbtWrapper, ) -> String { let original_tx_btc_pending_info = self.internal_unwrap_btc_pending_info(&original_btc_pending_verify_id); @@ -34,8 +36,6 @@ impl Contract { ); original_tx_btc_pending_info.assert_not_canceled(); original_tx_btc_pending_info.assert_active_utxo_management_original_pending_verify_tx(); - let active_utxo_management_rbf_psbt = self - .generate_psbt_from_original_psbt_and_new_output(original_tx_btc_pending_info, output); let mut btc_pending_info = init_rbf_btc_pending_info( original_tx_btc_pending_info, PendingInfoState::ActiveUtxoManagementRbf(RbfState { diff --git a/contracts/satoshi-bridge/src/rbf/cancel_active_utxo_management.rs b/contracts/satoshi-bridge/src/rbf/cancel_active_utxo_management.rs index f7f28ad..ddc1232 100644 --- a/contracts/satoshi-bridge/src/rbf/cancel_active_utxo_management.rs +++ b/contracts/satoshi-bridge/src/rbf/cancel_active_utxo_management.rs @@ -1,10 +1,11 @@ +use crate::psbt_wrapper::PsbtWrapper; use crate::*; impl Contract { pub fn check_cancel_active_utxo_management_rbf_psbt_valid( &self, original_tx_btc_pending_info: &BTCPendingInfo, - cancel_active_utxo_management_rbf_psbt: &Psbt, + cancel_active_utxo_management_rbf_psbt: &PsbtWrapper, ) -> (u128, u128) { let (actual_received_amount, gas_fee) = self.check_psbt_output_all_change_address( cancel_active_utxo_management_rbf_psbt, @@ -17,8 +18,9 @@ impl Contract { pub fn internal_cancel_active_utxo_management( &mut self, + _account_id: &AccountId, original_btc_pending_verify_id: String, - output: Vec, + cancel_active_utxo_management_rbf_psbt: PsbtWrapper, ) -> String { let original_tx_btc_pending_info = self.internal_unwrap_btc_pending_info(&original_btc_pending_verify_id); @@ -29,8 +31,6 @@ impl Contract { ); original_tx_btc_pending_info.assert_not_canceled(); original_tx_btc_pending_info.assert_active_utxo_management_original_pending_verify_tx(); - let cancel_active_utxo_management_rbf_psbt = self - .generate_psbt_from_original_psbt_and_new_output(original_tx_btc_pending_info, output); let mut btc_pending_info = init_rbf_btc_pending_info( original_tx_btc_pending_info, diff --git a/contracts/satoshi-bridge/src/rbf/cancel_withdraw.rs b/contracts/satoshi-bridge/src/rbf/cancel_withdraw.rs index dc2ca5b..370e63b 100644 --- a/contracts/satoshi-bridge/src/rbf/cancel_withdraw.rs +++ b/contracts/satoshi-bridge/src/rbf/cancel_withdraw.rs @@ -1,10 +1,11 @@ +use crate::psbt_wrapper::PsbtWrapper; use crate::*; impl Contract { pub fn check_cancel_withdraw_rbf_psbt_valid( &self, original_tx_btc_pending_info: &BTCPendingInfo, - cancel_withdraw_rbf_psbt: &Psbt, + cancel_withdraw_rbf_psbt: &PsbtWrapper, ) -> (u128, u128) { let (actual_received_amount, gas_fee) = self.check_psbt_output_all_change_address( cancel_withdraw_rbf_psbt, @@ -17,8 +18,9 @@ impl Contract { pub fn internal_cancel_withdraw( &mut self, + _account_id: &AccountId, original_btc_pending_verify_id: String, - output: Vec, + cancel_withdraw_rbf_psbt: PsbtWrapper, ) -> String { let original_tx_btc_pending_info = self.internal_unwrap_btc_pending_info(&original_btc_pending_verify_id); @@ -29,8 +31,6 @@ impl Contract { ); original_tx_btc_pending_info.assert_not_canceled(); original_tx_btc_pending_info.assert_withdraw_original_pending_verify_tx(); - let cancel_withdraw_rbf_psbt = self - .generate_psbt_from_original_psbt_and_new_output(original_tx_btc_pending_info, output); let mut btc_pending_info = init_rbf_btc_pending_info( original_tx_btc_pending_info, @@ -47,10 +47,7 @@ impl Contract { btc_pending_info.gas_fee = gas_fee; btc_pending_info.burn_amount = gas_fee; btc_pending_info.actual_received_amount = actual_received_amount; - // Ensure that the RBF transaction pays more gas than the previous transaction. - let max_gas_fee = original_tx_btc_pending_info.get_max_gas_fee(); - let additional_gas_amount = gas_fee.saturating_sub(max_gas_fee); - require!(additional_gas_amount > 0, "No gas increase."); + Self::check_withdraw_chain_specific(original_tx_btc_pending_info, gas_fee); let excess_gas_fee = gas_fee .saturating_sub(btc_pending_info.transfer_amount - btc_pending_info.withdraw_fee); if excess_gas_fee > 0 { diff --git a/contracts/satoshi-bridge/src/rbf/mod.rs b/contracts/satoshi-bridge/src/rbf/mod.rs index 1b3639e..4aa0441 100644 --- a/contracts/satoshi-bridge/src/rbf/mod.rs +++ b/contracts/satoshi-bridge/src/rbf/mod.rs @@ -1,3 +1,4 @@ +use crate::psbt_wrapper::PsbtWrapper; use crate::*; pub mod active_utxo_management; @@ -10,11 +11,11 @@ impl Contract { &mut self, original_btc_pending_verify_id: &str, mut btc_pending_info: BTCPendingInfo, - psbt: Psbt, + psbt: PsbtWrapper, is_cancel: bool, ) -> String { - let rbf_psbt_hex = psbt.serialize_hex(); - let btc_pending_id = psbt.extract_tx().unwrap().compute_txid().to_string(); + let rbf_psbt_hex = psbt.serialize(); + let btc_pending_id = psbt.get_pending_id(); btc_pending_info.btc_pending_id.clone_from(&btc_pending_id); btc_pending_info.psbt_hex = rbf_psbt_hex; require!( diff --git a/contracts/satoshi-bridge/src/rbf/withdraw.rs b/contracts/satoshi-bridge/src/rbf/withdraw.rs index cbeec96..90a1207 100644 --- a/contracts/satoshi-bridge/src/rbf/withdraw.rs +++ b/contracts/satoshi-bridge/src/rbf/withdraw.rs @@ -1,23 +1,25 @@ +use crate::psbt_wrapper::PsbtWrapper; use crate::*; impl Contract { pub fn check_withdraw_rbf_psbt_valid( &self, original_tx_btc_pending_info: &BTCPendingInfo, - withdraw_rbf_psbt: &Psbt, + withdraw_rbf_psbt: &PsbtWrapper, ) -> (u128, u128) { let withdraw_change_address_script_pubkey = - self.internal_config().get_change_address().script_pubkey(); - let original_tx = original_tx_btc_pending_info.get_transaction(); + self.internal_config().get_change_script_pubkey(); + let original_tx = + original_tx_btc_pending_info.get_transaction(&self.internal_config().chain); let target_address_script_pubkey = original_tx - .output + .output() .iter() .find(|v| v.script_pubkey != withdraw_change_address_script_pubkey) .cloned() .expect("The original tx is not a user withdraw tx.") .script_pubkey; require!( - original_tx.output.len() == withdraw_rbf_psbt.unsigned_tx.output.len(), + original_tx.output().len() == withdraw_rbf_psbt.get_output_num(), "Invalid output num" ); let (_, _, actual_received_amount, gas_fee) = self.check_withdraw_psbt( @@ -35,7 +37,7 @@ impl Contract { &mut self, account_id: &AccountId, original_btc_pending_verify_id: String, - output: Vec, + withdraw_rbf_psbt: PsbtWrapper, ) -> String { let original_tx_btc_pending_info = self.internal_unwrap_btc_pending_info(&original_btc_pending_verify_id); @@ -45,8 +47,6 @@ impl Contract { ); original_tx_btc_pending_info.assert_not_canceled(); original_tx_btc_pending_info.assert_withdraw_original_pending_verify_tx(); - let withdraw_rbf_psbt = self - .generate_psbt_from_original_psbt_and_new_output(original_tx_btc_pending_info, output); let mut btc_pending_info = init_rbf_btc_pending_info( original_tx_btc_pending_info, @@ -60,10 +60,8 @@ impl Contract { btc_pending_info.gas_fee = gas_fee; btc_pending_info.actual_received_amount = actual_received_amount; btc_pending_info.burn_amount = actual_received_amount + gas_fee; - // Ensure that the RBF transaction pays more gas than the previous transaction. - let max_gas_fee = original_tx_btc_pending_info.get_max_gas_fee(); - let additional_gas_amount = gas_fee.saturating_sub(max_gas_fee); - require!(additional_gas_amount > 0, "No gas increase."); + Self::check_withdraw_chain_specific(original_tx_btc_pending_info, gas_fee); + self.internal_unwrap_mut_btc_pending_info(&original_btc_pending_verify_id) .update_max_gas_fee(gas_fee); self.set_rbf_pending_info( diff --git a/contracts/satoshi-bridge/src/unit/mod.rs b/contracts/satoshi-bridge/src/unit/mod.rs index 57b97be..f7faeb6 100644 --- a/contracts/satoshi-bridge/src/unit/mod.rs +++ b/contracts/satoshi-bridge/src/unit/mod.rs @@ -1,3 +1,7 @@ +#[cfg(not(feature = "zcash"))] +use crate::network::Chain::BitcoinTestnet; +#[cfg(feature = "zcash")] +use crate::network::Chain::ZcashTestnet; use crate::*; use near_sdk::test_utils::VMContextBuilder; pub use near_sdk::testing_env; @@ -34,6 +38,10 @@ pub fn btc_light_client_id() -> AccountId { pub fn init_contract() -> Contract { Contract::new(Config { + #[cfg(not(feature = "zcash"))] + chain: BitcoinTestnet, + #[cfg(feature = "zcash")] + chain: ZcashTestnet, chain_signatures_account_id: chain_signatures_id(), nbtc_account_id: nbtc_id(), btc_light_client_account_id: btc_light_client_id(), @@ -69,6 +77,8 @@ pub fn init_contract() -> Contract { chain_signatures_root_public_key: None, change_address: None, unhealthy_utxo_amount: 1000, + #[cfg(feature = "zcash")] + expiry_height_gap: 1000, }) } diff --git a/contracts/satoshi-bridge/src/utxo.rs b/contracts/satoshi-bridge/src/utxo.rs index e6832d3..ed245dd 100644 --- a/contracts/satoshi-bridge/src/utxo.rs +++ b/contracts/satoshi-bridge/src/utxo.rs @@ -1,3 +1,4 @@ +use crate::psbt_wrapper::PsbtWrapper; use crate::*; #[near(serializers = [borsh, json])] @@ -55,15 +56,12 @@ impl From for VUTXO { } impl Contract { - pub fn remove_vutxo_by_psbt(&mut self, psbt: &Psbt) -> (Vec, Vec) { + pub fn remove_vutxo_by_psbt(&mut self, psbt: &PsbtWrapper) -> (Vec, Vec) { let mut utxo_storage_keys = vec![]; let vutxos = psbt - .unsigned_tx - .input - .clone() + .get_utxo_storage_keys() .into_iter() - .map(|input| { - let utxo_storage_key = out_point_to_utxo_storage_key(&input.previous_output); + .map(|utxo_storage_key| { utxo_storage_keys.push(utxo_storage_key.clone()); self.data_mut() .utxos diff --git a/contracts/satoshi-bridge/src/zcash_utils/contract_methods.rs b/contracts/satoshi-bridge/src/zcash_utils/contract_methods.rs new file mode 100644 index 0000000..79137d9 --- /dev/null +++ b/contracts/satoshi-bridge/src/zcash_utils/contract_methods.rs @@ -0,0 +1,192 @@ +use crate::psbt_wrapper::PsbtWrapper; +use crate::*; +use bitcoin::{OutPoint, TxOut}; +use near_sdk::json_types::U128; +use near_sdk::{near, require, AccountId}; + +pub const GAS_RBF_CALL_BACK: Gas = Gas::from_tgas(100); +pub const GAS_FOR_ACTIVE_UTXO_MANAGMENT_CALLBACK: Gas = Gas::from_tgas(100); + +macro_rules! define_rbf_callback { + ($method:ident, $callback_name:ident, $internal_fn:ident) => { + impl Contract { + pub(crate) fn $method( + &mut self, + user_account_id: AccountId, + original_btc_pending_verify_id: String, + output: Vec, + ) { + self.get_last_block_height_promise().then( + Self::ext(env::current_account_id()) + .with_static_gas(GAS_RBF_CALL_BACK) + .$callback_name(user_account_id, original_btc_pending_verify_id, output), + ); + } + } + + #[near] + impl Contract { + #[private] + pub fn $callback_name( + &mut self, + account_id: AccountId, + original_btc_pending_verify_id: String, + output: Vec, + #[callback_unwrap] last_block_height: u32, + ) { + let expiry_height = last_block_height + self.get_config().expiry_height_gap; + + let original_tx_btc_pending_info = + self.internal_unwrap_btc_pending_info(&original_btc_pending_verify_id); + + let new_psbt = self.generate_psbt_from_original_psbt_and_new_output( + original_tx_btc_pending_info, + output, + expiry_height, + ); + + let btc_pending_id = + self.$internal_fn(&account_id, original_btc_pending_verify_id, new_psbt); + + self.internal_unwrap_mut_account(&account_id) + .btc_pending_sign_id = Some(btc_pending_id.clone()); + + Event::GenerateBtcPendingInfo { + account_id: &account_id, + btc_pending_id: &btc_pending_id, + } + .emit(); + } + } + }; +} + +define_rbf_callback!( + withdraw_rbf_chain_specific, + withdraw_rbf_callback, + internal_withdraw_rbf +); +define_rbf_callback!( + cancel_withdraw_chain_specific, + cancel_withdraw_callback, + internal_cancel_withdraw +); +define_rbf_callback!( + active_utxo_management_rbf_chain_specific, + active_utxo_management_rbf_callback, + internal_active_utxo_management_rbf +); +define_rbf_callback!( + cancel_active_utxo_management_chain_specific, + cancel_active_utxo_management_callback, + internal_cancel_active_utxo_management +); + +#[near] +impl Contract { + #[private] + pub fn ft_on_transfer_callback( + &mut self, + sender_id: AccountId, + amount: U128, + target_btc_address: String, + input: Vec, + output: Vec, + max_gas_fee: Option, + #[callback_unwrap] last_block_height: u32, + ) -> U128 { + let expiry_height = last_block_height + self.get_config().expiry_height_gap; + let mut psbt = PsbtWrapper::new(input, output, expiry_height, self.internal_config()); + self.create_btc_pending_info(sender_id, amount.0, target_btc_address, &mut psbt, max_gas_fee); + + U128(0) + } + + #[private] + pub fn active_utxo_management_callback( + &mut self, + account_id: AccountId, + input: Vec, + output: Vec, + #[callback_unwrap] last_block_height: u32, + ) { + let expiry_height = last_block_height + self.get_config().expiry_height_gap; + + let mut psbt = PsbtWrapper::new(input, output, expiry_height, self.internal_config()); + + self.create_active_utxo_management_pending_info(account_id, &mut psbt); + } +} + +impl Contract { + pub(crate) fn check_psbt_chain_specific(&self, psbt: &PsbtWrapper, gas_fee: u128) { + let min_fee = psbt.get_min_fee(); + require!( + gas_fee >= min_fee.into_u64() as u128, + format!( + "Invalid gas fee ({}). min fee = {}.", + gas_fee, + min_fee.into_u64() + ) + ); + } + + pub(crate) fn check_withdraw_chain_specific( + _original_tx_btc_pending_info: &BTCPendingInfo, + _gas_fee: u128, + ) { + } + + pub(crate) fn ft_on_transfer_withdraw_chain_specific( + &self, + sender_id: AccountId, + amount: u128, + target_btc_address: String, + input: Vec, + output: Vec, + max_gas_fee: Option, + ) -> PromiseOrValue { + PromiseOrValue::Promise( + self.get_last_block_height_promise().then( + Self::ext(env::current_account_id()) + .with_static_gas(GAS_FOR_FT_ON_TRANSFER_CALL_BACK) + .ft_on_transfer_callback( + sender_id, + amount.into(), + target_btc_address, + input, + output, + max_gas_fee, + ), + ), + ) + } + + pub(crate) fn active_utxo_management_chain_specific( + &mut self, + account_id: AccountId, + input: Vec, + output: Vec, + ) { + self.get_last_block_height_promise().then( + Self::ext(env::current_account_id()) + .with_static_gas(GAS_FOR_ACTIVE_UTXO_MANAGMENT_CALLBACK) + .active_utxo_management_callback(account_id, input, output), + ); + } + + pub(crate) fn generate_psbt_from_original_psbt_and_new_output( + &self, + original_tx_btc_pending_info: &BTCPendingInfo, + output: Vec, + expiry_height: u32, + ) -> PsbtWrapper { + let original_psbt = original_tx_btc_pending_info.get_psbt(); + PsbtWrapper::from_original_psbt( + original_psbt, + output, + expiry_height, + self.internal_config(), + ) + } +} diff --git a/contracts/satoshi-bridge/src/zcash_utils/mod.rs b/contracts/satoshi-bridge/src/zcash_utils/mod.rs new file mode 100644 index 0000000..89ef353 --- /dev/null +++ b/contracts/satoshi-bridge/src/zcash_utils/mod.rs @@ -0,0 +1,3 @@ +pub mod contract_methods; +pub mod psbt_wrapper; +pub mod transaction; diff --git a/contracts/satoshi-bridge/src/zcash_utils/psbt_wrapper.rs b/contracts/satoshi-bridge/src/zcash_utils/psbt_wrapper.rs new file mode 100644 index 0000000..ba5b5df --- /dev/null +++ b/contracts/satoshi-bridge/src/zcash_utils/psbt_wrapper.rs @@ -0,0 +1,332 @@ +use crate::*; +use std::io; +use std::io::{Cursor, Read, Write}; + +use crate::zcash_utils::transaction::Transaction; +use bitcoin::hashes::Hash; +use bitcoin::{OutPoint, TxOut}; +use near_sdk::require; +use zcash_primitives::transaction::fees::transparent::{InputSize, OutputView}; +use zcash_primitives::transaction::fees::FeeRule; +use zcash_primitives::transaction::{TransactionData, TxVersion}; +use zcash_protocol::consensus::{BlockHeight, BranchId}; +use zcash_protocol::value::Zatoshis; +use zcash_transparent::bundle::Authorized; +use zcash_transparent::bundle::TxIn as ZcashTxIn; +use zcash_transparent::bundle::TxOut as ZcashTxOut; +use zcash_transparent::sighash::SighashType; + +pub struct PsbtWrapper { + branch_id: BranchId, + expiry_height: u32, + vin: Vec>, + vout: Vec, + inputs_utxo: Vec, +} + +impl PsbtWrapper { + pub fn new( + input: Vec, + output: Vec, + expiry_height: u32, + config: &Config, + ) -> Self { + require!(!input.is_empty(), "empty input"); + require!(!output.is_empty(), "empty output"); + + let sequence = bitcoin::Sequence::MAX; + let vout = output + .clone() + .into_iter() + .map(|o| ZcashTxOut { + value: Zatoshis::from_u64(o.value.to_sat()).unwrap(), + script_pubkey: zcash_primitives::legacy::Script(o.script_pubkey.to_bytes()), + }) + .collect(); + + let vin: Vec> = input + .into_iter() + .map(|i| ZcashTxIn { + prevout: zcash_transparent::bundle::OutPoint::new(*i.txid.as_byte_array(), i.vout), + script_sig: zcash_primitives::legacy::Script::default(), + sequence: sequence.0, + }) + .collect(); + + let inputs = vec![ + ZcashTxOut { + value: Zatoshis::from_u64(0).unwrap(), + script_pubkey: zcash_primitives::legacy::Script::default(), + }; + vin.len() + ]; + + Self { + branch_id: get_branch_id(expiry_height, config), + expiry_height, + vout, + vin, + inputs_utxo: inputs, + } + } + + pub fn from_original_psbt( + original_psbt: PsbtWrapper, + output: Vec, + expiry_height: u32, + config: &Config, + ) -> Self { + let vout = if output.is_empty() { + original_psbt.vout.clone() + } else { + output + .clone() + .into_iter() + .map(|o| ZcashTxOut { + value: Zatoshis::from_u64(o.value.to_sat()).unwrap(), + script_pubkey: zcash_primitives::legacy::Script(o.script_pubkey.to_bytes()), + }) + .collect() + }; + + Self { + branch_id: get_branch_id(expiry_height, config), + expiry_height, + vin: original_psbt.vin, + vout, + inputs_utxo: original_psbt.inputs_utxo, + } + } + + pub fn set_input_utxo(&mut self, input_utxo: Vec) { + input_utxo.iter().enumerate().for_each(|(i, v)| { + self.inputs_utxo[i] = ZcashTxOut { + value: Zatoshis::from_u64(v.value.to_sat()).unwrap(), + script_pubkey: zcash_primitives::legacy::Script(v.script_pubkey.to_bytes()), + } + }); + } + + pub fn get_input_num(&self) -> usize { + self.vin.len() + } + + pub fn get_output_num(&self) -> usize { + self.vout.len() + } + pub fn get_utxo_storage_keys(&self) -> Vec { + self.vin + .clone() + .into_iter() + .map(|out_point| { + generate_utxo_storage_key( + out_point.prevout.txid().to_string(), + out_point.prevout.n(), + ) + }) + .collect() + } + + pub fn get_output(&self) -> Vec { + self.vout + .clone() + .into_iter() + .map(|i| TxOut { + value: bitcoin::Amount::from_sat(i.value.into_u64()), + script_pubkey: ScriptBuf::from_bytes(i.script_pubkey.0), + }) + .collect() + } + + pub fn to_bytes(&self) -> Vec { + let mut buf = Vec::::new(); + let version: u8 = 2; + buf.push(version); + match self.branch_id { + BranchId::Nu6 => buf.write_all(&[7u8; 1]).unwrap(), + BranchId::Nu6_1 => buf.write_all(&[8u8; 1]).unwrap(), + _ => unreachable!(), + } + buf.write_all(&self.expiry_height.to_le_bytes()).unwrap(); + + let len = self.vin.len() as u64; + buf.write_all(&len.to_le_bytes()).unwrap(); + + for t in self.vin.clone() { + t.write(&mut buf).unwrap(); + } + + let len = self.vout.len() as u64; + buf.write_all(&len.to_le_bytes()).unwrap(); + + for t in self.vout.clone() { + t.write(&mut buf).unwrap(); + } + + let len = self.inputs_utxo.len() as u64; + buf.write_all(&len.to_le_bytes()).unwrap(); + + for t in self.inputs_utxo.clone() { + t.write(&mut buf).unwrap(); + } + + buf + } + pub fn serialize(&self) -> String { + hex::encode(self.to_bytes()) + } + + pub fn deserialize(psbt_hex: &String) -> Self { + let bytes = hex::decode(&psbt_hex).unwrap(); + let mut rdr = Cursor::new(bytes); + let version = read_u8(&mut rdr).unwrap(); + let branch_id = if version == 2 { + let branch_id_u8 = read_u8(&mut rdr).unwrap(); + match branch_id_u8 { + 7 => BranchId::Nu6, + 8 => BranchId::Nu6_1, + _ => unreachable!(), + } + } else { + BranchId::Nu6_1 + }; + + let expiry_height = read_u32_le(&mut rdr).unwrap(); + + let vin_len = read_u64_le(&mut rdr).unwrap() as usize; + let mut vin = Vec::with_capacity(vin_len); + for _ in 0..vin_len { + vin.push(ZcashTxIn::::read(&mut rdr).unwrap()); + } + + let vout_len = read_u64_le(&mut rdr).unwrap() as usize; + let mut vout = Vec::with_capacity(vout_len); + for _ in 0..vout_len { + vout.push(ZcashTxOut::read(&mut rdr).unwrap()); + } + + let inputs_len = read_u64_le(&mut rdr).unwrap() as usize; + let mut inputs = Vec::with_capacity(inputs_len); + for _ in 0..inputs_len { + inputs.push(ZcashTxOut::read(&mut rdr).unwrap()); + } + + Self { + branch_id, + expiry_height, + vin, + vout, + inputs_utxo: inputs, + } + } + + pub fn extract_tx_bytes_with_sign(&self) -> Vec { + self.get_zcash_tx().encode().unwrap() + } + + pub fn get_zcash_tx(&self) -> Transaction { + let transparent_bundle = zcash_transparent::bundle::Bundle { + vin: self.vin.clone(), + vout: self.vout.clone(), + authorization: zcash_transparent::bundle::Authorized, + }; + + let inner_tx = TransactionData::from_parts( + TxVersion::V5, + self.branch_id, + 0, + BlockHeight::from(self.expiry_height), + Some(transparent_bundle), + None, + None, + None, + ) + .freeze() + .unwrap(); + + Transaction { inner_tx } + } + + pub fn get_pending_id(&self) -> String { + self.get_zcash_tx().compute_txid().to_string() + } + + #[allow(unused_variables)] + pub fn get_hash_to_sign(&self, vin: usize, public_key: &bitcoin::PublicKey) -> [u8; 32] { + let tx_data = WrappedTransaction::to_zcash_tx( + &self.vin, + &self.vout, + &self.inputs_utxo, + self.expiry_height, + public_key, + self.branch_id, + ); + let txid_parts = tx_data.digest(zcash_primitives::transaction::txid::TxIdDigester); + let script = &self.inputs_utxo[vin].script_pubkey; + let sig_input = zcash_primitives::transaction::sighash::SignableInput::Transparent( + zcash_transparent::sighash::SignableInput::from_parts( + SighashType::ALL, + vin, + script, + script, + self.inputs_utxo[vin].value, + ), + ); + + zcash_primitives::transaction::sighash::signature_hash(&tx_data, &sig_input, &txid_parts) + .as_ref() + .clone() + } + + pub fn save_signature( + &mut self, + sign_index: usize, + signature: SignatureResponse, + public_key: bitcoin::secp256k1::PublicKey, + ) { + let script_sig = bitcoin::script::Builder::new() + .push_slice(signature.to_btc_signature().serialize()) + .push_key(&bitcoin::PublicKey::new(public_key)) + .into_script(); + + self.vin[sign_index].script_sig = zcash_primitives::legacy::Script(script_sig.to_bytes()); + } + + pub fn get_min_fee(&self) -> Zatoshis { + let fee_rule = zcash_primitives::transaction::fees::zip317::FeeRule::standard(); + fee_rule + .fee_required( + &zcash_protocol::consensus::MainNetwork, + BlockHeight::from_u32(0u32), + vec![InputSize::STANDARD_P2PKH; self.vin.len()], + self.vout.iter().map(|i| i.serialized_size()), + 0, + 0, + 0, + ) + .unwrap() + } +} + +fn get_branch_id(expiry_height: u32, config: &Config) -> BranchId { + let current_height = expiry_height - config.expiry_height_gap; + return config.chain.get_branch_id(current_height); +} + +fn read_u32_le(r: &mut R) -> io::Result { + let mut b = [0u8; 4]; + r.read_exact(&mut b)?; + Ok(u32::from_le_bytes(b)) +} + +fn read_u8(r: &mut R) -> io::Result { + let mut b = [0u8; 1]; + r.read_exact(&mut b)?; + Ok(b[0]) +} + +fn read_u64_le(r: &mut R) -> io::Result { + let mut b = [0u8; 8]; + r.read_exact(&mut b)?; + Ok(u64::from_le_bytes(b)) +} diff --git a/contracts/satoshi-bridge/src/zcash_utils/transaction.rs b/contracts/satoshi-bridge/src/zcash_utils/transaction.rs new file mode 100644 index 0000000..021c2bb --- /dev/null +++ b/contracts/satoshi-bridge/src/zcash_utils/transaction.rs @@ -0,0 +1,109 @@ +use crate::network; +use bitcoin::hashes::Hash; +use bitcoin::{absolute, ScriptBuf, TxOut, Txid}; +use zcash_primitives::consensus::{BlockHeight, BranchId}; +use zcash_primitives::transaction::{ + Transaction as ZCashTransaction, TransactionData, TxVersion, Unauthorized, +}; +use zcash_transparent::builder::TransparentBuilder; +use zcash_transparent::bundle::Authorized; + +#[derive(Debug, PartialEq)] +pub struct Transaction { + pub inner_tx: ZCashTransaction, +} + +impl Transaction { + pub fn compute_txid(&self) -> Txid { + Txid::from_byte_array(*self.inner_tx.txid().as_ref()) + } + + pub fn output(&self) -> Vec { + let outputs = self.inner_tx.transparent_bundle().unwrap().vout.clone(); + outputs + .into_iter() + .map(|o| bitcoin::TxOut { + value: bitcoin::Amount::from_sat(o.value.into_u64()), + script_pubkey: ScriptBuf::from(bitcoin::Script::from_bytes(&o.script_pubkey.0)), + }) + .collect() + } + + pub fn lock_time(&self) -> absolute::LockTime { + let lock_time = self.inner_tx.lock_time(); + absolute::LockTime::from_consensus(lock_time) + } + + pub fn encode(&self) -> Result, std::io::Error> { + let mut buf = Vec::new(); + self.inner_tx.write(&mut buf)?; + + Ok(buf) + } + + pub fn decode(data: &[u8], chain: &network::Chain) -> Result { + let mut cursor = std::io::Cursor::new(data); + let branch_id = match chain { + network::Chain::ZcashTestnet => BranchId::Nu6_1, + _ => BranchId::Nu6, + }; + let tx = ZCashTransaction::read(&mut cursor, branch_id)?; + Ok(Self { inner_tx: tx }) + } + + pub fn get_transparent_builder( + vin: &Vec>, + vout: &Vec, + input: &Vec, + public_key: &bitcoin::PublicKey, + ) -> TransparentBuilder { + let mut builder = zcash_transparent::builder::TransparentBuilder::empty(); + + for index in 0..vin.len() { + builder + .add_input( + public_key.inner, + vin[index].prevout.clone(), + input[index].clone(), + ) + .unwrap(); + } + + for output in vout { + let key = output.script_pubkey.0[3..23].try_into().unwrap(); + let to = zcash_transparent::address::TransparentAddress::PublicKeyHash(key); + builder.add_output(&to, output.value).unwrap(); + } + + builder + } + + pub fn to_zcash_tx( + vin: &Vec>, + vout: &Vec, + input: &Vec, + expiry_height: u32, + public_key: &bitcoin::PublicKey, + branch_id: BranchId, + ) -> TransactionData { + let transparent_bundle = Self::get_transparent_builder(vin, vout, input, public_key) + .build() + .unwrap(); + + let lock_time = 0; + let expiry_height = BlockHeight::from_u32(expiry_height); + + let inner_tx = TransactionData::from_parts( + TxVersion::V5, + branch_id, + lock_time, + expiry_height, + Some(transparent_bundle), + None, + None, + None, + ); + + inner_tx + } +} diff --git a/contracts/satoshi-bridge/tests/setup/context.rs b/contracts/satoshi-bridge/tests/setup/context.rs index b5aa024..c1fb690 100644 --- a/contracts/satoshi-bridge/tests/setup/context.rs +++ b/contracts/satoshi-bridge/tests/setup/context.rs @@ -21,6 +21,8 @@ use satoshi_bridge::{ use crate::{PRICE_ORICE_NEAR_PRICE_ID, PYTH_ORICE_NEAR_PRICE_ID}; +const DATA_IMAGE_SVG_NEAR_ICON: &str = "data:image/svg+xml,%3Csvg%20width%3D%2232%22%20height%3D%2232%22%20viewBox%3D%220%200%2032%2032%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20clip-path%3D%22url(%23clip0_2351_779)%22%3E%3Cpath%20d%3D%22M16%2032C24.8366%2032%2032%2024.8366%2032%2016C32%207.16344%2024.8366%200%2016%200C7.16344%200%200%207.16344%200%2016C0%2024.8366%207.16344%2032%2016%2032Z%22%20fill%3D%22%2300E99F%22%2F%3E%3Cpath%20d%3D%22M16.0006%2028.2858C22.7858%2028.2858%2028.2863%2022.7853%2028.2863%2016.0001C28.2863%209.21486%2022.7858%203.71436%2016.0006%203.71436C9.21535%203.71436%203.71484%209.21486%203.71484%2016.0001C3.71484%2022.7853%209.21535%2028.2858%2016.0006%2028.2858Z%22%20stroke%3D%22black%22%2F%3E%3Cpath%20d%3D%22M27.1412%2016C27.1412%2022.1541%2022.1524%2027.1429%2015.9983%2027.1429C9.84427%2027.1429%204.85547%2022.1541%204.85547%2016C4.85547%209.84598%209.84427%204.85718%2015.9983%204.85718C22.1524%204.85718%2027.1412%209.84598%2027.1412%2016Z%22%20stroke%3D%22black%22%20stroke-width%3D%220.5%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M16.2167%2011.1743C15.9198%2011.1643%2015.6095%2011.1622%2015.2868%2011.1668V9.32056H13.8907V11.2217C13.1583%2011.2659%2012.3792%2011.3332%2011.5625%2011.4149V12.811H12.9586V18.8607H11.7952V20.4895H13.8893V22.5836H15.2854V20.4895H16.2161V22.5836H17.3795V20.4895C18.4654%2020.4119%2020.6836%2019.7915%2020.8698%2017.93C21.0559%2016.0686%2019.7064%2015.6032%2019.0083%2015.6032C19.5512%2015.3705%2020.544%2014.5328%2020.1717%2013.0436C19.9215%2012.043%2019.0072%2011.5204%2017.6128%2011.2984V9.32164H16.2167V11.1743ZM18.0737%2013.9723C18.0737%2012.8554%2016.2122%2012.7313%2015.2815%2012.8088V15.1356C16.2122%2015.2132%2018.0737%2015.0891%2018.0737%2013.9723ZM15.2826%2016.5322V18.8591C16.2133%2018.9366%2018.3075%2018.859%2018.3075%2017.6956C18.3075%2016.2994%2016.2133%2016.4547%2015.2826%2016.5322Z%22%20fill%3D%22black%22%2F%3E%3C%2Fg%3E%3Cdefs%3E%3CclipPath%20id%3D%22clip0_2351_779%22%3E%3Crect%20width%3D%2232%22%20height%3D%2232%22%20fill%3D%22white%22%2F%3E%3C%2FclipPath%3E%3C%2Fdefs%3E%3C%2Fsvg%3E"; + pub struct Context { pub root: Account, pub tx_listener: Account, @@ -140,6 +142,9 @@ impl Context { .args_json(json!({ "controller": root.id(), "bridge_id": bridge_contract.id(), + "name": "Near WTC".to_string(), + "symbol": "NBTC".to_string(), + "icon": Some(DATA_IMAGE_SVG_NEAR_ICON.to_string()), })) .transact() .await @@ -149,7 +154,7 @@ impl Context { chain_signatures_contract .call("new") .args_json(json!({ - "public_key": "secp256k1:4NfTiv3UsGahebgTaHyD9vF8KYKMBnfd6kh94mK6xv8fGBiJB8TBtFMP5WWXz6B89Ac1fbpzPwAvoyQebemHFwx3", + "public_key": "secp256k1:4NfTiv3UsGahebgTaHyD9vF8KYKMBnfd6kh94mK6xv8fGBiJB8TBtFMP5WWXz6B89Ac1fbpzPwAvoyQebemHFwx3", })) .transact() .await @@ -159,6 +164,7 @@ impl Context { root.call(bridge_contract.id(), "new") .args_json(json!({ "config": { + "chain": "BitcoinMainnet", "chain_signatures_account_id": chain_signatures_contract.id(), "nbtc_account_id": nbtc_contract.id(), "btc_light_client_account_id": btc_light_client_contract.id(), @@ -1082,6 +1088,7 @@ impl UpgradeContext { root.call(previous_satoshi_bridge_contract.id(), "new") .args_json(json!({ "config": { + "chain": "BitcoinMainnet", "chain_signatures_account_id": chain_signatures_contract.id(), "nbtc_account_id": previous_nbtc_contract.id(), "btc_light_client_account_id": btc_light_client_contract.id(), From a0a9e61f0990fc11f57e0459f3efac2bd4e69e53 Mon Sep 17 00:00:00 2001 From: Karim Date: Thu, 9 Oct 2025 23:00:42 +0100 Subject: [PATCH 07/19] feat: implement safe deposit (#5) * feat: implement safe deposit * Fix burn * Replace `{{UTXO_TX_ID}}` * Remove safe_burn * Storage deposit on init * Fix after merge * Add `safe_deposit` field * Fix safe deposit with the new safe_deposit message * Fix tests and lint * Bump version --- Cargo.lock | 4 +- contracts/nbtc/Cargo.toml | 2 +- contracts/nbtc/src/lib.rs | 33 +++- contracts/satoshi-bridge/Cargo.toml | 2 +- contracts/satoshi-bridge/src/api/bridge.rs | 81 ++++++++++ .../satoshi-bridge/src/api/token_receiver.rs | 6 +- contracts/satoshi-bridge/src/api/view.rs | 6 + .../src/bitcoin_utils/contract_methods.rs | 8 +- .../src/btc_light_client/deposit.rs | 149 +++++++++++++++++- contracts/satoshi-bridge/src/deposit_msg.rs | 11 ++ contracts/satoshi-bridge/src/nbtc/burn.rs | 2 +- contracts/satoshi-bridge/src/nbtc/mod.rs | 1 + contracts/satoshi-bridge/src/psbt.rs | 11 +- contracts/satoshi-bridge/src/unit/mod.rs | 1 + .../satoshi-bridge/src/unit/post_action.rs | 14 ++ contracts/satoshi-bridge/src/unit/storage.rs | 48 ++++++ .../src/zcash_utils/contract_methods.rs | 8 +- .../tests/test_satoshi_bridge.rs | 42 +++++ 18 files changed, 413 insertions(+), 16 deletions(-) create mode 100644 contracts/satoshi-bridge/src/unit/storage.rs diff --git a/Cargo.lock b/Cargo.lock index be6de1c..e1a72fa 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2243,7 +2243,7 @@ dependencies = [ [[package]] name = "nbtc" -version = "0.2.0" +version = "0.3.0" dependencies = [ "near-contract-standards", "near-sdk", @@ -3715,7 +3715,7 @@ dependencies = [ [[package]] name = "satoshi-bridge" -version = "0.6.0" +version = "0.7.0" dependencies = [ "bitcoin", "core2", diff --git a/contracts/nbtc/Cargo.toml b/contracts/nbtc/Cargo.toml index 623515a..84ce633 100644 --- a/contracts/nbtc/Cargo.toml +++ b/contracts/nbtc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "nbtc" -version = "0.2.0" +version = "0.3.0" edition.workspace = true publish.workspace = true repository.workspace = true diff --git a/contracts/nbtc/src/lib.rs b/contracts/nbtc/src/lib.rs index 4aaf38e..7bc49d6 100644 --- a/contracts/nbtc/src/lib.rs +++ b/contracts/nbtc/src/lib.rs @@ -60,7 +60,7 @@ impl Contract { decimals: u8, ) -> Self { require!(!env::state_exists(), "Already initialized"); - Self { + let mut contract = Self { controller, bridge_id, token: FungibleToken::new(StorageKey::FungibleToken), @@ -76,7 +76,13 @@ impl Contract { decimals, }), ), - } + }; + + contract + .token + .internal_register_account(&contract.bridge_id); + + contract } #[payable] @@ -86,6 +92,29 @@ impl Contract { self.controller = controller; } + #[payable] + pub fn safe_mint( + &mut self, + account_id: AccountId, + amount: U128, + msg: Option, + ) -> PromiseOrValue { + self.assert_bridge(); + + if self.token.accounts.get(&account_id).is_none() { + return PromiseOrValue::Value(U128(0)); + } + + if let Some(msg) = msg { + self.token.internal_deposit(&self.bridge_id, amount.into()); + + self.ft_transfer_call(account_id, amount, None, msg) + } else { + self.token.internal_deposit(&account_id, amount.into()); + PromiseOrValue::Value(amount) + } + } + pub fn mint( &mut self, mint_account_id: AccountId, diff --git a/contracts/satoshi-bridge/Cargo.toml b/contracts/satoshi-bridge/Cargo.toml index cc7f540..93a11c8 100644 --- a/contracts/satoshi-bridge/Cargo.toml +++ b/contracts/satoshi-bridge/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "satoshi-bridge" -version = "0.6.0" +version = "0.7.0" edition.workspace = true publish.workspace = true repository.workspace = true diff --git a/contracts/satoshi-bridge/src/api/bridge.rs b/contracts/satoshi-bridge/src/api/bridge.rs index f96fa0a..2a69d6e 100644 --- a/contracts/satoshi-bridge/src/api/bridge.rs +++ b/contracts/satoshi-bridge/src/api/bridge.rs @@ -28,6 +28,10 @@ impl Contract { tx_index: u64, merkle_proof: Vec, ) -> Promise { + require!( + deposit_msg.safe_deposit.is_none(), + "safe_deposit not supported in verify_deposit" + ); let path = get_deposit_path(&deposit_msg); let transaction = WrappedTransaction::decode(&tx_bytes, &self.internal_config().chain) .expect("Deserialization tx_bytes failed"); @@ -68,6 +72,83 @@ impl Contract { ) } + /// Safe version of verify_deposit, only supports minting nBTC with safe_deposit message and revert the deposit on failed XCC calls. + /// It doesn't charge deposit fee, and doesn't pay the token storage for the user + /// + /// # Arguments + /// + /// * `deposit_msg` - Information used to generate the deposit address path. + /// * `tx_bytes` - Successfully confirmed BTC transaction bytes + /// * `vout` - The index of the output where the user sent BTC to the deposit address + /// * `tx_block_blockhash` - The block hash where the transaction is located. + /// * `tx_index` - The index of the transaction in the block. + /// * `merkle_proof` - Merkle proof of the transaction. + /// + /// # Returns + /// + /// bool - Whether nBTC minting was successful. + #[payable] + #[pause(except(roles(Role::DAO)))] + pub fn safe_verify_deposit( + &mut self, + deposit_msg: DepositMsg, + tx_bytes: Vec, + vout: usize, + tx_block_blockhash: String, + tx_index: u64, + merkle_proof: Vec, + ) -> Promise { + require!( + env::attached_deposit() >= self.required_balance_for_safe_deposit(), + "Insufficient deposit for storage" + ); + + let path = get_deposit_path(&deposit_msg); + let safe_deposit_msg = deposit_msg + .safe_deposit + .unwrap_or_else(|| env::panic_str("safe_deposit is required in safe_verify_deposit")); + + let transaction = WrappedTransaction::decode(&tx_bytes, &self.internal_config().chain) + .expect("Deserialization tx_bytes failed"); + let deposit_amount = transaction.output()[vout].value.to_sat().into(); + require!(deposit_amount > 0, "Invalid deposit_amount"); + require!( + transaction.lock_time() == LockTime::ZERO, + "Tx with a non-zero lock_time are not supported." + ); + let deposit_address = self.generate_utxo_chain_address(&path); + let deposit_address_script_pubkey = deposit_address + .script_pubkey() + .expect("Invalid deposit address"); + require!( + deposit_address_script_pubkey == transaction.output()[vout].script_pubkey, + "Invalid deposit tx_bytes" + ); + + let utxo = UTXO { + path, + tx_bytes, + vout, + balance: transaction.output()[vout].value.to_sat(), + }; + let tx_id = transaction.compute_txid().to_string(); + let utxo_storage_key = generate_utxo_storage_key(tx_id.clone(), vout.try_into().unwrap()); + + self.internal_safe_verify_deposit( + deposit_amount, + tx_block_blockhash, + tx_index, + merkle_proof, + PendingUTXOInfo { + tx_id, + utxo_storage_key, + utxo, + }, + deposit_msg.recipient_id, + safe_deposit_msg, + ) + } + /// Verify that the user’s withdrawal has been successful, and then burn the corresponding amount of tokens. /// /// # Arguments diff --git a/contracts/satoshi-bridge/src/api/token_receiver.rs b/contracts/satoshi-bridge/src/api/token_receiver.rs index f0a261c..cfaa05e 100644 --- a/contracts/satoshi-bridge/src/api/token_receiver.rs +++ b/contracts/satoshi-bridge/src/api/token_receiver.rs @@ -51,14 +51,14 @@ impl FungibleTokenReceiver for Contract { target_btc_address, input, output, - max_gas_fee + max_gas_fee, } => self.ft_on_transfer_withdraw_chain_specific( sender_id, amount, target_btc_address, input, output, - max_gas_fee + max_gas_fee, ), } } @@ -94,7 +94,7 @@ impl Contract { &vutxos, amount, withdraw_fee, - max_gas_fee + max_gas_fee, ); let need_signature_num = psbt.get_input_num(); diff --git a/contracts/satoshi-bridge/src/api/view.rs b/contracts/satoshi-bridge/src/api/view.rs index 7e02dae..d3e810a 100644 --- a/contracts/satoshi-bridge/src/api/view.rs +++ b/contracts/satoshi-bridge/src/api/view.rs @@ -1,5 +1,7 @@ use crate::*; +const REQUIRED_BALANCE_FOR_DEPOSIT: NearToken = NearToken::from_yoctonear(1200000000000000000000); + #[near(serializers = [json])] #[cfg_attr(not(target_arch = "wasm32"), derive(Debug))] pub struct Metadata { @@ -263,4 +265,8 @@ impl Contract { .map(|(k, v)| (k.clone(), v.clone())) .collect() } + + pub fn required_balance_for_safe_deposit(&self) -> NearToken { + REQUIRED_BALANCE_FOR_DEPOSIT + } } diff --git a/contracts/satoshi-bridge/src/bitcoin_utils/contract_methods.rs b/contracts/satoshi-bridge/src/bitcoin_utils/contract_methods.rs index 55d6f07..e3bb76d 100644 --- a/contracts/satoshi-bridge/src/bitcoin_utils/contract_methods.rs +++ b/contracts/satoshi-bridge/src/bitcoin_utils/contract_methods.rs @@ -58,7 +58,13 @@ impl Contract { max_gas_fee: Option, ) -> PromiseOrValue { let mut psbt = PsbtWrapper::new(input, output); - self.create_btc_pending_info(sender_id, amount, target_btc_address, &mut psbt, max_gas_fee); + self.create_btc_pending_info( + sender_id, + amount, + target_btc_address, + &mut psbt, + max_gas_fee, + ); PromiseOrValue::Value(U128(0)) } diff --git a/contracts/satoshi-bridge/src/btc_light_client/deposit.rs b/contracts/satoshi-bridge/src/btc_light_client/deposit.rs index d96cf12..edb635a 100644 --- a/contracts/satoshi-bridge/src/btc_light_client/deposit.rs +++ b/contracts/satoshi-bridge/src/btc_light_client/deposit.rs @@ -1,10 +1,16 @@ -use crate::*; +use near_sdk::PromiseResult; + +use crate::{ + burn::GAS_FOR_BURN_CALL, + mint::{GAS_FOR_MINT_CALL, GAS_FOR_MINT_CALL_BACK}, + *, +}; pub const GAS_FOR_VERIFY_DEPOSIT_CALL_BACK: Gas = Gas::from_tgas(190); pub const GAS_FOR_UNAVAILABLE_UTXO_CALL_BACK: Gas = Gas::from_tgas(20); impl Contract { - pub fn internal_verify_deposit( + pub(crate) fn internal_verify_deposit( &mut self, deposit_amount: u128, tx_block_blockhash: String, @@ -57,6 +63,48 @@ impl Contract { ) } } + + #[allow(clippy::too_many_arguments)] + pub(crate) fn internal_safe_verify_deposit( + &mut self, + deposit_amount: u128, + tx_block_blockhash: String, + tx_index: u64, + merkle_proof: Vec, + pending_utxo_info: PendingUTXOInfo, + recipient_id: AccountId, + deposit_msg: SafeDepositMsg, + ) -> Promise { + let config = self.internal_config(); + let confirmations = self.get_confirmations(config, deposit_amount); + let promise = self.verify_transaction_inclusion_promise( + config.btc_light_client_account_id.clone(), + pending_utxo_info.tx_id.clone(), + tx_block_blockhash, + tx_index, + merkle_proof, + confirmations, + ); + + if deposit_amount < config.min_deposit_amount { + promise.then( + Self::ext(env::current_account_id()) + .with_static_gas(GAS_FOR_UNAVAILABLE_UTXO_CALL_BACK) + .unavailable_utxo_callback(recipient_id, pending_utxo_info), + ) + } else { + promise.then( + Self::ext(env::current_account_id()) + .with_static_gas(GAS_FOR_VERIFY_DEPOSIT_CALL_BACK) + .verify_safe_deposit_callback( + recipient_id, + deposit_amount.into(), + deposit_msg.msg, + pending_utxo_info, + ), + ) + } + } } #[near] @@ -123,4 +171,101 @@ impl Contract { ) .into() } + + #[private] + pub fn verify_safe_deposit_callback( + &mut self, + recipient_id: AccountId, + mint_amount: U128, + msg: String, + pending_utxo_info: PendingUTXOInfo, + ) -> PromiseOrValue { + let result_bytes = + promise_result_as_success().expect("Call verify_transaction_inclusion failed"); + let is_valid = serde_json::from_slice::(&result_bytes) + .expect("verify_transaction_inclusion return not bool"); + require!(is_valid, "verify_transaction_inclusion return false"); + require!( + self.data_mut() + .verified_deposit_utxo + .insert(pending_utxo_info.utxo_storage_key.clone()), + "Already deposit utxo" + ); + + let msg = (!msg.is_empty()) + .then(|| msg.replace("{{UTXO_TX_ID}}", &pending_utxo_info.utxo_storage_key)); + ext_nbtc::ext(self.internal_config().nbtc_account_id.clone()) + .with_static_gas(GAS_FOR_MINT_CALL) + .with_attached_deposit(NearToken::from_yoctonear(1)) + .safe_mint(recipient_id.clone(), mint_amount, msg) + .then( + Self::ext(env::current_account_id()) + .with_static_gas(GAS_FOR_MINT_CALL_BACK) + .safe_mint_callback(recipient_id.clone(), mint_amount, pending_utxo_info), + ) + .into() + } + + #[private] + pub fn safe_mint_callback( + &mut self, + recipient_id: AccountId, + mint_amount: U128, + pending_utxo_info: PendingUTXOInfo, + ) -> bool { + let is_success = !is_refund_required(); + let relayer_account_id = env::signer_account_id(); + + if is_success { + Event::UtxoAdded { + utxo_storage_keys: vec![pending_utxo_info.utxo_storage_key.clone()], + } + .emit(); + self.internal_set_utxo(&pending_utxo_info.utxo_storage_key, pending_utxo_info.utxo); + } else { + self.data_mut() + .verified_deposit_utxo + .remove(&pending_utxo_info.utxo_storage_key); + + ext_nbtc::ext(self.internal_config().nbtc_account_id.clone()) + .with_static_gas(GAS_FOR_BURN_CALL) + .burn( + env::current_account_id(), + mint_amount, + relayer_account_id, + U128(0), + ); + + Promise::new(env::signer_account_id()) + .transfer(self.required_balance_for_safe_deposit()); + } + + Event::VerifyDepositDetails { + recipient_id: &recipient_id, + mint_amount, + protocol_fee: U128(0), + relayer_account_id: env::signer_account_id(), + relayer_fee: U128(0), + success: is_success, + } + .emit(); + is_success + } +} + +fn is_refund_required() -> bool { + match env::promise_result(0) { + PromiseResult::Successful(value) => { + if let Ok(amount) = near_sdk::serde_json::from_slice::(&value) { + // Normal case: refund if the used token amount is zero + // The amount can be zero if the `ft_on_transfer` in the receiver contract returns an amount instead of `0`, or if it panics. + amount.0 == 0 + } else { + // Unexpected case: don't refund + false + } + } + // Unexpected case: don't refund + PromiseResult::Failed => false, + } } diff --git a/contracts/satoshi-bridge/src/deposit_msg.rs b/contracts/satoshi-bridge/src/deposit_msg.rs index f319b3f..083031d 100644 --- a/contracts/satoshi-bridge/src/deposit_msg.rs +++ b/contracts/satoshi-bridge/src/deposit_msg.rs @@ -16,6 +16,17 @@ pub struct DepositMsg { // Used to support other dApps extending based on verify_deposit. #[serde(skip_serializing_if = "Option::is_none")] pub extra_msg: Option, + // Replacment for the legacy post_actions to support safer cross-contract calls. + // If this field is present, the legacy post_actions field must be None + #[serde(skip_serializing_if = "Option::is_none")] + pub safe_deposit: Option, +} + +#[near(serializers = [json])] +#[derive(Clone)] +pub struct SafeDepositMsg { + pub msg: String, + // TODO: add relayer fee support in the future. } #[near(serializers = [json])] diff --git a/contracts/satoshi-bridge/src/nbtc/burn.rs b/contracts/satoshi-bridge/src/nbtc/burn.rs index d745798..3797ff7 100644 --- a/contracts/satoshi-bridge/src/nbtc/burn.rs +++ b/contracts/satoshi-bridge/src/nbtc/burn.rs @@ -1,6 +1,6 @@ use crate::*; -pub const GAS_FOR_BURN_CALL: Gas = Gas::from_tgas(10); +pub const GAS_FOR_BURN_CALL: Gas = Gas::from_tgas(5); pub const GAS_FOR_WITHDRAW_BURN_CALL_BACK: Gas = Gas::from_tgas(20); pub const GAS_FOR_ACTIVE_UTXO_MANAGEMENT_BURN_CALL_BACK: Gas = Gas::from_tgas(20); diff --git a/contracts/satoshi-bridge/src/nbtc/mod.rs b/contracts/satoshi-bridge/src/nbtc/mod.rs index 9d1ab68..fff62c0 100644 --- a/contracts/satoshi-bridge/src/nbtc/mod.rs +++ b/contracts/satoshi-bridge/src/nbtc/mod.rs @@ -21,4 +21,5 @@ pub trait NBtc { relayer_account_id: AccountId, relayer_fee: U128, ); + fn safe_mint(&mut self, account_id: AccountId, amount: U128, msg: Option); } diff --git a/contracts/satoshi-bridge/src/psbt.rs b/contracts/satoshi-bridge/src/psbt.rs index c2f5218..39ccf6e 100644 --- a/contracts/satoshi-bridge/src/psbt.rs +++ b/contracts/satoshi-bridge/src/psbt.rs @@ -2,6 +2,7 @@ use crate::network::Address; use crate::psbt_wrapper::PsbtWrapper; use crate::*; impl Contract { + #[allow(clippy::too_many_arguments)] pub fn check_withdraw_psbt_valid( &self, target_address_script_pubkey: &ScriptBuf, @@ -22,9 +23,15 @@ impl Contract { amount, withdraw_fee, ); - + if let Some(max_gas_fee) = max_gas_fee { - require!(gas_fee <= max_gas_fee.0, format!("Gas fee does not match the provided max fee (gas fee = {}; max gas fee = {})", gas_fee, max_gas_fee.0)); + require!( + gas_fee <= max_gas_fee.0, + format!( + "Gas fee does not match the provided max fee (gas fee = {}; max gas fee = {})", + gas_fee, max_gas_fee.0 + ) + ); } require!( diff --git a/contracts/satoshi-bridge/src/unit/mod.rs b/contracts/satoshi-bridge/src/unit/mod.rs index f7faeb6..06c2332 100644 --- a/contracts/satoshi-bridge/src/unit/mod.rs +++ b/contracts/satoshi-bridge/src/unit/mod.rs @@ -7,6 +7,7 @@ use near_sdk::test_utils::VMContextBuilder; pub use near_sdk::testing_env; mod post_action; +mod storage; pub fn burrowland_id() -> AccountId { "burrowland_id".parse().unwrap() diff --git a/contracts/satoshi-bridge/src/unit/post_action.rs b/contracts/satoshi-bridge/src/unit/post_action.rs index 15772b0..f48fda2 100644 --- a/contracts/satoshi-bridge/src/unit/post_action.rs +++ b/contracts/satoshi-bridge/src/unit/post_action.rs @@ -239,6 +239,7 @@ fn test_check_deposit_msg() { recipient_id: recipient_id(), post_actions: None, extra_msg: None, + safe_deposit: None }, 100 ) @@ -251,6 +252,7 @@ fn test_check_deposit_msg() { recipient_id: recipient_id(), post_actions: Some(vec![]), extra_msg: None, + safe_deposit: None }, 100 ) @@ -284,6 +286,7 @@ fn test_check_deposit_msg() { }, ]), extra_msg: None, + safe_deposit: None }, 100 ) @@ -310,6 +313,7 @@ fn test_check_deposit_msg() { }, ]), extra_msg: None, + safe_deposit: None }, 100 ) @@ -336,6 +340,7 @@ fn test_check_deposit_msg() { gas: Some(Gas::from_tgas(200)) },]), extra_msg: None, + safe_deposit: None }, 100 ) @@ -362,6 +367,7 @@ fn test_check_deposit_msg() { }, ]), extra_msg: None, + safe_deposit: None }, 100 ) @@ -388,6 +394,7 @@ fn test_check_deposit_msg() { }, ]), extra_msg: None, + safe_deposit: None }, 100 ) @@ -414,6 +421,7 @@ fn test_check_deposit_msg() { }, ]), extra_msg: None, + safe_deposit: None }, 100 ) @@ -439,6 +447,7 @@ fn test_check_deposit_msg() { gas: Some(Gas::from_tgas(50)) },]), extra_msg: None, + safe_deposit: None }, 100 ) @@ -456,6 +465,7 @@ fn test_check_deposit_msg() { gas: Some(Gas::from_tgas(50)) },]), extra_msg: None, + safe_deposit: None }, 100 ) @@ -479,6 +489,7 @@ fn test_check_deposit_msg() { }, ]), extra_msg: None, + safe_deposit: None }, 100 ) @@ -498,6 +509,7 @@ fn test_check_deposit_msg() { }, ]), extra_msg: None, + safe_deposit: None }, 100 ) @@ -517,6 +529,7 @@ fn test_check_deposit_msg() { }, ]), extra_msg: None, + safe_deposit: None }, 100 ) @@ -536,6 +549,7 @@ fn test_check_deposit_msg() { }, ]), extra_msg: None, + safe_deposit: None }, 100 ) diff --git a/contracts/satoshi-bridge/src/unit/storage.rs b/contracts/satoshi-bridge/src/unit/storage.rs new file mode 100644 index 0000000..7212716 --- /dev/null +++ b/contracts/satoshi-bridge/src/unit/storage.rs @@ -0,0 +1,48 @@ +use crate::*; + +impl Contract { + pub(crate) fn calculate_required_balance_for_safe_deposit(&mut self) -> NearToken { + let storage_usage = env::storage_usage(); + + let txid = "83d28cfcff0d86035e2742ecde99ef4801bb9f928d7d0118a0c1dd87bdc299ac".to_owned(); + let vout = u32::MAX; + let path = get_deposit_path(&DepositMsg { + recipient_id: env::current_account_id(), + post_actions: None, + extra_msg: None, + safe_deposit: None, + }); + let utxo_storage_key = generate_utxo_storage_key(txid, vout); + let tx_bytes = vec![0u8; 300]; // TODO: optimise storage usage + + self.data_mut().utxos.insert( + utxo_storage_key.clone(), + VUTXO::Current(UTXO { + path, + tx_bytes, + vout: vout.try_into().unwrap(), + balance: u64::MAX, + }), + ); + + self.data_mut() + .verified_deposit_utxo + .insert(utxo_storage_key); + + let required_storage_for_deposit = env::storage_usage().saturating_sub(storage_usage); + + env::storage_byte_cost().saturating_mul(required_storage_for_deposit.into()) + } +} + +#[test] +fn test_storage_for_deposit() { + let mut unit_env = init_unit_env(); + + assert_eq!( + unit_env + .contract + .calculate_required_balance_for_safe_deposit(), + unit_env.contract.required_balance_for_safe_deposit() + ); +} diff --git a/contracts/satoshi-bridge/src/zcash_utils/contract_methods.rs b/contracts/satoshi-bridge/src/zcash_utils/contract_methods.rs index 79137d9..6cf303b 100644 --- a/contracts/satoshi-bridge/src/zcash_utils/contract_methods.rs +++ b/contracts/satoshi-bridge/src/zcash_utils/contract_methods.rs @@ -97,7 +97,13 @@ impl Contract { ) -> U128 { let expiry_height = last_block_height + self.get_config().expiry_height_gap; let mut psbt = PsbtWrapper::new(input, output, expiry_height, self.internal_config()); - self.create_btc_pending_info(sender_id, amount.0, target_btc_address, &mut psbt, max_gas_fee); + self.create_btc_pending_info( + sender_id, + amount.0, + target_btc_address, + &mut psbt, + max_gas_fee, + ); U128(0) } diff --git a/contracts/satoshi-bridge/tests/test_satoshi_bridge.rs b/contracts/satoshi-bridge/tests/test_satoshi_bridge.rs index 8dedc5b..509f372 100644 --- a/contracts/satoshi-bridge/tests/test_satoshi_bridge.rs +++ b/contracts/satoshi-bridge/tests/test_satoshi_bridge.rs @@ -96,6 +96,7 @@ async fn test_base() { recipient_id: context.get_account_by_name("alice").id().clone(), post_actions: None, extra_msg: None, + safe_deposit: None, }) .await .unwrap(); @@ -104,6 +105,7 @@ async fn test_base() { recipient_id: context.get_account_by_name("bob").id().clone(), post_actions: None, extra_msg: None, + safe_deposit: None, }) .await .unwrap(); @@ -114,6 +116,7 @@ async fn test_base() { recipient_id: context.get_account_by_name("alice").id().clone(), post_actions: None, extra_msg: None, + safe_deposit: None, }, generate_transaction_bytes( vec![( @@ -161,6 +164,7 @@ async fn test_base() { recipient_id: context.get_account_by_name("alice").id().clone(), post_actions: None, extra_msg: None, + safe_deposit: None, }, generate_transaction_bytes( vec![( @@ -209,6 +213,7 @@ async fn test_base() { recipient_id: context.get_account_by_name("alice").id().clone(), post_actions: None, extra_msg: None, + safe_deposit: None, }, generate_transaction_bytes( vec![( @@ -241,6 +246,7 @@ async fn test_base() { recipient_id: context.get_account_by_name("bob").id().clone(), post_actions: None, extra_msg: None, + safe_deposit: None, }, generate_transaction_bytes( vec![( @@ -296,6 +302,7 @@ async fn test_base() { let total_change_amount = 250000 - (withdraw_amount - withdraw_fee) as u64; check!(print context.do_withdraw("alice", "bridge", withdraw_amount, TokenReceiverMessage::Withdraw { target_btc_address: "1PAGsaT5vDz6hjzvuenSw33hWzESTR3ZHQ".to_string(), + max_gas_fee: None, input: vec![ OutPoint { txid: first_utxo[0].parse().unwrap(), @@ -457,6 +464,7 @@ async fn test_fix_bridge_fee_and_relayer() { recipient_id: context.get_account_by_name("alice").id().clone(), post_actions: None, extra_msg: None, + safe_deposit: None, }) .await .unwrap(); @@ -467,6 +475,7 @@ async fn test_fix_bridge_fee_and_relayer() { recipient_id: context.get_account_by_name("alice").id().clone(), post_actions: None, extra_msg: None, + safe_deposit: None, }, generate_transaction_bytes( vec![( @@ -506,6 +515,7 @@ async fn test_fix_bridge_fee_and_relayer() { let withdraw_fee = config.withdraw_bridge_fee.get_fee(withdraw_amount); check!(print "do_withdraw" context.do_withdraw("alice", "bridge", withdraw_amount, TokenReceiverMessage::Withdraw { target_btc_address: "1PAGsaT5vDz6hjzvuenSw33hWzESTR3ZHQ".to_string(), + max_gas_fee: None, input: vec![OutPoint { txid: first_utxo[0].parse().unwrap(), vout: first_utxo[1].parse().unwrap(), @@ -593,6 +603,7 @@ async fn test_ratio_bridge_fee_and_relayer() { recipient_id: context.get_account_by_name("alice").id().clone(), post_actions: None, extra_msg: None, + safe_deposit: None, }) .await .unwrap(); @@ -603,6 +614,7 @@ async fn test_ratio_bridge_fee_and_relayer() { recipient_id: context.get_account_by_name("alice").id().clone(), post_actions: None, extra_msg: None, + safe_deposit: None, }, generate_transaction_bytes( vec![( @@ -642,6 +654,7 @@ async fn test_ratio_bridge_fee_and_relayer() { let withdraw_fee = config.withdraw_bridge_fee.get_fee(withdraw_amount); check!(print "do_withdraw" context.do_withdraw("alice", "bridge", withdraw_amount, TokenReceiverMessage::Withdraw { target_btc_address: "1PAGsaT5vDz6hjzvuenSw33hWzESTR3ZHQ".to_string(), + max_gas_fee: None, input: vec![OutPoint { txid: first_utxo[0].parse().unwrap(), vout: first_utxo[1].parse().unwrap(), @@ -732,6 +745,7 @@ async fn test_directly_withdraw() { recipient_id: context.get_account_by_name("alice").id().clone(), post_actions: None, extra_msg: None, + safe_deposit: None, }) .await .unwrap(); @@ -742,6 +756,7 @@ async fn test_directly_withdraw() { recipient_id: context.get_account_by_name("alice").id().clone(), post_actions: None, extra_msg: None, + safe_deposit: None, }, generate_transaction_bytes( vec![( @@ -787,6 +802,7 @@ async fn test_directly_withdraw() { let withdraw_fee = config.withdraw_bridge_fee.get_fee(withdraw_amount); check!(print "do_withdraw" context.do_withdraw("bob", "bridge", withdraw_amount, TokenReceiverMessage::Withdraw { target_btc_address: "1PAGsaT5vDz6hjzvuenSw33hWzESTR3ZHQ".to_string(), + max_gas_fee: None, input: vec![OutPoint { txid: first_utxo[0].parse().unwrap(), vout: first_utxo[1].parse().unwrap(), @@ -857,6 +873,7 @@ async fn test_one_click() { gas: Some(Gas::from_tgas(100)), }]), extra_msg: None, + safe_deposit: None, }; let alice_btc_deposit_address = context .get_user_deposit_address(deposit_msg.clone()) @@ -917,6 +934,7 @@ async fn test_one_click() { gas: Some(Gas::from_tgas(100)), }]), extra_msg: None, + safe_deposit: None, }; let alice_btc_deposit_address = context .get_user_deposit_address(deposit_msg.clone()) @@ -973,6 +991,7 @@ async fn test_one_click() { gas: Some(Gas::from_tgas(101)), }]), extra_msg: None, + safe_deposit: None, }; let alice_btc_deposit_address = context .get_user_deposit_address(deposit_msg.clone()) @@ -1038,6 +1057,7 @@ async fn test_one_click() { }, ]), extra_msg: None, + safe_deposit: None, }; let alice_btc_deposit_address = context .get_user_deposit_address(deposit_msg.clone()) @@ -1110,6 +1130,7 @@ async fn test_one_click() { }, ]), extra_msg: None, + safe_deposit: None, }; let alice_btc_deposit_address = context .get_user_deposit_address(deposit_msg.clone()) @@ -1166,6 +1187,7 @@ async fn test_one_click() { gas: None, }]), extra_msg: None, + safe_deposit: None, }; let alice_btc_deposit_address = context .get_user_deposit_address(deposit_msg.clone()) @@ -1231,6 +1253,7 @@ async fn test_one_click() { }, ]), extra_msg: None, + safe_deposit: None, }; let alice_btc_deposit_address = context .get_user_deposit_address(deposit_msg.clone()) @@ -1297,6 +1320,7 @@ async fn test_one_click() { }, ]), extra_msg: None, + safe_deposit: None, }; let alice_btc_deposit_address = context .get_user_deposit_address(deposit_msg.clone()) @@ -1358,6 +1382,7 @@ async fn test_utxo_passive_management() { recipient_id: context.get_account_by_name("alice").id().clone(), post_actions: None, extra_msg: None, + safe_deposit: None, }) .await .unwrap(); @@ -1369,6 +1394,7 @@ async fn test_utxo_passive_management() { recipient_id: context.get_account_by_name("alice").id().clone(), post_actions: None, extra_msg: None, + safe_deposit: None, }, generate_transaction_bytes( vec![( @@ -1392,6 +1418,7 @@ async fn test_utxo_passive_management() { recipient_id: context.get_account_by_name("alice").id().clone(), post_actions: None, extra_msg: None, + safe_deposit: None, }, generate_transaction_bytes( vec![( @@ -1435,6 +1462,7 @@ async fn test_utxo_passive_management() { withdraw_amount, TokenReceiverMessage::Withdraw { target_btc_address: "1PAGsaT5vDz6hjzvuenSw33hWzESTR3ZHQ".to_string(), + max_gas_fee: None, input: vec![OutPoint { txid: utxo500000[0].parse().unwrap(), vout: utxo500000[1].parse().unwrap(), @@ -1470,6 +1498,7 @@ async fn test_utxo_passive_management() { withdraw_amount, TokenReceiverMessage::Withdraw { target_btc_address: "1PAGsaT5vDz6hjzvuenSw33hWzESTR3ZHQ".to_string(), + max_gas_fee: None, input: vec![OutPoint { txid: utxo500000[0].parse().unwrap(), vout: utxo500000[1].parse().unwrap(), @@ -1512,6 +1541,7 @@ async fn test_utxo_passive_management() { withdraw_amount, TokenReceiverMessage::Withdraw { target_btc_address: "1PAGsaT5vDz6hjzvuenSw33hWzESTR3ZHQ".to_string(), + max_gas_fee: None, input: vec![ OutPoint { txid: utxo500000[0].parse().unwrap(), @@ -1559,6 +1589,7 @@ async fn test_cancel_withdraw() { recipient_id: context.get_account_by_name("alice").id().clone(), post_actions: None, extra_msg: None, + safe_deposit: None, }) .await .unwrap(); @@ -1569,6 +1600,7 @@ async fn test_cancel_withdraw() { recipient_id: context.get_account_by_name("alice").id().clone(), post_actions: None, extra_msg: None, + safe_deposit: None, }, generate_transaction_bytes( vec![( @@ -1609,6 +1641,7 @@ async fn test_cancel_withdraw() { let change_amount = 500000 - (withdraw_amount - withdraw_fee) as u64; check!(print "do_withdraw" context.do_withdraw("alice", "bridge", withdraw_amount, TokenReceiverMessage::Withdraw { target_btc_address: "1PAGsaT5vDz6hjzvuenSw33hWzESTR3ZHQ".to_string(), + max_gas_fee: None, input: vec![OutPoint { txid: first_utxo[0].parse().unwrap(), vout: first_utxo[1].parse().unwrap(), @@ -1786,6 +1819,7 @@ async fn test_cancel_withdraw2() { recipient_id: context.get_account_by_name("alice").id().clone(), post_actions: None, extra_msg: None, + safe_deposit: None, }) .await .unwrap(); @@ -1796,6 +1830,7 @@ async fn test_cancel_withdraw2() { recipient_id: context.get_account_by_name("alice").id().clone(), post_actions: None, extra_msg: None, + safe_deposit: None, }, generate_transaction_bytes( vec![( @@ -1836,6 +1871,7 @@ async fn test_cancel_withdraw2() { let change_amount = 500000 - (withdraw_amount - withdraw_fee) as u64; check!(print "do_withdraw" context.do_withdraw("alice", "bridge", withdraw_amount, TokenReceiverMessage::Withdraw { target_btc_address: "1PAGsaT5vDz6hjzvuenSw33hWzESTR3ZHQ".to_string(), + max_gas_fee: None, input: vec![OutPoint { txid: first_utxo[0].parse().unwrap(), vout: first_utxo[1].parse().unwrap(), @@ -1966,6 +2002,7 @@ async fn test_utxo_active_management() { recipient_id: context.get_account_by_name("alice").id().clone(), post_actions: None, extra_msg: None, + safe_deposit: None, }) .await .unwrap(); @@ -1977,6 +2014,7 @@ async fn test_utxo_active_management() { recipient_id: context.get_account_by_name("alice").id().clone(), post_actions: None, extra_msg: None, + safe_deposit: None, }, generate_transaction_bytes( vec![( @@ -2000,6 +2038,7 @@ async fn test_utxo_active_management() { recipient_id: context.get_account_by_name("alice").id().clone(), post_actions: None, extra_msg: None, + safe_deposit: None, }, generate_transaction_bytes( vec![( @@ -2314,6 +2353,7 @@ async fn test_utxo_active_management2() { recipient_id: context.get_account_by_name("alice").id().clone(), post_actions: None, extra_msg: None, + safe_deposit: None, }) .await .unwrap(); @@ -2325,6 +2365,7 @@ async fn test_utxo_active_management2() { recipient_id: context.get_account_by_name("alice").id().clone(), post_actions: None, extra_msg: None, + safe_deposit: None, }, generate_transaction_bytes( vec![( @@ -2348,6 +2389,7 @@ async fn test_utxo_active_management2() { recipient_id: context.get_account_by_name("alice").id().clone(), post_actions: None, extra_msg: None, + safe_deposit: None, }, generate_transaction_bytes( vec![( From 88a7a338ad4f55132ac247c3a3ea90f796687989 Mon Sep 17 00:00:00 2001 From: Karim Date: Thu, 16 Oct 2025 02:07:26 +0100 Subject: [PATCH 08/19] Fix config migration (#12) * Fix config migration * Add upgrade tests * Fix testnet migration --- contracts/satoshi-bridge/src/legacy.rs | 222 +++++++++++++++++- contracts/satoshi-bridge/src/lib.rs | 1 + contracts/satoshi-bridge/src/upgrade.rs | 1 + .../tests/data/btc_bridge_v0-5-1.wasm | Bin 0 -> 1108262 bytes .../tests/data/nbtc_v0-5-1.wasm | Bin 0 -> 210801 bytes .../tests/data/nbtc_v0-6-0.wasm | Bin 0 -> 214510 bytes .../tests/data/zcash_bridge_v0-6-0.wasm | Bin 0 -> 1162118 bytes .../satoshi-bridge/tests/setup/context.rs | 15 +- .../satoshi-bridge/tests/test_upgrade.rs | 58 ++++- 9 files changed, 290 insertions(+), 7 deletions(-) create mode 100644 contracts/satoshi-bridge/tests/data/btc_bridge_v0-5-1.wasm create mode 100644 contracts/satoshi-bridge/tests/data/nbtc_v0-5-1.wasm create mode 100644 contracts/satoshi-bridge/tests/data/nbtc_v0-6-0.wasm create mode 100644 contracts/satoshi-bridge/tests/data/zcash_bridge_v0-6-0.wasm diff --git a/contracts/satoshi-bridge/src/legacy.rs b/contracts/satoshi-bridge/src/legacy.rs index 4ff16dd..c766f19 100644 --- a/contracts/satoshi-bridge/src/legacy.rs +++ b/contracts/satoshi-bridge/src/legacy.rs @@ -150,8 +150,14 @@ impl From for Config { max_btc_tx_pending_sec, } = c; + let chain = if env::current_account_id().as_str().ends_with(".testnet") { + crate::network::Chain::BitcoinTestnet + } else { + crate::network::Chain::BitcoinMainnet + }; + Self { - chain: crate::network::Chain::BitcoinMainnet, + chain, btc_light_client_account_id, nbtc_account_id, chain_signatures_account_id, @@ -185,6 +191,146 @@ impl From for Config { } } +#[near(serializers = [borsh])] +#[derive(Clone)] +pub struct ConfigV1 { + // The account id of btc light client contract + pub btc_light_client_account_id: AccountId, + // The account id of nbtc contract + pub nbtc_account_id: AccountId, + // The account id of chain signatures contract + pub chain_signatures_account_id: AccountId, + // The root public key of chain signatures contract + pub chain_signatures_root_public_key: Option, + // The change address of BTC transaction + pub change_address: Option, + // Satoshi upper limit for amount checks -> confirmations + pub confirmations_strategy: HashMap, + // The number of confirmations that need to be increased when a relayer not on the whitelist performs a verify. + pub confirmations_delta: u8, + // The number of confirmations that need to be increased when a relayer not on the extra msg whitelist performs a verify. + pub extra_msg_confirmations_delta: u8, + // Used to calculate the deposit fee. + pub deposit_bridge_fee: BridgeFee, + // Used to calculate the withdraw fee. + pub withdraw_bridge_fee: BridgeFee, + // The min amount must be met during verify_deposit, otherwise NBTC will not be minted for the user. + pub min_deposit_amount: u128, + // The minimum amount allowed for the user to withdraw. + pub min_withdraw_amount: u128, + // The minimum value requirement that change address must satisfy in BTC transaction. + pub min_change_amount: u128, + // Used to limit the maximum value of change in specific situations. + pub max_change_amount: u128, + // The min gas fee applicable for Bitcoin transactions + pub min_btc_gas_fee: u128, + // The max gas fee applicable for Bitcoin transactions + pub max_btc_gas_fee: u128, + // The maximum number of inputs that can be used for a Withdraw. + pub max_withdrawal_input_number: u8, + // The maximum amount of change allowed during a Withdraw. + pub max_change_number: u8, + // The maximum number of inputs allowed during active UTXO management. + pub max_active_utxo_management_input_number: u8, + // The maximum number of outputs allowed during active UTXO management. + pub max_active_utxo_management_output_number: u8, + // When the number of UTXOs in the protocol is less than this configuration, UTXO management can be actively initiated. + // The number of inputs in the managed PSBT must be less than the number of outputs. + pub active_management_lower_limit: u32, + // When the number of UTXOs in the protocol is greater than this configuration, UTXO management can be actively initiated. + // The number of inputs in the managed PSBT must be greater than the number of outputs. + pub active_management_upper_limit: u32, + // When the number of UTXOs in the protocol is less than this configuration, passive UTXO management will be triggered, + // requiring that the number of inputs must be less than the number of changes. + pub passive_management_lower_limit: u32, + // When the number of UTXOs in the protocol is greater than this configuration, passive UTXO management will be triggered, + // requiring that the number of inputs must be greater than the number of changes. + pub passive_management_upper_limit: u32, + // The maximum number of transactions allowed to initiate RBF + pub rbf_num_limit: u8, + // If the transaction exceeds this configuration and has not been verified, the protocol will be allowed to cancel the transaction. + pub max_btc_tx_pending_sec: u32, + // UTXOs less than or equal to this amount are allowed to be merged through active management. + pub unhealthy_utxo_amount: u64, + #[cfg(feature = "zcash")] + pub expiry_height_gap: u32, +} + +impl From for Config { + fn from(c: ConfigV1) -> Self { + let ConfigV1 { + btc_light_client_account_id, + nbtc_account_id, + chain_signatures_account_id, + chain_signatures_root_public_key, + change_address, + confirmations_strategy, + confirmations_delta, + extra_msg_confirmations_delta, + deposit_bridge_fee, + withdraw_bridge_fee, + min_deposit_amount, + min_withdraw_amount, + min_change_amount, + max_change_amount, + min_btc_gas_fee, + max_btc_gas_fee, + max_withdrawal_input_number, + max_change_number, + max_active_utxo_management_input_number, + max_active_utxo_management_output_number, + active_management_lower_limit, + active_management_upper_limit, + passive_management_lower_limit, + passive_management_upper_limit, + rbf_num_limit, + max_btc_tx_pending_sec, + unhealthy_utxo_amount, + #[cfg(feature = "zcash")] + expiry_height_gap, + } = c; + + let chain = if env::current_account_id().as_str().ends_with(".testnet") { + crate::network::Chain::BitcoinTestnet + } else { + crate::network::Chain::BitcoinMainnet + }; + + Self { + chain, + btc_light_client_account_id, + nbtc_account_id, + chain_signatures_account_id, + chain_signatures_root_public_key, + change_address, + confirmations_strategy, + confirmations_delta, + extra_msg_confirmations_delta, + deposit_bridge_fee, + withdraw_bridge_fee, + min_deposit_amount, + min_withdraw_amount, + min_change_amount, + max_change_amount, + min_btc_gas_fee, + max_btc_gas_fee, + max_withdrawal_input_number, + max_change_number, + max_active_utxo_management_input_number, + max_active_utxo_management_output_number, + active_management_lower_limit, + active_management_upper_limit, + passive_management_lower_limit, + passive_management_upper_limit, + rbf_num_limit, + max_btc_tx_pending_sec, + unhealthy_utxo_amount, + #[cfg(feature = "zcash")] + expiry_height_gap, + } + } +} + #[near(serializers = [borsh])] pub struct ContractDataV1 { pub config: LazyOption, @@ -247,3 +393,77 @@ impl From for ContractData { } } } + +#[near(serializers = [borsh])] +pub struct ContractDataV2 { + #[cfg(feature = "zcash")] + pub config: LazyOption, + #[cfg(not(feature = "zcash"))] + pub config: LazyOption, + pub accounts: IterableMap, + pub utxos: IterableMap, + pub unavailable_utxos: IterableMap, + pub verified_deposit_utxo: LookupSet, + pub btc_pending_infos: IterableMap, + pub rbf_txs: IterableMap>, + pub relayer_white_list: IterableSet, + pub extra_msg_relayer_white_list: IterableSet, + pub post_action_receiver_id_white_list: IterableSet, + pub post_action_msg_templates: IterableMap>, + pub lost_found: IterableMap, + pub acc_collected_protocol_fee: u128, + pub cur_available_protocol_fee: u128, + pub acc_claimed_protocol_fee: u128, + pub cur_reserved_protocol_fee: u128, + pub acc_protocol_fee_for_gas: u128, +} + +impl From for ContractData { + fn from(c: ContractDataV2) -> Self { + let ContractDataV2 { + config, + accounts, + utxos, + unavailable_utxos, + verified_deposit_utxo, + btc_pending_infos, + rbf_txs, + relayer_white_list, + extra_msg_relayer_white_list, + post_action_receiver_id_white_list, + post_action_msg_templates, + lost_found, + acc_collected_protocol_fee, + cur_available_protocol_fee, + acc_claimed_protocol_fee, + cur_reserved_protocol_fee, + acc_protocol_fee_for_gas, + } = c; + + Self { + #[cfg(feature = "zcash")] + config, + #[cfg(not(feature = "zcash"))] + config: LazyOption::new( + StorageKey::Config, + Some(config.get().clone().unwrap().into()), + ), + accounts, + utxos, + unavailable_utxos, + verified_deposit_utxo, + btc_pending_infos, + rbf_txs, + relayer_white_list, + extra_msg_relayer_white_list, + post_action_receiver_id_white_list, + post_action_msg_templates, + lost_found, + acc_collected_protocol_fee, + cur_available_protocol_fee, + acc_claimed_protocol_fee, + cur_reserved_protocol_fee, + acc_protocol_fee_for_gas, + } + } +} diff --git a/contracts/satoshi-bridge/src/lib.rs b/contracts/satoshi-bridge/src/lib.rs index 001f5c3..149eb1b 100644 --- a/contracts/satoshi-bridge/src/lib.rs +++ b/contracts/satoshi-bridge/src/lib.rs @@ -124,6 +124,7 @@ pub struct ContractData { pub enum VersionedContractData { V0(ContractDataV0), V1(ContractDataV1), + V2(ContractDataV2), Current(ContractData), } diff --git a/contracts/satoshi-bridge/src/upgrade.rs b/contracts/satoshi-bridge/src/upgrade.rs index ec1ce1a..755649c 100644 --- a/contracts/satoshi-bridge/src/upgrade.rs +++ b/contracts/satoshi-bridge/src/upgrade.rs @@ -11,6 +11,7 @@ impl Contract { contract.data = match contract.data { VersionedContractData::V0(data) => VersionedContractData::Current(data.into()), VersionedContractData::V1(data) => VersionedContractData::Current(data.into()), + VersionedContractData::V2(data) => VersionedContractData::Current(data.into()), VersionedContractData::Current(data) => VersionedContractData::Current(data), }; contract diff --git a/contracts/satoshi-bridge/tests/data/btc_bridge_v0-5-1.wasm b/contracts/satoshi-bridge/tests/data/btc_bridge_v0-5-1.wasm new file mode 100644 index 0000000000000000000000000000000000000000..778b8f6e3b19997929e158f5e9269d37a6b4b756 GIT binary patch literal 1108262 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 z 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 z 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𝔱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

NSp%kj?1EW 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⪙)~@N9T8PLS1ywqQHVzl>W{ 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
g3qI(a$f- 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 ZTwswl0v!dq5A++za`O?0PUZ1f{}+Hkx~~8L literal 0 HcmV?d00001 diff --git a/contracts/satoshi-bridge/tests/setup/context.rs b/contracts/satoshi-bridge/tests/setup/context.rs index c1fb690..6ca698f 100644 --- a/contracts/satoshi-bridge/tests/setup/context.rs +++ b/contracts/satoshi-bridge/tests/setup/context.rs @@ -1044,7 +1044,11 @@ pub struct UpgradeContext { } impl UpgradeContext { - pub async fn new(worker: &Worker) -> Self { + pub async fn new( + worker: &Worker, + previous_satoshi_bridge_contract_path: &str, + previous_nbtc_contract_path: &str, + ) -> Self { let root = worker.root_account().unwrap(); let ( previous_satoshi_bridge_contract, @@ -1054,7 +1058,7 @@ impl UpgradeContext { ) = tokio::join!( async { worker - .dev_deploy(&std::fs::read("../../res/satoshi_bridge.wasm").unwrap()) + .dev_deploy(&std::fs::read(previous_satoshi_bridge_contract_path).unwrap()) .await .unwrap() }, @@ -1066,7 +1070,7 @@ impl UpgradeContext { .await .unwrap() .unwrap(); - nbtc.deploy(&std::fs::read("../../res/nbtc.wasm").unwrap()) + nbtc.deploy(&std::fs::read(previous_nbtc_contract_path).unwrap()) .await .unwrap() .unwrap() @@ -1124,6 +1128,7 @@ impl UpgradeContext { "rbf_num_limit": 99, "max_btc_tx_pending_sec": 3600 * 24, "unhealthy_utxo_amount": 1000, + "expiry_height_gap": 100, } })) .transact() @@ -1145,6 +1150,10 @@ impl UpgradeContext { .args_json(json!({ "controller": root.id(), "bridge_id": previous_satoshi_bridge_contract.id(), + "name": "Near WTC".to_string(), + "symbol": "NBTC".to_string(), + "decimals": 8, + "icon": Some(DATA_IMAGE_SVG_NEAR_ICON.to_string()), })) .transact() .await diff --git a/contracts/satoshi-bridge/tests/test_upgrade.rs b/contracts/satoshi-bridge/tests/test_upgrade.rs index d24a8c1..90eb98c 100644 --- a/contracts/satoshi-bridge/tests/test_upgrade.rs +++ b/contracts/satoshi-bridge/tests/test_upgrade.rs @@ -2,18 +2,70 @@ mod setup; use setup::*; #[tokio::test] -async fn test_satoshi_bridge_upgrade() { +async fn test_btc_bridge_upgrade() { let worker = near_workspaces::sandbox().await.unwrap(); - let upgrade_context = UpgradeContext::new(&worker).await; + let upgrade_context = UpgradeContext::new( + &worker, + "../../res/satoshi_bridge.wasm", + "../../res/nbtc.wasm", + ) + .await; check!(view upgrade_context.get_satoshi_bridge_version()); check!(upgrade_context.upgrade_satoshi_bridge("../../res/satoshi_bridge.wasm")); check!(view upgrade_context.get_satoshi_bridge_version()); } +#[tokio::test] +async fn test_btc_bridge_upgrade_from_v0_5_1() { + let worker = near_workspaces::sandbox().await.unwrap(); + let upgrade_context = UpgradeContext::new( + &worker, + "tests/data/btc_bridge_v0-5-1.wasm", + "tests/data/nbtc_v0-5-1.wasm", + ) + .await; + check!(view upgrade_context.get_satoshi_bridge_version()); + check!(upgrade_context.upgrade_satoshi_bridge("../../res/satoshi_bridge.wasm")); + check!(view upgrade_context.get_satoshi_bridge_version()); +} + +#[tokio::test] +async fn test_zcash_bridge_upgrade_from_v0_6_0() { + let worker = near_workspaces::sandbox().await.unwrap(); + let upgrade_context = UpgradeContext::new( + &worker, + "tests/data/zcash_bridge_v0-6-0.wasm", + "tests/data/nbtc_v0-6-0.wasm", + ) + .await; + check!(view upgrade_context.get_satoshi_bridge_version()); + check!(upgrade_context.upgrade_satoshi_bridge("../../res/zcash.wasm")); + check!(view upgrade_context.get_satoshi_bridge_version()); +} + #[tokio::test] async fn test_nbtc_upgrade() { let worker = near_workspaces::sandbox().await.unwrap(); - let upgrade_context = UpgradeContext::new(&worker).await; + let upgrade_context = UpgradeContext::new( + &worker, + "../../res/satoshi_bridge.wasm", + "../../res/nbtc.wasm", + ) + .await; + check!(view upgrade_context.get_nbtc_version()); + check!(upgrade_context.upgrade_nbtc("../../res/nbtc.wasm")); + check!(view upgrade_context.get_nbtc_version()); +} + +#[tokio::test] +async fn test_nbtc_upgrade_from_v0_5_1() { + let worker = near_workspaces::sandbox().await.unwrap(); + let upgrade_context = UpgradeContext::new( + &worker, + "tests/data/btc_bridge_v0-5-1.wasm", + "tests/data/nbtc_v0-5-1.wasm", + ) + .await; check!(view upgrade_context.get_nbtc_version()); check!(upgrade_context.upgrade_nbtc("../../res/nbtc.wasm")); check!(view upgrade_context.get_nbtc_version()); From 8c62c7de21119c4ae3349484b76a75dda25cbfc8 Mon Sep 17 00:00:00 2001 From: Olga Kunyavskaya Date: Thu, 23 Oct 2025 09:21:40 +0100 Subject: [PATCH 09/19] fix sequence for rbf (#15) --- contracts/satoshi-bridge/src/bitcoin_utils/psbt_wrapper.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/satoshi-bridge/src/bitcoin_utils/psbt_wrapper.rs b/contracts/satoshi-bridge/src/bitcoin_utils/psbt_wrapper.rs index cea9346..436c004 100644 --- a/contracts/satoshi-bridge/src/bitcoin_utils/psbt_wrapper.rs +++ b/contracts/satoshi-bridge/src/bitcoin_utils/psbt_wrapper.rs @@ -42,7 +42,7 @@ impl PsbtWrapper { original_psbt: crate::psbt_wrapper::PsbtWrapper, output: Vec, ) -> Self { - let sequence = bitcoin::Sequence::MAX; + let sequence = bitcoin::Sequence::ENABLE_RBF_NO_LOCKTIME; let transaction = BtcTransaction { version: Version::TWO, From 938124484c3d599435d46cf12c45bc01a15a6ccc Mon Sep 17 00:00:00 2001 From: Ivan Frolov <59515280+frolvanya@users.noreply.github.com> Date: Thu, 23 Oct 2025 14:29:00 +0200 Subject: [PATCH 10/19] chore: added ci (#14) * chore: added ci * chore: allow `needless_pass_by_value` * fix: ci * fix: fixed clippy issues and loosened clippy rules * chore: added `make build` call * chore: install cargo-near * fix(tests): nbtc contract initialization * chore: cleanup * Update contracts/satoshi-bridge/tests/setup/context.rs Co-authored-by: Olga Kunyavskaya * Update contracts/satoshi-bridge/src/nbtc/burn.rs Co-authored-by: Olga Kunyavskaya * Update contracts/satoshi-bridge/src/nbtc/burn.rs Co-authored-by: Olga Kunyavskaya * Update contracts/satoshi-bridge/src/btc_light_client/mod.rs Co-authored-by: Olga Kunyavskaya * refactor: use `u64::from(u32::MAX)` instead * refactor: use `u64::MAX` instead * Revert "refactor: use `u64::MAX` instead" This reverts commit 4c53c2cac2d047b59c3880552c9d68ff00108aa6. --------- Co-authored-by: Olga Kunyavskaya --- .github/workflows/ci.yml | 46 +++++++++++++++++++ contracts/mock-dapp/src/account.rs | 2 +- contracts/mock-dapp/src/fungible_token.rs | 2 +- contracts/mock-dapp/src/lib.rs | 2 +- contracts/mock-dapp/src/storage.rs | 2 +- contracts/nbtc/src/lib.rs | 2 +- contracts/satoshi-bridge/src/account.rs | 8 ++-- contracts/satoshi-bridge/src/api/bridge.rs | 15 ++++-- .../src/api/chain_signatures.rs | 5 +- .../satoshi-bridge/src/api/management.rs | 10 ++-- .../satoshi-bridge/src/api/token_receiver.rs | 8 +++- contracts/satoshi-bridge/src/api/view.rs | 45 ++++++++++++------ .../src/bitcoin_utils/psbt_wrapper.rs | 2 +- .../active_utxo_management.rs | 5 +- .../src/btc_light_client/deposit.rs | 7 ++- .../src/btc_light_client/mod.rs | 4 +- .../src/btc_light_client/withdraw.rs | 5 +- .../satoshi-bridge/src/btc_pending_info.rs | 44 +++++++++--------- .../satoshi-bridge/src/chain_signature.rs | 6 ++- contracts/satoshi-bridge/src/config.rs | 27 +++++------ contracts/satoshi-bridge/src/deposit_msg.rs | 16 +++---- contracts/satoshi-bridge/src/event.rs | 2 +- contracts/satoshi-bridge/src/json_utils.rs | 14 ++---- contracts/satoshi-bridge/src/kdf.rs | 2 +- contracts/satoshi-bridge/src/legacy.rs | 5 +- contracts/satoshi-bridge/src/nbtc/burn.rs | 15 ++++-- contracts/satoshi-bridge/src/nbtc/mint.rs | 15 +++--- contracts/satoshi-bridge/src/nbtc/mod.rs | 2 +- contracts/satoshi-bridge/src/network.rs | 10 ++-- contracts/satoshi-bridge/src/psbt.rs | 42 ++++++++++------- .../src/rbf/active_utxo_management.rs | 6 ++- .../src/rbf/cancel_active_utxo_management.rs | 6 ++- .../satoshi-bridge/src/rbf/cancel_withdraw.rs | 7 ++- contracts/satoshi-bridge/src/rbf/mod.rs | 10 ++-- contracts/satoshi-bridge/src/rbf/withdraw.rs | 6 ++- .../satoshi-bridge/src/token_transfer.rs | 5 +- .../satoshi-bridge/src/unit/post_action.rs | 40 ++++++++-------- contracts/satoshi-bridge/src/upgrade.rs | 2 +- contracts/satoshi-bridge/src/utils.rs | 5 +- contracts/satoshi-bridge/src/utxo.rs | 7 +-- .../satoshi-bridge/tests/setup/context.rs | 3 +- 41 files changed, 297 insertions(+), 170 deletions(-) create mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..1bda6dc --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,46 @@ +name: CI + +on: + push: + branches: + - omni-main + pull_request: + +permissions: + checks: write + +jobs: + rust-checks: + runs-on: warp-ubuntu-latest-x64-4x + steps: + - uses: actions/checkout@v5 + + - name: Install system dependencies + run: sudo apt-get update && sudo apt-get install -y libudev-dev + + - name: Install Rust toolchain + uses: dtolnay/rust-toolchain@stable + with: + components: rustfmt, clippy + + - name: Setup Rust cache + uses: Swatinem/rust-cache@v2 + with: + cache-provider: warpbuild + + - name: Check formatting + run: cargo fmt --all -- --check + + - name: Run Clippy + run: cargo clippy --lib --bins --examples -- -D warnings -D clippy::pedantic -D clippy::as_conversions -A clippy::must_use_candidate -A clippy::needless_pass_by_value -A clippy::missing_panics_doc -A clippy::missing_errors_doc -A clippy::match_same_arms -A clippy::unused_self -A clippy::too_many_lines + + - name: Install cargo-near + run: | + curl --proto '=https' --tlsv1.2 -LsSf https://github.com/near/cargo-near/releases/latest/download/cargo-near-installer.sh | sh + + - name: Build contracts + run: make build + timeout-minutes: 60 + + - name: Run tests + run: cargo test --all -- --nocapture diff --git a/contracts/mock-dapp/src/account.rs b/contracts/mock-dapp/src/account.rs index 6a16a19..3adbde3 100644 --- a/contracts/mock-dapp/src/account.rs +++ b/contracts/mock-dapp/src/account.rs @@ -1,4 +1,4 @@ -use crate::*; +use crate::{near, AccountId}; #[near(serializers = [borsh, json])] pub struct Account { diff --git a/contracts/mock-dapp/src/fungible_token.rs b/contracts/mock-dapp/src/fungible_token.rs index 02fd973..3c85e12 100644 --- a/contracts/mock-dapp/src/fungible_token.rs +++ b/contracts/mock-dapp/src/fungible_token.rs @@ -1,4 +1,4 @@ -use crate::*; +use crate::{env, near, AccountId, Contract, ContractExt, PromiseOrValue, U128}; use near_contract_standards::fungible_token::receiver::FungibleTokenReceiver; use near_sdk::{log, require, serde_json}; diff --git a/contracts/mock-dapp/src/lib.rs b/contracts/mock-dapp/src/lib.rs index d7621de..0c201aa 100644 --- a/contracts/mock-dapp/src/lib.rs +++ b/contracts/mock-dapp/src/lib.rs @@ -7,7 +7,7 @@ mod account; mod fungible_token; mod storage; -use account::*; +use account::Account; #[derive(PanicOnDefault)] #[near(contract_state)] diff --git a/contracts/mock-dapp/src/storage.rs b/contracts/mock-dapp/src/storage.rs index 9d7f235..c18f4ac 100644 --- a/contracts/mock-dapp/src/storage.rs +++ b/contracts/mock-dapp/src/storage.rs @@ -1,4 +1,4 @@ -use crate::*; +use crate::{env, near, Account, AccountId, Contract, ContractExt, NearToken, Promise}; use near_contract_standards::storage_management::{ StorageBalance, StorageBalanceBounds, StorageManagement, diff --git a/contracts/nbtc/src/lib.rs b/contracts/nbtc/src/lib.rs index 7bc49d6..3e6ea2d 100644 --- a/contracts/nbtc/src/lib.rs +++ b/contracts/nbtc/src/lib.rs @@ -171,7 +171,7 @@ impl Contract { impl FungibleTokenCore for Contract { #[payable] fn ft_transfer(&mut self, receiver_id: AccountId, amount: U128, memo: Option) { - self.token.ft_transfer(receiver_id, amount, memo) + self.token.ft_transfer(receiver_id, amount, memo); } #[payable] diff --git a/contracts/satoshi-bridge/src/account.rs b/contracts/satoshi-bridge/src/account.rs index d795da3..6d02b2f 100644 --- a/contracts/satoshi-bridge/src/account.rs +++ b/contracts/satoshi-bridge/src/account.rs @@ -1,4 +1,4 @@ -use crate::*; +use crate::{near, u128_dec_format, AccountId, Contract}; use std::collections::HashSet; #[near(serializers = [borsh, json])] @@ -78,14 +78,14 @@ impl Contract { } pub fn internal_get_account(&self, account_id: &AccountId) -> Option<&Account> { - self.data().accounts.get(account_id).map(|o| o.into()) + self.data().accounts.get(account_id).map(Into::into) } pub fn internal_unwrap_account(&self, account_id: &AccountId) -> &Account { self.data() .accounts .get(account_id) - .map(|o| o.into()) + .map(Into::into) .expect("ACCOUNT NOT REGISTERED") } @@ -93,7 +93,7 @@ impl Contract { self.data_mut() .accounts .get_mut(account_id) - .map(|o| o.into()) + .map(Into::into) .expect("ACCOUNT NOT REGISTERED") } diff --git a/contracts/satoshi-bridge/src/api/bridge.rs b/contracts/satoshi-bridge/src/api/bridge.rs index 2a69d6e..6747485 100644 --- a/contracts/satoshi-bridge/src/api/bridge.rs +++ b/contracts/satoshi-bridge/src/api/bridge.rs @@ -1,5 +1,9 @@ -use crate::psbt_wrapper::PsbtWrapper; -use crate::*; +use crate::{ + assert_one_yocto, env, generate_utxo_storage_key, get_deposit_path, nano_to_sec, near, + psbt_wrapper::PsbtWrapper, require, AccessControllable, AccountId, BTCPendingInfo, Contract, + ContractExt, DepositMsg, Event, LockTime, OriginalState, OutPoint, Pausable, PendingInfoStage, + PendingInfoState, PendingUTXOInfo, Promise, Role, TxOut, WrappedTransaction, UTXO, +}; use near_plugins::{access_control_any, pause}; #[near] @@ -35,7 +39,7 @@ impl Contract { let path = get_deposit_path(&deposit_msg); let transaction = WrappedTransaction::decode(&tx_bytes, &self.internal_config().chain) .expect("Deserialization tx_bytes failed"); - let deposit_amount = transaction.output()[vout].value.to_sat() as u128; + let deposit_amount = u128::from(transaction.output()[vout].value.to_sat()); require!(deposit_amount > 0, "Invalid deposit_amount"); require!( transaction.lock_time() == LockTime::ZERO, @@ -57,7 +61,10 @@ impl Contract { balance: transaction.output()[vout].value.to_sat(), }; let tx_id = transaction.compute_txid().to_string(); - let utxo_storage_key = generate_utxo_storage_key(tx_id.clone(), vout as u32); + let utxo_storage_key = generate_utxo_storage_key( + tx_id.clone(), + u32::try_from(vout).unwrap_or_else(|_| env::panic_str("vout overflow")), + ); self.internal_verify_deposit( deposit_amount, tx_block_blockhash, diff --git a/contracts/satoshi-bridge/src/api/chain_signatures.rs b/contracts/satoshi-bridge/src/api/chain_signatures.rs index 5446037..f546edc 100644 --- a/contracts/satoshi-bridge/src/api/chain_signatures.rs +++ b/contracts/satoshi-bridge/src/api/chain_signatures.rs @@ -1,4 +1,7 @@ -use crate::*; +use crate::{ + near, require, AccessControllable, Contract, ContractExt, Pausable, PromiseOrValue, Role, +}; + use near_plugins::pause; #[near] diff --git a/contracts/satoshi-bridge/src/api/management.rs b/contracts/satoshi-bridge/src/api/management.rs index f68f68a..41a5b3d 100644 --- a/contracts/satoshi-bridge/src/api/management.rs +++ b/contracts/satoshi-bridge/src/api/management.rs @@ -1,4 +1,8 @@ -use crate::*; +use crate::{ + assert_one_yocto, env, near, require, AccessControllable, Account, AccountId, BridgeFee, + Contract, ContractExt, HashSet, Promise, Role, U128, U64, +}; + use near_plugins::access_control_any; #[near] @@ -17,7 +21,7 @@ impl Contract { pub fn withdraw_protocol_fee(&mut self, amount: Option) -> Promise { assert_one_yocto(); let total_protocol_fee = self.data().cur_available_protocol_fee; - let amount = amount.map(|v| v.0).unwrap_or(total_protocol_fee); + let amount = amount.map_or(total_protocol_fee, |v| v.0); require!(amount > 0 && amount <= total_protocol_fee, "Invalid amount"); self.data_mut().cur_available_protocol_fee -= amount; self.data_mut().acc_claimed_protocol_fee += amount; @@ -450,7 +454,7 @@ impl Contract { pub fn set_unhealthy_utxo_amount(&mut self, unhealthy_utxo_amount: U64) { assert_one_yocto(); require!( - unhealthy_utxo_amount.0 as u128 > self.internal_config().min_change_amount, + u128::from(unhealthy_utxo_amount.0) > self.internal_config().min_change_amount, "Invalid unhealthy_utxo_amount" ); self.internal_mut_config().unhealthy_utxo_amount = unhealthy_utxo_amount.0; diff --git a/contracts/satoshi-bridge/src/api/token_receiver.rs b/contracts/satoshi-bridge/src/api/token_receiver.rs index cfaa05e..26a0c6a 100644 --- a/contracts/satoshi-bridge/src/api/token_receiver.rs +++ b/contracts/satoshi-bridge/src/api/token_receiver.rs @@ -1,5 +1,9 @@ -use crate::psbt_wrapper::PsbtWrapper; -use crate::*; +use crate::{ + env, nano_to_sec, near, psbt_wrapper::PsbtWrapper, require, serde_json, AccessControllable, + AccountId, BTCPendingInfo, Contract, ContractExt, Event, Gas, OriginalState, OutPoint, + Pausable, PendingInfoStage, PendingInfoState, PromiseOrValue, Role, TxOut, U128, +}; + use near_contract_standards::fungible_token::receiver::FungibleTokenReceiver; use near_plugins::pause; diff --git a/contracts/satoshi-bridge/src/api/view.rs b/contracts/satoshi-bridge/src/api/view.rs index d3e810a..b98f3cb 100644 --- a/contracts/satoshi-bridge/src/api/view.rs +++ b/contracts/satoshi-bridge/src/api/view.rs @@ -1,6 +1,10 @@ -use crate::*; +use crate::{ + env, near, u128_dec_format, AccessControllable, Account, AccountId, BTCPendingInfo, Config, + Contract, ContractExt, HashMap, HashSet, NearToken, Pausable, Role, U128, UTXO, +}; -const REQUIRED_BALANCE_FOR_DEPOSIT: NearToken = NearToken::from_yoctonear(1200000000000000000000); +const REQUIRED_BALANCE_FOR_DEPOSIT: NearToken = + NearToken::from_yoctonear(1_200_000_000_000_000_000_000); #[near(serializers = [json])] #[cfg_attr(not(target_arch = "wasm32"), derive(Debug))] @@ -33,10 +37,14 @@ impl Contract { pub fn get_metadata(&self) -> Metadata { let root_state = self.data(); Metadata { - super_admins: self.acl_get_super_admins(0, usize::MAX as u64), - daos: self.acl_get_grantees(Role::DAO.into(), 0, usize::MAX as u64), - operators: self.acl_get_grantees(Role::Operator.into(), 0, usize::MAX as u64), - pause_managers: self.acl_get_grantees(Role::PauseManager.into(), 0, usize::MAX as u64), + super_admins: self.acl_get_super_admins(0, u64::from(u32::MAX)), + daos: self.acl_get_grantees(Role::DAO.into(), 0, u64::from(u32::MAX)), + operators: self.acl_get_grantees(Role::Operator.into(), 0, u64::from(u32::MAX)), + pause_managers: self.acl_get_grantees( + Role::PauseManager.into(), + 0, + u64::from(u32::MAX), + ), pa_all_paused: self.pa_all_paused(), relayer_white_list: root_state.relayer_white_list.iter().cloned().collect(), extra_msg_relayer_white_list: root_state @@ -83,7 +91,8 @@ impl Contract { from_index: Option, limit: Option, ) -> HashMap { - let len = self.data().accounts.len() as usize; + let len = usize::try_from(self.data().accounts.len()) + .unwrap_or_else(|_| env::panic_str("Too many accounts")); let skip_n = from_index.unwrap_or(0); let take_n = limit.unwrap_or(len - skip_n); self.data() @@ -100,7 +109,8 @@ impl Contract { from_index: Option, limit: Option, ) -> HashMap { - let len = self.data().lost_found.len() as usize; + let len = usize::try_from(self.data().lost_found.len()) + .unwrap_or_else(|_| env::panic_str("Too many lost_found accounts")); let skip_n = from_index.unwrap_or(0); let take_n = limit.unwrap_or(len - skip_n); self.data() @@ -129,7 +139,8 @@ impl Contract { from_index: Option, limit: Option, ) -> HashMap { - let len = self.data().utxos.len() as usize; + let len = usize::try_from(self.data().utxos.len()) + .unwrap_or_else(|_| env::panic_str("Too many utxos")); let skip_n = from_index.unwrap_or(0); let take_n = limit.unwrap_or(len - skip_n); self.data() @@ -144,7 +155,7 @@ impl Contract { pub fn list_utxos(&self, utxo_storage_keys: Vec) -> HashMap> { utxo_storage_keys .into_iter() - .map(|key| (key.clone(), self.data().utxos.get(&key).map(|v| v.into()))) + .map(|key| (key.clone(), self.data().utxos.get(&key).map(Into::into))) .collect() } @@ -153,7 +164,8 @@ impl Contract { from_index: Option, limit: Option, ) -> HashMap { - let len = self.data().unavailable_utxos.len() as usize; + let len = usize::try_from(self.data().unavailable_utxos.len()) + .unwrap_or_else(|_| env::panic_str("Too many unavailable_utxos")); let skip_n = from_index.unwrap_or(0); let take_n = limit.unwrap_or(len - skip_n); self.data() @@ -174,7 +186,7 @@ impl Contract { .map(|key| { ( key.clone(), - self.data().unavailable_utxos.get(&key).map(|v| v.into()), + self.data().unavailable_utxos.get(&key).map(Into::into), ) }) .collect() @@ -185,7 +197,8 @@ impl Contract { from_index: Option, limit: Option, ) -> HashMap { - let len = self.data().btc_pending_infos.len() as usize; + let len = usize::try_from(self.data().btc_pending_infos.len()) + .unwrap_or_else(|_| env::panic_str("Too many btc_pending_infos")); let skip_n = from_index.unwrap_or(0); let take_n = limit.unwrap_or(len - skip_n); self.data() @@ -222,7 +235,8 @@ impl Contract { from_index: Option, limit: Option, ) -> HashMap> { - let len = self.data().rbf_txs.len() as usize; + let len = usize::try_from(self.data().rbf_txs.len()) + .unwrap_or_else(|_| env::panic_str("Too many rbf_txs")); let skip_n = from_index.unwrap_or(0); let take_n = limit.unwrap_or(len - skip_n); self.data() @@ -254,7 +268,8 @@ impl Contract { from_index: Option, limit: Option, ) -> HashMap> { - let len = self.data().post_action_msg_templates.len() as usize; + let len = usize::try_from(self.data().post_action_msg_templates.len()) + .unwrap_or_else(|_| env::panic_str("Too many post_action_msg_templates")); let skip_n = from_index.unwrap_or(0); let take_n = limit.unwrap_or(len - skip_n); self.data() diff --git a/contracts/satoshi-bridge/src/bitcoin_utils/psbt_wrapper.rs b/contracts/satoshi-bridge/src/bitcoin_utils/psbt_wrapper.rs index 436c004..d6a3721 100644 --- a/contracts/satoshi-bridge/src/bitcoin_utils/psbt_wrapper.rs +++ b/contracts/satoshi-bridge/src/bitcoin_utils/psbt_wrapper.rs @@ -1,4 +1,4 @@ -use crate::*; +use crate::{generate_utxo_storage_key, SignatureResponse}; use bitcoin::absolute::LockTime; use bitcoin::consensus::serialize; diff --git a/contracts/satoshi-bridge/src/btc_light_client/active_utxo_management.rs b/contracts/satoshi-bridge/src/btc_light_client/active_utxo_management.rs index 628d730..1fb5969 100644 --- a/contracts/satoshi-bridge/src/btc_light_client/active_utxo_management.rs +++ b/contracts/satoshi-bridge/src/btc_light_client/active_utxo_management.rs @@ -1,4 +1,7 @@ -use crate::*; +use crate::{ + env, near, promise_result_as_success, require, serde_json, BTCPendingInfo, Contract, + ContractExt, Gas, Promise, PromiseOrValue, +}; pub const GAS_FOR_VERIFY_ACTIVE_UTXO_MANAGEMENT_CALL_BACK: Gas = Gas::from_tgas(50); diff --git a/contracts/satoshi-bridge/src/btc_light_client/deposit.rs b/contracts/satoshi-bridge/src/btc_light_client/deposit.rs index edb635a..d992b6c 100644 --- a/contracts/satoshi-bridge/src/btc_light_client/deposit.rs +++ b/contracts/satoshi-bridge/src/btc_light_client/deposit.rs @@ -2,8 +2,11 @@ use near_sdk::PromiseResult; use crate::{ burn::GAS_FOR_BURN_CALL, + env, ext_nbtc, mint::{GAS_FOR_MINT_CALL, GAS_FOR_MINT_CALL_BACK}, - *, + near, promise_result_as_success, require, serde_json, AccountId, Contract, ContractExt, + DepositMsg, Event, Gas, NearToken, PendingUTXOInfo, PostAction, Promise, PromiseOrValue, + SafeDepositMsg, U128, }; pub const GAS_FOR_VERIFY_DEPOSIT_CALL_BACK: Gas = Gas::from_tgas(190); @@ -126,7 +129,7 @@ impl Contract { .insert(pending_utxo_info.utxo_storage_key.clone()), "Already deposit utxo" ); - let deposit_amount = pending_utxo_info.utxo.balance as u128; + let deposit_amount = u128::from(pending_utxo_info.utxo.balance); self.internal_set_unavailable_utxo( &pending_utxo_info.utxo_storage_key, pending_utxo_info.utxo, diff --git a/contracts/satoshi-bridge/src/btc_light_client/mod.rs b/contracts/satoshi-bridge/src/btc_light_client/mod.rs index 8e743ad..da52466 100644 --- a/contracts/satoshi-bridge/src/btc_light_client/mod.rs +++ b/contracts/satoshi-bridge/src/btc_light_client/mod.rs @@ -5,7 +5,7 @@ use near_sdk::serde::{ }; use std::{fmt, str::FromStr}; -use crate::*; +use crate::{env, ext_contract, near, AccountId, Contract, Gas, Promise}; pub mod active_utxo_management; pub mod deposit; pub mod withdraw; @@ -58,7 +58,7 @@ impl ProofArgs { .into_iter() .map(|v| { v.parse() - .unwrap_or_else(|_| panic!("Invalid merkle_proof: {:?}", v)) + .unwrap_or_else(|_| env::panic_str("Invalid merkle_proof: {v:?}")) }) .collect(), confirmations, diff --git a/contracts/satoshi-bridge/src/btc_light_client/withdraw.rs b/contracts/satoshi-bridge/src/btc_light_client/withdraw.rs index 5c234d5..0aa984e 100644 --- a/contracts/satoshi-bridge/src/btc_light_client/withdraw.rs +++ b/contracts/satoshi-bridge/src/btc_light_client/withdraw.rs @@ -1,4 +1,7 @@ -use crate::*; +use crate::{ + env, near, promise_result_as_success, require, serde_json, BTCPendingInfo, Contract, + ContractExt, Gas, Promise, PromiseOrValue, +}; pub const GAS_FOR_VERIFY_WITHDRAW_CALL_BACK: Gas = Gas::from_tgas(50); pub const GAS_FOR_VERIFY_CANCEL_WITHDRAW_CALL_BACK: Gas = Gas::from_tgas(50); diff --git a/contracts/satoshi-bridge/src/btc_pending_info.rs b/contracts/satoshi-bridge/src/btc_pending_info.rs index c519c03..108dfea 100644 --- a/contracts/satoshi-bridge/src/btc_pending_info.rs +++ b/contracts/satoshi-bridge/src/btc_pending_info.rs @@ -1,7 +1,9 @@ use std::borrow::{Borrow, BorrowMut}; -use crate::psbt_wrapper::PsbtWrapper; -use crate::*; +use crate::{ + env, nano_to_sec, near, network, psbt_wrapper::PsbtWrapper, require, u128_dec_format, + AccountId, Contract, SignatureResponse, WrappedTransaction, U128, VUTXO, +}; #[near(serializers = [borsh, json])] #[derive(Clone, PartialEq, Eq)] @@ -161,21 +163,21 @@ impl BTCPendingInfo { PendingInfoState::ActiveUtxoManagementRbf(state) => state.assert_pending_verify(), PendingInfoState::ActiveUtxoManagementCancelRbf(state) => state.assert_pending_verify(), _ => env::panic_str("Not active utxo management related tx"), - }; + } } pub fn assert_active_utxo_management_original_pending_verify_tx(&self) { match self.state.borrow() { PendingInfoState::ActiveUtxoManagementOriginal(state) => state.assert_pending_verify(), _ => env::panic_str("Not active utxo management original tx"), - }; + } } pub fn assert_withdraw_original_pending_verify_tx(&self) { match self.state.borrow() { PendingInfoState::WithdrawOriginal(state) => state.assert_pending_verify(), _ => env::panic_str("Not withdraw original tx"), - }; + } } pub fn get_max_gas_fee(&self) -> u128 { @@ -203,22 +205,22 @@ impl BTCPendingInfo { pub fn to_pending_verify_stage(&mut self) { match self.state.borrow_mut() { PendingInfoState::WithdrawOriginal(state) => { - state.stage = PendingInfoStage::PendingVerify + state.stage = PendingInfoStage::PendingVerify; } PendingInfoState::WithdrawUserRbf(state) => { - state.stage = PendingInfoStage::PendingVerify + state.stage = PendingInfoStage::PendingVerify; } PendingInfoState::WithdrawCancelRbf(state) => { - state.stage = PendingInfoStage::PendingVerify + state.stage = PendingInfoStage::PendingVerify; } PendingInfoState::ActiveUtxoManagementOriginal(state) => { - state.stage = PendingInfoStage::PendingVerify + state.stage = PendingInfoStage::PendingVerify; } PendingInfoState::ActiveUtxoManagementRbf(state) => { - state.stage = PendingInfoStage::PendingVerify + state.stage = PendingInfoStage::PendingVerify; } PendingInfoState::ActiveUtxoManagementCancelRbf(state) => { - state.stage = PendingInfoStage::PendingVerify + state.stage = PendingInfoStage::PendingVerify; } } } @@ -226,20 +228,20 @@ impl BTCPendingInfo { pub fn to_pending_burn_stage(&mut self) { match self.state.borrow_mut() { PendingInfoState::WithdrawOriginal(state) => { - state.stage = PendingInfoStage::PendingBurn + state.stage = PendingInfoStage::PendingBurn; } PendingInfoState::WithdrawUserRbf(state) => state.stage = PendingInfoStage::PendingBurn, PendingInfoState::WithdrawCancelRbf(state) => { - state.stage = PendingInfoStage::PendingBurn + state.stage = PendingInfoStage::PendingBurn; } PendingInfoState::ActiveUtxoManagementOriginal(state) => { - state.stage = PendingInfoStage::PendingBurn + state.stage = PendingInfoStage::PendingBurn; } PendingInfoState::ActiveUtxoManagementRbf(state) => { - state.stage = PendingInfoStage::PendingBurn + state.stage = PendingInfoStage::PendingBurn; } PendingInfoState::ActiveUtxoManagementCancelRbf(state) => { - state.stage = PendingInfoStage::PendingBurn + state.stage = PendingInfoStage::PendingBurn; } } } @@ -273,7 +275,7 @@ impl BTCPendingInfo { } pub fn is_all_signed(&self) -> bool { - self.signatures.iter().all(|v| v.is_some()) + self.signatures.iter().all(Option::is_some) } pub fn get_psbt(&self) -> PsbtWrapper { @@ -346,14 +348,14 @@ impl Contract { self.data() .btc_pending_infos .get(btc_pending_id) - .map(|o| o.into()) + .map(Into::into) } pub fn internal_unwrap_btc_pending_info(&self, btc_pending_id: &String) -> &BTCPendingInfo { self.data() .btc_pending_infos .get(btc_pending_id) - .map(|o| o.into()) + .map(Into::into) .expect("BTC pending info not exist") } @@ -364,7 +366,7 @@ impl Contract { self.data_mut() .btc_pending_infos .get_mut(btc_pending_id) - .map(|o| o.into()) + .map(Into::into) .expect("BTC pending info not exist") } @@ -394,7 +396,7 @@ pub fn generate_btc_pending_sign_id(payload_preimages: &[Vec]) -> String { &payload_preimages .iter() .flatten() - .cloned() + .copied() .collect::>(), ); hex::encode(hash_bytes) diff --git a/contracts/satoshi-bridge/src/chain_signature.rs b/contracts/satoshi-bridge/src/chain_signature.rs index 46a3232..1a0f253 100644 --- a/contracts/satoshi-bridge/src/chain_signature.rs +++ b/contracts/satoshi-bridge/src/chain_signature.rs @@ -1,5 +1,9 @@ -use crate::*; +use crate::{ + env, ext_contract, nano_to_sec, near, promise_result_as_success, require, serde_json, + AccountId, Contract, ContractExt, Event, Gas, Promise, PublicKey, +}; use bitcoin::ecdsa::Signature; + pub const GAS_FOR_SIGN_CALL: Gas = Gas::from_tgas(50); pub const GAS_FOR_SIGN_BTC_TRANSACTION_CALL_BACK: Gas = Gas::from_tgas(30); diff --git a/contracts/satoshi-bridge/src/config.rs b/contracts/satoshi-bridge/src/config.rs index 06d2a94..440e62c 100644 --- a/contracts/satoshi-bridge/src/config.rs +++ b/contracts/satoshi-bridge/src/config.rs @@ -1,5 +1,7 @@ -use crate::network::Address; -use crate::*; +use crate::{ + env, near, network, network::Address, require, u128_dec_format, AccountId, Contract, HashMap, + PublicKey, ScriptBuf, +}; pub const MAX_RATIO: u32 = 10000; @@ -170,18 +172,16 @@ impl Config { keys.sort_unstable(); for key in &keys { if *key > satoshi_amount { - return self - .confirmations_strategy - .get(&key.to_string()) - .cloned() - .unwrap() as u64; + return u64::from(*self.confirmations_strategy.get(&key.to_string()).unwrap()); } } let max_key = keys.last().unwrap(); - self.confirmations_strategy - .get(&max_key.to_string()) - .cloned() - .unwrap() as u64 + u64::from( + *self + .confirmations_strategy + .get(&max_key.to_string()) + .unwrap(), + ) } } @@ -203,7 +203,7 @@ impl Contract { { config.get_confirmations(satoshi_amount) } else { - config.get_confirmations(satoshi_amount) + config.confirmations_delta as u64 + config.get_confirmations(satoshi_amount) + u64::from(config.confirmations_delta) } } @@ -215,7 +215,8 @@ impl Contract { { config.get_confirmations(satoshi_amount) } else { - config.get_confirmations(satoshi_amount) + config.extra_msg_confirmations_delta as u64 + config.get_confirmations(satoshi_amount) + + u64::from(config.extra_msg_confirmations_delta) } } } diff --git a/contracts/satoshi-bridge/src/deposit_msg.rs b/contracts/satoshi-bridge/src/deposit_msg.rs index 083031d..629e6f2 100644 --- a/contracts/satoshi-bridge/src/deposit_msg.rs +++ b/contracts/satoshi-bridge/src/deposit_msg.rs @@ -1,4 +1,6 @@ -use crate::*; +use crate::{ + env, is_structure_equal, near, serde_json, AccountId, Contract, Event, Gas, Value, U128, +}; const MAX_POST_ACTIONS_NUM: usize = 2; const MAX_TOTAL_POST_ACTIONS_GAS: Gas = Gas::from_tgas(130); @@ -128,8 +130,7 @@ impl Contract { Event::InvalidPostAction { index: Some(index), err_msg: format!( - "The amount({}) of gas exceeds the limit of {}.", - gas, MAX_PER_POST_ACTIONS_GAS + "The amount({gas}) of gas exceeds the limit of {MAX_PER_POST_ACTIONS_GAS}." ), } .emit(); @@ -139,8 +140,7 @@ impl Contract { Event::InvalidPostAction { index: Some(index), err_msg: format!( - "The gas amount({}) does not meet the minimum requirement of {}.", - gas, MIN_PER_POST_ACTIONS_GAS + "The gas amount({gas}) does not meet the minimum requirement of {MIN_PER_POST_ACTIONS_GAS}." ), } .emit(); @@ -154,8 +154,7 @@ impl Contract { Event::InvalidPostAction { index: None, err_msg: format!( - "The total amount({}) of gas exceeds the limit of {}.", - total_gas, MAX_TOTAL_POST_ACTIONS_GAS + "The total amount({total_gas}) of gas exceeds the limit of {MAX_TOTAL_POST_ACTIONS_GAS}." ), } .emit(); @@ -165,8 +164,7 @@ impl Contract { Event::InvalidPostAction { index: None, err_msg: format!( - "The total amount({}) of nBTC used in post_actions exceeds the mint amount ({}).", - total_amount, actual_mintable_amount + "The total amount({total_amount}) of nBTC used in post_actions exceeds the mint amount ({actual_mintable_amount})." ), } .emit(); diff --git a/contracts/satoshi-bridge/src/event.rs b/contracts/satoshi-bridge/src/event.rs index 6dbd4c7..590b987 100644 --- a/contracts/satoshi-bridge/src/event.rs +++ b/contracts/satoshi-bridge/src/event.rs @@ -1,4 +1,4 @@ -use crate::*; +use crate::{json, log, AccountId, DepositMsg, SignatureResponse, U128}; use near_sdk::serde::Serialize; const EVENT_STANDARD: &str = "bridge"; diff --git a/contracts/satoshi-bridge/src/json_utils.rs b/contracts/satoshi-bridge/src/json_utils.rs index 083febb..b4f7dcf 100644 --- a/contracts/satoshi-bridge/src/json_utils.rs +++ b/contracts/satoshi-bridge/src/json_utils.rs @@ -1,4 +1,4 @@ -use crate::*; +use crate::Value; /// Recursively checks whether the structure of `input` matches the structure of `template`. /// Values can differ, but keys and value types must conform to the `template`. @@ -15,15 +15,9 @@ pub fn is_structure_equal(template: &Value, input: &Value) -> bool { match (template, input) { (Value::Object(t_obj), Value::Object(i_obj)) => { for (key, t_val) in t_obj { - match i_obj.get(key) { - Some(i_val) => { - if !is_structure_equal(t_val, i_val) { - return false; - } - } - None => { - // Input is allowed to omit fields defined in the template; these are treated as optional fields. - continue; + if let Some(i_val) = i_obj.get(key) { + if !is_structure_equal(t_val, i_val) { + return false; } } } diff --git a/contracts/satoshi-bridge/src/kdf.rs b/contracts/satoshi-bridge/src/kdf.rs index dba715a..c4fe126 100644 --- a/contracts/satoshi-bridge/src/kdf.rs +++ b/contracts/satoshi-bridge/src/kdf.rs @@ -1,4 +1,4 @@ -use crate::*; +use crate::{env, BtcPublicKey, Contract}; use crate::network::Address; use k256::elliptic_curve::sec1::ToEncodedPoint; diff --git a/contracts/satoshi-bridge/src/legacy.rs b/contracts/satoshi-bridge/src/legacy.rs index c766f19..f891f7e 100644 --- a/contracts/satoshi-bridge/src/legacy.rs +++ b/contracts/satoshi-bridge/src/legacy.rs @@ -1,4 +1,7 @@ -use crate::*; +use crate::{ + env, near, AccountId, BridgeFee, Config, ContractData, HashMap, HashSet, IterableMap, + IterableSet, LazyOption, LookupSet, PublicKey, StorageKey, VAccount, VBTCPendingInfo, VUTXO, +}; #[near(serializers = [borsh])] pub struct ContractDataV0 { diff --git a/contracts/satoshi-bridge/src/nbtc/burn.rs b/contracts/satoshi-bridge/src/nbtc/burn.rs index 3797ff7..e69ccbf 100644 --- a/contracts/satoshi-bridge/src/nbtc/burn.rs +++ b/contracts/satoshi-bridge/src/nbtc/burn.rs @@ -1,4 +1,7 @@ -use crate::*; +use crate::{ + env, ext_nbtc, generate_utxo_storage_key, is_promise_success, near, Contract, ContractExt, + Event, Gas, Promise, WrappedTransaction, U128, UTXO, +}; pub const GAS_FOR_BURN_CALL: Gas = Gas::from_tgas(5); pub const GAS_FOR_WITHDRAW_BURN_CALL_BACK: Gas = Gas::from_tgas(20); @@ -86,7 +89,10 @@ impl Contract { vout: index, balance: output.value.to_sat(), }; - let utxo_storage_key = generate_utxo_storage_key(tx_id.clone(), index as u32); + let utxo_storage_key = generate_utxo_storage_key( + tx_id.clone(), + u32::try_from(index).unwrap_or_else(|_| env::panic_str("Index overflow")), + ); self.internal_set_utxo(&utxo_storage_key, utxo); utxo_storage_keys.push(utxo_storage_key); } @@ -165,7 +171,10 @@ impl Contract { vout: index, balance: output.value.to_sat(), }; - let utxo_storage_key = generate_utxo_storage_key(tx_id.clone(), index as u32); + let utxo_storage_key = generate_utxo_storage_key( + tx_id.clone(), + u32::try_from(index).unwrap_or_else(|_| env::panic_str("Index overflow")), + ); self.internal_set_utxo(&utxo_storage_key, utxo); utxo_storage_keys.push(utxo_storage_key); } diff --git a/contracts/satoshi-bridge/src/nbtc/mint.rs b/contracts/satoshi-bridge/src/nbtc/mint.rs index b22fc69..dfb5fb2 100644 --- a/contracts/satoshi-bridge/src/nbtc/mint.rs +++ b/contracts/satoshi-bridge/src/nbtc/mint.rs @@ -1,4 +1,7 @@ -use crate::*; +use crate::{ + env, ext_nbtc, is_promise_success, near, Account, AccountId, Contract, ContractExt, Event, Gas, + PendingUTXOInfo, PostAction, Promise, U128, +}; pub const GAS_FOR_MINT_CALL: Gas = Gas::from_tgas(150); pub const GAS_FOR_MINT_CALL_BACK: Gas = Gas::from_tgas(10); @@ -49,11 +52,7 @@ impl Contract { pending_utxo_info: PendingUTXOInfo, ) -> bool { let is_success = is_promise_success(); - if !is_success { - self.data_mut() - .verified_deposit_utxo - .remove(&pending_utxo_info.utxo_storage_key); - } else { + if is_success { if !self.check_account_exists(&recipient_id) { self.internal_set_account(&recipient_id, Account::new(&recipient_id)); } @@ -66,6 +65,10 @@ impl Contract { } .emit(); self.internal_set_utxo(&pending_utxo_info.utxo_storage_key, pending_utxo_info.utxo); + } else { + self.data_mut() + .verified_deposit_utxo + .remove(&pending_utxo_info.utxo_storage_key); } Event::VerifyDepositDetails { recipient_id: &recipient_id, diff --git a/contracts/satoshi-bridge/src/nbtc/mod.rs b/contracts/satoshi-bridge/src/nbtc/mod.rs index fff62c0..903298a 100644 --- a/contracts/satoshi-bridge/src/nbtc/mod.rs +++ b/contracts/satoshi-bridge/src/nbtc/mod.rs @@ -1,4 +1,4 @@ -use crate::*; +use crate::{ext_contract, AccountId, PostAction, U128}; pub mod burn; pub mod mint; diff --git a/contracts/satoshi-bridge/src/network.rs b/contracts/satoshi-bridge/src/network.rs index 3634ce7..53e47d5 100644 --- a/contracts/satoshi-bridge/src/network.rs +++ b/contracts/satoshi-bridge/src/network.rs @@ -112,7 +112,7 @@ impl zcash_address::TryFromAddress for Address { } impl Address { - /// Parse an address string + chain into AddressInner + /// Parse an address string + chain into `AddressInner` pub fn parse(address: &str, chain: Chain) -> Result { if chain == Chain::ZcashMainnet || chain == Chain::ZcashTestnet { let addr = ZcashAddress::try_from_encoded(address) @@ -191,8 +191,8 @@ impl Address { })?, )) } - _ => continue, - }; + _ => {} + } } Err("No receiver found in address".to_string()) @@ -250,7 +250,7 @@ impl Address { /// Formats bech32 as upper case if alternate formatting is chosen (`{:#}`). impl fmt::Display for Address { fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { - use Address::*; + use Address::{P2pkh, P2sh, Segwit, Unified}; match self { P2pkh { hash, chain } => { let prefix = get_pubkey_address_prefix(chain); @@ -286,7 +286,7 @@ impl fmt::Display for Address { }; let str_address = ZcashAddress::from_unified(network, address.clone()).encode(); - write!(fmt, "{}", str_address) + write!(fmt, "{str_address}") } } } diff --git a/contracts/satoshi-bridge/src/psbt.rs b/contracts/satoshi-bridge/src/psbt.rs index 39ccf6e..8828eb7 100644 --- a/contracts/satoshi-bridge/src/psbt.rs +++ b/contracts/satoshi-bridge/src/psbt.rs @@ -1,6 +1,8 @@ -use crate::network::Address; -use crate::psbt_wrapper::PsbtWrapper; -use crate::*; +use crate::{ + env, network::Address, psbt_wrapper::PsbtWrapper, require, Amount, Contract, Event, ScriptBuf, + TxOut, U128, VUTXO, +}; + impl Contract { #[allow(clippy::too_many_arguments)] pub fn check_withdraw_psbt_valid( @@ -14,7 +16,10 @@ impl Contract { max_gas_fee: Option, ) -> (u128, u128) { let config = self.internal_config(); - let utxo_num = self.data().utxos.len() + vutxos.len() as u32; + let vutxos_len = u32::try_from(vutxos.len()).unwrap_or_else(|_| { + env::panic_str("vutxos len overflow"); + }); + let utxo_num = self.data().utxos.len() + vutxos_len; let (input_num, change_num, actual_received_amount, gas_fee) = self.check_withdraw_psbt( withdraw_psbt, target_address_script_pubkey, @@ -35,11 +40,11 @@ impl Contract { } require!( - change_num <= config.max_change_number as usize, + change_num <= usize::from(config.max_change_number), format!("change_num must not exceed {}", config.max_change_number) ); require!( - input_num <= config.max_withdrawal_input_number as usize, + input_num <= usize::from(config.max_withdrawal_input_number), format!( "input must not exceed {}", config.max_withdrawal_input_number @@ -68,7 +73,10 @@ impl Contract { vutxos: &[VUTXO], ) -> (u128, u128) { let config = self.internal_config(); - let utxo_num = self.data().utxos.len() + vutxos.len() as u32; + let vutxos_len = u32::try_from(vutxos.len()).unwrap_or_else(|_| { + env::panic_str("vutxos len overflow"); + }); + let utxo_num = self.data().utxos.len() + vutxos_len; let input_num = psbt.get_input_num(); let output_num = psbt.get_output_num(); @@ -76,7 +84,7 @@ impl Contract { if utxo_num < config.active_management_lower_limit { require!(input_num < output_num, "require input_num < output_num"); require!( - output_num <= config.max_active_utxo_management_output_number as usize, + output_num <= usize::from(config.max_active_utxo_management_output_number), format!( "require output_num <= {}", config.max_active_utxo_management_output_number @@ -85,7 +93,7 @@ impl Contract { } else if utxo_num > config.active_management_upper_limit { require!(input_num > output_num, "require input_num > output_num"); require!( - input_num <= config.max_active_utxo_management_input_number as usize, + input_num <= usize::from(config.max_active_utxo_management_input_number), format!( "require input_num <= {}", config.max_active_utxo_management_input_number @@ -112,7 +120,7 @@ impl Contract { let withdraw_change_address_script_pubkey = config.get_change_script_pubkey(); let input_amount = vutxos .iter() - .map(|vutxo| vutxo.get_amount() as u128) + .map(|vutxo| u128::from(vutxo.get_amount())) .sum::(); let output_amount = psbt .get_output() @@ -121,13 +129,13 @@ impl Contract { if force_healthy_output { require!( v.value.to_sat() > config.unhealthy_utxo_amount - && v.value.to_sat() as u128 <= config.max_change_amount, + && u128::from(v.value.to_sat()) <= config.max_change_amount, "The output amount is not in the valid range" ); } else { require!( - v.value.to_sat() as u128 >= config.min_change_amount - && v.value.to_sat() as u128 <= config.max_change_amount, + u128::from(v.value.to_sat()) >= config.min_change_amount + && u128::from(v.value.to_sat()) <= config.max_change_amount, "The output amount is not in the valid range" ); } @@ -135,7 +143,7 @@ impl Contract { v.script_pubkey == withdraw_change_address_script_pubkey, "Invalid output script_pubkey" ); - v.value.to_sat() as u128 + u128::from(v.value.to_sat()) }) .sum::(); let gas_fee = input_amount - output_amount; @@ -161,14 +169,14 @@ impl Contract { withdraw_fee: u128, ) -> (usize, usize, u128, u128) { let config = self.internal_config(); - let input_amounts = vutxos.iter().map(|vutxo| vutxo.get_amount() as u128); + let input_amounts = vutxos.iter().map(|vutxo| u128::from(vutxo.get_amount())); let min_input_amount = input_amounts.clone().min().unwrap(); let total_input_amount = input_amounts.sum::(); let mut total_output_amount = 0; let mut actual_received_amounts = vec![]; let mut change_amounts = vec![]; psbt.get_output().iter().for_each(|output| { - let output_value = output.value.to_sat() as u128; + let output_value = u128::from(output.value.to_sat()); total_output_amount += output_value; if &output.script_pubkey == target_address_script_pubkey { actual_received_amounts.push(output_value); @@ -187,7 +195,7 @@ impl Contract { Address::from_script(&output.script_pubkey, config.chain.clone()) .expect("Unsupported btc address type"); env::panic_str( - format!("Invalid transaction output address: {}", output_address).as_str(), + format!("Invalid transaction output address: {output_address}").as_str(), ); } }); diff --git a/contracts/satoshi-bridge/src/rbf/active_utxo_management.rs b/contracts/satoshi-bridge/src/rbf/active_utxo_management.rs index 470c17a..e23db1b 100644 --- a/contracts/satoshi-bridge/src/rbf/active_utxo_management.rs +++ b/contracts/satoshi-bridge/src/rbf/active_utxo_management.rs @@ -1,5 +1,7 @@ -use crate::psbt_wrapper::PsbtWrapper; -use crate::*; +use crate::{ + init_rbf_btc_pending_info, psbt_wrapper::PsbtWrapper, require, AccountId, BTCPendingInfo, + Contract, PendingInfoStage, PendingInfoState, RbfState, +}; impl Contract { pub fn check_active_utxo_management_rbf_psbt_valid( diff --git a/contracts/satoshi-bridge/src/rbf/cancel_active_utxo_management.rs b/contracts/satoshi-bridge/src/rbf/cancel_active_utxo_management.rs index ddc1232..6aae207 100644 --- a/contracts/satoshi-bridge/src/rbf/cancel_active_utxo_management.rs +++ b/contracts/satoshi-bridge/src/rbf/cancel_active_utxo_management.rs @@ -1,5 +1,7 @@ -use crate::psbt_wrapper::PsbtWrapper; -use crate::*; +use crate::{ + env, init_rbf_btc_pending_info, nano_to_sec, psbt_wrapper::PsbtWrapper, require, AccountId, + BTCPendingInfo, Contract, PendingInfoStage, PendingInfoState, RbfState, +}; impl Contract { pub fn check_cancel_active_utxo_management_rbf_psbt_valid( diff --git a/contracts/satoshi-bridge/src/rbf/cancel_withdraw.rs b/contracts/satoshi-bridge/src/rbf/cancel_withdraw.rs index 370e63b..2b108e3 100644 --- a/contracts/satoshi-bridge/src/rbf/cancel_withdraw.rs +++ b/contracts/satoshi-bridge/src/rbf/cancel_withdraw.rs @@ -1,5 +1,8 @@ -use crate::psbt_wrapper::PsbtWrapper; -use crate::*; +use crate::{ + env, init_rbf_btc_pending_info, nano_to_sec, psbt_wrapper::PsbtWrapper, require, + AccessControllable, AccountId, BTCPendingInfo, Contract, PendingInfoStage, PendingInfoState, + RbfState, Role, +}; impl Contract { pub fn check_cancel_withdraw_rbf_psbt_valid( diff --git a/contracts/satoshi-bridge/src/rbf/mod.rs b/contracts/satoshi-bridge/src/rbf/mod.rs index 4aa0441..05db27a 100644 --- a/contracts/satoshi-bridge/src/rbf/mod.rs +++ b/contracts/satoshi-bridge/src/rbf/mod.rs @@ -1,5 +1,7 @@ -use crate::psbt_wrapper::PsbtWrapper; -use crate::*; +use crate::{ + env, nano_to_sec, psbt_wrapper::PsbtWrapper, require, BTCPendingInfo, Contract, + PendingInfoState, +}; pub mod active_utxo_management; pub mod cancel_active_utxo_management; @@ -47,13 +49,13 @@ pub fn init_rbf_btc_pending_info( ) -> BTCPendingInfo { BTCPendingInfo { account_id: original_tx_btc_pending_info.account_id.clone(), - btc_pending_id: Default::default(), + btc_pending_id: String::new(), transfer_amount: original_tx_btc_pending_info.transfer_amount, actual_received_amount: original_tx_btc_pending_info.actual_received_amount, withdraw_fee: original_tx_btc_pending_info.withdraw_fee, burn_amount: original_tx_btc_pending_info.burn_amount, gas_fee: original_tx_btc_pending_info.gas_fee, - psbt_hex: Default::default(), + psbt_hex: String::new(), vutxos: original_tx_btc_pending_info.vutxos.clone(), signatures: vec![None; original_tx_btc_pending_info.signatures.len()], tx_bytes_with_sign: None, diff --git a/contracts/satoshi-bridge/src/rbf/withdraw.rs b/contracts/satoshi-bridge/src/rbf/withdraw.rs index 90a1207..af9926d 100644 --- a/contracts/satoshi-bridge/src/rbf/withdraw.rs +++ b/contracts/satoshi-bridge/src/rbf/withdraw.rs @@ -1,5 +1,7 @@ -use crate::psbt_wrapper::PsbtWrapper; -use crate::*; +use crate::{ + init_rbf_btc_pending_info, psbt_wrapper::PsbtWrapper, require, AccountId, BTCPendingInfo, + Contract, PendingInfoStage, PendingInfoState, RbfState, +}; impl Contract { pub fn check_withdraw_rbf_psbt_valid( diff --git a/contracts/satoshi-bridge/src/token_transfer.rs b/contracts/satoshi-bridge/src/token_transfer.rs index 5757228..c0edeff 100644 --- a/contracts/satoshi-bridge/src/token_transfer.rs +++ b/contracts/satoshi-bridge/src/token_transfer.rs @@ -1,4 +1,7 @@ -use crate::*; +use crate::{ + env, is_promise_success, near, AccountId, Contract, ContractExt, Event, Gas, NearToken, + Promise, U128, +}; use near_contract_standards::fungible_token::core::ext_ft_core; pub const GAS_FOR_TOKEN_TRANSFER: Gas = Gas::from_tgas(20); diff --git a/contracts/satoshi-bridge/src/unit/post_action.rs b/contracts/satoshi-bridge/src/unit/post_action.rs index f48fda2..fc06a8e 100644 --- a/contracts/satoshi-bridge/src/unit/post_action.rs +++ b/contracts/satoshi-bridge/src/unit/post_action.rs @@ -54,10 +54,10 @@ mod extend_post_action_msg_templates { .build()); unit_env .contract - .extend_post_action_msg_templates(burrowland_id(), HashSet::from(["".to_string()])); + .extend_post_action_msg_templates(burrowland_id(), HashSet::from([String::new()])); unit_env .contract - .extend_post_action_msg_templates(burrowland_id(), HashSet::from(["".to_string()])); + .extend_post_action_msg_templates(burrowland_id(), HashSet::from([String::new()])); } #[test] @@ -70,7 +70,7 @@ mod extend_post_action_msg_templates { .build()); unit_env.contract.extend_post_action_msg_templates( burrowland_id(), - HashSet::from(["".to_string(), "".to_string(), "aa".to_string()]), + HashSet::from([String::new(), "aa".to_string()]), ); let post_action_msg_templates = unit_env .contract @@ -151,7 +151,7 @@ mod remove_post_action_msg_templates { .build()); unit_env .contract - .extend_post_action_msg_templates(burrowland_id(), HashSet::from(["".to_string()])); + .extend_post_action_msg_templates(burrowland_id(), HashSet::from([String::new()])); unit_env .contract .remove_post_action_msg_templates(burrowland_id(), Some(HashSet::new())); @@ -168,7 +168,7 @@ mod remove_post_action_msg_templates { .build()); unit_env .contract - .extend_post_action_msg_templates(burrowland_id(), HashSet::from(["".to_string()])); + .extend_post_action_msg_templates(burrowland_id(), HashSet::from([String::new()])); unit_env.contract.remove_post_action_msg_templates( burrowland_id(), Some(HashSet::from(["aa".to_string()])), @@ -186,7 +186,7 @@ mod remove_post_action_msg_templates { unit_env.contract.extend_post_action_msg_templates( burrowland_id(), HashSet::from([ - "".to_string(), + String::new(), "aa".to_string(), "bb".to_string(), "cc".to_string(), @@ -267,21 +267,21 @@ fn test_check_deposit_msg() { receiver_id: burrowland_id(), amount: U128(10), memo: None, - msg: "".to_string(), + msg: String::new(), gas: None }, PostAction { receiver_id: burrowland_id(), amount: U128(10), memo: None, - msg: "".to_string(), + msg: String::new(), gas: None }, PostAction { receiver_id: burrowland_id(), amount: U128(10), memo: None, - msg: "".to_string(), + msg: String::new(), gas: None }, ]), @@ -301,14 +301,14 @@ fn test_check_deposit_msg() { receiver_id: burrowland_id(), amount: U128(10), memo: None, - msg: "".to_string(), + msg: String::new(), gas: None }, PostAction { receiver_id: burrowland_id(), amount: U128(10), memo: None, - msg: "".to_string(), + msg: String::new(), gas: None }, ]), @@ -336,7 +336,7 @@ fn test_check_deposit_msg() { receiver_id: burrowland_id(), amount: U128(10), memo: None, - msg: "".to_string(), + msg: String::new(), gas: Some(Gas::from_tgas(200)) },]), extra_msg: None, @@ -355,14 +355,14 @@ fn test_check_deposit_msg() { receiver_id: burrowland_id(), amount: U128(10), memo: None, - msg: "".to_string(), + msg: String::new(), gas: Some(Gas::from_tgas(50)) }, PostAction { receiver_id: burrowland_id(), amount: U128(10), memo: None, - msg: "".to_string(), + msg: String::new(), gas: Some(Gas::from_tgas(10)) }, ]), @@ -382,14 +382,14 @@ fn test_check_deposit_msg() { receiver_id: burrowland_id(), amount: U128(10), memo: None, - msg: "".to_string(), + msg: String::new(), gas: Some(Gas::from_tgas(50)) }, PostAction { receiver_id: burrowland_id(), amount: U128(10), memo: None, - msg: "".to_string(), + msg: String::new(), gas: Some(Gas::from_tgas(100)) }, ]), @@ -409,14 +409,14 @@ fn test_check_deposit_msg() { receiver_id: burrowland_id(), amount: U128(10), memo: None, - msg: "".to_string(), + msg: String::new(), gas: Some(Gas::from_tgas(50)) }, PostAction { receiver_id: burrowland_id(), amount: U128(100), memo: None, - msg: "".to_string(), + msg: String::new(), gas: Some(Gas::from_tgas(50)) }, ]), @@ -433,7 +433,7 @@ fn test_check_deposit_msg() { .build()); unit_env .contract - .extend_post_action_msg_templates(burrowland_id(), HashSet::from(["".to_string()])); + .extend_post_action_msg_templates(burrowland_id(), HashSet::from([String::new()])); assert!(unit_env .contract .check_deposit_msg( @@ -461,7 +461,7 @@ fn test_check_deposit_msg() { receiver_id: burrowland_id(), amount: U128(10), memo: None, - msg: "".to_string(), + msg: String::new(), gas: Some(Gas::from_tgas(50)) },]), extra_msg: None, diff --git a/contracts/satoshi-bridge/src/upgrade.rs b/contracts/satoshi-bridge/src/upgrade.rs index 755649c..f5bef78 100644 --- a/contracts/satoshi-bridge/src/upgrade.rs +++ b/contracts/satoshi-bridge/src/upgrade.rs @@ -1,4 +1,4 @@ -use crate::*; +use crate::{env, near, Contract, ContractExt, VersionedContractData}; #[near] impl Contract { diff --git a/contracts/satoshi-bridge/src/utils.rs b/contracts/satoshi-bridge/src/utils.rs index 317498b..36fc615 100644 --- a/contracts/satoshi-bridge/src/utils.rs +++ b/contracts/satoshi-bridge/src/utils.rs @@ -1,6 +1,6 @@ use bitcoin::hashes::Hash; -use crate::*; +use crate::{env, Timestamp}; pub const UTXO_STORAGE_KEY_TAG: &str = "@"; @@ -18,7 +18,8 @@ pub fn to_nano(sec: u32) -> Timestamp { } pub fn nano_to_sec(nano: u64) -> u32 { - (nano / 10u64.pow(9)) as u32 + u32::try_from(nano / 10u64.pow(9)) + .unwrap_or_else(|_| env::panic_str("Timestamp overflow when converting nano to sec")) } pub mod u64_dec_format { diff --git a/contracts/satoshi-bridge/src/utxo.rs b/contracts/satoshi-bridge/src/utxo.rs index ed245dd..447b003 100644 --- a/contracts/satoshi-bridge/src/utxo.rs +++ b/contracts/satoshi-bridge/src/utxo.rs @@ -1,5 +1,6 @@ -use crate::psbt_wrapper::PsbtWrapper; -use crate::*; +use crate::{ + generate_utxo_storage_key, near, psbt_wrapper::PsbtWrapper, u64_dec_format, Contract, OutPoint, +}; #[near(serializers = [borsh, json])] #[derive(Clone)] @@ -66,7 +67,7 @@ impl Contract { self.data_mut() .utxos .remove(&utxo_storage_key) - .unwrap_or_else(|| panic!("UTXO {} not exist", utxo_storage_key)) + .unwrap_or_else(|| panic!("UTXO {utxo_storage_key} not exist")) }) .collect::>(); (utxo_storage_keys, vutxos) diff --git a/contracts/satoshi-bridge/tests/setup/context.rs b/contracts/satoshi-bridge/tests/setup/context.rs index 6ca698f..36d47bc 100644 --- a/contracts/satoshi-bridge/tests/setup/context.rs +++ b/contracts/satoshi-bridge/tests/setup/context.rs @@ -142,9 +142,10 @@ impl Context { .args_json(json!({ "controller": root.id(), "bridge_id": bridge_contract.id(), - "name": "Near WTC".to_string(), + "name": "Near BTC".to_string(), "symbol": "NBTC".to_string(), "icon": Some(DATA_IMAGE_SVG_NEAR_ICON.to_string()), + "decimals": 8, })) .transact() .await From 843af344fe10ae3d8c3d479fa4ee0e5d83e03664 Mon Sep 17 00:00:00 2001 From: Karim Date: Wed, 19 Nov 2025 14:08:43 +0000 Subject: [PATCH 11/19] Improve `utxo_id` injection (#18) * improve utxo_id injection * Remove unused code * check field value * Revert "check field value" This reverts commit 3312dcd1231b0cb52a64f36047711917cfff5538. * Bump version * Remove extra prints --------- Co-authored-by: Olga Kunyavskaya --- Cargo.lock | 2 +- contracts/satoshi-bridge/Cargo.toml | 2 +- .../src/btc_light_client/deposit.rs | 44 ++++++++++++++++++- 3 files changed, 44 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e1a72fa..65c0230 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3715,7 +3715,7 @@ dependencies = [ [[package]] name = "satoshi-bridge" -version = "0.7.0" +version = "0.7.1" dependencies = [ "bitcoin", "core2", diff --git a/contracts/satoshi-bridge/Cargo.toml b/contracts/satoshi-bridge/Cargo.toml index 93a11c8..8b9d902 100644 --- a/contracts/satoshi-bridge/Cargo.toml +++ b/contracts/satoshi-bridge/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "satoshi-bridge" -version = "0.7.0" +version = "0.7.1" edition.workspace = true publish.workspace = true repository.workspace = true diff --git a/contracts/satoshi-bridge/src/btc_light_client/deposit.rs b/contracts/satoshi-bridge/src/btc_light_client/deposit.rs index d992b6c..11f0edf 100644 --- a/contracts/satoshi-bridge/src/btc_light_client/deposit.rs +++ b/contracts/satoshi-bridge/src/btc_light_client/deposit.rs @@ -1,4 +1,4 @@ -use near_sdk::PromiseResult; +use near_sdk::{serde_json::Value, PromiseResult}; use crate::{ burn::GAS_FOR_BURN_CALL, @@ -196,7 +196,8 @@ impl Contract { ); let msg = (!msg.is_empty()) - .then(|| msg.replace("{{UTXO_TX_ID}}", &pending_utxo_info.utxo_storage_key)); + .then(|| inject_utxo_id_in_msg(msg, &pending_utxo_info.utxo_storage_key)); + ext_nbtc::ext(self.internal_config().nbtc_account_id.clone()) .with_static_gas(GAS_FOR_MINT_CALL) .with_attached_deposit(NearToken::from_yoctonear(1)) @@ -272,3 +273,42 @@ fn is_refund_required() -> bool { PromiseResult::Failed => false, } } + +fn inject_utxo_id_in_msg(msg: String, utxo_id: &str) -> String { + if let Ok(mut json) = serde_json::from_str::(&msg) { + if let Some(field) = json.get_mut("utxo_id") { + *field = Value::String(utxo_id.to_string()); + return serde_json::to_string(&json).unwrap(); + } + } + msg +} + +#[cfg(test)] +mod tests { + use crate::btc_light_client::deposit::inject_utxo_id_in_msg; + use near_sdk::{json_types::U128, near, serde_json}; + + #[near(serializers=[json])] + #[derive(Debug, Clone)] + pub struct UtxoFinTransferMsg { + pub utxo_id: String, + pub x: String, + pub y: U128, + pub z: String, + } + + #[test] + fn test_utxo_id_injection() { + let duplicated_msg = + r#"{"utxo_id":"first","utxo_id":"second","x":"some_recipient","y":"1000","z":"OS"}"# + .to_string(); + + let injected_msg = inject_utxo_id_in_msg(duplicated_msg, "correct_utxo_id"); + let parsed_msg: UtxoFinTransferMsg = serde_json::from_str(&injected_msg).unwrap(); + assert_eq!(parsed_msg.utxo_id, "correct_utxo_id"); + + let expected = r#"{"utxo_id":"correct_utxo_id","x":"some_recipient","y":"1000","z":"OS"}"#; + assert_eq!(injected_msg, expected); + } +} From 624c46c59a3fcd4eb19b1d122b64d58522b92641 Mon Sep 17 00:00:00 2001 From: Ivan Frolov <59515280+frolvanya@users.noreply.github.com> Date: Wed, 19 Nov 2025 20:08:28 -0500 Subject: [PATCH 12/19] fix: `utxo_id` injection in nested json (#19) * fix: `utxo_id` injection in nested json * chore: fmt * chore: simplify test * fix: escaped json * fix: clippy * fix: use enum * feat: removed escaped json * feat: added already set utxo id test * chore: bumped version --- Cargo.lock | 2 +- contracts/satoshi-bridge/Cargo.toml | 2 +- .../src/btc_light_client/deposit.rs | 95 ++++++++++++++++--- 3 files changed, 82 insertions(+), 17 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 65c0230..ad45a01 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3715,7 +3715,7 @@ dependencies = [ [[package]] name = "satoshi-bridge" -version = "0.7.1" +version = "0.7.2" dependencies = [ "bitcoin", "core2", diff --git a/contracts/satoshi-bridge/Cargo.toml b/contracts/satoshi-bridge/Cargo.toml index 8b9d902..7e30891 100644 --- a/contracts/satoshi-bridge/Cargo.toml +++ b/contracts/satoshi-bridge/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "satoshi-bridge" -version = "0.7.1" +version = "0.7.2" edition.workspace = true publish.workspace = true repository.workspace = true diff --git a/contracts/satoshi-bridge/src/btc_light_client/deposit.rs b/contracts/satoshi-bridge/src/btc_light_client/deposit.rs index 11f0edf..7b69aa9 100644 --- a/contracts/satoshi-bridge/src/btc_light_client/deposit.rs +++ b/contracts/satoshi-bridge/src/btc_light_client/deposit.rs @@ -275,40 +275,105 @@ fn is_refund_required() -> bool { } fn inject_utxo_id_in_msg(msg: String, utxo_id: &str) -> String { - if let Ok(mut json) = serde_json::from_str::(&msg) { - if let Some(field) = json.get_mut("utxo_id") { - *field = Value::String(utxo_id.to_string()); - return serde_json::to_string(&json).unwrap(); + fn inject(value: &mut Value, utxo_id: &str) { + match value { + Value::Object(map) => { + for (k, v) in map.iter_mut() { + if k == "utxo_id" { + *v = Value::String(utxo_id.to_string()); + } else { + inject(v, utxo_id); + } + } + } + Value::Array(arr) => { + for v in arr.iter_mut() { + inject(v, utxo_id); + } + } + _ => {} } } - msg + + if let Ok(mut json) = serde_json::from_str::(&msg) { + inject(&mut json, utxo_id); + serde_json::to_string(&json).unwrap() + } else { + msg + } } #[cfg(test)] mod tests { use crate::btc_light_client::deposit::inject_utxo_id_in_msg; - use near_sdk::{json_types::U128, near, serde_json}; + use near_sdk::{near, serde_json}; #[near(serializers=[json])] - #[derive(Debug, Clone)] + #[derive(Debug, Clone, PartialEq, Eq)] pub struct UtxoFinTransferMsg { pub utxo_id: String, - pub x: String, - pub y: U128, - pub z: String, + pub recipient: String, + pub relayer_fee: String, + pub msg: String, + } + + #[near(serializers=[json])] + #[derive(Debug, Clone, PartialEq, Eq)] + pub enum BridgeOnTransferMsg { + UtxoFinTransfer(UtxoFinTransferMsg), } #[test] - fn test_utxo_id_injection() { + fn test_duplicated_utxo_id_injection() { let duplicated_msg = - r#"{"utxo_id":"first","utxo_id":"second","x":"some_recipient","y":"1000","z":"OS"}"# + r#"{"utxo_id":"first","utxo_id":"second","recipient":"some_recipient","relayer_fee":"1000","msg":"OS"}"# .to_string(); let injected_msg = inject_utxo_id_in_msg(duplicated_msg, "correct_utxo_id"); let parsed_msg: UtxoFinTransferMsg = serde_json::from_str(&injected_msg).unwrap(); - assert_eq!(parsed_msg.utxo_id, "correct_utxo_id"); + let expected = UtxoFinTransferMsg { + utxo_id: "correct_utxo_id".to_string(), + recipient: "some_recipient".to_string(), + relayer_fee: "1000".to_string(), + msg: "OS".to_string(), + }; + + assert_eq!(parsed_msg, expected); + } + + #[test] + fn test_utxo_id_injection() { + let nested_msg = + r#"{"UtxoFinTransfer":{"msg":"OS","recipient":"some_recipient","relayer_fee":"1000","utxo_id":"{{UTXO_TX_ID}}"}}"# + .to_string(); + + let injected_msg = inject_utxo_id_in_msg(nested_msg, "correct_utxo_id"); + let parsed_msg: BridgeOnTransferMsg = serde_json::from_str(&injected_msg).unwrap(); + let expected = BridgeOnTransferMsg::UtxoFinTransfer(UtxoFinTransferMsg { + utxo_id: "correct_utxo_id".to_string(), + recipient: "some_recipient".to_string(), + relayer_fee: "1000".to_string(), + msg: "OS".to_string(), + }); + + assert_eq!(parsed_msg, expected); + } + + #[test] + fn test_already_set_utxo_id_injection() { + let nested_msg = + r#"{"UtxoFinTransfer":{"msg":"OS","recipient":"{{UTXO_TX_ID}}","relayer_fee":"1000","utxo_id":"invalid_utxo_id"}}"# + .to_string(); + + let injected_msg = inject_utxo_id_in_msg(nested_msg, "correct_utxo_id"); + let parsed_msg: BridgeOnTransferMsg = serde_json::from_str(&injected_msg).unwrap(); + let expected = BridgeOnTransferMsg::UtxoFinTransfer(UtxoFinTransferMsg { + utxo_id: "correct_utxo_id".to_string(), + recipient: "{{UTXO_TX_ID}}".to_string(), + relayer_fee: "1000".to_string(), + msg: "OS".to_string(), + }); - let expected = r#"{"utxo_id":"correct_utxo_id","x":"some_recipient","y":"1000","z":"OS"}"#; - assert_eq!(injected_msg, expected); + assert_eq!(parsed_msg, expected); } } From 22510c0d6e22f900d974860e23ab1e260a521d46 Mon Sep 17 00:00:00 2001 From: Olga Kunyavskaya Date: Fri, 21 Nov 2025 16:47:20 +0000 Subject: [PATCH 13/19] Create and check proposals for update nBTC (#10) * create proposal script * fix cmp * check proposal script * add tmp folder * improve view command * update migration proposal * Revert "update migration proposal" This reverts commit fbd5c0f78ceae2c09f2bcc1dbf47874b58445851. * NEAR_NETWORK VAR * update hash * check_proposal script * add proposal id in check proposal --------- Co-authored-by: karim-en --- migrate/check_proposal.sh | 31 +++++++++++++++++++++++++ migrate/create_proposal.sh | 47 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 78 insertions(+) create mode 100755 migrate/check_proposal.sh create mode 100755 migrate/create_proposal.sh diff --git a/migrate/check_proposal.sh b/migrate/check_proposal.sh new file mode 100755 index 0000000..5fff4f5 --- /dev/null +++ b/migrate/check_proposal.sh @@ -0,0 +1,31 @@ +PROPOSAL_ID=187 +EXPECTED_NBTC_BS58_HASH=GtmZ6FMxRCN7KcANFDaNmR5JK2rusKAeyGaDSFTNoWvx +DAO_ACCOUNT_ID=rainbowbridge.sputnik-dao.near +NEAR_NETWORK=mainnet + +mkdir -p tmp + +PROP_JSON=./tmp/actual_proposal.json +WASM_PATH=./tmp/decoded_args.wasm + +near contract call-function as-read-only "$DAO_ACCOUNT_ID" get_proposal json-args "{\"id\": $PROPOSAL_ID}" network-config $NEAR_NETWORK now > $PROP_JSON + +if ! jq -e '.kind.FunctionCall.actions[0].args' "$PROP_JSON" >/dev/null 2>&1; then + echo "❌ kind.FunctionCall.actions[0].args not found" + echo "File: $PROP_JSON" + exit 1 +fi + +WASM_B64="$(jq -r '.kind.FunctionCall.actions[0].args' "$PROP_JSON")" +printf '%s' "$WASM_B64" | base64 -d > "$WASM_PATH" + +DECODED_NBTC_BS58_HASH=$(sha256sum $WASM_PATH | awk '{print $1}' | xxd -r -p | base58) +if [[ "$DECODED_NBTC_BS58_HASH" != "$EXPECTED_NBTC_BS58_HASH" ]]; then + echo "❌ Incorrect nBTC wasm hash" + echo "Expected: $EXPECTED_NBTC_BS58_HASH" + echo "Actual: $DECODED_NBTC_BS58_HASH" + exit 1 +else + echo "✅ nBTC wasm hash is correct" + exit 0 +fi diff --git a/migrate/create_proposal.sh b/migrate/create_proposal.sh new file mode 100755 index 0000000..df89fdc --- /dev/null +++ b/migrate/create_proposal.sh @@ -0,0 +1,47 @@ +EXPECTED_NBTC_BS58_HASH=3dXNLxNT1cSso4SeDzffnpq1SynCBb95WF9gBLVYvYSE +NBTC_ACCOUNT_ID=nbtc.bridge.near +DAO_ACCOUNT_ID=rainbowbridge.sputnik-dao.near +SIGNER_ACCOUNT_ID=bridge-ops.near +NEAR_NETWORK=mainnet + +mkdir -p tmp + +cd ../contracts/nbtc +cargo near build reproducible-wasm +cd ../../migrate + +NBTC_WASM_PATH=../target/near/nbtc/nbtc.wasm +ACTUAL_NBTC_BS58_HASH=$(sha256sum $NBTC_WASM_PATH | awk '{print $1}' | xxd -r -p | base58) + +if [[ "$ACTUAL_NBTC_BS58_HASH" != "$EXPECTED_NBTC_BS58_HASH" ]]; then + echo "❌ Incorrect nBTC wasm hash" + echo "Expected: $EXPECTED_NBTC_BS58_HASH" + echo "Actual: $ACTUAL_NBTC_BS58_HASH" + exit 1 +fi + +WASM_B64=$(base64 -w 0 $NBTC_WASM_PATH 2>/dev/null || base64 $NBTC_WASM_PATH | tr -d '\n') + +{ + echo '{ + "proposal": { + "description": "Upgrade + migrate nBTC", + "kind": { + "FunctionCall": { + "receiver_id": "'$NBTC_ACCOUNT_ID'", + "actions": [ + { + "method_name": "upgrade_and_migrate", + "args": "'$WASM_B64'", + "deposit": "0", + "gas": "180000000000000" + } + ] + } + } + } + }' +} > ./tmp/proposal.json + + +near contract call-function as-transaction $DAO_ACCOUNT_ID add_proposal file-args ./tmp/proposal.json prepaid-gas '100.0 Tgas' attached-deposit '1 NEAR' sign-as $SIGNER_ACCOUNT_ID network-config $NEAR_NETWORK sign-with-keychain send From e06f92fdd1e3a3231fb8669ab699afb1ce5b4b32 Mon Sep 17 00:00:00 2001 From: Karim Date: Wed, 26 Nov 2025 15:07:27 +0000 Subject: [PATCH 14/19] Activate NU6.1 on mainnet (#21) * Activate NU6.1 on mainnet * Bump version --- Cargo.lock | 2 +- contracts/satoshi-bridge/Cargo.toml | 2 +- contracts/satoshi-bridge/src/network.rs | 10 ++++++---- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ad45a01..d4805a6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3715,7 +3715,7 @@ dependencies = [ [[package]] name = "satoshi-bridge" -version = "0.7.2" +version = "0.7.3" dependencies = [ "bitcoin", "core2", diff --git a/contracts/satoshi-bridge/Cargo.toml b/contracts/satoshi-bridge/Cargo.toml index 7e30891..6e85315 100644 --- a/contracts/satoshi-bridge/Cargo.toml +++ b/contracts/satoshi-bridge/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "satoshi-bridge" -version = "0.7.2" +version = "0.7.3" edition.workspace = true publish.workspace = true repository.workspace = true diff --git a/contracts/satoshi-bridge/src/network.rs b/contracts/satoshi-bridge/src/network.rs index 53e47d5..7213f6b 100644 --- a/contracts/satoshi-bridge/src/network.rs +++ b/contracts/satoshi-bridge/src/network.rs @@ -22,16 +22,18 @@ pub enum Chain { } #[cfg(feature = "zcash")] pub struct BranchIdUpdateBlockHeight { - pub bu6_1_update: u32, + pub nu6_1_update: u32, } #[cfg(feature = "zcash")] impl BranchIdUpdateBlockHeight { pub fn new(chain: &Chain) -> Self { match chain { - Chain::ZcashMainnet => Self { bu6_1_update: 0 }, + Chain::ZcashMainnet => Self { + nu6_1_update: 3146400, + }, Chain::ZcashTestnet => Self { - bu6_1_update: 3536500, + nu6_1_update: 3536500, }, _ => unreachable!(), } @@ -41,7 +43,7 @@ impl Chain { #[cfg(feature = "zcash")] pub fn get_branch_id(&self, block_height: u32) -> BranchId { let block_height_update = BranchIdUpdateBlockHeight::new(self); - if block_height_update.bu6_1_update != 0 && block_height >= block_height_update.bu6_1_update + if block_height_update.nu6_1_update != 0 && block_height >= block_height_update.nu6_1_update { return BranchId::Nu6_1; } From 533e4617c7bcd8fadc77d842c1f8a9002fb71425 Mon Sep 17 00:00:00 2001 From: Karim Date: Mon, 12 Jan 2026 18:17:38 +0000 Subject: [PATCH 15/19] feat: shielded TX support (#6) * provide metadata for nBTC * fix satoshi bridge cargo toml * address -> script_pubkey * btc-p2wpkh -> utxo_chain * remove btc_network * draft zcash tx impl * fix consenses decode * zcash_primitives * fix cargo toml * test for script * fix get output * change signhash * Refactor transaction type * Bump zcash_primitives version * Convert btc tx into zcash tx * Set `final_script_sig` * Fix sighash * fix * fix sequence * zcash build * add zcash features * AddressInner -> Address * new line * test parse address * test from pubkey * improve tests * fix warnings * check zcash fee * safe expiry height * fix expiry_height * add rbf * fix sequence * extract expire_height for cancel_withdraw * fix cancel active utxo managment * fix active utxo managment * utxo_mamagment extract block height * gap into config * Replace last_block_header with last_block_height * construct output for zcash * add simple try from address * parse unified address * script pubkey * fmt for unified address * fix find receiver in list * fix warnings * safe psbt wraper * deserialize * move het hash to sign * extract tx byte * save signature * incapsulate psbt * separate transaction * separate expiry hight * separate psbt creation * separate chain specific functions * separate zcash functions * separate zcash * fix btc * fix warnings * optimize get min fee * remove psbt for zcash * remove unsed function * add get_input_num and get_output_num * fix satoshi bridge * fix new * make psbt field private * reduce copy past * reduce copypast * fix test contract config for zcash * don't panic * fmt * reduce include * updaye zcash_protocol * fix chain id * remove default * add version * fix bitcoin connector * remove bytes_to_btc_transaction * don't use fully-qualified name * fix bitcoin tests * fix check block heigth for branch id * save block height * fix * fix make * fix valid confiramtions range * Bump version * fix: use `U128` type for amount in `ft_on_transfer_callback` * provide max gas fee * Add orchard support * Add comments * Add comment * fix outputs checks * Calculate sighash with `orchard_bundle` * Implement Orchard Bundle Validation for Zcash Withdrawals (#20) * feat: zcash validation * fix: use ZIP-317 formula with orchard action count for fee calculation Previously, get_min_fee() hardcoded 0 for orchard_action_count when calling the ZIP-317 fee_required function. This resulted in incorrect fee calculations for transactions with Orchard bundles. Now properly counts actions from the orchard bundle (if present) and passes this to the ZIP-317 FeeRule. The formula accounts for: - Transparent inputs (P2PKH standard size) - Transparent outputs (serialized size) - Orchard actions (actual count from bundle) The fee calculation varies with transaction structure per ZIP-317 specification - 10,000 satoshis is just the minimum for simple transactions with minimal inputs/outputs. * fix: replace hardcoded gas fee with ZIP-317 calculation Previously used hardcoded 10000 satoshis as default gas fee. Now: 1. Calculate actual fee using ZIP-317 formula via psbt.get_min_fee() 2. Use max_gas_fee as an upper bound when provided 3. Fall back to computed fee when max_gas_fee not provided This properly accounts for transaction structure (inputs, outputs, orchard actions) per ZIP-317 spec. The fee varies with tx complexity rather than using a fixed minimum value. Changes in contract_methods.rs: - Create preliminary PSBT to compute fee before validation - Recreate PSBT with correct expected amounts for validation Changes in token_receiver.rs: - Compute ZIP-317 fee and use max_gas_fee as cap * fix: update minimum orchard actions check from 1 to 2 Per Orchard protocol specification, bundles must contain at least 2 actions for privacy (MIN_ACTIONS = 2). The Orchard builder automatically pads bundles with dummy actions to meet this minimum. Changes: - Added MIN_ACTIONS constant (2) in orchard_policy.rs - Updated validation to require >= MIN_ACTIONS instead of == 1 - Applied to both strict validation (with expected values) and looser validation (internal operations) - Improved error messages to show expected vs actual action count Reference: https://github.com/zcash/orchard/blob/main/src/builder.rs#L36 * fix: use base64 encoding only for ZCash to preserve Bitcoin compatibility Previously, all chains used base64 encoding for tx_bytes in the SignedBtcTransaction event, which breaks backward compatibility for Bitcoin indexers expecting hex encoding. Now: - ZCash chains (mainnet/testnet): Use base64 (1.33x overhead) - Beneficial for larger Orchard transactions - Bitcoin/other chains: Use hex encoding (backward compatible) The event field name remains `tx_bytes_base64` but contains hex for non-ZCash chains to avoid breaking the event structure. * fix: validate Unified Address for actual Orchard receiver presence Previously, the code checked if an address starts with "u1" or "u" to determine if an Orchard bundle is required. This is incorrect because Unified Addresses can contain only transparent receivers (P2PKH/P2SH), which is a valid scenario without an Orchard bundle. Now: - Added has_orchard_receiver() helper to check if a Unified Address actually contains an Orchard receiver - Only require Orchard bundle if the UA has an Orchard receiver - Allow Unified Addresses with only transparent receivers to work without an Orchard bundle Transparent addresses can be extracted from Unified Addresses, which is a valid use case. * fix: reject mixed Orchard and transparent output scenarios Previously, the code would crash when a Unified Address with only an Orchard receiver was provided along with transparent change outputs. The transparent validation path would fail trying to extract a transparent script_pubkey from an Orchard-only UA. Now: - Added has_orchard_bundle() helper to PsbtWrapper - Explicitly reject transactions with both Orchard bundle and transparent outputs - Require either pure Orchard (no transparent outputs) or pure transparent (no Orchard bundle) This prevents the classic case where target has Orchard receiver but change goes to transparent output, which would cause the program to crash. The restriction simplifies validation logic and avoids edge cases. Users must choose one path or the other for clarity. * fix: validate actual Orchard output amount from bundle Previously, for Orchard-only withdrawals, the code calculated what the output amount *should* be but didn't validate the actual amount in the Orchard bundle. This was a critical security issue - users could provide any amount in their Orchard bundle. Now: - Added get_orchard_output_amount() to PsbtWrapper that recovers the actual output amount using the bridge OVK - Validate that the recovered Orchard amount is within the expected range (accounting for fees and potential dust adjustment) - Use the same validation logic as transparent outputs: allow a range between (expected - min_change_amount) and expected The solution deserializes and validates the Orchard output amount, ensuring users receive the correct amount after fees. * fix: support mixed Orchard output with transparent change (baseline case) Previously, commit 9ce848d3001496bbae293fb2ad54c03848f9d1b7 rejected mixed scenarios (Orchard + transparent), but this was incorrect. The baseline scenario for Orchard withdrawals is: - 1 Orchard output to the user's Unified Address - 1+ transparent change outputs back to the bridge Now properly supports mixed scenarios: - Validate the Orchard output amount (to user) - Validate all transparent outputs are change to bridge address - Ensure change amounts are within min/max limits - Verify change + gas_fee doesn't exceed input The new validation logic: - Orchard bundle present: Validate Orchard output + transparent change - No Orchard bundle: Use existing transparent-only validation * fix: comprehensive Orchard bundle validation improvements Fixed 4 critical validation gaps identified during code review: 1. **Value Balance Validation** (NEW) - Now validates bundle.value_balance() equals -(output_amount) - Ensures value flows correctly from transparent to Orchard pool - Prevents malicious bundles with incorrect value balance 2. **All Outputs Validated** (NEW) - Iterates through ALL actions/outputs (not just first) - Ensures exactly 1 non-zero output exists - Prevents hiding extra outputs in unused actions 3. **Range Validation for Dust Adjustment** (FIXED) - Changed from exact match to range validation - Allows user to adjust amount for dust (like transparent does) - Range: [expected - min_change_amount, expected] - Provides same flexibility as transparent withdrawals 4. **Exact Transparent Accounting** (FIXED) - Changed `<=` to `==` in transparent change validation - Validates: input == orchard_amount + change + gas_fee - Prevents missing value in accounting - Ensures value balance integrity These fixes provide defense-in-depth. While the ZCash network would catch most issues, we now validate comprehensively at contract level to reject bad requests early and ensure robust accounting. * tmp contract fix * Min Actions = 1 * safe output * remove unused function * separate validation * merge checks * fix add extra amount * remove unused function * remove changes * fmt * remove amount checks * remove no needed check * move orchard validation into check function * remove gas calculation * provide expire height * fix get_branch_id * reduce copypast * event beckword compatibility * fix warnings * clippy * fix compilation for bitcoin * fmt * fix: add expiry_height field to tests Add missing expiry_height: None to TokenReceiverMessage::Withdraw in test files after the field was added to the struct. * save target_address * orchard bundle in RBF * chain specific data * String -> Base64 * remove dublicate code * return Error on Orchard Bundle * check the expected actions num * clean up * save recipient_address to psbt * check version * fix tests compilation * fix: update fixtures, exports, and tests * fix: replace unwrap() with descriptive error messages - bitcoin_utils/psbt_wrapper: add ERR_INVALID_PSBT_HEX, ERR_EXTRACT_TX, ERR_MISSING_WITNESS_UTXO, ERR_SIGHASH messages - zcash_utils/psbt_wrapper: add ERR_INVALID_ORCHARD_BUNDLE, ERR_ORCHARD_VALIDATION, and detailed ERR_INVALID_PSBT messages for all deserialization steps - config: add ERR_CONFIG messages for uninitialized contract/config - account: include account_id in ERR_ACCOUNT_NOT_REGISTERED message * provide chain_specific data * remove unnecessary .clone() calls * add type alias for Orchard raw address bytes and simplify extract_orchard_bundle * replace expect() with env::panic_str() to reduce contract size * Update contracts/satoshi-bridge/src/network.rs Co-authored-by: Ivan Frolov <59515280+frolvanya@users.noreply.github.com> * chore: imported `OrchardRawAddress` --------- Co-authored-by: Olga Kunyavskaya Co-authored-by: Ivan Frolov <59515280+frolvanya@users.noreply.github.com> Co-authored-by: Ivan Frolov * Avoid extra clone of Orchard bundle * Replace panic with panic_str * Bump version * Fix clippy * Fix build variant * Fix orchard tests * Run lint and tests to CI * Revert default * Remove added ci * Remove unused fmt * Fix tests * Fix orchard test * Fix orchard test * Add missed `safe_deposit` * add different wasm path * fix orchard tests * fix test_base * fix check predecessor account id * fix test * fix check outputs number * unwrap -> expect * extract expiry height check --------- Co-authored-by: Olga Kunyavskaya Co-authored-by: Ivan Frolov Co-authored-by: r-near <163825889+r-near@users.noreply.github.com> Co-authored-by: Ivan Frolov <59515280+frolvanya@users.noreply.github.com> --- .github/workflows/ci.yml | 14 +- Cargo.lock | 6 +- Makefile | 63 +-- contracts/mock-btc-light-client/src/lib.rs | 5 + contracts/satoshi-bridge/Cargo.toml | 25 +- contracts/satoshi-bridge/src/account.rs | 13 +- contracts/satoshi-bridge/src/api/bridge.rs | 31 +- .../satoshi-bridge/src/api/token_receiver.rs | 22 +- .../src/bitcoin_utils/contract_methods.rs | 31 +- .../satoshi-bridge/src/bitcoin_utils/mod.rs | 1 + .../src/bitcoin_utils/psbt_wrapper.rs | 30 +- .../satoshi-bridge/src/bitcoin_utils/types.rs | 4 + .../satoshi-bridge/src/btc_pending_info.rs | 1 + .../satoshi-bridge/src/chain_signature.rs | 31 +- contracts/satoshi-bridge/src/config.rs | 20 +- contracts/satoshi-bridge/src/event.rs | 3 + contracts/satoshi-bridge/src/kdf.rs | 10 + contracts/satoshi-bridge/src/lib.rs | 6 +- contracts/satoshi-bridge/src/network.rs | 24 ++ contracts/satoshi-bridge/src/psbt.rs | 66 +-- .../src/rbf/active_utxo_management.rs | 1 + .../src/rbf/cancel_active_utxo_management.rs | 1 + .../satoshi-bridge/src/rbf/cancel_withdraw.rs | 3 +- contracts/satoshi-bridge/src/rbf/withdraw.rs | 48 ++- contracts/satoshi-bridge/src/utxo.rs | 5 +- .../src/zcash_utils/contract_methods.rs | 108 ++++- .../satoshi-bridge/src/zcash_utils/mod.rs | 2 + .../src/zcash_utils/orchard_policy.rs | 116 ++++++ .../src/zcash_utils/psbt_wrapper.rs | 287 ++++++++++++-- .../src/zcash_utils/transaction.rs | 39 +- .../satoshi-bridge/src/zcash_utils/types.rs | 8 + .../tests/orchard_bundle_cache_100000.txt | 2 + .../tests/orchard_bundle_cache_170000.txt | 2 + ...01010101010101010101010101010101010101.txt | 2 + ...02020202020202020202020202020202020202.txt | 2 + .../satoshi-bridge/tests/setup/context.rs | 26 +- contracts/satoshi-bridge/tests/setup/mod.rs | 10 + .../satoshi-bridge/tests/setup/orchard.rs | 164 ++++++++ contracts/satoshi-bridge/tests/setup/utils.rs | 139 ++++++- .../tests/test_orchard_validation.rs | 375 ++++++++++++++++++ .../tests/test_orchard_withdrawal.rs | 285 +++++++++++++ .../tests/test_satoshi_bridge.rs | 305 ++++++++------ .../satoshi-bridge/tests/test_upgrade.rs | 12 +- 43 files changed, 1988 insertions(+), 360 deletions(-) create mode 100644 contracts/satoshi-bridge/src/bitcoin_utils/types.rs create mode 100644 contracts/satoshi-bridge/src/zcash_utils/orchard_policy.rs create mode 100644 contracts/satoshi-bridge/src/zcash_utils/types.rs create mode 100644 contracts/satoshi-bridge/tests/orchard_bundle_cache_100000.txt create mode 100644 contracts/satoshi-bridge/tests/orchard_bundle_cache_170000.txt create mode 100644 contracts/satoshi-bridge/tests/orchard_bundle_cache_170000_0101010101010101010101010101010101010101010101010101010101010101.txt create mode 100644 contracts/satoshi-bridge/tests/orchard_bundle_cache_170000_0202020202020202020202020202020202020202020202020202020202020202.txt create mode 100644 contracts/satoshi-bridge/tests/setup/orchard.rs create mode 100644 contracts/satoshi-bridge/tests/test_orchard_validation.rs create mode 100644 contracts/satoshi-bridge/tests/test_orchard_withdrawal.rs diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1bda6dc..120c9c8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -28,19 +28,13 @@ jobs: with: cache-provider: warpbuild - - name: Check formatting - run: cargo fmt --all -- --check - - - name: Run Clippy - run: cargo clippy --lib --bins --examples -- -D warnings -D clippy::pedantic -D clippy::as_conversions -A clippy::must_use_candidate -A clippy::needless_pass_by_value -A clippy::missing_panics_doc -A clippy::missing_errors_doc -A clippy::match_same_arms -A clippy::unused_self -A clippy::too_many_lines + - name: Run lint + run: make lint - name: Install cargo-near run: | curl --proto '=https' --tlsv1.2 -LsSf https://github.com/near/cargo-near/releases/latest/download/cargo-near-installer.sh | sh - - name: Build contracts - run: make build - timeout-minutes: 60 - - name: Run tests - run: cargo test --all -- --nocapture + run: make test + diff --git a/Cargo.lock b/Cargo.lock index d4805a6..ba1975f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3715,9 +3715,10 @@ dependencies = [ [[package]] name = "satoshi-bridge" -version = "0.7.3" +version = "0.7.4" dependencies = [ "bitcoin", + "bs58 0.5.1", "core2", "crypto-shared", "ed25519-dalek", @@ -3728,6 +3729,9 @@ dependencies = [ "near-plugins", "near-sdk", "near-workspaces", + "orchard", + "rand", + "sapling-crypto", "tokio", "zcash_address", "zcash_primitives", diff --git a/Makefile b/Makefile index 00b2269..f8dd2a5 100644 --- a/Makefile +++ b/Makefile @@ -1,21 +1,48 @@ -.PHONY: zcash-bridge +MAKEFILE_DIR := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST)))) +#INT_OPTIONS = -D warnings -D clippy::pedantic -A clippy::must_use_candidate -A clippy::used_underscore_binding -A clippy::needless_range_loop //TODO: enable it later +BRIDGE_MANIFEST := $(MAKEFILE_DIR)/contracts/satoshi-bridge/Cargo.toml RFLAGS="-C link-arg=-s" -build: lint satoshi-bridge zcash-bridge nbtc mock-chain-signatures mock-btc-light-client mock-dapp +FEATURES = bitcoin zcash -lint: +release: $(addprefix build-,$(FEATURES)) + $(call build_release_wasm,nbtc,nbtc) + +build-local: $(addprefix build-local-,$(FEATURES)) nbtc mock-chain-signatures mock-btc-light-client mock-dapp + +lint: $(addprefix clippy-,$(FEATURES)) $(addprefix fmt-,$(FEATURES)) @cargo fmt --all - @cargo clippy --fix --allow-dirty --allow-staged + @cargo clippy -- $(LINT_OPTIONS) -satoshi-bridge: contracts/satoshi-bridge - $(call local_build_wasm,satoshi-bridge,satoshi_bridge) +test: build-local $(addprefix test-,$(FEATURES)) -zcash-bridge: contracts/satoshi-bridge - $(call local_build_zcash_wasm) +$(foreach feature,$(FEATURES), \ + $(eval build-$(feature): ; \ + cargo near build reproducible-wasm --variant "$(feature)" --manifest-path $(BRIDGE_MANIFEST) && \ + mkdir -p res && mv ./target/near/satoshi_bridge/satoshi_bridge.wasm ./res/$(feature)_bridge_release.wasm \ + ) \ +) + +$(foreach feature,$(FEATURES), \ + $(eval build-local-$(feature): ; \ + cargo near build non-reproducible-wasm --features "$(feature)" --manifest-path $(BRIDGE_MANIFEST) --no-abi && \ + mkdir -p res && mv ./target/near/satoshi_bridge/satoshi_bridge.wasm ./res/$(feature)_bridge.wasm \ + ) \ +) + +$(foreach feature,$(FEATURES), \ + $(eval clippy-$(feature): ; cargo clippy --no-default-features --features "$(feature)" --manifest-path $(BRIDGE_MANIFEST) -- $(LINT_OPTIONS)) \ +) + +$(foreach feature,$(FEATURES), \ + $(eval fmt-$(feature): ; cargo fmt --all --check --manifest-path $(BRIDGE_MANIFEST)) \ +) + +$(foreach feature,$(FEATURES), \ + $(eval test-$(feature): ; cargo test --no-default-features --features "$(feature)" --manifest-path $(BRIDGE_MANIFEST)) \ +) -nbtc: contracts/nbtc - $(call local_build_wasm,nbtc,nbtc) mock-dapp: contracts/mock-dapp $(call local_build_wasm,mock-dapp,mock_dapp) @@ -26,19 +53,9 @@ mock-chain-signatures: contracts/mock-chain-signatures mock-btc-light-client: contracts/mock-btc-light-client $(call local_build_wasm,mock-btc-light-client,mock_btc_light_client) -count: - @tokei ./contracts/satoshi-bridge/src/ --files --exclude unit - @tokei ./contracts/nbtc/src/ --files - -release: - $(call build_release_wasm,satoshi-bridge,satoshi_bridge) - $(call build_release_wasm,nbtc,nbtc) - $(call build_release_zcash_wasm) - -clean: - cargo clean - rm -rf res/ - +nbtc: contracts/nbtc + $(call local_build_wasm,nbtc,nbtc) + define local_build_wasm $(eval PACKAGE_NAME := $(1)) $(eval WASM_NAME := $(2)) diff --git a/contracts/mock-btc-light-client/src/lib.rs b/contracts/mock-btc-light-client/src/lib.rs index 6b03fc5..c7984e0 100644 --- a/contracts/mock-btc-light-client/src/lib.rs +++ b/contracts/mock-btc-light-client/src/lib.rs @@ -81,4 +81,9 @@ impl Contract { pub fn verify_transaction_inclusion(&self, #[serializer(borsh)] args: ProofArgs) -> bool { true } + + pub fn get_last_block_height(&self) -> u32 { + // Return a reasonable mock block height for Zcash testnet + 1000 + } } diff --git a/contracts/satoshi-bridge/Cargo.toml b/contracts/satoshi-bridge/Cargo.toml index 6e85315..eba415f 100644 --- a/contracts/satoshi-bridge/Cargo.toml +++ b/contracts/satoshi-bridge/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "satoshi-bridge" -version = "0.7.3" +version = "0.7.4" edition.workspace = true publish.workspace = true repository.workspace = true @@ -21,18 +21,11 @@ container_build_command = [ "--no-abi", ] +[package.metadata.near.reproducible_build.variant.bitcoin] +container_build_command = ["cargo", "near", "build", "non-reproducible-wasm", "--locked", "--no-abi", "--no-default-features", "--features", "bitcoin"] + [package.metadata.near.reproducible_build.variant.zcash] -container_build_command = [ - "cargo", - "near", - "build", - "non-reproducible-wasm", - "--locked", - "--no-abi", - "--no-default-features", - "--features", - "zcash" -] +container_build_command = ["cargo", "near", "build", "non-reproducible-wasm", "--locked", "--no-abi", "--no-default-features", "--features", "zcash"] [dependencies] near-sdk.workspace = true @@ -45,6 +38,8 @@ ed25519-dalek = "2.1.0" crypto-shared = { git = "https://github.com/near/mpc_old", rev = "0afee9004a1b1c3386940e60c28cff7cf1b5978c" } zcash_primitives = { version = "0.24.0", default-features = false, features = ["circuits", "transparent-inputs"], optional = true } zcash_transparent = { version = "0.4.0", features = ["transparent-inputs"], optional = true } +orchard = { version = "0.11.0", default-features = false, optional = true } +sapling-crypto = { version = "0.5.0", default-features = false, optional = true } zcash_protocol = { version = "0.6.1" } core2 = { version = "0.3", optional = true } zcash_address = { version = "0.9.0" } @@ -55,7 +50,11 @@ getrandom = { version = "0.2.12", features = ["custom"] } [dev-dependencies] near-workspaces = { version = "0.20", features = ["unstable"] } tokio = { version = "1.12.0", features = ["full"] } +rand = "0.8" +hex = "0.4" +bs58 = "0.5" [features] default = [] -zcash = ["zcash_primitives", "zcash_transparent", "core2"] +zcash = ["zcash_primitives", "zcash_transparent", "orchard", "core2", "sapling-crypto"] +bitcoin = [] diff --git a/contracts/satoshi-bridge/src/account.rs b/contracts/satoshi-bridge/src/account.rs index 6d02b2f..6fc2cef 100644 --- a/contracts/satoshi-bridge/src/account.rs +++ b/contracts/satoshi-bridge/src/account.rs @@ -1,4 +1,5 @@ use crate::{near, u128_dec_format, AccountId, Contract}; +use near_sdk::env; use std::collections::HashSet; #[near(serializers = [borsh, json])] @@ -85,16 +86,20 @@ impl Contract { self.data() .accounts .get(account_id) - .map(Into::into) - .expect("ACCOUNT NOT REGISTERED") + .map(|o| o.into()) + .unwrap_or_else(|| { + env::panic_str(&format!("ERR_ACCOUNT_NOT_REGISTERED: {}", account_id)) + }) } pub fn internal_unwrap_mut_account(&mut self, account_id: &AccountId) -> &mut Account { self.data_mut() .accounts .get_mut(account_id) - .map(Into::into) - .expect("ACCOUNT NOT REGISTERED") + .map(|o| o.into()) + .unwrap_or_else(|| { + env::panic_str(&format!("ERR_ACCOUNT_NOT_REGISTERED: {}", account_id)) + }) } pub fn internal_unwrap_or_create_mut_account( diff --git a/contracts/satoshi-bridge/src/api/bridge.rs b/contracts/satoshi-bridge/src/api/bridge.rs index 6747485..d61975c 100644 --- a/contracts/satoshi-bridge/src/api/bridge.rs +++ b/contracts/satoshi-bridge/src/api/bridge.rs @@ -1,9 +1,5 @@ -use crate::{ - assert_one_yocto, env, generate_utxo_storage_key, get_deposit_path, nano_to_sec, near, - psbt_wrapper::PsbtWrapper, require, AccessControllable, AccountId, BTCPendingInfo, Contract, - ContractExt, DepositMsg, Event, LockTime, OriginalState, OutPoint, Pausable, PendingInfoStage, - PendingInfoState, PendingUTXOInfo, Promise, Role, TxOut, WrappedTransaction, UTXO, -}; +use crate::psbt_wrapper::PsbtWrapper; +use crate::*; use near_plugins::{access_control_any, pause}; #[near] @@ -204,7 +200,12 @@ impl Contract { /// * `original_btc_pending_verify_id` - Pending verify ID of the original transaction. /// * `output` - Modified output. #[pause(except(roles(Role::DAO)))] - pub fn withdraw_rbf(&mut self, original_btc_pending_verify_id: String, output: Vec) { + pub fn withdraw_rbf( + &mut self, + original_btc_pending_verify_id: String, + output: Vec, + chain_specific_data: Option, + ) { let account_id = env::predecessor_account_id(); require!( self.internal_unwrap_account(&account_id) @@ -213,7 +214,12 @@ impl Contract { "Previous btc tx has not been signed" ); - self.withdraw_rbf_chain_specific(account_id, original_btc_pending_verify_id, output); + self.withdraw_rbf_chain_specific( + account_id, + original_btc_pending_verify_id, + output, + chain_specific_data, + ); } /// If the user's Withdraw is not verified within a certain time, the protocol can actively cancel the Withdraw through RBF, with the gas fee borne by the user. @@ -242,6 +248,7 @@ impl Contract { user_account_id, original_btc_pending_verify_id, output, + None, ); } @@ -327,6 +334,7 @@ impl Contract { account_id, original_btc_pending_verify_id, output, + None, ); } @@ -359,6 +367,7 @@ impl Contract { user_account_id, original_btc_pending_verify_id, output, + None, ); } @@ -416,7 +425,7 @@ impl Contract { pub fn create_active_utxo_management_pending_info( &mut self, account_id: AccountId, - psbt: &mut PsbtWrapper, + mut psbt: PsbtWrapper, ) { let account = self.internal_unwrap_account(&account_id); require!( @@ -424,9 +433,9 @@ impl Contract { "Previous btc tx has not been signed" ); - let (utxo_storage_keys, vutxos) = self.generate_vutxos(psbt); + let (utxo_storage_keys, vutxos) = self.generate_vutxos(&mut psbt); let (actual_received_amount, gas_fee) = - self.check_active_management_psbt_valid(psbt, &vutxos); + self.check_active_management_psbt_valid(&psbt, &vutxos); require!( gas_fee <= self.data().cur_available_protocol_fee, "Insufficient protocol_fee" diff --git a/contracts/satoshi-bridge/src/api/token_receiver.rs b/contracts/satoshi-bridge/src/api/token_receiver.rs index 26a0c6a..7906b8e 100644 --- a/contracts/satoshi-bridge/src/api/token_receiver.rs +++ b/contracts/satoshi-bridge/src/api/token_receiver.rs @@ -1,9 +1,4 @@ -use crate::{ - env, nano_to_sec, near, psbt_wrapper::PsbtWrapper, require, serde_json, AccessControllable, - AccountId, BTCPendingInfo, Contract, ContractExt, Event, Gas, OriginalState, OutPoint, - Pausable, PendingInfoStage, PendingInfoState, PromiseOrValue, Role, TxOut, U128, -}; - +use crate::{psbt_wrapper::PsbtWrapper, *}; use near_contract_standards::fungible_token::receiver::FungibleTokenReceiver; use near_plugins::pause; @@ -12,11 +7,13 @@ pub const GAS_FOR_FT_ON_TRANSFER_CALL_BACK: Gas = Gas::from_tgas(100); #[near(serializers = [json])] pub enum TokenReceiverMessage { DepositProtocolFee, + // Here is the withdraw message structure that will be sent from user or dApp to the btc/zcash connector Withdraw { target_btc_address: String, input: Vec, output: Vec, max_gas_fee: Option, + chain_specific_data: Option, }, } @@ -56,6 +53,7 @@ impl FungibleTokenReceiver for Contract { input, output, max_gas_fee, + chain_specific_data, } => self.ft_on_transfer_withdraw_chain_specific( sender_id, amount, @@ -63,6 +61,7 @@ impl FungibleTokenReceiver for Contract { input, output, max_gas_fee, + chain_specific_data, ), } } @@ -74,27 +73,24 @@ impl Contract { sender_id: AccountId, amount: u128, target_btc_address: String, - psbt: &mut PsbtWrapper, + mut psbt: PsbtWrapper, max_gas_fee: Option, ) { - let (utxo_storage_keys, vutxos) = self.generate_vutxos(psbt); + let (utxo_storage_keys, vutxos) = self.generate_vutxos(&mut psbt); require!( self.internal_unwrap_or_create_mut_account(&sender_id) .btc_pending_sign_id .is_none(), "Previous btc tx has not been signed" ); - let target_address_script_pubkey = self - .internal_config() - .string_to_script_pubkey(&target_btc_address); let withdraw_change_address_script_pubkey = self.internal_config().get_change_script_pubkey(); let withdraw_fee = self.internal_config().withdraw_bridge_fee.get_fee(amount); let (actual_received_amount, gas_fee) = self.check_withdraw_psbt_valid( - &target_address_script_pubkey, + target_btc_address.clone(), &withdraw_change_address_script_pubkey, - psbt, + &psbt, &vutxos, amount, withdraw_fee, diff --git a/contracts/satoshi-bridge/src/bitcoin_utils/contract_methods.rs b/contracts/satoshi-bridge/src/bitcoin_utils/contract_methods.rs index e3bb76d..5a5114c 100644 --- a/contracts/satoshi-bridge/src/bitcoin_utils/contract_methods.rs +++ b/contracts/satoshi-bridge/src/bitcoin_utils/contract_methods.rs @@ -1,3 +1,5 @@ +use crate::bitcoin_utils::types::ChainSpecificData; +use crate::env; use crate::psbt_wrapper::PsbtWrapper; use crate::{BTCPendingInfo, Contract, Event}; use bitcoin::{OutPoint, TxOut}; @@ -11,7 +13,9 @@ macro_rules! define_rbf_method { account_id: AccountId, original_btc_pending_verify_id: String, output: Vec, + _chain_specific_data: Option, ) { + let predecessor_account_id = env::predecessor_account_id(); let original_tx_btc_pending_info = self.internal_unwrap_btc_pending_info(&original_btc_pending_verify_id); @@ -20,8 +24,12 @@ macro_rules! define_rbf_method { output, ); - let btc_pending_id = - self.$internal_fn(&account_id, original_btc_pending_verify_id, new_psbt); + let btc_pending_id = self.$internal_fn( + &account_id, + original_btc_pending_verify_id, + new_psbt, + predecessor_account_id, + ); self.internal_unwrap_mut_account(&account_id) .btc_pending_sign_id = Some(btc_pending_id.clone()); @@ -36,7 +44,13 @@ macro_rules! define_rbf_method { } impl Contract { - pub(crate) fn check_psbt_chain_specific(&self, _psbt: &PsbtWrapper, _gas_fee: u128) {} + pub(crate) fn check_psbt_chain_specific( + &self, + _psbt: &PsbtWrapper, + _gas_fee: u128, + _target_btc_address: String, + ) { + } pub(crate) fn check_withdraw_chain_specific( original_tx_btc_pending_info: &BTCPendingInfo, @@ -48,6 +62,7 @@ impl Contract { require!(additional_gas_amount > 0, "No gas increase."); } + #[allow(clippy::too_many_arguments)] pub(crate) fn ft_on_transfer_withdraw_chain_specific( &mut self, sender_id: AccountId, @@ -56,13 +71,13 @@ impl Contract { input: Vec, output: Vec, max_gas_fee: Option, + _chain_specific_data: Option, ) -> PromiseOrValue { - let mut psbt = PsbtWrapper::new(input, output); self.create_btc_pending_info( sender_id, amount, target_btc_address, - &mut psbt, + PsbtWrapper::new(input, output), max_gas_fee, ); PromiseOrValue::Value(U128(0)) @@ -85,8 +100,10 @@ impl Contract { input: Vec, output: Vec, ) { - let mut psbt = PsbtWrapper::new(input, output); - self.create_active_utxo_management_pending_info(account_id, &mut psbt); + self.create_active_utxo_management_pending_info( + account_id, + PsbtWrapper::new(input, output), + ); } pub(crate) fn generate_psbt_from_original_psbt_and_new_output( diff --git a/contracts/satoshi-bridge/src/bitcoin_utils/mod.rs b/contracts/satoshi-bridge/src/bitcoin_utils/mod.rs index 89ef353..18ae7bc 100644 --- a/contracts/satoshi-bridge/src/bitcoin_utils/mod.rs +++ b/contracts/satoshi-bridge/src/bitcoin_utils/mod.rs @@ -1,3 +1,4 @@ pub mod contract_methods; pub mod psbt_wrapper; pub mod transaction; +pub mod types; diff --git a/contracts/satoshi-bridge/src/bitcoin_utils/psbt_wrapper.rs b/contracts/satoshi-bridge/src/bitcoin_utils/psbt_wrapper.rs index d6a3721..85c3577 100644 --- a/contracts/satoshi-bridge/src/bitcoin_utils/psbt_wrapper.rs +++ b/contracts/satoshi-bridge/src/bitcoin_utils/psbt_wrapper.rs @@ -105,14 +105,18 @@ impl PsbtWrapper { }) .collect() } + + pub fn add_extra_outputs(&self, _actual_received_amounts: &mut [u128]) -> u128 { + 0 + } pub fn serialize(&self) -> String { self.psbt.serialize_hex() } pub fn deserialize(psbt_hex: &String) -> Self { - let psbt_bytes = hex::decode(psbt_hex).unwrap(); + let psbt_bytes = hex::decode(psbt_hex).expect("ERR_INVALID_PSBT_HEX: failed to decode hex"); Self { - psbt: Psbt::deserialize(&psbt_bytes).expect("ERR_INVALID_PSBT_HEX"), + psbt: Psbt::deserialize(&psbt_bytes).expect("ERR_INVALID_PSBT: failed to parse PSBT"), } } @@ -124,27 +128,27 @@ impl PsbtWrapper { self.psbt .clone() .extract_tx() - .unwrap() + .expect("ERR_EXTRACT_TX: failed to extract transaction from PSBT") .compute_txid() .to_string() } #[allow(unused_variables)] - pub fn get_hash_to_sign(&self, vin: usize, public_key: &bitcoin::PublicKey) -> [u8; 32] { + pub fn get_hash_to_sign(&self, vin: usize, public_keys: &[bitcoin::PublicKey]) -> [u8; 32] { let tx = self.psbt.unsigned_tx.clone(); let mut cache = SighashCache::new(tx); + let witness_utxo = self.psbt.inputs[vin] + .witness_utxo + .as_ref() + .expect("ERR_MISSING_WITNESS_UTXO: input missing witness UTXO data"); cache .p2wpkh_signature_hash( vin, - &self.psbt.inputs[vin] - .witness_utxo - .as_ref() - .unwrap() - .script_pubkey, - self.psbt.inputs[vin].witness_utxo.as_ref().unwrap().value, + &witness_utxo.script_pubkey, + witness_utxo.value, bitcoin::EcdsaSighashType::All, ) - .unwrap() + .expect("ERR_SIGHASH: failed to compute signature hash") .to_raw_hash() .to_byte_array() } @@ -158,4 +162,8 @@ impl PsbtWrapper { self.psbt.inputs[sign_index].final_script_witness = Some(Witness::p2wpkh(&signature.to_btc_signature(), &public_key)); } + + pub fn get_recipient_address(&self) -> Option { + None + } } diff --git a/contracts/satoshi-bridge/src/bitcoin_utils/types.rs b/contracts/satoshi-bridge/src/bitcoin_utils/types.rs new file mode 100644 index 0000000..137cd84 --- /dev/null +++ b/contracts/satoshi-bridge/src/bitcoin_utils/types.rs @@ -0,0 +1,4 @@ +use near_sdk::near; + +#[near(serializers = [json])] +pub struct ChainSpecificData {} diff --git a/contracts/satoshi-bridge/src/btc_pending_info.rs b/contracts/satoshi-bridge/src/btc_pending_info.rs index 108dfea..cdf15dd 100644 --- a/contracts/satoshi-bridge/src/btc_pending_info.rs +++ b/contracts/satoshi-bridge/src/btc_pending_info.rs @@ -456,6 +456,7 @@ mod tests { recipient_id: "omni_user_account-20250625-153431.testnet".parse().unwrap(), post_actions: None, extra_msg: None, + safe_deposit: None, }; let path = get_deposit_path(&deposit_msg); diff --git a/contracts/satoshi-bridge/src/chain_signature.rs b/contracts/satoshi-bridge/src/chain_signature.rs index 1a0f253..19fdc66 100644 --- a/contracts/satoshi-bridge/src/chain_signature.rs +++ b/contracts/satoshi-bridge/src/chain_signature.rs @@ -79,12 +79,13 @@ impl Contract { sign_index: usize, key_version: u32, ) -> Promise { - let public_key = self.generate_btc_public_key( - &self - .internal_unwrap_btc_pending_info(&btc_pending_sign_id) - .vutxos[sign_index] - .get_path(), - ); + let pending_info = self.internal_unwrap_btc_pending_info(&btc_pending_sign_id); + + let public_keys: Vec<_> = pending_info + .vutxos + .iter() + .map(|vutxo| self.generate_btc_public_key(&vutxo.get_path())) + .collect(); let btc_pending_info = self.internal_unwrap_btc_pending_info(&btc_pending_sign_id); require!( @@ -93,7 +94,7 @@ impl Contract { ); let payload = btc_pending_info .get_psbt() - .get_hash_to_sign(sign_index, &public_key); + .get_hash_to_sign(sign_index, &public_keys); let path = btc_pending_info.vutxos[sign_index].get_path(); self.sign_promise(SignRequest { payload, @@ -140,6 +141,7 @@ impl Contract { if let Some(result_bytes) = promise_result_as_success() { let signature = serde_json::from_slice::(&result_bytes) .expect("Invalid signature"); + let public_key = self .generate_btc_public_key( &self @@ -168,12 +170,27 @@ impl Contract { btc_pending_info.psbt_hex = psbt.serialize(); if btc_pending_info.is_all_signed() { let tx_bytes_with_sign = psbt.extract_tx_bytes_with_sign(); + + // For ZCash chains, use base64 encoding to save space (1.33x vs 2x overhead for hex) + // ZCash transactions with Orchard bundles are larger and benefit from compact encoding + // For Bitcoin chains, keep hex encoding for backward compatibility + + #[cfg(feature = "zcash")] + let tx_bytes_base64 = { + use near_sdk::base64::{engine::general_purpose::STANDARD, Engine}; + STANDARD.encode(&tx_bytes_with_sign) + }; + Event::SignedBtcTransaction { account_id: &account_id, tx_id: btc_pending_sign_id.clone(), + #[cfg(not(feature = "zcash"))] tx_bytes: &tx_bytes_with_sign, + #[cfg(feature = "zcash")] + tx_bytes_base64, } .emit(); + btc_pending_info.tx_bytes_with_sign = Some(tx_bytes_with_sign); btc_pending_info.to_pending_verify_stage(); diff --git a/contracts/satoshi-bridge/src/config.rs b/contracts/satoshi-bridge/src/config.rs index 440e62c..1614189 100644 --- a/contracts/satoshi-bridge/src/config.rs +++ b/contracts/satoshi-bridge/src/config.rs @@ -142,14 +142,18 @@ impl Config { } pub fn get_change_script_pubkey(&self) -> ScriptBuf { - self.string_to_script_pubkey(self.change_address.as_ref().unwrap()) + self.string_to_script_pubkey( + self.change_address + .as_ref() + .expect("ERR_CONFIG: change_address not configured"), + ) } pub fn string_to_script_pubkey(&self, address_string: &str) -> ScriptBuf { let chain = self.get_utxo_network(); Address::parse(address_string, chain) - .unwrap_or_else(|e| panic!("{address_string}: {e}")) + .unwrap_or_else(|e| env::panic_str(&format!("{address_string}: {e}"))) .script_pubkey() .expect("Failed to get script pubkey") } @@ -187,11 +191,19 @@ impl Config { impl Contract { pub fn internal_mut_config(&mut self) -> &mut Config { - self.data_mut().config.get_mut().as_mut().unwrap() + self.data_mut() + .config + .get_mut() + .as_mut() + .expect("ERR_CONFIG: contract not initialized") } pub fn internal_config(&self) -> &Config { - self.data().config.get().as_ref().unwrap() + self.data() + .config + .get() + .as_ref() + .expect("ERR_CONFIG: contract not initialized") } pub fn get_confirmations(&self, config: &Config, satoshi_amount: u128) -> u64 { diff --git a/contracts/satoshi-bridge/src/event.rs b/contracts/satoshi-bridge/src/event.rs index 590b987..eeca095 100644 --- a/contracts/satoshi-bridge/src/event.rs +++ b/contracts/satoshi-bridge/src/event.rs @@ -53,7 +53,10 @@ pub enum Event<'a> { SignedBtcTransaction { account_id: &'a AccountId, tx_id: String, + #[cfg(not(feature = "zcash"))] tx_bytes: &'a Vec, + #[cfg(feature = "zcash")] + tx_bytes_base64: String, }, WithdrawBtcDetail { cost_nbtc: U128, diff --git a/contracts/satoshi-bridge/src/kdf.rs b/contracts/satoshi-bridge/src/kdf.rs index c4fe126..a1026c9 100644 --- a/contracts/satoshi-bridge/src/kdf.rs +++ b/contracts/satoshi-bridge/src/kdf.rs @@ -3,6 +3,16 @@ use crate::{env, BtcPublicKey, Contract}; use crate::network::Address; use k256::elliptic_curve::sec1::ToEncodedPoint; +impl Contract { + pub fn get_public_key_by_path(&self, path: String) -> String { + let public_key_bytes = self.generate_public_key(&path); + let uncompressed_btc_public_key = + BtcPublicKey::from_slice(&public_key_bytes).expect("Invalid public key bytes"); + + uncompressed_btc_public_key.inner.to_string() + } +} + impl Contract { pub fn generate_public_key(&self, path: &str) -> Vec { let mpc_pk = crypto_shared::near_public_key_to_affine_point( diff --git a/contracts/satoshi-bridge/src/lib.rs b/contracts/satoshi-bridge/src/lib.rs index 149eb1b..05c8348 100644 --- a/contracts/satoshi-bridge/src/lib.rs +++ b/contracts/satoshi-bridge/src/lib.rs @@ -32,7 +32,7 @@ pub mod json_utils; pub mod kdf; pub mod legacy; pub mod nbtc; -mod network; +pub mod network; pub mod psbt; pub mod rbf; pub mod token_transfer; @@ -61,6 +61,8 @@ pub use crate::utxo::*; pub use crate::bitcoin_utils::psbt_wrapper; #[cfg(not(feature = "zcash"))] pub use crate::bitcoin_utils::transaction::Transaction as WrappedTransaction; +#[cfg(not(feature = "zcash"))] +use crate::bitcoin_utils::types::ChainSpecificData; #[cfg(feature = "zcash")] pub use crate::zcash_utils::contract_methods::*; @@ -68,6 +70,8 @@ pub use crate::zcash_utils::contract_methods::*; pub use crate::zcash_utils::psbt_wrapper; #[cfg(feature = "zcash")] pub use crate::zcash_utils::transaction::Transaction as WrappedTransaction; +#[cfg(feature = "zcash")] +use crate::zcash_utils::types::ChainSpecificData; #[cfg(test)] pub use unit::*; diff --git a/contracts/satoshi-bridge/src/network.rs b/contracts/satoshi-bridge/src/network.rs index 7213f6b..bf00f17 100644 --- a/contracts/satoshi-bridge/src/network.rs +++ b/contracts/satoshi-bridge/src/network.rs @@ -8,6 +8,12 @@ use zcash_address::{ConversionError, ToAddress, ZcashAddress}; #[cfg(feature = "zcash")] use zcash_protocol::consensus::BranchId; +/// Size of Orchard raw address bytes (diversifier + pk_d). +pub const ORCHARD_RAW_ADDRESS_SIZE: usize = 43; + +/// Type alias for Orchard raw address bytes to avoid magic numbers. +pub type OrchardRawAddress = [u8; ORCHARD_RAW_ADDRESS_SIZE]; + #[near(serializers = [borsh, json])] #[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] pub enum Chain { @@ -202,6 +208,24 @@ impl Address { } } + /// Extract the Orchard receiver raw bytes from a Unified Address string for the given chain. + pub fn extract_orchard_receiver(&self) -> Result { + match self { + Address::Unified { address, .. } => { + let receiver_list = address.items_as_parsed(); + for receiver in receiver_list { + match receiver { + Receiver::Orchard(bytes) => return Ok(*bytes), + _ => continue, + } + } + + Err("Unified address missing Orchard receiver".to_string()) + } + _ => Err("No Orchard address found".to_string()), + } + } + pub fn from_pubkey(chain: Chain, pubkey: bitcoin::PublicKey) -> Result { let pubkey_hash = pubkey.pubkey_hash(); diff --git a/contracts/satoshi-bridge/src/psbt.rs b/contracts/satoshi-bridge/src/psbt.rs index 8828eb7..6a782ea 100644 --- a/contracts/satoshi-bridge/src/psbt.rs +++ b/contracts/satoshi-bridge/src/psbt.rs @@ -7,7 +7,7 @@ impl Contract { #[allow(clippy::too_many_arguments)] pub fn check_withdraw_psbt_valid( &self, - target_address_script_pubkey: &ScriptBuf, + target_btc_address: String, withdraw_change_address_script_pubkey: &ScriptBuf, withdraw_psbt: &PsbtWrapper, vutxos: &[VUTXO], @@ -22,7 +22,7 @@ impl Contract { let utxo_num = self.data().utxos.len() + vutxos_len; let (input_num, change_num, actual_received_amount, gas_fee) = self.check_withdraw_psbt( withdraw_psbt, - target_address_script_pubkey, + target_btc_address, withdraw_change_address_script_pubkey, vutxos, amount, @@ -162,7 +162,7 @@ impl Contract { pub fn check_withdraw_psbt( &self, psbt: &PsbtWrapper, - target_address_script_pubkey: &ScriptBuf, + target_btc_address: String, withdraw_change_address_script_pubkey: &ScriptBuf, vutxos: &[VUTXO], amount: u128, @@ -175,30 +175,40 @@ impl Contract { let mut total_output_amount = 0; let mut actual_received_amounts = vec![]; let mut change_amounts = vec![]; - psbt.get_output().iter().for_each(|output| { - let output_value = u128::from(output.value.to_sat()); - total_output_amount += output_value; - if &output.script_pubkey == target_address_script_pubkey { - actual_received_amounts.push(output_value); - } else if &output.script_pubkey == withdraw_change_address_script_pubkey { - require!( - output_value >= config.min_change_amount, - "The change amount is too small" - ); - require!( - output_value < min_input_amount, - "The change amount must be less than all inputs" - ); - change_amounts.push(output_value); - } else { - let output_address = - Address::from_script(&output.script_pubkey, config.chain.clone()) - .expect("Unsupported btc address type"); - env::panic_str( - format!("Invalid transaction output address: {output_address}").as_str(), - ); - } - }); + + if !psbt.get_output().is_empty() { + let target_address_script_pubkey = self + .internal_config() + .string_to_script_pubkey(&target_btc_address); + + psbt.get_output().iter().for_each(|output| { + let output_value = output.value.to_sat() as u128; + total_output_amount += output_value; + if output.script_pubkey == target_address_script_pubkey { + actual_received_amounts.push(output_value); + } else if &output.script_pubkey == withdraw_change_address_script_pubkey { + require!( + output_value >= config.min_change_amount, + "The change amount is too small" + ); + require!( + output_value < min_input_amount, + "The change amount must be less than all inputs" + ); + change_amounts.push(output_value); + } else { + let output_address = + Address::from_script(&output.script_pubkey, config.chain.clone()) + .expect("Unsupported btc address type"); + env::panic_str( + format!("Invalid transaction output address: {}", output_address).as_str(), + ); + } + }); + } + + total_output_amount += psbt.add_extra_outputs(&mut actual_received_amounts); + require!( actual_received_amounts.len() == 1, "only one user output is allowed." @@ -239,7 +249,7 @@ impl Contract { ) ); - self.check_psbt_chain_specific(psbt, gas_fee); + self.check_psbt_chain_specific(psbt, gas_fee, target_btc_address); (input_num, change_num, actual_received_amount, gas_fee) } } diff --git a/contracts/satoshi-bridge/src/rbf/active_utxo_management.rs b/contracts/satoshi-bridge/src/rbf/active_utxo_management.rs index e23db1b..0afa66d 100644 --- a/contracts/satoshi-bridge/src/rbf/active_utxo_management.rs +++ b/contracts/satoshi-bridge/src/rbf/active_utxo_management.rs @@ -29,6 +29,7 @@ impl Contract { account_id: &AccountId, original_btc_pending_verify_id: String, active_utxo_management_rbf_psbt: PsbtWrapper, + _predecessor_account_id: AccountId, ) -> String { let original_tx_btc_pending_info = self.internal_unwrap_btc_pending_info(&original_btc_pending_verify_id); diff --git a/contracts/satoshi-bridge/src/rbf/cancel_active_utxo_management.rs b/contracts/satoshi-bridge/src/rbf/cancel_active_utxo_management.rs index 6aae207..1d83b66 100644 --- a/contracts/satoshi-bridge/src/rbf/cancel_active_utxo_management.rs +++ b/contracts/satoshi-bridge/src/rbf/cancel_active_utxo_management.rs @@ -23,6 +23,7 @@ impl Contract { _account_id: &AccountId, original_btc_pending_verify_id: String, cancel_active_utxo_management_rbf_psbt: PsbtWrapper, + _predecessor_account_id: AccountId, ) -> String { let original_tx_btc_pending_info = self.internal_unwrap_btc_pending_info(&original_btc_pending_verify_id); diff --git a/contracts/satoshi-bridge/src/rbf/cancel_withdraw.rs b/contracts/satoshi-bridge/src/rbf/cancel_withdraw.rs index 2b108e3..a1d57b4 100644 --- a/contracts/satoshi-bridge/src/rbf/cancel_withdraw.rs +++ b/contracts/satoshi-bridge/src/rbf/cancel_withdraw.rs @@ -24,6 +24,7 @@ impl Contract { _account_id: &AccountId, original_btc_pending_verify_id: String, cancel_withdraw_rbf_psbt: PsbtWrapper, + predecessor_account_id: AccountId, ) -> String { let original_tx_btc_pending_info = self.internal_unwrap_btc_pending_info(&original_btc_pending_verify_id); @@ -55,7 +56,7 @@ impl Contract { .saturating_sub(btc_pending_info.transfer_amount - btc_pending_info.withdraw_fee); if excess_gas_fee > 0 { require!( - self.acl_has_role(Role::DAO.into(), env::predecessor_account_id()), + self.acl_has_role(Role::DAO.into(), predecessor_account_id), "gas fee exceeds the user's balance, only the owner is allowed to cancel" ); require!( diff --git a/contracts/satoshi-bridge/src/rbf/withdraw.rs b/contracts/satoshi-bridge/src/rbf/withdraw.rs index af9926d..36fdc9a 100644 --- a/contracts/satoshi-bridge/src/rbf/withdraw.rs +++ b/contracts/satoshi-bridge/src/rbf/withdraw.rs @@ -1,6 +1,6 @@ use crate::{ - init_rbf_btc_pending_info, psbt_wrapper::PsbtWrapper, require, AccountId, BTCPendingInfo, - Contract, PendingInfoStage, PendingInfoState, RbfState, + init_rbf_btc_pending_info, network::Address, psbt_wrapper::PsbtWrapper, require, AccountId, + BTCPendingInfo, Contract, PendingInfoStage, PendingInfoState, RbfState, }; impl Contract { @@ -13,20 +13,16 @@ impl Contract { self.internal_config().get_change_script_pubkey(); let original_tx = original_tx_btc_pending_info.get_transaction(&self.internal_config().chain); - let target_address_script_pubkey = original_tx - .output() - .iter() - .find(|v| v.script_pubkey != withdraw_change_address_script_pubkey) - .cloned() - .expect("The original tx is not a user withdraw tx.") - .script_pubkey; require!( original_tx.output().len() == withdraw_rbf_psbt.get_output_num(), "Invalid output num" ); + + let target_address = self.extract_recipient_address(original_tx_btc_pending_info); + let (_, _, actual_received_amount, gas_fee) = self.check_withdraw_psbt( withdraw_rbf_psbt, - &target_address_script_pubkey, + target_address, &withdraw_change_address_script_pubkey, &original_tx_btc_pending_info.vutxos, original_tx_btc_pending_info.transfer_amount, @@ -40,6 +36,7 @@ impl Contract { account_id: &AccountId, original_btc_pending_verify_id: String, withdraw_rbf_psbt: PsbtWrapper, + _predecessor_account_id: AccountId, ) -> String { let original_tx_btc_pending_info = self.internal_unwrap_btc_pending_info(&original_btc_pending_verify_id); @@ -74,3 +71,34 @@ impl Contract { ) } } + +impl Contract { + fn extract_recipient_address(&self, original_tx_btc_pending_info: &BTCPendingInfo) -> String { + let psbt = original_tx_btc_pending_info.get_psbt(); + + if let Some(recipient) = psbt.get_recipient_address().clone() { + return recipient; + } + + let withdraw_change_address_script_pubkey = + self.internal_config().get_change_script_pubkey(); + let original_tx = + original_tx_btc_pending_info.get_transaction(&self.internal_config().chain); + let target_address_script_pubkey = original_tx + .output() + .iter() + .find(|v| v.script_pubkey != withdraw_change_address_script_pubkey) + .cloned() + .expect("The original tx is not a user withdraw tx.") + .script_pubkey; + + let target_address = Address::from_script( + target_address_script_pubkey.as_script(), + self.internal_config().chain.clone(), + ) + .expect("Error on extract recipient address from script pubkey") + .to_string(); + + target_address + } +} diff --git a/contracts/satoshi-bridge/src/utxo.rs b/contracts/satoshi-bridge/src/utxo.rs index 447b003..ecefe7e 100644 --- a/contracts/satoshi-bridge/src/utxo.rs +++ b/contracts/satoshi-bridge/src/utxo.rs @@ -1,6 +1,7 @@ use crate::{ generate_utxo_storage_key, near, psbt_wrapper::PsbtWrapper, u64_dec_format, Contract, OutPoint, }; +use near_sdk::env; #[near(serializers = [borsh, json])] #[derive(Clone)] @@ -67,7 +68,9 @@ impl Contract { self.data_mut() .utxos .remove(&utxo_storage_key) - .unwrap_or_else(|| panic!("UTXO {utxo_storage_key} not exist")) + .unwrap_or_else(|| { + env::panic_str(&format!("UTXO {} not exist", utxo_storage_key)) + }) }) .collect::>(); (utxo_storage_keys, vutxos) diff --git a/contracts/satoshi-bridge/src/zcash_utils/contract_methods.rs b/contracts/satoshi-bridge/src/zcash_utils/contract_methods.rs index 6cf303b..64b0628 100644 --- a/contracts/satoshi-bridge/src/zcash_utils/contract_methods.rs +++ b/contracts/satoshi-bridge/src/zcash_utils/contract_methods.rs @@ -1,4 +1,5 @@ use crate::psbt_wrapper::PsbtWrapper; +use crate::zcash_utils::types::ChainSpecificData; use crate::*; use bitcoin::{OutPoint, TxOut}; use near_sdk::json_types::U128; @@ -15,11 +16,19 @@ macro_rules! define_rbf_callback { user_account_id: AccountId, original_btc_pending_verify_id: String, output: Vec, + chain_specific_data: Option, ) { + let predecessor_account_id = env::predecessor_account_id(); self.get_last_block_height_promise().then( Self::ext(env::current_account_id()) .with_static_gas(GAS_RBF_CALL_BACK) - .$callback_name(user_account_id, original_btc_pending_verify_id, output), + .$callback_name( + user_account_id, + original_btc_pending_verify_id, + output, + chain_specific_data, + predecessor_account_id, + ), ); } } @@ -32,9 +41,12 @@ macro_rules! define_rbf_callback { account_id: AccountId, original_btc_pending_verify_id: String, output: Vec, + chain_specific_data: Option, + presecessor_account_id: AccountId, #[callback_unwrap] last_block_height: u32, ) { - let expiry_height = last_block_height + self.get_config().expiry_height_gap; + let expiry_height = self.get_expiry_height(&chain_specific_data, last_block_height); + let orchard_bundle_bytes = chain_specific_data.map(|c| c.orchard_bundle_bytes); let original_tx_btc_pending_info = self.internal_unwrap_btc_pending_info(&original_btc_pending_verify_id); @@ -42,11 +54,17 @@ macro_rules! define_rbf_callback { let new_psbt = self.generate_psbt_from_original_psbt_and_new_output( original_tx_btc_pending_info, output, + orchard_bundle_bytes.map(|b| b.0), expiry_height, + last_block_height, ); - let btc_pending_id = - self.$internal_fn(&account_id, original_btc_pending_verify_id, new_psbt); + let btc_pending_id = self.$internal_fn( + &account_id, + original_btc_pending_verify_id, + new_psbt, + presecessor_account_id, + ); self.internal_unwrap_mut_account(&account_id) .btc_pending_sign_id = Some(btc_pending_id.clone()); @@ -85,6 +103,7 @@ define_rbf_callback!( #[near] impl Contract { #[private] + #[allow(clippy::too_many_arguments)] pub fn ft_on_transfer_callback( &mut self, sender_id: AccountId, @@ -93,22 +112,29 @@ impl Contract { input: Vec, output: Vec, max_gas_fee: Option, + chain_specific_data: Option, #[callback_unwrap] last_block_height: u32, ) -> U128 { - let expiry_height = last_block_height + self.get_config().expiry_height_gap; - let mut psbt = PsbtWrapper::new(input, output, expiry_height, self.internal_config()); - self.create_btc_pending_info( - sender_id, - amount.0, - target_btc_address, - &mut psbt, - max_gas_fee, + let expiry_height = self.get_expiry_height(&chain_specific_data, last_block_height); + let orchard_bundle = chain_specific_data.map(|c| c.orchard_bundle_bytes.0); + + let psbt = PsbtWrapper::new( + input, + output, + orchard_bundle, + expiry_height, + last_block_height, + Some(target_btc_address.clone()), + self.internal_config(), ); + self.create_btc_pending_info(sender_id, amount.0, target_btc_address, psbt, max_gas_fee); + U128(0) } #[private] + #[allow(clippy::too_many_arguments)] pub fn active_utxo_management_callback( &mut self, account_id: AccountId, @@ -118,14 +144,54 @@ impl Contract { ) { let expiry_height = last_block_height + self.get_config().expiry_height_gap; - let mut psbt = PsbtWrapper::new(input, output, expiry_height, self.internal_config()); + // For active UTXO management, we don't validate orchard recipient/amount + // as this is internal bridge operations, not user withdrawals + let psbt = PsbtWrapper::new( + input, + output, + None, + expiry_height, + last_block_height, + None, + self.internal_config(), + ); - self.create_active_utxo_management_pending_info(account_id, &mut psbt); + self.create_active_utxo_management_pending_info(account_id, psbt); } } impl Contract { - pub(crate) fn check_psbt_chain_specific(&self, psbt: &PsbtWrapper, gas_fee: u128) { + fn get_expiry_height( + &self, + chain_specific_data: &Option, + last_block_height: u32, + ) -> u32 { + let expiry_height = if let Some(chain_specific_data) = chain_specific_data { + chain_specific_data.expiry_height + } else { + last_block_height + self.get_config().expiry_height_gap + }; + + require!( + expiry_height >= last_block_height + self.get_config().expiry_height_gap + && expiry_height <= last_block_height + 2 * self.get_config().expiry_height_gap, + format!( + "Invalid expiry height: {}. Expected value between {} and {}.", + expiry_height, + last_block_height + self.get_config().expiry_height_gap, + last_block_height + 2 * self.get_config().expiry_height_gap + ) + ); + + expiry_height + } + + pub(crate) fn check_psbt_chain_specific( + &self, + psbt: &PsbtWrapper, + gas_fee: u128, + target_btc_address: String, + ) { let min_fee = psbt.get_min_fee(); require!( gas_fee >= min_fee.into_u64() as u128, @@ -135,6 +201,11 @@ impl Contract { min_fee.into_u64() ) ); + + // For withdrawals with Orchard bundle, calculate the expected net amount after fees + if psbt.has_orchard_bundle() { + psbt.validate_orchard_bundle(target_btc_address, self.internal_config().chain.clone()); + } } pub(crate) fn check_withdraw_chain_specific( @@ -143,6 +214,7 @@ impl Contract { ) { } + #[allow(clippy::too_many_arguments)] pub(crate) fn ft_on_transfer_withdraw_chain_specific( &self, sender_id: AccountId, @@ -151,6 +223,7 @@ impl Contract { input: Vec, output: Vec, max_gas_fee: Option, + chain_specific_data: Option, ) -> PromiseOrValue { PromiseOrValue::Promise( self.get_last_block_height_promise().then( @@ -163,6 +236,7 @@ impl Contract { input, output, max_gas_fee, + chain_specific_data, ), ), ) @@ -185,13 +259,17 @@ impl Contract { &self, original_tx_btc_pending_info: &BTCPendingInfo, output: Vec, + orchard_bundle_bytes: Option>, expiry_height: u32, + current_height: u32, ) -> PsbtWrapper { let original_psbt = original_tx_btc_pending_info.get_psbt(); PsbtWrapper::from_original_psbt( original_psbt, output, + orchard_bundle_bytes, expiry_height, + current_height, self.internal_config(), ) } diff --git a/contracts/satoshi-bridge/src/zcash_utils/mod.rs b/contracts/satoshi-bridge/src/zcash_utils/mod.rs index 89ef353..ea6ecdf 100644 --- a/contracts/satoshi-bridge/src/zcash_utils/mod.rs +++ b/contracts/satoshi-bridge/src/zcash_utils/mod.rs @@ -1,3 +1,5 @@ pub mod contract_methods; +pub mod orchard_policy; pub mod psbt_wrapper; pub mod transaction; +pub mod types; diff --git a/contracts/satoshi-bridge/src/zcash_utils/orchard_policy.rs b/contracts/satoshi-bridge/src/zcash_utils/orchard_policy.rs new file mode 100644 index 0000000..f85813f --- /dev/null +++ b/contracts/satoshi-bridge/src/zcash_utils/orchard_policy.rs @@ -0,0 +1,116 @@ +use crate::network::Address; +use crate::network::{Chain, OrchardRawAddress}; +use orchard::Bundle; +use std::io::Cursor; +use zcash_primitives::transaction::components::orchard::read_v5_bundle; +use zcash_protocol::value::ZatBalance; + +/// Bridge OVK used to recover outputs for policy checks. +/// Hardcoded to all zeroes for now; can be made configurable later. +pub const BRIDGE_OVK: [u8; 32] = [0u8; 32]; + +/// Minimum number of actions required in an Orchard bundle per the Orchard protocol. +/// The Orchard builder automatically pads bundles to meet this minimum for privacy. +/// See: https://github.com/zcash/orchard/blob/main/src/builder.rs#L36 +pub const EXPECTED_ACTIONS_NUMBER: usize = 1; + +pub struct OrchardOutput { + pub amount: u64, + pub recipient_addr: OrchardRawAddress, +} + +pub struct ParsedOrchardBundle { + pub bundle: Bundle, + pub output: OrchardOutput, +} + +impl ParsedOrchardBundle { + pub fn amount(&self) -> u128 { + self.output.amount.into() + } + + pub fn recipient_addr(&self) -> &OrchardRawAddress { + &self.output.recipient_addr + } +} + +pub fn extract_orchard_bundle( + orchard_bundle_bytes: Option>, +) -> Result, String> { + if let Some(orchard_bundle_bytes) = orchard_bundle_bytes { + let mut reader = Cursor::new(orchard_bundle_bytes); + let bundle = read_v5_bundle(&mut reader) + .map_err(|_| "Failed to read orchard bundle".to_string())? + .ok_or_else(|| "Orchard bundle is empty".to_string())?; + + // Check action count first per Orchard protocol requirements + if bundle.actions().len() != EXPECTED_ACTIONS_NUMBER { + return Err(format!( + "Orchard bundle must have {} actions, got {}", + EXPECTED_ACTIONS_NUMBER, + bundle.actions().len() + )); + } + + // Since we require exactly 1 action, directly recover the single output + let ovk = orchard::keys::OutgoingViewingKey::from(BRIDGE_OVK); + let (note, addr, _memo) = bundle + .recover_output_with_ovk(0, &ovk) + .ok_or_else(|| "Failed to recover Orchard output with bridge OVK".to_string())?; + + let value = note.value().inner(); + if value == 0 { + return Err("Orchard output value must be non-zero".to_string()); + } + + Ok(Some(ParsedOrchardBundle { + bundle, + output: OrchardOutput { + amount: value, + recipient_addr: addr.to_raw_address_bytes(), + }, + })) + } else { + Ok(None) + } +} + +/// Validate Orchard bundle against policy: +/// - Recovers all outputs using BRIDGE_OVK +/// - Verifies exactly one non-zero output exists +/// - Verifies the recovered amount is within expected range (allows dust adjustment) +/// - Verifies the recovered recipient matches the expected Unified Address's Orchard receiver +/// - Verifies value balance matches the output amount (value flows from transparent to Orchard) +pub fn validate_orchard_bundle( + orchard: &ParsedOrchardBundle, + expected_recipient: &str, + chain: &Chain, +) -> Result<(), String> { + let recipient_address = Address::parse(expected_recipient, chain.clone())?; + + // Validate recipient + let expected_addr_bytes = recipient_address.extract_orchard_receiver()?; + if orchard.recipient_addr() != &expected_addr_bytes { + return Err(format!( + "Orchard recipient mismatch: expected {} does not match recovered output", + expected_recipient + )); + } + + // Validate value balance: for withdrawal, value flows FROM transparent TO Orchard + // So value_balance should be negative and equal to the output amount + let value_balance = orchard.bundle.value_balance(); + let expected_value_balance = + -i64::try_from(orchard.amount()).map_err(|_| "Orchard amount too large for i64")?; + + let actual_value_balance: i64 = (*value_balance).into(); + if actual_value_balance != expected_value_balance { + return Err(format!( + "Orchard value balance mismatch: expected {}, got {}. \ + Value balance must equal negative output amount for withdrawals", + expected_value_balance, actual_value_balance + )); + } + + Ok(()) +} diff --git a/contracts/satoshi-bridge/src/zcash_utils/psbt_wrapper.rs b/contracts/satoshi-bridge/src/zcash_utils/psbt_wrapper.rs index ba5b5df..f3f376a 100644 --- a/contracts/satoshi-bridge/src/zcash_utils/psbt_wrapper.rs +++ b/contracts/satoshi-bridge/src/zcash_utils/psbt_wrapper.rs @@ -1,14 +1,16 @@ +use crate::network::ORCHARD_RAW_ADDRESS_SIZE; +use crate::zcash_utils::orchard_policy::{self, OrchardOutput, ParsedOrchardBundle}; +use crate::zcash_utils::transaction::{Transaction, TransparentUnauthorized}; use crate::*; -use std::io; -use std::io::{Cursor, Read, Write}; - -use crate::zcash_utils::transaction::Transaction; use bitcoin::hashes::Hash; use bitcoin::{OutPoint, TxOut}; -use near_sdk::require; +use near_sdk::{env, require}; +use std::io; +use std::io::{Cursor, Read, Write}; +use zcash_primitives::transaction::components::orchard::read_v5_bundle; use zcash_primitives::transaction::fees::transparent::{InputSize, OutputView}; use zcash_primitives::transaction::fees::FeeRule; -use zcash_primitives::transaction::{TransactionData, TxVersion}; +use zcash_primitives::transaction::{TransactionData, TransactionDigest, TxVersion}; use zcash_protocol::consensus::{BlockHeight, BranchId}; use zcash_protocol::value::Zatoshis; use zcash_transparent::bundle::Authorized; @@ -22,17 +24,26 @@ pub struct PsbtWrapper { vin: Vec>, vout: Vec, inputs_utxo: Vec, + orchard: Option, + recipient_address: Option, } impl PsbtWrapper { pub fn new( input: Vec, output: Vec, + orchard_bundle_bytes: Option>, expiry_height: u32, + current_height: u32, + recipient_address: Option, config: &Config, ) -> Self { require!(!input.is_empty(), "empty input"); - require!(!output.is_empty(), "empty output"); + // Allow empty output if we have an orchard bundle (funds go to shielded pool) + require!( + !output.is_empty() || orchard_bundle_bytes.is_some(), + "empty output" + ); let sequence = bitcoin::Sequence::MAX; let vout = output @@ -61,19 +72,41 @@ impl PsbtWrapper { vin.len() ]; + let orchard = + orchard_policy::extract_orchard_bundle(orchard_bundle_bytes).unwrap_or_else(|_| { + env::panic_str("ERR_INVALID_ORCHARD_BUNDLE: failed to extract Orchard bundle") + }); + Self { - branch_id: get_branch_id(expiry_height, config), + branch_id: get_branch_id(current_height, config), expiry_height, vout, vin, inputs_utxo: inputs, + orchard, + recipient_address, } } + pub fn validate_orchard_bundle(&self, expected_addr: String, chain: network::Chain) { + orchard_policy::validate_orchard_bundle( + self.orchard.as_ref().unwrap_or_else(|| { + env::panic_str("ERR_NO_ORCHARD_BUNDLE: Orchard bundle is required for validation") + }), + &expected_addr, + &chain, + ) + .unwrap_or_else(|_| { + env::panic_str("ERR_ORCHARD_VALIDATION: Orchard bundle validation failed") + }); + } + pub fn from_original_psbt( original_psbt: PsbtWrapper, output: Vec, + orchard_bundle_bytes: Option>, expiry_height: u32, + current_height: u32, config: &Config, ) -> Self { let vout = if output.is_empty() { @@ -89,12 +122,19 @@ impl PsbtWrapper { .collect() }; + let orchard = + orchard_policy::extract_orchard_bundle(orchard_bundle_bytes).unwrap_or_else(|_| { + env::panic_str("ERR_INVALID_ORCHARD_BUNDLE: failed to extract Orchard bundle") + }); + Self { - branch_id: get_branch_id(expiry_height, config), + branch_id: get_branch_id(current_height, config), expiry_height, vin: original_psbt.vin, vout, inputs_utxo: original_psbt.inputs_utxo, + orchard, + recipient_address: original_psbt.recipient_address, } } @@ -114,6 +154,21 @@ impl PsbtWrapper { pub fn get_output_num(&self) -> usize { self.vout.len() } + + pub fn has_orchard_bundle(&self) -> bool { + self.orchard.is_some() + } + + /// Get the Orchard output amount by recovering it with the bridge OVK. + /// Returns the amount in zatoshis (satoshis for ZCash). + /// Panics if there is no Orchard bundle. + pub fn get_orchard_output_amount(&self) -> u128 { + self.orchard + .as_ref() + .unwrap_or_else(|| env::panic_str("No Orchard bundle present")) + .amount() + } + pub fn get_utxo_storage_keys(&self) -> Vec { self.vin .clone() @@ -127,6 +182,15 @@ impl PsbtWrapper { .collect() } + pub fn add_extra_outputs(&self, actual_received_amounts: &mut Vec) -> u128 { + if let Some(orchard) = &self.orchard { + actual_received_amounts.push(orchard.amount()); + return orchard.amount(); + } + + 0 + } + pub fn get_output(&self) -> Vec { self.vout .clone() @@ -140,7 +204,7 @@ impl PsbtWrapper { pub fn to_bytes(&self) -> Vec { let mut buf = Vec::::new(); - let version: u8 = 2; + let version: u8 = 3; buf.push(version); match self.branch_id { BranchId::Nu6 => buf.write_all(&[7u8; 1]).unwrap(), @@ -170,6 +234,32 @@ impl PsbtWrapper { t.write(&mut buf).unwrap(); } + if let Some(orchard) = &self.orchard { + zcash_primitives::transaction::components::orchard::write_v5_bundle( + Some(&orchard.bundle), + &mut buf, + ) + .unwrap(); + + buf.write_all(&[1u8; 1]).unwrap(); + buf.write_all(&orchard.output.amount.to_le_bytes()).unwrap(); + buf.write_all(&orchard.output.recipient_addr).unwrap(); + } else { + buf.write_all(&[0u8; 1]).unwrap(); + } + + if let Some(recipient_address) = &self.recipient_address { + buf.write_all(&[1u8; 1]).unwrap(); + let recipient_address_bytes = recipient_address.as_bytes(); + + let len = recipient_address_bytes.len() as u64; + buf.write_all(&len.to_le_bytes()).unwrap(); + + buf.write_all(recipient_address_bytes).unwrap(); + } else { + buf.write_all(&[0u8; 1]).unwrap(); + } + buf } pub fn serialize(&self) -> String { @@ -177,60 +267,137 @@ impl PsbtWrapper { } pub fn deserialize(psbt_hex: &String) -> Self { - let bytes = hex::decode(&psbt_hex).unwrap(); + let bytes = hex::decode(psbt_hex) + .unwrap_or_else(|_| env::panic_str("ERR_INVALID_PSBT_HEX: failed to decode hex")); let mut rdr = Cursor::new(bytes); - let version = read_u8(&mut rdr).unwrap(); - let branch_id = if version == 2 { - let branch_id_u8 = read_u8(&mut rdr).unwrap(); + let version = read_u8(&mut rdr) + .unwrap_or_else(|_| env::panic_str("ERR_INVALID_PSBT: failed to read version")); + let branch_id = if version >= 2 { + let branch_id_u8 = read_u8(&mut rdr) + .unwrap_or_else(|_| env::panic_str("ERR_INVALID_PSBT: failed to read branch_id")); match branch_id_u8 { 7 => BranchId::Nu6, 8 => BranchId::Nu6_1, - _ => unreachable!(), + _ => env::panic_str("ERR_INVALID_PSBT: unsupported branch_id"), } } else { BranchId::Nu6_1 }; - let expiry_height = read_u32_le(&mut rdr).unwrap(); + let expiry_height = read_u32_le(&mut rdr) + .unwrap_or_else(|_| env::panic_str("ERR_INVALID_PSBT: failed to read expiry_height")); - let vin_len = read_u64_le(&mut rdr).unwrap() as usize; + let vin_len = read_u64_le(&mut rdr) + .unwrap_or_else(|_| env::panic_str("ERR_INVALID_PSBT: failed to read vin length")) + as usize; let mut vin = Vec::with_capacity(vin_len); for _ in 0..vin_len { - vin.push(ZcashTxIn::::read(&mut rdr).unwrap()); + vin.push( + ZcashTxIn::::read(&mut rdr) + .unwrap_or_else(|_| env::panic_str("ERR_INVALID_PSBT: failed to read vin")), + ); } - let vout_len = read_u64_le(&mut rdr).unwrap() as usize; + let vout_len = read_u64_le(&mut rdr) + .unwrap_or_else(|_| env::panic_str("ERR_INVALID_PSBT: failed to read vout length")) + as usize; let mut vout = Vec::with_capacity(vout_len); for _ in 0..vout_len { - vout.push(ZcashTxOut::read(&mut rdr).unwrap()); + vout.push( + ZcashTxOut::read(&mut rdr) + .unwrap_or_else(|_| env::panic_str("ERR_INVALID_PSBT: failed to read vout")), + ); } - let inputs_len = read_u64_le(&mut rdr).unwrap() as usize; + let inputs_len = read_u64_le(&mut rdr) + .unwrap_or_else(|_| env::panic_str("ERR_INVALID_PSBT: failed to read inputs length")) + as usize; let mut inputs = Vec::with_capacity(inputs_len); for _ in 0..inputs_len { - inputs.push(ZcashTxOut::read(&mut rdr).unwrap()); + inputs.push( + ZcashTxOut::read(&mut rdr).unwrap_or_else(|_| { + env::panic_str("ERR_INVALID_PSBT: failed to read input utxo") + }), + ); } + let orchard_bundle = if version >= 3 { + read_v5_bundle(&mut rdr).unwrap_or_else(|_| { + env::panic_str("ERR_INVALID_PSBT: failed to read Orchard bundle") + }) + } else { + None + }; + + let orchard = if let Some(orchard_bundle) = orchard_bundle { + let is_some = read_u8(&mut rdr).unwrap_or_else(|_| { + env::panic_str("ERR_INVALID_PSBT: failed to read orchard_output flag") + }); + if is_some == 1 { + let amount = read_u64_le(&mut rdr).unwrap_or_else(|_| { + env::panic_str("ERR_INVALID_PSBT: failed to read orchard amount") + }); + let mut addr = [0u8; ORCHARD_RAW_ADDRESS_SIZE]; + for addr_byte in &mut addr { + *addr_byte = read_u8(&mut rdr).unwrap_or_else(|_| { + env::panic_str("ERR_INVALID_PSBT: failed to read orchard address") + }); + } + + Some(ParsedOrchardBundle { + bundle: orchard_bundle, + output: OrchardOutput { + amount, + recipient_addr: addr, + }, + }) + } else { + None + } + } else { + None + }; + + let recipient_address = if version >= 3 { + let is_some = read_u8(&mut rdr).unwrap_or_else(|_| { + env::panic_str("ERR_INVALID_PSBT: failed to read recipient_address flag") + }); + if is_some == 1 { + Some(read_string(&mut rdr).unwrap_or_else(|_| { + env::panic_str("ERR_INVALID_PSBT: failed to read recipient_address") + })) + } else { + None + } + } else { + None + }; + Self { branch_id, expiry_height, vin, vout, inputs_utxo: inputs, + orchard, + recipient_address, } } - pub fn extract_tx_bytes_with_sign(&self) -> Vec { - self.get_zcash_tx().encode().unwrap() + pub fn extract_tx_bytes_with_sign(self) -> Vec { + self.get_zcash_tx() + .encode() + .unwrap_or_else(|_| env::panic_str("ERR_TX_ENCODE: failed to encode Zcash transaction")) } - pub fn get_zcash_tx(&self) -> Transaction { + pub fn get_zcash_tx(self) -> Transaction { let transparent_bundle = zcash_transparent::bundle::Bundle { vin: self.vin.clone(), vout: self.vout.clone(), authorization: zcash_transparent::bundle::Authorized, }; + // Here we encode the Zcash transaction with orchard bundle so it can be submited to the network let inner_tx = TransactionData::from_parts( TxVersion::V5, self.branch_id, @@ -239,29 +406,51 @@ impl PsbtWrapper { Some(transparent_bundle), None, None, - None, + self.orchard.map(|b| b.bundle), ) .freeze() - .unwrap(); + .unwrap_or_else(|_| { + env::panic_str("ERR_TX_FREEZE: failed to freeze Zcash transaction data") + }); Transaction { inner_tx } } - pub fn get_pending_id(&self) -> String { + pub fn get_pending_id(self) -> String { self.get_zcash_tx().compute_txid().to_string() } + fn tx_digest>( + &self, + tx_data: &TransactionData, + digester: D, + ) -> D::Digest { + digester.combine( + digester.digest_header( + tx_data.version(), + tx_data.consensus_branch_id(), + tx_data.lock_time(), + tx_data.expiry_height(), + ), + digester.digest_transparent(tx_data.transparent_bundle()), + digester.digest_sapling(None), + digester.digest_orchard(self.orchard.as_ref().map(|b| &b.bundle)), + ) + } + #[allow(unused_variables)] - pub fn get_hash_to_sign(&self, vin: usize, public_key: &bitcoin::PublicKey) -> [u8; 32] { + pub fn get_hash_to_sign(&self, vin: usize, public_keys: &[bitcoin::PublicKey]) -> [u8; 32] { let tx_data = WrappedTransaction::to_zcash_tx( &self.vin, &self.vout, &self.inputs_utxo, self.expiry_height, - public_key, + public_keys, self.branch_id, ); - let txid_parts = tx_data.digest(zcash_primitives::transaction::txid::TxIdDigester); + let txid_parts = + self.tx_digest(&tx_data, zcash_primitives::transaction::txid::TxIdDigester); + let script = &self.inputs_utxo[vin].script_pubkey; let sig_input = zcash_primitives::transaction::sighash::SignableInput::Transparent( zcash_transparent::sighash::SignableInput::from_parts( @@ -273,9 +462,8 @@ impl PsbtWrapper { ), ); - zcash_primitives::transaction::sighash::signature_hash(&tx_data, &sig_input, &txid_parts) + *zcash_primitives::transaction::sighash::signature_hash(&tx_data, &sig_input, &txid_parts) .as_ref() - .clone() } pub fn save_signature( @@ -294,23 +482,32 @@ impl PsbtWrapper { pub fn get_min_fee(&self) -> Zatoshis { let fee_rule = zcash_primitives::transaction::fees::zip317::FeeRule::standard(); + let orchard_action_count = self + .orchard + .as_ref() + .map(|orchard| orchard.bundle.actions().len()) + .unwrap_or(0); + fee_rule .fee_required( &zcash_protocol::consensus::MainNetwork, BlockHeight::from_u32(0u32), vec![InputSize::STANDARD_P2PKH; self.vin.len()], self.vout.iter().map(|i| i.serialized_size()), - 0, - 0, - 0, + 0, // sapling_input_count + 0, // sapling_output_count + orchard_action_count, ) .unwrap() } + + pub fn get_recipient_address(&self) -> Option { + self.recipient_address.clone() + } } -fn get_branch_id(expiry_height: u32, config: &Config) -> BranchId { - let current_height = expiry_height - config.expiry_height_gap; - return config.chain.get_branch_id(current_height); +fn get_branch_id(current_height: u32, config: &Config) -> BranchId { + config.chain.get_branch_id(current_height) } fn read_u32_le(r: &mut R) -> io::Result { @@ -325,6 +522,18 @@ fn read_u8(r: &mut R) -> io::Result { Ok(b[0]) } +fn read_string(r: &mut R) -> io::Result { + let len = read_u64_le(r)? as usize; + let mut recipient_address_bytes = vec![]; + + for _ in 0..len { + recipient_address_bytes.push(read_u8(r)?); + } + + String::from_utf8(recipient_address_bytes.to_vec()) + .map_err(|e| io::Error::new(io::ErrorKind::InvalidData, e)) +} + fn read_u64_le(r: &mut R) -> io::Result { let mut b = [0u8; 8]; r.read_exact(&mut b)?; diff --git a/contracts/satoshi-bridge/src/zcash_utils/transaction.rs b/contracts/satoshi-bridge/src/zcash_utils/transaction.rs index 021c2bb..94d2f49 100644 --- a/contracts/satoshi-bridge/src/zcash_utils/transaction.rs +++ b/contracts/satoshi-bridge/src/zcash_utils/transaction.rs @@ -2,12 +2,17 @@ use crate::network; use bitcoin::hashes::Hash; use bitcoin::{absolute, ScriptBuf, TxOut, Txid}; use zcash_primitives::consensus::{BlockHeight, BranchId}; -use zcash_primitives::transaction::{ - Transaction as ZCashTransaction, TransactionData, TxVersion, Unauthorized, -}; +use zcash_primitives::transaction::{Transaction as ZCashTransaction, TransactionData, TxVersion}; use zcash_transparent::builder::TransparentBuilder; use zcash_transparent::bundle::Authorized; +pub struct TransparentUnauthorized; +impl zcash_primitives::transaction::Authorization for TransparentUnauthorized { + type TransparentAuth = zcash_transparent::builder::Unauthorized; + type SaplingAuth = sapling_crypto::bundle::Authorized; + type OrchardAuth = orchard::bundle::Authorized; +} + #[derive(Debug, PartialEq)] pub struct Transaction { pub inner_tx: ZCashTransaction, @@ -52,17 +57,17 @@ impl Transaction { } pub fn get_transparent_builder( - vin: &Vec>, - vout: &Vec, - input: &Vec, - public_key: &bitcoin::PublicKey, + vin: &[zcash_transparent::bundle::TxIn], + vout: &[zcash_transparent::bundle::TxOut], + input: &[zcash_transparent::bundle::TxOut], + public_keys: &[bitcoin::PublicKey], ) -> TransparentBuilder { let mut builder = zcash_transparent::builder::TransparentBuilder::empty(); for index in 0..vin.len() { builder .add_input( - public_key.inner, + public_keys[index].inner, vin[index].prevout.clone(), input[index].clone(), ) @@ -79,21 +84,21 @@ impl Transaction { } pub fn to_zcash_tx( - vin: &Vec>, - vout: &Vec, - input: &Vec, + vin: &[zcash_transparent::bundle::TxIn], + vout: &[zcash_transparent::bundle::TxOut], + input: &[zcash_transparent::bundle::TxOut], expiry_height: u32, - public_key: &bitcoin::PublicKey, + public_keys: &[bitcoin::PublicKey], branch_id: BranchId, - ) -> TransactionData { - let transparent_bundle = Self::get_transparent_builder(vin, vout, input, public_key) + ) -> TransactionData { + let transparent_bundle = Self::get_transparent_builder(vin, vout, input, public_keys) .build() .unwrap(); let lock_time = 0; let expiry_height = BlockHeight::from_u32(expiry_height); - let inner_tx = TransactionData::from_parts( + TransactionData::from_parts( TxVersion::V5, branch_id, lock_time, @@ -102,8 +107,6 @@ impl Transaction { None, None, None, - ); - - inner_tx + ) } } diff --git a/contracts/satoshi-bridge/src/zcash_utils/types.rs b/contracts/satoshi-bridge/src/zcash_utils/types.rs new file mode 100644 index 0000000..aab7a40 --- /dev/null +++ b/contracts/satoshi-bridge/src/zcash_utils/types.rs @@ -0,0 +1,8 @@ +use near_sdk::json_types::Base64VecU8; +use near_sdk::near; + +#[near(serializers = [json])] +pub struct ChainSpecificData { + pub orchard_bundle_bytes: Base64VecU8, + pub expiry_height: u32, +} diff --git a/contracts/satoshi-bridge/tests/orchard_bundle_cache_100000.txt b/contracts/satoshi-bridge/tests/orchard_bundle_cache_100000.txt new file mode 100644 index 0000000..9935fd3 --- /dev/null +++ b/contracts/satoshi-bridge/tests/orchard_bundle_cache_100000.txt @@ -0,0 +1,2 @@ +utest1fk0tylrp4pde88uxz6sp25h0mv5q3tv99clzuvqzj7kqgmdv4mm4kqgfmx9z2tr0lqgff7l53e6uy3yq8kkrrnhgx07z65ktqdx5s694hytdtfaa7pg3dsgvghpn5rg07xm5snfl6vc +01cb7ee2007fac082558af7200f313956d869f63edefc65093c5798a36fe18988516bdf4fc0eda8481cb79e7312d5b35c0370d172d85921141a64f8738db95711808da3b75e79731f01e38814a59c76980c7ece4c3036cec201f18bc5acdc8df9eede38e633a5c7f919c8386d0bd1d7d42fa7195f611ad3e6500fb4422ff9b013ef5723d51f9ff40f128bb1c60408be789a41c6eba3cebde6bb31846d9b52297bc9a347073383bf2f83d3b0fbc18f0b1ccc8bedc6e528c462a47cf78c1becfb1d54c20d8cadfe80c973ebe21092b9caaf59e6bedde42f1932797f485252bb1c1ff0f370e94d9f41226aade352d52859182fe6d6cb4a364a7e20f4bd11c22e30fa96f82f055881ee9e0efc860d6ea70a1f8c6a3d09486e9de0b1c347ca15f78746cd41af4c85519e579c4f08b4fc124051efa54337788b76a8d5897bbc12f1f095df65d7e09202c73d308f8d0d3457c4308f2123d4026ad7914471dc8f50a04e1e6697f49873553e09edcf2ea9a81261edb9f34ab8f7228d3a996c84113c25f8bee09ef5b7c5770a63b6a1e5e70a5a5cb236876b9f5707756d14b0e1d12d547ef2059f0539b3f2258cd667b08e3b1d48eeb4becdce6d6a30f31afc9944fc72dd25148350e8809d1f8338c11864b9bf45861c1f3a2dfccf6bfc5216b910f89f084a67247586652610423eee5a23b0848ab62b203b3ddb9e6d529b68fa965b14086e78540f91afcdd8d06009d8a5cf21728ae5aeb75b5b44ee14ca3a6233e6302d10fa2c9e3238eab5a1dcd4e5943a012ec24f23fbe312b9bef0185c585b28a88d62a2bfef2b6c4c84c7344e4ede97276ff0ff3955fd87b006e851132a6583708f431d44ae97aa5923f2dd10e28b81e49fdb84280ec930c0303c289ba8a845c806ed4e187b1e45c1da20054fd18c222f2ab36f6761b5d7936732f0f2301f67c66ede8df8c7347e0c492d20c2ea8a1d92bd56b8a93eac96f5e0a08ec6a020ac1f0d84669dd7ee02f97469e88b2afbdca3902287025d4e208329f790b32e7776ff0cc13498a3506a02546e36f66f38b9c28ba6e2ea471e0d1f8b7f665268592101dd6df823c3d3a476d2c2d411e72bec3fa8fc3adb361b7faa4f595c71864c51e65865020ded108b10737048b2c4f92c1a8e08de6789897026079feffffffffffae2935f1dfd8a24aed7c70df7de3a668eb7a49b1319880dde2bbd9031ae5d82ffd801304d08780c51301bbfe276a3185cf4380fafb9e5bad62d0807e970ab5588b9009fd4605b4cad7fa718afbbdf5bf2658a4a394b23729ef943338d59caa28578592a712ab052790f8a47ea6ca032a153c339e88cbeaf54b0926304ac30050083433a7b83bc8fdc49033c82ea5d3bf80ef9e3cce7d5eca6e31566c4ad48118690d8bb48f26919bcc6656d7044814c12256519be1d57004c0537e6f83d3fa4d977d84c01d6ebabd83fc36a7428158e698c4b6836db59a63a0362957e70db0a85fa13fb677e53f6f9c81ac09ea8efd0eaf3e916116646d2a6984f81787642555239db1a912d9cf3614e3081920a80057641f0ea2f5996baf6bac1169959a82fb9b7eb0fcc9340476ddea6ad6da311a8023984014eb3b6bb06c5760756de62bc48d6830d8516731d3d24eafafd27113edee038640e7fe7c2c3abf535f67c522dc9a87829f79f3ce4552fd84f2d79e85058ea0de939d6e98cadc018472e14dd4c4f80e85caab0af4129e809b7722e313c9fb8cdce25b1b548fe247264b96bb12bb26b41742a8551c0c4127e9811222d4a7cecbd650261afa516a83bc37792577fb59e6b765ca0488099c36ce8f78af4a072bff0c4d374a9f9d743e64af24d8fbfdddf38b76d2d3dec584fef8c3772a2c5e9596178e2f03b1da1f57c3cd31da53851728bd8f34fee2cffadd912880e67e56cc31e65ae9549251a297e7e1d9e015d2fe223d2851d4a0ffc7023f2073c778b9d16271663dde918a44701d63406b006895d6a532f2fdde9fc31aa6a114da32b460543e978e86d64ffe00ae598ac0a3c7d52b34a5fd6d3b934c0b60b32b73e1fc146fd0eca154a12cfd2e5fdf385891112e66a1e6f3eeb96fc824ee04a8c0ec83d102e349a655d1943dd129d470aa56350f7f1ceaba420f0e4e9b8743b67bab4cba0db01e4179927480aa00a6c9d901bc68febea40147583a7d6f5be317290e9e06a3187d7bdd3de302c651873922182d6dc4295c95df598c4d2581beebdddc27f71a75ba90c73b3e078000e30256c6eefb7a2e8e884bc1e8a2b6b3c5c2bfd8bac5823bf1574a121df29223c9746ae07be640bc3b05dac8c8c1793238d61b16bf547bd31b330449da071743afb28783e355ee880d854ca54dd9b93e7d5e8b8bc2f5fbf987e0195ce046b3a20e3f14b1a9f3b0861cf4fefc79eddd1fd6344f1d84c2ffbd8ff83d9206f31d7f51d4d68fb837050eda2af9c266a37d2995426e6754ca24045c9f00d1d3c2f4adeff15c2741723a9749f1e8e6dd89d169c9bc628821820cc0f35bc122e1e3ca4e4191a73a6238130d70c39871e213327cb1ceb0b5a6abe168263963877f23e2aaab147538b85f921646625274a26c8ef48eb6dc96c0c3085604f687bf880334f21ae456275a026ea28a167b6340a7110e34b0b26be14d1f722fdddf3e29aecc7242f85c8f9769450b2b13520275f09932846c17c70873f59df8b26ad5666c0913ed9398201d66d83b86143c06a13cc4673d32eb255d31b50ae973d1f18564f542649d226537159c1af7addb8826bd77ce744bc1eab9b7643e57f29016790a72958cf9e80ac11537029e359a05303fa629b7f2ae8156ad378cee6c5df97e73702847e2df0d23a0d3087d1bc64a9ffdd3d27f7db1d7699f6f2ddf274befa7c749824ad0a35ad9759d19be939b1098ecda61608a980aca50c77563de7f255b71efd502f154b407b0ac36bcd4ea8ed03c356629ecb72f710aa1809b9a6e096d1a896bb4f149736280990c635468d63c40623a64b019c6e0550871922de50f13e1bae2f7a7b323bccc58376e5a6712feca9953d973f3b162a5bba74d2c3525973324432be93e69de14dc2fccdefc414181068d4eca7f9e4b79f84cea00a3c507ba71b549b4d9e5ece7ca04c35ded03f3a574205419e756aabe5e5459cd8ff29ccd4d525a5ddc408711181d74fb60181d7b8fd193dd9abc0f8bd9270302069c8cda1712296fca753841ec1edffe341a2c067e20c9df9a5c309790fb0d463a96bd307f05cc70a98ad124050ac123d951384ab6e601a306422fbb6b2da1b84d1bf0e0b490c0ea310b2da1bf36a247a8a864fd8d3114d41d7dd43e625917c34a2b46a8df3a3621bee6a5d42b2c170ea27baca6bc1a78fa03f00c1bc410eccf241e3aac201817b8ffc93e79dd1bfb94f22e90dff8548ffecdbe41722ab8ec46140673836d2304aebb9d8f5309136e0a51719d3b02b0b14113ae68ba8556237a7888e9d2ce66b21a042c6c468e0723b2f1bde9a1144b15dbf1c5c135135a237a09baf1a5dd3d7e0864e15eca3109f56bb0547648b12c0d31738d13f2dada92cf139e25af74bba536c8b6f2551b35a0ffaa517051d7c38b96d35db4ffdb0fe6be4fabde7c42ae62b8b1588e65b927c8ffb7a21d24358cc3a0e8390eaa15abb96f35c5ff30466a52436557db2f773d5639caea747a204b748c6e7dde8a7a40550ca99a6196112c37171ff4c09a8d2054b9277b7b3884c1cd2ab751cd5e36534368a63b97a36ae4a3e156a664033a00dcecdda702f55ef6e3832ee58253624f87168e9c962ba46bdab392d077d0700ac516f50b3564d582d804df13149cc3cb34b1d0692a1b57d040de3d543357c7185106f2ca62f0f78c8203d672122a42123d833e83a3d358dd1ca0b495f2a67a16cc767c1cbe16887cb0389eb6904bca9d9e7a2f5989d24804ec6ca12fbf779f1580516609db4ca3f480b90c05260d8e518b9bbd9ce054b50c7fb44f57ec34622a2dc69c0c43954a2bccf22258bfd58d76c41256b9122c5be0144d8a7ef77ede2a31ba57f80ff7ecb82f43732d4642d730761bbf181a7d86306ce6d48436a94812277c7fd54ee794f10d8619575d1b8ef15957d2f2e5ba6ef31cacac51d0c39a2a519870422477f3581e6c1568032edd936364d2e6bced8636102784c733dce81738030083197bc485e80fae6ba92ec28858a8a1a53212c0d7452782c9d7c30d1d9225e4f94b1ea5fec4388d6ee85577a746035b49e65fba33a6c75a31e0a7552ade8ec4253e9124d8af9eede4b7c09947e61acda0d04d319a85bbd5e5cdc316173fabcbe9bedf7e1433016d17bc09135061c30bea4a91fa6acf9a71cb9fb9bc17de7fc232905776657896ad6b1a1b91e2078fdd308bc2e22f750fe4a6e880b605d185c4172442c83868974495e6d6e62aa9b1a72cf6992f008c9c485c971678324232199daa2f9e17919e76a3142141c2984c7ea7fab0bd38628745f3c9e47e06ce2ab7ccba895b9b3205ca372caddac6234d609b71a8216f65dde953c13bda1c649d5b1ec1709e66bd5e94b0c44e31ad1f9d1c1fe3629bc2ab874a25990bd322b533475630b1e05dc30a2fe317a53472506bdfe7a126d6b63c42c4f7537f540081521bc40136b1484e0eccf505e7ada8882e58ddac12cc39e5d007aa3e6f061e2a59b9aac90c3a2d8ae99131d0d182a86bd5fa51624778f83891263077d46114fc39b9702303f8dde8cc23fd737273a072f0e9bf36f255c0305894822b32fc06159686c5c4f00c1c9c2bb3cda206cb3e7a683bae024fbfc51bc820f5e5010f10c6275a412afa08bfe79cec9a200b775a43866eaead410c9f456205a99b835200167c59272e1a387804a1404bc409c915ae5c464c2346b2c73f80a32cbb670321dabc7abd14080600c72f29920c34bd5cd0e610f5f9933b62155c375c85bbd8045c1fecab1d1686bfd4f06e62def62c536b5d3f5da2f5e3cbb71e08b58e69c912725cdebdcbf929b966218e6ce03d03910e662ce18f2439aef96a09e3f6097300be352dd32981d615872a9d76155118927f229a1de42394b4e744af698ee5e8043d21ad051f0aaecba4e1d6138136ffb8adb9e343bef0e2abf3ed4164727e8e392a861e0486968484e38e26e5b204e7a53b462fb4e1cd6574c0bb812da9f90737922b26a5730cc20bd395481c7c7e6d689edbfe3fd2d5ed3f51335b06e0697d380dd8c0d9abfda66a3aca3a06cf5fa1fccebc8399e0b3ed4dcbd775b74a18e321547042212a44070c4b3ecc7918e7ce2cb9b4f40512ff8469b84d0f4d12d7d70ffae68b054d7ec0a49337281e857431ef1863d7bfc4544634fe88f282c898d00c78b586a7eac50d61f294c97be26ca5452d97505478553266fa167c1ef67d6d2f5795ce5826331f8339fcbd359dd3e5a0c0224030f2e730fa7ae7db66dfab0b20d498975a815a02f828837d229925d9be1883ad45a471706b3b4009b888237d2045f129a1bf188ce5ddc1328674d8ca81d8b09c8be1b99f82b3a1f010a1a7ad0abeac0ffc1617534acdd3ac66a7e816d3b4e651cba0777be2bfede4a178aef934ae6922dc1becfb0f1e9b9dc41b39f0d1093c793f10e275863102835eed5a300854b6e514eb8306371153b1984984d39fd0683d06642abf94ae551878d644032a6050ca80c683b36e7e7c74ea92048d2a14729bef775b7f8d5d6e3e6de1773c1e59296abfaaa50e031a2f7b919042e24267e62d7028cccd740365e487782c6d3856493fa19ac4a120f4c380fe1b8bae11dfdf8c8219762a10080034b945b08f2ebc872d106e005f35eaee925250b67c5f9e97a96808881d009e3d851aa25e6425db71305565cad35d9a549e0b0606c12ed778fb476142266b02365e10a50acc1a9d5c725ef2053175159ea4e20f7b1322f6f5b16e1abd58ed1f4efe5bc70dde012d86c92d78d90df176a7db168229e5c569bef0854a020345e50c63c46869a63651b13abb1c503e8b4c81aef11349de22af3792c044cb90fb0b0a39b2a556602293d694523af6458ee54050f1e7aa748d9cff866ecac7ecf5f409bdcd101a8f231a0797da5cea153b47df9ded41c1f8f796aa1b51d5a85618b7a54e89ee4fb82282b9c58f96b99010d7ecbce62ff1daf6bf16ed0cc2896564cb39f3346a2a3003c51ea797315ffb8aab7e6283cd34d7f10fbde6a0bd55ad3010ef342ef83c56061e7149db26f98a421e1a5cd93118f1305dadbe9354c6edb05d6ac66e166c3823fe3a088b6109d347f918f8ae18586cfe780c9ab8a10d8ee89354ba3c5ee7b22693738f910562f4fb6bb3e5caf57ed69845f5d6b55dafaea6311a67a9d01cc01cbe995ac8fd81eacac89734eb33de33eadef52722f26ba9524baed21799520528da336d7484fd5a7464864df0f74b977f57f9601f0a67f3ff487d6a9fe04e3a2641d3c96c0ef701c162dfe6692a75a5b08a2398769436adb3f2cf9b3d05175b04b185fb8155fda0f91ad0883d252ce56755b61ab066aec2437b5c2421e03704101af18e93a42e5920d0c7bc6769eb32340832caa95ad40f7dca6baef36900672d5d0471f838970f78f37a4d0b60d6e639416d4f0723619c743b270f86c9fc7202bb30970465c0a335f5325577f2670e7d14ba81215795195fe1865df95f01331c7938e9cdee7d1aaf6c3f9dc06b20ea6b2fe4f3c3193df9bea37ab98cee612d200439295bf7b9ee77c2ab3d1a1f1d30be6426e382407af7f1988d7ed5d0ea13137a5a8e77ed936612fb5afc08dde76307b1e69a3088a3f2d6bfd2a935a4dd99218fffe04c80a4ce553f3df8f51d60f6af54ff1bb818464a114d3c0ba345735d252ed5371a872fe97c22ff83a3252642849cd13fa0b0e2acad4996a74894f4e52658e8a1b281fd9640c06102a10e461155de03d2e212d3519659f6af1bfaff07304323123c856ca3f93326bc7b3893afe464f926676806ee5dbeff93fc76046e0f7100424199d7a3a07a81b824396ec35a2106a0233a7f70c3e39e306a6190f01d508d99762537411baa8101b9515983e4160d91bf811ae762fe90f9e64b93223e72b17a02c2b5d965919f91bfdbf80bfca3c5b8ae5c75ccbac566010c9fb017283c0b3880161234a2ce9955160431c9ba7dd2a3a1df9c99bab0806c6dcea03b04b7120b117b874369e8b5d0a27c05debde73bd965968307beec071561098b853552d81b7b9ce077d5899ca9970f61c7f5a887f5e950de3c3873495c26dead95a7bce3b34d74d4088bdc4d8adb3418916a66160149f97e2a3c2c47006ffa234810826689b7ad3d8497983b09399e7f4e4ea4f539d3b5b6d160dd09dc2d7c53e1906eee199431a616c462f1feed9f1ce3776af2d698d599ca3b80a3bdffc681e2a950861cf2b4ef4337fa11b2b4c77101e642f0a790a1e5e305f69ae9449a0fbbae0d9aea0c81f898ae8baf2af316e96cd70bf7533369058ae32e8cc77ea4c01fab19c0d09d0832fe6452350e83d7ad52602de62c53aa6fd042ca7cfb9fc119a43e8a1c6195162566ca0b25259ddc7f36d333af64eebfe38bcd8070ffcb84e571ba50ad6d08d543393de6960ab304b5e3019b179c841e9f226f1167618d938ecd9436fc6c9447bb2e29d236e26055587ab2cd3f758a0bd4eff165a29594332e272863e56d418fcae5040c519a3b02652fcd88bc057656be5044ff591c391750a4b0b5f9e61e7f7cc05df6a3991a59defc0a02565c470312f9d732c6c5f302c0dbbe612b8db7f5852309fd58ee4ff41570e5d03a96a8e2d4a55fae66dc3e87db3596192a4383a763b2d15b0e3bd905c623537dca44448509b750f01cbe8fe35ea31c7e51bbdff0b7a96af73ccc271e8fbe2915688fb2973aaaf416a7ace38f90563e3869713df4bee4fa1060fdf573254feeed51391ca1b2207ff245d316a6d473932598a31a2e07154f25f245b5161b65b1c0c77f70ce452a5e4b7b48011e82f8a641d048e5a5fc5ca380998b9f0159889b6ae3a23181113beddf7c7d36b5f90e09fb46512c57bae49759fb694ca91eb24940c048b1317606eac465abef986c4f82a134d4250478cdb1ae1a33a12e6a6a87b12811645f55061b126950407046ddb90927a9ffec8e8233f5ec81d56862e6760e11c5fa8acb2e6eb2cb76d8cfb001b95be2911480b60169fe38d32e5dafeb835db79604610b8c3e4cdb7f673c5015ae60f665270cbea1664b183d1cb3c3ff9a4bb32c657bdfaba015e95b98f5d23d0308e26909992c89cd3a1857ee88f1ab25aa8db7d74a897c763113616fdf6fcd0fc56eec213132a0c9d565de8ede5c87d43f4e655c4b2e4e08743eaaa569c39f2a53b2ba489d8e2a72f7a218d33e747455e64db6bc18a30753fc467b642fad95144c0b98a614dc59955f5b9c9a38a64fe9ea33f27d6d6618cc302b2f38b2368b387fac6b0095b8680a72b24aa94c7f341da32a2d998deb484c624e9d1661a9c222 \ No newline at end of file diff --git a/contracts/satoshi-bridge/tests/orchard_bundle_cache_170000.txt b/contracts/satoshi-bridge/tests/orchard_bundle_cache_170000.txt new file mode 100644 index 0000000..7b130cb --- /dev/null +++ b/contracts/satoshi-bridge/tests/orchard_bundle_cache_170000.txt @@ -0,0 +1,2 @@ +utest1fk0tylrp4pde88uxz6sp25h0mv5q3tv99clzuvqzj7kqgmdv4mm4kqgfmx9z2tr0lqgff7l53e6uy3yq8kkrrnhgx07z65ktqdx5s694hytdtfaa7pg3dsgvghpn5rg07xm5snfl6vc +0151ae1c685ec3e5b7debc8ce7ce0c36af7b1d8b60d4b2a436a9970cf43ebb58978fb482348d4cd9b806bf6000373a33afce26a1f0c568000b47d1f9aa40e3a401c53f6ee2f2e3fab7a067d0dd683b7967292238823656eb5b108308be3a9d36993305ce41371a0031fbe1c49ab8b3217463b434f746a891d78a53330ed2d0ed305e9c241d063a765554a4fd97a60bd9b40c19830730262b42658ac79e4c9cb83f4743e93e0ebba99c3d3216b0bf6a9258f2c36c887f318f8d45f645df58f006d43567b84bc3fdfa7566f179e6d99aa53dbb70799f73aa41c1b387ed8470b31cb7251dd62c3b260d662a71623145cffe0f41472c8a14fb63ac3c6dc1c4b077504eace87e44b7ad82e42543ea958200902287dfc92549b4e478dec481d9ce864174a4990270beff7baa5fb281fbc248d2027d0429ab4947e528f865d4d672732c041be08157f6e9572b1f5b95ba5511f956511e624051fa09997d1b128b51304bc31c54890a06a5d8effdd77fe5da9641546029470a0c63be1e7121f06d560e56aab8030d455437a5dfdb7e9b9a613cadd2300b67aa733017495c526b2502fb5841796dd6f93b0c324e9d3be477a867a9006255a44f55b0e174c883c06ac53a7f00552701bd3c427dcd63581d0838ad554c28517e08e953807a1ffb24d792200950c012742698b6ba6c5434e855bfdcb1512ec5b0460c5de10e075412c0999c63f7dbf0e064460307f51cdca7624fc46c4d07f7ce74e99ca0eef1de0c4b48dada5d776adcc6e456e4b509e0ec12b14900c398ec3a7b4c9d1706518e891eb11be209a575e4366f1a9afc77069291aef682fe711679ac361f08cfbdd1998bbd9375f135a0a9e3f2d4e9a64e02f008c5b28eb39e08e25649b86da9584127e80946cb5a0141722e21cd62d6abd3e59aad16d4392d02c55c9e116ed5c16e0702e31885bea6e56990455413ce96f4e7141f3e2610538d2b4a3ac88cbcabc1229b5b8c5af2f1b903f0ae9516348fee334227c3ed25d388a42ad1975e62a48c8b1f1322700598d6e3ac77e16cced54cc82b0f9b19f9600ac20e7e662f8544dcf4c4b51b221bd3c19ee96f1dbce40ca99ac8dadce2c1c623b3b42948dd80a5c2a5bbb97c6287bd3a5d77f0ce3dcf8af38d8c0df612e2db29c80d02f067fdffffffffffae2935f1dfd8a24aed7c70df7de3a668eb7a49b1319880dde2bbd9031ae5d82ffd80138680a2327386836af3a2def37be778f8d3e371f5c05d5d74286573c504a0350c382de3e97d510e624e697d99d173e91f9b54fa92a7eb8a3f816b94efd4061318135229bfa4ecb8331c12ed3c09111cd82b51767031b273a9f7346c656e2da60e29c7f5e431b52136fbbe0c6a2ef6bd3ba1abb3a196ec77c9d5152337a3e18e1fe3dbecc81d0583bc842f06d5f0f5acf5b317422d63b1270702c59b7c372362829029afd69aa63c785cf043129fba0492dd619ef8fc8c9ba324c66c0997970f9d3689d2e645b67146d143409a08b395f45f37d18ec14550b7e2c6cd14b2f269bf4ab8e5f00a114542560d15037da1bbc9a2652ba01e539b559806d9cb0a6af9293cd2ba2567cd6d4716132b68815e014ba2def0959f5ce299740371bee5d942a759d1686170695bb8d59521e5c6f44ac5395285ee1b7267a492856cb486131c30bb18bc785027e42fd20d7a75b96e37502ba88410d98a862fb7795ad6493a8e2f57b1bac00f37486324e55ba32ca8d03b91427c7cd62a8ddb78fa017582d0b0b44320dc10d790cdf66a00efd565cafdea3e7dff13782f6db76486676907469c30f786c5d2e46ad6fb7dbb84fa671d8aa7044ba71975a44ca6e7d8c3c2ebc9ce8f602f755cf34dc6ba594f37ef2c23554b7a8ae96cbd9f8367cadd44a0c911568277eaf11991dfe77ee283851ec1770311ba4c1b15c824f200f571fe852a013f9295f61dced4928afb737df837f2a54bc91431ac65a87997f6d396af54c3c30ea7d49e9d3701c6c1acb08e16e09d1c8754fc30c8627f326786571ece73abcda513791c8631b4d078a19dce9075fb848183458509ea7556af72ac39c7d55c97432c714e4be936aef7f8e5da3068a1ea847fcbc5f7b1231ced16ebe7d8035ee2549c3dd402c6ffb85c5e22959a7a57e7a753829d18d2085db8f5afa99b88823ae7057361735df67704477eaabb3cec2ecc5e50652b4f7d3c27950850cd008d03d9bdf0f730866ff4303228f2b154a0eae84b53a135e5d9bf3391b2e07bdcd625853078fe5d0c465b159b9ba88b177ce8c55348e22b1dec76ff550a51ae8f97f81cb8bfcabd05c99bf61a2c1cb0c9c3b6ead0bb79443a49bfaf366b36e8334f41173237a4f90d075e58c4a51f6d1e8ea27930bb44dbc1a3a28ff612516679a65ca23739d25bde55758a0159b9cb85defe14bf2fa32d8301a87db20790de418b003a0df65983f05842e4916f89f709d0abbc737f3fabb04b1238c3156a25d6a1d91caa61183b7e5d224a0048d17ec9e6ec18a3610f094e2085d1e5a381edcd80572d9bd6f4b042ee5e33cc1e176fe08105a95c631c08b4aad2e93192c9f668ce10c09b0c8e97fd4017d9d20f056ea0ceaa593ff009e441e725c7f25afc29c2f0f009826f5d936817db9af7b4274eeb8d71d3ddf3132b27023c2b07c490d55bd8647d3d32eb0c22fa5f9a3556ef6ef7e5876f59f8eb348d8f189206ac12207232e64d122f976815fafcb8df4c6fa9cf31211ade50a101040a1487c943e3ec3f718eec1006e4b475db40cca288808978af265ed943d57c97275ad7056d114a45ccdf9f2d6f7e0d4665c289b1b39405cb2960937357c396fd29a26eb6bef700eb5d76c00b4cb25b6c34a56fa162a9af57f029aa8dfc4991c392721cfbf667d0006e6a0b2ef54c93c427ca8f8e964339048656b62630ec3323f94e04b28bc66d62c432060e9a0d6f963b907a91d7d3c8dcaa2bf2291c11c28eb4d65606d4cc99a38f07e91b0ba9be840b1bee009aa79defef605df9f17fe26f64dfb675cae3290655cbe03abf98acd44a134baa7ae661d14247ef841a097847e86306a6f1a1086cc2d23c21d1fbce93a84cfc6734e3fffdb9cf165ae464f48f7fb66aa6922a18566c6d860195be705dca0b95f38933fd196d941ba6f2442dfb55cb04dee8ad7be375d17324520072193175e874e3b040bbc561853b3308d54a5954d49d2ccf60fae719bb3c8ad353e3665ce677854f61daabb31a9c418463b75d2a596902d386b6b9252009591d46d6ba15a1939c98b30276e471feeb07895d03618448f33db4f0d463220eb83bb93f1de218a243ad20b86d3475db0f561b73e848ba02f5ac2acacfa7e80f3183670a32e1898dc5d2d138f88f01d7cb69cd73ad3faa7a46ebc06cc78a022fa21672198d610e0289bec6dc1d74cb8a4dcfc7f35b9c5da1ae9f1f25f8dc9007ab22b87948ce2500096d30c4cba9d70bd512efa58148b134ce687b6c809d452276ae59d08704b2c980661542f682d991b8d9f4d96ec2b72398c74cb32868003cf1e368963d4359caa1b104fda554b01a39db3eeb64a9e65dd5fa4c6b7cbd252729da31172a0e14164984046212c69c7b932b50eb30a577b99fb7c4d5fc53250506f9259a38e7722042f91a630ca86fe3f32f1dc07ca5c3a2d29f2d47295df83578752aab318fe9c9d890cd5f629f4248c33f513e6de3b3f88e9786968c9b54210d470756fd2090b8d1115514eea468d47959f4547b7805a0b0bc2084f66f440100c2e488bee7943fc8ae48847614c213515742b56728d37bc1c931f95e047c2084a3f86d572ef33b463f8a0c84c07bad7f023c8a7e7ddea3933cba0a9567ec2914b601876e36391a66e213639eca6409856533cfe1a1f19b14ec07a587195726dbcd8b0dfccb7ffe03346cababd53b55c004d3b92fa9d60554a798b7eacdbf14e601cd388db98fa621647df9e67b69c171776ded59abbef7b5038756591e1a2fa204cfb6c5729291633808d84c20f492b5178ad7514fdf9dabe2eccea2db2e09bab4f2fd92b35dc739b53db40a7fda605fce5323bf51ea4198e347c961e81e136c2de97808a2ab6ca9978be74d1969a71e883f3b40f448ea24dffcddec54612d16a7cd3588e3ce974dda3b9bb893fab863aa87b4269600ccebca1e25fd8c2c0b6eaf5d50a06ec991b02eb7a810da95c6d6da6950155f9afb7f14160e75942b364155103bde38b7fddcb50506c800755ff9652a337c018652c1bf82674b3825330fd7a25b3d8262063d6eb56050f627ede3574d631dd7d3b0b3093a6f059e8d0594e6445827effff8ec816b69ebacc302931a615d6deb57e20919bca2843be03c53eb32ad4d97c6d35e797144dbe364421901d7a4161a3688ca6270d135c4200e352976891660ad6bf84de0fddab160e401bd783d54bb094ddf1a6fa595856f2b6f1fb7e4838d9a26622e730e45262803d1c770620373759ac982c7d7631cd834458968f2353aa270d488871df83481514a764e97bbc6dae90580f1405c51941dd4d26669434cb50fe7ba857a4b09db1817036e0364ba0b76718534369784c923a8d56195879f0574ddffa436ec049776b69e5a56050e6821666292f5f621e639e7670fea20c28179f27310ee9c7a5b6bad3cd537b90a73a7ccfa4871079aa00ca3f14072466fa0dbbee703e8e4c6573e47e5a21e41cf8a1f056d8f9fb02bb321a9463375fea6618cd4d875d5b3c77c151a57de46ed79a7315ed73e4a5263f82d8efdd2138bd117415cc160f26c6d5c105163b7d2b7b6d96045063c0c19450f052f0c6771786902d09556046b94bf6ce7439ec03009f88005b38abdf3df86a21b38dc985bd45925c571ec227181a61f477e549950a3913b6dd9b152812073b31003ee6a8034415e79034102bcfac39abb0a705a55d6e2bb8f681bd65fba3fc22b16fd1faeef1a1b3c8f65e5027a70ba67a07cc37b7fd509e99aa9c08ca6a5cc300b176b997f266dc851624f459b3fe6d44a086ac27bf770a815a2739ee0add81dd2d2094acd06d066c134fc57cda9fccab73de112b1e3e317c26688020ac14d3386236bbbc1791fc1b7e3e9d5e617c0408081e87b901c6ff65b9c57dc8053220f1c50ae36a1d4fc86f962eebd3c1646fb0fdb636b49a947345b2dd317b5d6840ab7dc560185f93553e2e8e5bf6288a6ff8d209ef5724fb28ed9ee6f567333522a7f9fa643cf5b6ef17c2bb12b6b9e1b73aac6df846ab9b2738ab0b854bf41a43fa9609f9d11ac694d340354a62200875bbbad9b39ece791ff23cd841dc71d191d9f0b5ed630b220c63b45d758dee86f2fb69c880b58a38cfdc758e97835798639a1f509abf47b1cf6722b0d5cf35cc12ac5217a7140598dfdf644b14a1c8e2122d2fb144cba4f3757c170d84904e4f9e9f119bd4c7e5e8156de11111f43937d0f43d3ce8ac13b4f3136406203abec57db182d24ff92a1da21137f8d2cf1ad283f8f2df7b63ea45ec26ed6926511c453e49b2373a8b3f0736caa71ecc301440a395fd2cb7d6ed03261d4460234260f9dbefdde4e34806d6b2e3e85ed531897363929a21686fc2ac446d5014f6c715b37a8f7d010e2ca49065542e274903335681171f1e7a8746b99f92506fa03eb76dc2205ad1fa4931b8a8b509f30fe61c1c03eb39807a70a25530cfda7a56b0054144502e7153e31668259f95fa9e14d93db202f420755195c707b4325708a66807c16aa90a103f28c5d887d85b90ec444283d65f1674ed8742e73838691dfcca75a123ff8f435c76597f544dc944e5396b6358cff04b9a1bd1db1267e6eb89b73a83d7eb68fbd55c737c9c5e49164d2df08051ec1134a5411242dd772c13002466936bfce9baa791ed971dd48d357e7b3012b4451360492072d7616d86d7d14e995c2ec06b9e0f24fabba74f7b83252b0bc1f89cd427d226a6948cb983e4b0425369bf54a8915c32fabacaf4543f45211421b502ac29a4820a15adafce36fa36d035f20d386104ef5e2e5ca54a8ca2b8f712565f945416c47c78d20724fb26e48a2477c0c574af06bebe02c845b2453d5d8129c5d263ed44c40e01cacccc03b3d1d5b0ba0298d5e20ff0fcaaed8b04704721d9ba599208bf1dfd63d7208379b10e546ae02f35417af54856abb25ceddb56e34a69d2f0eb633f059ed4bffb807d27c86d03ca01694c3392091320f25ca6d95271f5e1df7ac2133520c0b2f30b410a1080033e9640f5b9aa1f39ecaff2c93732c01477a6109eda0ee1f12cbb7f36e5962a5ec4d7b0aabb7088684a9d23b8381378f25c70088eb0243401f7aff670cae1b8207278c9f11fce63c07fc938202c91bb89c72e5ea94006f9fa1725c454e50cc18a2d107933b859f62605a776accab3e76649dc345fdfb7e2feb8a49b3872316c9babcf172ddd013f51676b2a667d92a02562ff95440442ea4923b626842a3a7ba80d87317d54692867345d40c529a3fda43ac9a8dcc751821e1f440f83945273f86f390328cdcf798231feb4f1424248e2093391e5eded325ccb6328735cf7ef89e67d658e80407eb4f352f7cb16b0728e55dbbed0595b9f9a7df2ad4a0066deac166f26f1e9a8c0e1c32fae6b7ef19e94915afd3e52793cfa4346289324d08aceb09eabe3b1dae485acc8b5c17ff310ddb72e58aeb56c5ee3786c2d4ec8c06395005296e377550d14b6ed6ab7a122b03453f31ef74c8c7b0ace4d05013b0b861f2d2e0b52ba7f2e99fb40953f2b91b2eb118091fff88f0b458dfabf7497126a610ceef08d26b6c94d9d3c32f115d1e8420599199cd2a811e80ebd1d3ca088925a56f3bdd61a9690ecb49912bacce1369e78c9a3cfb527afc2b92d1e0a8e5df7aa9dd18d61513d79f77f942b3c2d119857c8484b64a4a9fff76220c05217bd5e485227084d8e1162dd340d7efba3d04fe7491885b92e8858d6c95b5e05843176b0cb688c51734cabab9655af9da71203c6402f735d323019588da203537f0efac5a32073ec160188669f6b465c75d1adbc75878182243599dd2635ebe28be8dbffc56e65511aa7e415fbb99ec05a51153ef720f545a54cd4584295a9c489538ad0214f31790ce4e906c3eb6d3bb102085a1a4fbf4f94d26b4cd6f491017ea96571db3ad8d985775ba5eac4c93b5830111da14afeeeea41bc646236dcbd50a430a0086b832baf2455d131bbda7202407498c5a20768384a9e0f6b62821b59a4a679c32c52805e724930f0d5ff9b0be1b31498f82814f6394d4d3f5f25cb34f1145ed3be13dbd44130c94ca2f8a0bc92fca1df5f62a381d66164a8bba9b3110e5d7c0c1158b14beb9ae012beed2719a92c39243d847daecb2e20ed379bd1ce775b6e2b7ee64708087431787d3ef1be28eacb776fd8fceb0f854c1d8a5a54d485eaa6ce66fc971d9773167fa29695ad422148c281260f78882985e9f8dc1be965d320963c0f49649ae25d20eb97d09b59e3a2f3937349e5253c41aad62f4dfa69241a0c3be5977f308613a6d1df70fe3a42dd6e225af7e9dab4988fc8b44fe89eeb2aae7edf6cb393e0f8936cf060f5b9a2a3e2d45dd7c8137d85d290babc585add1f9586c08e0cb20c4e2b0e022627101449344ff8c325d28821f748ae5053c3848becb66e4617b30fd6909c3fff5e6a90a8eae297974f4977b9ca67250bc9e7a4378308049e3d6eb76383efcc1670417bfae3fa3b4fd983a5cbaba7d1ed0ebaec8447c4fd11b81d86b092e4a9ad0300085478f5beec99214fa7cc5006fb35f3d60f567de3ca82da637a0fcb39b3acc15bb28c0239a8da853a818315b3f51ca7ba30e142b2e191f6778506e4a04fbe98cc66f5d52469fd0bc4fe0d692095697617c0fcb7c7fdbe79e598460db3a38320763b8d327bbceb5c36bd783322ef036dd02e391e76545c5d9bd9733d5650edf10c7e2cb0aa1fd42c4d31e7dd00e7807c8b665fe8f8aebea8075a142510543dc8a008c753c82cca82619514f0f610331ce873120e594b290d5a4662c37841b828a5cfb8bc79eeaebf78f05995e714237277a5f482fd97f123ed3ec641823662883964ebce72bb98934e51bc4e8a43101c4d7885c78d44e4520d90bc02a519738aa573f67bbde7bf2402d86c9e9ca42cff4b5542e9010c9a358195cd0015add8d06895d76da0b3995e133e1c510239b5ca66165d6ca243ef991fd096f191dd32713ba778d1dcbc0988108b259860d9e7a639cbfb0e9d5b6ef66da6841bc61face12c83734b21af84be758a8b5f6d2012f9377ced5ca0f5c755c5bc1533d459ec53370e8b4e19237e7e2aa0e3565cd158332ca71f62127ed0ddcf59702ba06fddeb817c843c81e5124c514e47235ce85f3c51bf56cf68937c9c90c7d92f895b8fc3c3a4ddc893868f11c7a4fe978af5683f2971aced736b2c4994b031799df3ec80a1553640746fd19aaf3ad2004d8d18b3d86bd29cb9ff709d5f5acb7d3cc9ec103 \ No newline at end of file diff --git a/contracts/satoshi-bridge/tests/orchard_bundle_cache_170000_0101010101010101010101010101010101010101010101010101010101010101.txt b/contracts/satoshi-bridge/tests/orchard_bundle_cache_170000_0101010101010101010101010101010101010101010101010101010101010101.txt new file mode 100644 index 0000000..a97f73f --- /dev/null +++ b/contracts/satoshi-bridge/tests/orchard_bundle_cache_170000_0101010101010101010101010101010101010101010101010101010101010101.txt @@ -0,0 +1,2 @@ +utest1uj9838ua605gzqjpufndhdqr56c2x4encs56zcatj692ttcm8yedqkr3elyglnued397nm3wyjdvcydpwsch740nstsvmvfcgtuh4g4kyygf3tf9y4gp9ku3hj4qcf3mtkf4zq7rzn2 +015cc6a0f17b38529be9c6e04baa8e72c2867355b2d6c15e90afd02f5f53398e2b853eb6cc036e800b420878d1f88a2396a0a940a3da008e96240b33e85c40e71b280450876c951eb52e84918914733e11c104ed4a64e972c2a524655af38df62d022babfd430470daa166896bd2538540a28339a4a9c0f0eb3dc7ed5404712b178a81a4851fd23e0fcfa122ad5e888474058e17aaa55c77d5963c29c22e79aa1159bbb32d6eb14237264ad1547ddc8c1c643df22c853beae9ff2214fbb5e8d2174becb8897809cce74e344c7b7fc2383a0b304d6ca6a5fadd19a0abefc43295c6b5a5b9763fdf1a6b7c205701d7dc2b01fcd6b93e086776e167d43ec058829b3d86228a47102ca5a2f2c19bf23c05a050bb789b57f43a8c683bd46f3e8403aedff1876a16d60201de5ffb3152d09847f037f042ff053ca0698764677a64e76fde17b97957250ba099e3ad2e9525bd4450aa36d3b60a5a5a1396ef80e4be25dadb619d8f4401c44305b801b1f389e10a665e9bed10f4490379cbf952046b6101d57f71894783a17a45810154ce1a139384c9b324e9883380df2bcefc55efa839033597fadb67258b12c51ba5a75b03405884cfdc826bba9fc5fa5fe2c6d003961e4cf666953ecab1ab8c128d60f194b65e89956c03a7c3af6141b9d44fd04e8ed05eedc00f42f5ec768576d573a99bd7d24ea77fa90078f09d7bb543794612900e333f5d51f96966619c1129127969de204df438c25f5e6d39ca71a346dcee7d05a1c1ca1df953d30c82921dbfd1ddde80705e40e061d946351de5b40449108bf586fe079016e7e39d8a47b76c632cb3b96600e5971815e0867b1223a94fc6488e41b8071564b9538e5a804c16095de2b9183aed9bc36dca6a2ab318508dcc0e6ee72809b5c4438e90656d94696f5e01d8373d14c9b5fdb1a90d93186ea2047c46a5be69b4912490edfb92240615a3aef2042643009137b55a6d796a40b67f1ec1b9e86aed2e7afb4b28557d3e05810c0f46130a0c0c17570ae91589a2047e05fcfcdddd65c03e94a7a8cd11df1c162db7dd8b657b7bfb696e9336ee25bbbdb2c021871188b37b55abe09a57299b02644382664f966bcbedb936c2e4d611e2dd86db175b0b3e81e4b8863b45068c54d292cf59b2da02f067fdffffffffffae2935f1dfd8a24aed7c70df7de3a668eb7a49b1319880dde2bbd9031ae5d82ffd8013b1dd5ab75d2980d86d729775fb5d4af9de3d7daff2a186219a1b0fb916abfc2696bb6da7336631ddf0d30ecbe5400962874a48c0d10908ffeec0a0addf775622bb68d8c741624edebf1fc51fdfc2bc3285eb0d838fec7ae73d52b7a57b20062b5ed92cd9027f3a368b930ba2008a99c5f4f76d6fcc2d7b66845b5e9336e93f85d305e83e3d620a6df0409e2c377743e5e2e899129427be9dd2721a5ef0164c1ab0096a278f88b17d4fd8482f298740dc64ee9d1f72fe79348c912a1efffdd903f77088fa37c515be049df12e967435a59ccd485490ae2271776128640f43738c10b9b20840ec044f81bfc003b8a7d1248838b26b3903ae7539c88ed4c507ff10c2f341d99f2b4daf46ee72882648f03c09578c99003ec40e5c56d452007c0528d4332a6b614b90e389b164e160a3d1ab6fe6e8670e6107106914cd3af56b021bfc50c6d3211fd8dcc717743a2f6a1616507f3833a8d6a4f388e490e9f4bc171e0f8aec570cebb4e312a3ace0dabe20966b35b484557619ffb69b9f706b26838e7c32ddd4dc2d5cb51a6288ce3ef44c0aee56a9125d924102abda45b16a1c5335a4655c7f089d0018a0814bacc489373a6473113600ed9ea1910cac21cf521d10437f151c867593e7016785c7b8ef46a5a3676ac529d30f12f82d64f35176cb12b776b092f4146422795e66ed088414398e312cfddb2ff01e7658dfef1f6b07077988872952ff583cc9fea4a5179099b496729bd40c0aa2323912e133ff87da8237391c2a22825c389f41b6adb0aeee99c7191080c348106eba3b08f409443c23a3b4a3beb4b216368756cb22cbf64b55eea30472770f6ed545d03e72e541da338ecee5f8686a93cb42f185eae2730827d50076b8caba6bdc24b515614ad2eb2a1b407834772365df4f0f71307fa0bb4ef1f2ff3c20a58418cba23b5fe049dc1402e80a984f77844729cd39ae199d3f1cbb353a9a7dcdf91c8fdc7879b47e9086f7e208a4a2ac632c7a50d599ea34f5b4b723f997020c8133fa102b6efed66487f74bc347465ba11a36c37db6ebf7a276520f2c74b092e6c923fdc8d6fb285611184fb60a8c7d42ae4656afe80b72e4586a3b092ea0437e62ae21627d7a18cb80ddbc67c41e3da06cd252508094e0b23e614262e1faeb5b60d21539f2b48b7807869bd852998c06fd830e2e29f9e42e520d46f7c238d32c89e2a9f46265b4ac17e89cedd166454a4d583f220d4bdaafb4a009b76616dcb6d8cc8925fda6bec40344addb4427d9618f33a1a65a2b46248e37ae7cb3e138a1d80247442b75eb1910a55fcbec52663fb94804cd2c90de50b22697cf93178aa5f6d3b094b7748c50239a39c23050edf8e891d7e1dd3bcb75f888a497b59eb7d7406ceacf8c92414ca00d99809a9b45ecf2f3201883e9df9ba7eff517b87d03261c29a322ae18b7f83f87e7a89e4535e7013d6379eebf832b377b88fd74f1178807113c7e3911e2c3259ba72901c841faedf7ea994e3115a46cddbb11dcc76e2dc09b59daf291f6d92c3b7665c3c12810cb8cb2f238e2f9ed5ba9d44bea7478a84ce00cb9cc4b0fb51650525c16329449833ec974d951b336ebcd56834e2bbb441b001c54f98a37e623901a516933b03a495013e74318ebb850656371991b485c22ad7a848ad225a706f7e8fb0f688e64ad939b3d2659f01f3ce2579c04ddecf6a2a3d1fa07ad2c7d19f4b52ef9eb4268eee8726f964f19f8ffc1b5e3557faf2d8d5be686170591b9143ae6b03d9d7414cfea2312cdf88189418d9ac3ee9cc3d0cc8edd529cd4384b2d6066450e3001465beecf2909f0d81d15701922ae0ba303891bb6650f998bb51da580aa5458bd4e170f679529de67305c912e6d83c0514d60b1985675834706292fe57b44c0f68d5ea317622b66f81a2a27e4012c0392326f536afc5a70e2d114750b0f4d32eacf0b6c9224bb59e960ab17e63b73c12b3ada78b01c15e9fd1a1d1ab1f2ab6172e97e8e58a341f96686024dc722a8fc864ab3ba4bcaa22143700d34a82ffc2cd20b68626cb15bdbd9c2a8f101a0788c73e1d59120606bd43c6025f81716876e5b722316f719276f4864fba4184c1eedb4a57a1525b9b67325fe335833f1f6961fcedc71e1712345ba3cc925a0e9738bfbd5bd836e8f12153b150c69e67e9440490adc640ae94c9d4a70e3dbc3e32bd3528a3e71b20b302dbe2017898fd52cdc827fb87422a614dadf96cd27be242ad5ff99fb2f9421d8c72e921639ca5fd8bdc3083854db986a4b2d598345f7f93ce026e54229fc141ce0d2301d43757831ad71beec4b80be148030760f8bda064e22218d64b1e78f21c68f361987580f7d9b3f2115ddd1654198538682efc3b96c4936a34413206f03bd4c4403b2408c75dfef5301a2c74a1a24fedfbb51d9629f1d2a93c0c3f06a4ee95778137157838d3478850817c2b25cb9576408164f3fda6f44866b0010e5393cf2920142f931ee6734e1eb254378eb6270c0001c3d763e98aa8fe4aa64438517a835319afbc3ffb975891711dd27676c309b8bd6d8785909a8422c0325982a3ae100075a5b97aa1ac2bb3e9b8777ba4292b4d35758fcb68acb221a387a7c1735729f08f3e8e99dbc105c5b3954a5ab09fc9d9f046f039148913c1df9d971ace3ef17261aa3eef9cdcadcd22bf3caa3cfb04f54e2237407b694fc263bc3e932b2221e1fc8b561f4ed98eff34832be96519132713ad7632c8ad227d23a6865919b427c2151b1ac4d59946be5374236317d6499a7233494a2c901f1c850cb387873837e17ea672069c10a74d9b66c4725b7f0c11374a398246adc753395bef43757b71b0a53c9e06c0e68b9b9602f2d96fee51981a17fda0cfaa1bb03fe6c2e7248daa92c7610ec6f485d03fa5d185e7dd8ea20f1846a4409497a5b6096fe4f45462b83123260c60c35aaf64935fd4ca724cab194c0ed09a1521068655e0beead8e1aec1efa83cf9ed6a63e5a813f5e2404a8e1d24886e233fafc389a1c88773fe5ece13aad5ecd51f17d6ddcba75604c1de8094986e3dd29cd4a7e453e73f3c60a5136234187df9fb67f411cb535335e00bdc21408e01020d5c214897ec40778099f6d38a49d7bf6af411b0435554445d4cf34162d3abad9e1c0dc160e8aad7023872b1a2d4b4e8deeeb41cf3bde67c706ab5fac14e7a3db5866c9d7c7fa9f6f05380707242b04b8f0c5aa17f9c0e9d54423213c80fc1c5f544f39fdc12aa59fb658662d04ed21720c55cfef6360c1e9bdb678ce5e760e1a1fe659db1528bc153ee151265e73476530f772d519a35086917b70ab3b0c32a4feaa8b63bad8e70f0159b427ded98befecea820e0bc5e483ec02879cc39925f593f865e19830661663c025269c1ca0702372b2e8404afbf056a242308b2846035418d75a821faa9f1798061138311146e98786f7f7354cb5541fcf71d3e6454fcd565e2f36f6f7231b17b0212b92288e22287c1ccfaae46cf97e025c0d7e1c0c15c7051a5eed6d8e968fda3b9f6a5fbc168030e9b12d70da785cb7ad832e1fbd4aab11d54c183a9b8111f11a187f3753c273f9056432e9c6619bb899517001b59bd0f529fb5acf359b6e5326a49dbe83acff54ab3a12dd64e9f1b9b35e02676e302c17b89762c356bfa6582addf24501093152821954f9bc85a99b7847df615369cbb4d2ccb6b8e42052b700df128f40c2a6154dc38771ed3c2b5c1226cb5c8b241ed49efb7d7e33242b7d16a997b8a097d130ea4f943443a5fa44e896770f61bffe272a7b2047741d77f6393d0ca4e650e9f9228461fa407ba4e748c7b0280a014cd5c8240592b8aed3981f6957d8dd2233c88ff9ea87319de79f33dbd8c50f48dbdbb8533e481ffbe12324b96bdb9be7f1cf72eb714d6ff7629e9a2df61cb77b1019af847edb9170f68e39108c5ba12c1c643e1bb30bb5f7f8910b9585c312a1643b7aaaba36f4072a862578b459546d3d76783cc79a549c30572b3779765b74f7c60560c814eb19b167369c53632d63c6f74644b30a8e215e93b7bfee35ef3c391c2fede92ab485a64a31ae8d15439bc8ac26eb7dffa6e3e2c903baf75bce6e0cf218c6f02fac531e1429726938d6fc1bd5da5fca19f6cb4ca896ad3cdec9816f95d3dfc7f3252b44bd10af2a07890f4a0de5f0e7659bc2e2d6e4b442cf52794b47b7dd36e5abbac2b8006ec9e71783341c154a77dcce7ae4b110f2f2929361aaefa4076034d32f338b005ad1b309184120d7651a39f16b34560e0bf8926c28889a0fc628a7a1c5b2b0387f9e280f770b3afcca4b44fd4ca9642ffd11f543606633f8f6a8e4a6ba6ec6366da445274dde2464bad9c8cdb1916802e1647a4d3b1d4f315becda7c1e363d35fc3955ec7fd494d724ed50a8ac6482483f1ad4b9857238d06457ddce3e430724df35145ce1829f96de692d6e8c0f1b64621ef9c3e1b54dc8a50021cbaff91f0e04fc70b4ea5d23baefb48b5bb6b071fde9936b22e6edd61e8154ca88d352c634add06efb972e20a26f9a52206b445a3f3ca3be9fecdadffa8b6e7570e777831b89b0c8fda6bf74074981ae72a7aca4b7b895abca8202671dbd665da8c851a511e0d43dcfc6871f425f1fc2a95a583ca294f0ff35359ad5fe599829aad02a6a06298f50e89c357250704e6a74b25907e0ed3ff8c351fdc37f8fb1535bc521c51fcaed81c982a78a610f58883d8de295ca0e893f4433d269f4ff158ebfa44fd2191d64651efc36191ec9627680cab647d8a67fa1e71a7561a208288f8a8486ca2e965183fe90486167668156b6b7c673de60d3362e32ff2444a3fdc7c8e3da60049301a6040e08fc5a8cab54814bb9cdc9ccc35bc936c7ee1c9652d92e618e9229a74d90896886cacdd23e4ad75ae1575be285b5e36b5392dbbbb3fa2e5e7e1a1aea66e364469a288c99fbe749aacd6ab76c09cf6779a09705051bfc92005fe70b67d116294f9c306518a8ee46e5f4b8149d7758047ffcb2c90f5b03265ded12178d455154c049b115d221318577864ab274564e1279baf8300cfb3152aaf7361e4ade4f79914d16741d2845832bc61d5d246f1f441a9e76e52a3817de5e9af33580493d8fb69a48693bb2b4ac68bf578c860f088c8f91498ae44e24b3acbf6b2aadebf63c9358cd98bf3bc6c7ab8d9b6fba82bb66743ea53b5715a087ced7d137bdd175d01de824c57956000259af5d4708d46db044e7cc30fef92ac17aa7540a07b57ae87f98e60dc090785a2e9f2f461d7d8a333944119a3d8406508743ad0c8d935fb8728555e7455c461adadc9b8a41a81cbc02c25fbdf7eee93e5f893d31629991bb8e2add604602cb92b9995d91aafbb028efd6287bcce79fd5597efe286594e4c9c58a5d8be54ac1b8fb04208bd41ce5fda12fd0289a66ce641a3f8e1e082899d229d78919995b09570c5e74aaadfc786844590ae2e55ec4e55165bc2f6e58639160b49561b158ba1290aeaaefccc0853863c4f0d218f5ba16a3d4c600a67786443bb322262403cfa59164b7f928fb91459009e4e0a60225574d4a8b0eff88f997ffe550a9ecc3ae517852cfb4de6b0a8f33d0cb770263b6b57180192535e6624ce7d7a5b18a2b533e03abe7aaf91ada86b8736b5126e0e8dc63f8a8003dbdd7e3da583b2aa8e9b16a48bddd65abf44019531e0b00f2dd684d3bed7f8ac40d6f7426d12c5ca38f419fcdbfefeb587e7136a728fc49f8874ff8d6993c1509b8a6445ae390c3e9bf3e10f357749b93fac824150ee6a07ad40f002f1c123e14f82118abcd1adf89d1101fb6374632f2c8ac805aceeea8c43164f4f8f4a60b14de23d683ca30f76c39785f93c871dd1d613c1d13a01a60c40d37491ba0c23c78b827868a353ff16db6154bcae9477bd53549024ef92c1505a9bba9b8b9b11382ee063a634f702dab18eaea32bfcdf9379e0662279c8a744db2f5abe415ea10f477e715da5afc21ca25350bec6c159ffa093b8f762b15406a21691049da6518f5e25255d5b4d5bb4af2a13077e4804d15d2d8d6e15d785cd34cc31445102b3ad6ce799b5635dee0f6c99dac488d2aa7b4b4fd04b2aefff70cacfca26c3f64bb8f09df9136eabc8875a02980006fd424f583ef2c3070dabba6543dcc50b380bd51daaf61fa77bdec68740819090324bf350907fc9945939cadbb91c2b591320f81451c004897ecfd165084a908dfe43b53669369046fde0356cd42ae567b3429bf2238af546e7aa263af676205c2946baefd809789b52da11381fcd76f1eb510dee5ff478b8b7c82e9e3b03b62ac2bbba03cd6453868638e3ba0fbe5bbeec9118b9258f0768b2b7e1d87e052a062b0a87261f9ab822733c202b244e5b388e13de8467a3f488b64bfbdba6e8238cc9080cfa47991e5a249467c484dd5bb932ca32314d21acd249b007a8d685fa1ba7359f96c008653605444be6462be3440a7ba3eaa4571bb30cbe0cedee8563a1692c66bc56bafb9dc07c1eca7c0d82fb8282662f1666f6c8f373f1edeb4ad6cd8d4cd3cbb102a581bbb7473775e78c2593a2121c7cb71890ed224e9e16a6a3297beaad146acadf80bd97baab632b566402fa1c71910f0e062f4287dce118b74bddd3d1ef3c92b23877f2645b0ddb7bf13393495dba29f21f658aa76b3a85804f09b7f87eb4a676ab6a8a992091238a84395ad9f0b5baca693a4465b2ce3bc6faaf6e0a438f8dd165855051822da848a9a98020f6c7c323e8b1a0f5679625f88d6e0d439df43c2071d0fb7d0fb7abb5928b49bb3f5452114e00a4dcecacab271bda2312b25019f2903205afff1c177fb9e16be1f6583008fd2535fa41b84a96eb36ea0122b572b0292372ed7e3b539c27dd009720bab97907c32e66301a9a3fbeb02713490ff0592ca1bb2164190c4ded1dda29bc3b5064aceff7285ebf9ea49c5cdfb8e60f6d10a493df895757d1ba489ce9ccaf2d05be1d5c2ce9be40e905792c2e6feab7821df0cc7f2524b830b19cd610887df6b2030c9d7d58d91ce06c24d4c4e6af0841ab1cf0ef51c716a7e8e40be16be33ef5e9af810aed3a5dc35c5b3359afc5c1a41945169d7ad7ebd7c1361643e744a9cd7a08e67443a2dbd7d1e4003e7ada5c717707c7fc8d992da801ed4b017bb9a5eee128d23e4e5ad777d545e811b506b91a269d6aa83004f381dad938099dc0d25c1704eed302e0f244fe082457a03dc295a884a6a5e9949e6c6ddb17428 \ No newline at end of file diff --git a/contracts/satoshi-bridge/tests/orchard_bundle_cache_170000_0202020202020202020202020202020202020202020202020202020202020202.txt b/contracts/satoshi-bridge/tests/orchard_bundle_cache_170000_0202020202020202020202020202020202020202020202020202020202020202.txt new file mode 100644 index 0000000..451e846 --- /dev/null +++ b/contracts/satoshi-bridge/tests/orchard_bundle_cache_170000_0202020202020202020202020202020202020202020202020202020202020202.txt @@ -0,0 +1,2 @@ +utest1fnxc0uu58cm9j2ucvda3h30sgujzs2jz4ael039rwuvx23qgrr389lzde5trnekx7sl5t242t9zr3dq00zh7uz67z7gaezzf35j6gxq9jtwcg2xrs356qz2jjjqujymahm3z2kxwrxp +015cf5c38a183143c5dc18eec34c154e1d9244616293a4b709241f2613334a65ac6267d2cb27196c3ae9d3301165a3c5c55a039f3f1b0cd0d23268238ac076fb180b2d6e28e7bac0415f838a03a947cc607bd04b1613e27598672ff235ce1897000acc2e1f7bd27d6970f64418ecce291014ba4580bb5da099f10878993437bf1d76688538ecd8d3b7f94984ab794f40c161d8490d28fdd206cb120efb80ff46a0b7c9df812707d0f69629f5948838aa5bd836976946677151158c13b6bee04efa979499c87b441264199644b2d461bf0c4391650a2d567a3fa30b6f6da125895721beb97a5407329e25d3082522e5c3110b9d39006f429668ba9ae764aaa5cdb87dbcd9b8a3eb0a933b8f636aac6049717856ce9bc5b0835b9804ee062852a63c311f56b7798d6f00058f7426fd75704e7d7b0d29b32d6e90b45ddec8e19bba7f89aaa4af8bda709c4e4b4a278e2771c8562ed8806b4403bb8aa99123d603da96838258c1d20bce6c91303fc1cf7b8bd3d762e90b126a7cac2add87531d56417fd5c7799bb890a7c5d94cee9c9a9a61c69f3028d247fbb3f74f2c985fc0d090edd12e8f95021609bfa4a09dd8c297935a4f5386175adef8abf640ee85b167ca508761d58ab581003591f07a154aa2ef4c6bd290e5918d8d6cfcb2129f565e7fbbf5e3304da8ae2dd34c2a6846925220e42680116687fcf3d3714de0ce8f94f0d1b8210fd053b6c9c37ea7f0a318ee7f625bf3df089a31115f299af3c1947f0f687af2bef96f8e10cfd4bfa86599c483305ca1bb5bab445b8755201b71baf35380aa4ab01032d685f38fb72f7fcc3a88c870ec82b6536bbcfd61a222436c0276bb35f4d99d1175a5656bc076de192e9f778f23b115c2e8101daf1642687cf5b21e6eb464418bacb56dc86627715351dff702b0be8b3d3fbfbaf1d800c8171b251d53afc4c75ad70ef5fd2d48a80218fa5fa1847b9ec89588224bf450330b2d22280093b294bf3b4e091b2a41597fc55505dbbf6207f91a3c0eaf301b11584b7a0bfaa87204027273e1a843aceb3c12657b3262751e63950bcca7bae3c05c2f0048eb83ddf7290e7b08be5d11ee7b706a03739efd2885ef613b05ad8d04e443b2bc29a8422364e4aedde97c9ab47073838c8c8ca40e02f067fdffffffffffae2935f1dfd8a24aed7c70df7de3a668eb7a49b1319880dde2bbd9031ae5d82ffd80132fcae27f0b047610dd69865bc10ddb898f0c982e50f839903ab6113abc86979995a9046befe2b68d2bba1ec547e068bb02ba7e695085261311157fb7797a4c0de25f12acdbbf6d940106341de1820668d248fb4213f86ca1d20b4ad6c42022227c8404dfe849b988a42bed65eb925df909b39f6a0df495bc20336fcad42f222bc9d242c7d9f7b9b6030fbdcb7f8b05e06a4f258f25b3416c44f6f1f2a990548ae4bce350203d178e7b843ef59ac93fcaafec3eb3caa783b080f66e0264dc2598567286d280370351594550981c336b36c17350b30b3c6dcdf4d8e2cc24413d1332c6f2017f6678dd61eefacf51701c01d36e44e9188dddd2f8732e0f4828f288787f0db9c51748ec4a9a75de6983030e1aaad8b509628670094745eb02597a1d2d5f0759ad71db316d3cdf6cc32215691ba624d157762f2e495f20b965f36a93be44c873e9d3263046ae58a28b1d1e4b1664f7579dbef7a10949ca9a11ff0ab5b23334d39e160efe88e737ee63d311eece875c3e7f7109077ec6941fa87eeca839b3ec5e4685217c1aee96e9a594679f3c7e207d797d8de59f29e40ce5fdf21516d5a1ff6bba3f0a204f7a94e5fe9aafc3e43134d4ff47d74d1285850efdc32e677bf89130c5126b42e3900f6b30a25d9c64c45221c83968124caa29f1272b3fde5ad04c71fe1e3e33e822f7501b1a1573cc5436fb1a1723a4e764131e1d1e2f8ed6965296f444c049160a048e0e1a7a6f5f013f9a1a1c4c660007d867d71e3cd9b08ef5ce17d84821a2c0e2c7896fdaee60620729cd60510da4bc73565780b71e29bfe8342641b558a8f319a83cbd58afc544dc44cdcbac02d0057445dcb0b71dd3f38adced4a97003d265b6dbc930908929fa2a4ea7db5177b6dcf6271d709f8170ff4954c0e358d95cd2d055da80d0d5bc0b5fd71dd37478537602e3208ba9edeca406358f9ccebcdcff5e59b165fe031375424b2be003a0f3ec0de77672df1a64f8cb70edfce6832a9a1f68a8bc3a5027847755e5b11168905fd1258660affb1fbfe11d57df94fa967cacace99f203f34cf91d2ffa85d606c2d5df07ad85ebac1d882dc085cd08aa34caacdc24d80e76ada7e12efb35b0b29017c329d1294d2e7fe23fd028b85fc9befb1ad60439e52a19d14e74265878af95915ccd138a4f273b2db7b00b3eafd9aa48bc89e243ad07bc689377baf2d3f7a6f664dceb2f0ece08fd0ec24bdc08b123728624129c7276d36f7794080cb8582ccc0f1419289b5431fcd5745d5238a0b3ef211a3f31542b9a327009397ae0f9250b5c4571885d5da3357be37a9fa5fc883935a1cbb8339eb25c51ad70da6962dd235c414e1ba77403170d1646799a869b8990a55f01535b7707a24c6a4ce0b0f2003fcbf021d4dc3e41f8d7db31137273060a7a56fe39cc552686bc2899c423309f11c3dd0bd44aa18a45e5f1ad056e0075634793841e4ba2e2c7a7990b05c4e7a23a927637814da0e46669eb96d472c4999556277c5534b50cbeb80d252dd418c56eb116169226a2c7830baecddb605b9b48c1d947e55b4c532a22799a177827f878085410f1d0c76434e32ba011b58971249fd75324253564599acf9ad2bca7976ea68f295373be52452e80fa151464765f543f9459650774e5e37cf13acc6ed5d6e46e1b18c2940ba35d680c91abf408d2e979498617988b49c9e670e896b08dca5a3138adb1cc1ed85258af4d1d8a022c37ff20b54fc39fcd00b97490efb3cc1513851119866b42084dda753935c14459ce49a480e1315b618831fee3aeb0ef48578f2091bd904fc2327a062648b7a76ca9b611079558f569864324622cf281c88975092663b64a8a7e1d5f539d84f393b36841ff1064b5785ac37aff1feaf084f0dd198862ecd5beb2c86617f80c7dc8587ebcf21a8c13e6a93d943d7aac79710cb533e4b28b9e07fe56dc962f4705dfa7cd55b8987d8234ad15e20627818264ea650b4fa59ca289a12611bb74eb32950a238b2fa74a40fc679387b5c7401f61e7d32e6240f78746dfdea915c8158af929201447ae06d6017487221c2b497e10ef452274edf729ded3bfa1ed322763b07435a52063809db356117a9e99be960ffa3b2db595c962162622f5c7ad13dc802f3b8a10c348af5401a13cf54f31462f150b209dd060b5b91815ad2b2fef522391569c150106d0b46270313d463816b10f0e25434cd822dda157d0a7bb247b8bccfa85d6d35d6652245cdfe7e1c6fb0396cc24ba4e06e985ce8c42fe83847e9123f559498c5920e35a0dbc474d4bc69d34493027a711b7ab4bc37ffe7f0c009475415759b8ad88a86184194d9419d07bc9c72f6cec7c06335f4f5734236af49c3c420cdbacc6b0f8bd4139cfe64c7fc3fb63226f32bce00356dab1d50c8b074aeb2cf246a362215f1f20de560b02fe06c53f3ae51217a69b9d81722cf0429d6f482ba07b962bd723e5ac4aa27748ff53e7a115ecf232d38decd545b5f122a02921e1d0e6f4c95c7763886dae704c902739a028850731da66f364c16fac064a37605a875fd0df7093351f17049be5d32245c81afe717b2b2c1f06fd94c7e9fce7ba4f4632a76e0d46b1d0fc36d156263939450ad2963733dc9935fb24e24ce72abdbcc7732a80377977c2dbc2c7a6ad7a38052b6301c5e30136b4e85dd813ac0374142b59b32ff58f15bf75273a4de74ad3e2178927fe7aca3fd15113e8a935d04a220035cd5ad03fe7e850e358d570f5e7eb1d35697dfad60cdb8717f0c788e8593b1ecced4b58a8461586674572cab4131c0e63e75f0cc41d289d84f37696f73cbdfdf1f494a3c9875ae55ec0842304ede532e6f4a047288a12b5983723b77ce3daa97ead3f7bcd9a5af9154264d583dd5729f4bfaf3f6c5370140a7642907454abd82552892585ed1735f0c2a63dee0cd102d0ef97d378c2084b50f573c0a45e7a3908b2993f0ef9be266e73865a1b532e2f24b5200f99d66e29ea73b648bc74cd1b587e481d1028f92ac46235717944533b5465b2e12ceb43797cebf8aef6eec9062f40efea01b0df36805e3fd9a1cd6a1e601751ec03ea1c0c010a94ea62b57b508fd310d587919a750cd14e5221eb4408f6eb2e1398da5469db4298135e04da835183df6dd8b6e079e476c4af7204951610648570016c5852f9959d483df1dade667e1a1a594a5b65b824bfc057ed3e2668a72878c88cc4d601306845ceefa2622a869ce0cb374e6e507552d0241e8a015ab4479def6b304382d2d188967dfde4531720deea84312a159f4e4f79fab522b7f5d95c9e08e931e26110c4e495c292c3f31caa9545a462a3c4cde0a265eb391fd70b9e611851e23224b262437a3b657cf00e858f59d44af4b8d538f8bd961006cb6ca2125635eb88b69c09ecea05007dc6724df2ba08b8ba4888b72e4fc92ed15b59df3e563baf624dde9748aef7d2b1f19dee275fb7327ae2d8ed281bd620cc89b74b972ecd259e61e6dd8cf6a12046947785f77df5cd4787e968be1b321dbb169cdd9117d62f3eb2d48ec0182298e2677fcdd577e6848e0672a324b7ac3bc96a550e2c246fc57416395eb6f9b8f415fde180d098fa36e24dc4c58e8e833ddecd096d8e39c2872d8b0c056174ef7be24a148c9fb8569907f8bba73797ad3ab29b81e2a469ab5b9e07f78ffa5d580798b637a99aaba9d1db5713e0c5013e3b2fb7f3f94537528f48d31945af8fa7fa4f604479ab75db957d98829f9d2b161dd27567f2b3dd8d4f8238488e5f38d3e110460e0d419e93cc5c24b8e7e5b9ed1e1b3cba7e5e217b50cd169e0ad915c70e395c3d18c8b62c650385ae72d6decb3d9cd4ca5a6bc54df8ac63bd5bd9c21e6b4e6a9e89dbaeb8e6a253033f8e4aeb2cca6411e5d8307b4ff5ce6d2eb38aafe747d1d0ba6541a7912ce51b455f96500fdfea6744f0a16b508726e9af4d2bb09316857164b21b8c82c1b6c4659cfa1f1360eca2aaff39e17654a92347cdfa845311d77535fb0b87ce65db2ed9c37a750137f7e6a1ce4fb7854cc28f403769e595b06b0766d25f437874f42172477ef213cd6744e7142a1c400f61d58dfc69bc2a2a73bfc2a359acf0e84d6386e75e741dff21240bcde0465f02389b23b6e44ece1aeebdacb21106873e924dc5083ffe2188c84d1a466e1983995a04d8210a91347213a0bc112f4e83c50c4f81a54a080e45caef5a30d541bfa3d708eb7a47631a8492c3c01817670d37a0122da9b0f3229eb50435f4e091f551c0c8df9878eb93cb23b863b8f672792d11591fbf1213287aa0d0d7942f48454c1159f2e88124ca49dbd3e29e20f1c51c6dc3b6d95e0e00d474137fb8344151c7d874d7c99929abec7c5a0f13c5ce862ab10da3a70c7e08310f24763ee16fca2c4e03110665c5289406ffe26c46cba27b5d66f0ad1a24214a22e891d419fb2b0f2e31b556c7a43e361870dcd4feb8e586387a60774de5380d87ceefe3d198ad743d56697a8fc8e4032cc317d3a8e2f01c266f501495f6044493561b2e7e31ef8a0684e46b0b8e29e8bb20405f24f54f0efa54f1b4dd3e3ea62fec1522cff9281534122b1f29571197644e62aa9576dbe03f77209a0ff629d14fd6aca6df3a4c53865933215170d7b368a099f3aec20b6dded8d8139ff237fa237691abc8a62cbc8d4d3e18662acc70f7c1ba7bce15b134f4dac176a7f7167c82df632b6fc00a876ea6981186a0265653927cb32f2cea5bd0902ecb801d095d1bf1e9405601375f6636cdae329e8ba8651555d9a2da64d13b9a7989dfd23f247042a9bfa901e47fc228612c27eb8eb9182d6f2007b367606990e778c46e1f420a6bfecde89fab8c99bc61233b70a9034149596923a2f17afffce59b5e323e4f7c0d285816ecedc2925dfd673333e0659ede964fe0685fc9eadb7321c1e5339279a3a7a009451c2bc6ea622e4baf672e8d21d701619afd0506506602700108c37eb3c8d60e93fae673da1e8d8dc458ed0929364ac19f93a9b4fee8b5e0573fedbb1920a5c39fed94d0640a6bfb2afa6ac77d9240c211c7db17d9ca4171a10f46d9752c2ae654d036e95ae46c3d0a4f4d08db7cb0c48450f75aa5b23fc6f632ec61cf0f10261823257242089c1c57ce3e0a909caad971e7c24f8b0473133d03e1a25f2cf696f665027ba094b1aef034524304aae8c789c4c7ab0cdd231a032bf4742120f0b777ae72e49bcb3d02e3336d6608b78a534a220a8747c1f7b9a63b26684fdf94eac77f1a6fde299ed3536ebea74cfeef5c8008ef49d9113bd5b03cac27cbfc6cdd50d4380ba5495f33efaa0ffbf6785d3a856b529dbde111b28e054a14d5f8a08163710be6df9a71d211c34b1470eca8e563efada6396191b87a3f1605d5803562aeb4b6545a50b151ea81fd9e5909dd164b67b992c93188429c07cd3658d8a09437b944cc475c1dd77855cf925947ba754b240361636a5d6fac3add10e52fbee67af4c69b59b73ba4322f929483071c83cb8f3df7a4c3d819e535eb953578eca56726c96522338be9f878953f4cdddceefc8cd79e86d074b0733b814aecadc8d508348573c4bb5ff5d17ecaf176c6f93f28f2ed8b730e54a87e3aa675e569829f4c1f2c70055c016215ed909656b79f0f1f4cfe7bb92bba382803cb8744e75549ce2deb599e6de5221d30f5897fcf0ee8dce4e19347951f012ebda171088116b0f2524a853a68bbeb8ef13b7487770a47bc96590f8086d9bf7208ce312f7acb50dd779d71d81f3fd3a47d712ebbbe4291ceeada92551e3d43703dad0ba8187a4395733cf5e597ca921dae7efb336446ae2fd226710a3cb84e452b193f3b0542de7966ac8733b7e12ee8459a5d6514e15a797022506c867d30af23a6f54a7864a3d9324e76a51f653dbd642663a457c9d3d882dcfb1f02c3cda00728f359b9548db2e030e67a602fa950f7db9d42f6b1821925f16eaf7d0215813b265611dc173e45201a98724fe3b8db49338ee23823533377248eb5fe47bcbf2c6dbb4dda5c7d109ab643133065aa08ac2c91a39949d782547dc7d909f9db673739b924b50b222366d56bbf5ec1f112a2b1ee70a153f7265eab1600080f78018c00a1fea65e37312e9846b3bcc8bea4d14eef682193eb4e5d0d96d306ccdd57823a805784664b5e538a0efb0368e6551e49a8cf77b117910d7b472fb678e18486105c3be7563577b926d1fbcd380e238dd2516a13ccdce9dc8500db5e89cd23967539336703ce232d3ad0d284abf35faaa57798ce6deaa6e263fa2773cfa98015aa104bf5e8b9cdee12d825d1949a2d2cd0037e730b4d89e873b14ea6a3f8120fc25e2d3afa8eead2ee0795e23facc49fd32ee433223f643f231d7fa1a459a0bf05b95cf6e11dfe2c992116ca938a3298095a89807e3d078f50169e5c23d0543ff0e1db6908d97053ef7d611784984d39a9f7b13f80fbb9b1e1fec8149f2c8b0fbe0f85388294a52e1a6b6e76716d9c41815699f6ccd7ffe7764535ca48720e1d025e3f571ff0694a80cce4ee8c1d10ee7dfcf67e35cb19b117251567e43421915c9330c3a873d8930199b280589581da3ac9ac6b28946004198a01d151c7f9b27e73b0a26b4919695c2f246981097accf24d9c8d640f0a59db3245466bde0f267502451a33ef0ec730fd02affd9b0060ee2c64b54415278788caa2a61a1f6e027f3514b8f018333c3a6b0f0abbc8e8cc1ad2c9b34dc9674a002b718f2e01993f17b2102bacac38a4545174edaa8e7136a38e9b09298180709aa79ce194fddc3e6a623f1ff54f1a2491ca3dfc910c71b88f0df17ce781de3df8a419d8f4b7bb0d2bc67620acb7f1eed50dc87e98da96f2486be2feda42f84bfc7949565b3e91254c2699ec89ca6031a2bea801530a96297d49d56f32f46209ea2f10c665515191faa4d17a590e1f64da7c4b206561259692a3f29e349e5e7a95b4e2368d8c4db1ea83ce7fcdb23dbf92bdb2373eaa0240ed3632e7b51c4e0438f53722f50b27202e80d8a8b8d25d781fb015922e03bc93e5972da885cf20a87c88697a68aa4036955c80debeb43268798fcc656f801d04b2aebd38facdb943b648cbd9593aef95f50f06cb80ae2494e56b90febde729e757340b8d4470fce4da14e29d8b684b1a9c618ffc1db2a0a7ccd5413c9fbb4988b9a5943df8152127afdcff34a0bfc23e287b11be737f499bce06399250e8cfdb7b6108d29d96fc99db5191a43716a23a \ No newline at end of file diff --git a/contracts/satoshi-bridge/tests/setup/context.rs b/contracts/satoshi-bridge/tests/setup/context.rs index 36d47bc..3c2054a 100644 --- a/contracts/satoshi-bridge/tests/setup/context.rs +++ b/contracts/satoshi-bridge/tests/setup/context.rs @@ -23,6 +23,11 @@ use crate::{PRICE_ORICE_NEAR_PRICE_ID, PYTH_ORICE_NEAR_PRICE_ID}; const DATA_IMAGE_SVG_NEAR_ICON: &str = "data:image/svg+xml,%3Csvg%20width%3D%2232%22%20height%3D%2232%22%20viewBox%3D%220%200%2032%2032%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20clip-path%3D%22url(%23clip0_2351_779)%22%3E%3Cpath%20d%3D%22M16%2032C24.8366%2032%2032%2024.8366%2032%2016C32%207.16344%2024.8366%200%2016%200C7.16344%200%200%207.16344%200%2016C0%2024.8366%207.16344%2032%2016%2032Z%22%20fill%3D%22%2300E99F%22%2F%3E%3Cpath%20d%3D%22M16.0006%2028.2858C22.7858%2028.2858%2028.2863%2022.7853%2028.2863%2016.0001C28.2863%209.21486%2022.7858%203.71436%2016.0006%203.71436C9.21535%203.71436%203.71484%209.21486%203.71484%2016.0001C3.71484%2022.7853%209.21535%2028.2858%2016.0006%2028.2858Z%22%20stroke%3D%22black%22%2F%3E%3Cpath%20d%3D%22M27.1412%2016C27.1412%2022.1541%2022.1524%2027.1429%2015.9983%2027.1429C9.84427%2027.1429%204.85547%2022.1541%204.85547%2016C4.85547%209.84598%209.84427%204.85718%2015.9983%204.85718C22.1524%204.85718%2027.1412%209.84598%2027.1412%2016Z%22%20stroke%3D%22black%22%20stroke-width%3D%220.5%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M16.2167%2011.1743C15.9198%2011.1643%2015.6095%2011.1622%2015.2868%2011.1668V9.32056H13.8907V11.2217C13.1583%2011.2659%2012.3792%2011.3332%2011.5625%2011.4149V12.811H12.9586V18.8607H11.7952V20.4895H13.8893V22.5836H15.2854V20.4895H16.2161V22.5836H17.3795V20.4895C18.4654%2020.4119%2020.6836%2019.7915%2020.8698%2017.93C21.0559%2016.0686%2019.7064%2015.6032%2019.0083%2015.6032C19.5512%2015.3705%2020.544%2014.5328%2020.1717%2013.0436C19.9215%2012.043%2019.0072%2011.5204%2017.6128%2011.2984V9.32164H16.2167V11.1743ZM18.0737%2013.9723C18.0737%2012.8554%2016.2122%2012.7313%2015.2815%2012.8088V15.1356C16.2122%2015.2132%2018.0737%2015.0891%2018.0737%2013.9723ZM15.2826%2016.5322V18.8591C16.2133%2018.9366%2018.3075%2018.859%2018.3075%2017.6956C18.3075%2016.2994%2016.2133%2016.4547%2015.2826%2016.5322Z%22%20fill%3D%22black%22%2F%3E%3C%2Fg%3E%3Cdefs%3E%3CclipPath%20id%3D%22clip0_2351_779%22%3E%3Crect%20width%3D%2232%22%20height%3D%2232%22%20fill%3D%22white%22%2F%3E%3C%2FclipPath%3E%3C%2Fdefs%3E%3C%2Fsvg%3E"; +#[cfg(feature = "zcash")] +const BRIDGE_WASM_PATH: &str = "../../res/zcash_bridge.wasm"; +#[cfg(not(feature = "zcash"))] +const BRIDGE_WASM_PATH: &str = "../../res/bitcoin_bridge.wasm"; + pub struct Context { pub root: Account, pub tx_listener: Account, @@ -38,7 +43,7 @@ pub struct Context { } impl Context { - pub async fn new(worker: &Worker) -> Self { + pub async fn new(worker: &Worker, chain: Option) -> Self { let root = worker.root_account().unwrap(); let ( bridge_contract, @@ -56,7 +61,7 @@ impl Context { .unwrap() .unwrap(); bridge - .deploy(&std::fs::read("../../res/satoshi_bridge.wasm").unwrap()) + .deploy(&std::fs::read(BRIDGE_WASM_PATH).unwrap()) .await .unwrap() .unwrap() @@ -162,10 +167,14 @@ impl Context { .unwrap() .unwrap(); + let chain = chain.unwrap_or( + std::env::var("TEST_CHAIN").unwrap_or_else(|_| "BitcoinMainnet".to_string()), + ); + root.call(bridge_contract.id(), "new") .args_json(json!({ "config": { - "chain": "BitcoinMainnet", + "chain": chain, "chain_signatures_account_id": chain_signatures_contract.id(), "nbtc_account_id": nbtc_contract.id(), "btc_light_client_account_id": btc_light_client_contract.id(), @@ -201,6 +210,7 @@ impl Context { "rbf_num_limit": 99, "max_btc_tx_pending_sec": 3600 * 24, "unhealthy_utxo_amount": 1000, + "expiry_height_gap": 5000, } })) .transact() @@ -1129,7 +1139,7 @@ impl UpgradeContext { "rbf_num_limit": 99, "max_btc_tx_pending_sec": 3600 * 24, "unhealthy_utxo_amount": 1000, - "expiry_height_gap": 100, + "expiry_height_gap": 1000, } })) .transact() @@ -1151,10 +1161,10 @@ impl UpgradeContext { .args_json(json!({ "controller": root.id(), "bridge_id": previous_satoshi_bridge_contract.id(), - "name": "Near WTC".to_string(), - "symbol": "NBTC".to_string(), - "decimals": 8, - "icon": Some(DATA_IMAGE_SVG_NEAR_ICON.to_string()), + "name": "nBTC", + "symbol": "nBTC", + "icon": Option::::None, + "decimals": 8, })) .transact() .await diff --git a/contracts/satoshi-bridge/tests/setup/mod.rs b/contracts/satoshi-bridge/tests/setup/mod.rs index 38dd94e..76d00fc 100644 --- a/contracts/satoshi-bridge/tests/setup/mod.rs +++ b/contracts/satoshi-bridge/tests/setup/mod.rs @@ -1,6 +1,16 @@ #![allow(dead_code)] #![allow(unused_imports)] pub mod context; +#[cfg(feature = "zcash")] +pub mod orchard; pub mod utils; pub use context::*; +#[cfg(feature = "zcash")] +pub use orchard::*; pub use utils::*; + +// Re-export types used by tests +pub use bitcoin::OutPoint; +#[cfg(feature = "zcash")] +pub use satoshi_bridge::zcash_utils::types::ChainSpecificData; +pub use satoshi_bridge::{DepositMsg, TokenReceiverMessage}; diff --git a/contracts/satoshi-bridge/tests/setup/orchard.rs b/contracts/satoshi-bridge/tests/setup/orchard.rs new file mode 100644 index 0000000..f128ff6 --- /dev/null +++ b/contracts/satoshi-bridge/tests/setup/orchard.rs @@ -0,0 +1,164 @@ +use orchard::builder::{Builder, BundleType}; +use orchard::keys::{FullViewingKey, OutgoingViewingKey, Scope, SpendingKey}; +use orchard::tree::Anchor; +use orchard::value::NoteValue; +use rand::rngs::OsRng; +use zcash_address::unified::{Encoding, Receiver}; +use zcash_address::{ToAddress, ZcashAddress}; +use zcash_primitives::transaction::components::orchard::write_v5_bundle; + +/// Bridge OVK used for all test bundles (same as production) +pub const BRIDGE_OVK: [u8; 32] = [0u8; 32]; + +/// Generate a Unified Address containing an Orchard receiver and a single-action +/// Orchard v5 bundle hex that is recoverable with BRIDGE_OVK. +/// +/// This function is expensive (generates Halo2 proof), so results should be cached. +/// +/// If spending_key_bytes is provided, uses that key; otherwise defaults to [7u8; 32]. +pub fn gen_ua_and_orchard_bundle_hex_with_key( + amount: u64, + network: &str, + spending_key_bytes: Option<[u8; 32]>, +) -> (String, String) { + let mut rng = OsRng; + + // Use provided spending key or default to [7u8; 32] for test reproducibility + let sk_bytes = spending_key_bytes.unwrap_or([7u8; 32]); + let sk = SpendingKey::from_bytes(sk_bytes).expect("spending key"); + let fvk = FullViewingKey::from(&sk); + let recipient = fvk.address_at(0u32, Scope::External); + + // Build a simple output-only bundle with BRIDGE_OVK + // Use Coinbase bundle type which supports single output without dummy actions + let mut builder = Builder::new(BundleType::Coinbase, Anchor::empty_tree()); + builder + .add_output( + Some(OutgoingViewingKey::from(BRIDGE_OVK)), + recipient, + NoteValue::from_raw(amount), + [0u8; 512], // memo + ) + .expect("add output"); + + // Build and authorize the bundle (this is the expensive part - generates Halo2 proof) + let (unauth, _) = builder + .build::(&mut rng) + .expect("build orchard bundle") + .expect("bundle present"); + + let pk = orchard::circuit::ProvingKey::build(); + let authorized = unauth + .create_proof(&pk, &mut rng) + .expect("create proof") + .prepare(rng, [0u8; 32]) + .finalize() + .expect("finalize proof"); + + // Produce Unified Address string containing BOTH Orchard and transparent (P2PKH) receivers + // The transparent receiver is derived from the spending key for consistency + let orchard_raw = recipient.to_raw_address_bytes(); + + // Generate a deterministic P2PKH hash from the spending key + // This allows the contract to extract a script_pubkey for validation + let mut p2pkh_hash = [0u8; 20]; + p2pkh_hash.copy_from_slice(&sk_bytes[0..20]); + + let ua = zcash_address::unified::Address::try_from_items(vec![ + Receiver::Orchard(orchard_raw), + Receiver::P2pkh(p2pkh_hash), + ]) + .expect("UA from orchard and p2pkh receivers"); + + let network_type = match network { + "main" | "mainnet" => zcash_protocol::consensus::NetworkType::Main, + _ => zcash_protocol::consensus::NetworkType::Test, + }; + let zaddr = ZcashAddress::from_unified(network_type, ua); + let ua_str = zaddr.encode(); + + // Serialize bundle to v5 bytes and hex-encode + let mut bytes = vec![]; + write_v5_bundle(Some(&authorized), &mut bytes).expect("write v5 bundle"); + + (ua_str, hex::encode(bytes)) +} + +/// Generate a Unified Address and bundle with default spending key [7u8; 32]. +/// Wrapper for backward compatibility. +pub fn gen_ua_and_orchard_bundle_hex(amount: u64, network: &str) -> (String, String) { + gen_ua_and_orchard_bundle_hex_with_key(amount, network, None) +} + +/// Get or generate a cached Orchard bundle for the given amount. +/// Caches to a local file to avoid expensive regeneration. +pub fn get_or_gen_bundle(amount: u64) -> (String, String) { + use std::fs; + use std::path::Path; + + let cache_file = format!("tests/orchard_bundle_cache_{}.txt", amount); + let cache_path = Path::new(&cache_file); + + // Try to load from cache + if cache_path.exists() { + if let Ok(contents) = fs::read_to_string(cache_path) { + let lines: Vec<&str> = contents.lines().collect(); + if lines.len() == 2 { + return (lines[0].to_string(), lines[1].to_string()); + } + } + } + + // Cache miss or invalid - generate new bundle + println!( + "Generating Orchard bundle for amount {}... (this may take a while)", + amount + ); + let (ua, bundle_hex) = gen_ua_and_orchard_bundle_hex(amount, "testnet"); + + // Save to cache + let cache_content = format!("{}\n{}", ua, bundle_hex); + if let Err(e) = fs::write(cache_path, cache_content) { + eprintln!("Warning: Failed to cache bundle: {}", e); + } + + (ua, bundle_hex) +} + +/// Generate a bundle with a specific spending key (for testing recipient mismatch). +/// Caches based on both amount and spending key to avoid expensive regeneration. +pub fn gen_bundle_with_key(amount: u64, spending_key: [u8; 32]) -> (String, String) { + use std::fs; + use std::path::Path; + + // Create cache key from amount + hex-encoded spending key + let key_hex = hex::encode(spending_key); + let cache_file = format!("tests/orchard_bundle_cache_{}_{}.txt", amount, key_hex); + let cache_path = Path::new(&cache_file); + + // Try to load from cache + if cache_path.exists() { + if let Ok(contents) = fs::read_to_string(cache_path) { + let lines: Vec<&str> = contents.lines().collect(); + if lines.len() == 2 { + return (lines[0].to_string(), lines[1].to_string()); + } + } + } + + // Cache miss or invalid - generate new bundle + println!( + "Generating Orchard bundle with custom key for amount {}... (this may take a while)", + amount + ); + let (ua, bundle_hex) = + gen_ua_and_orchard_bundle_hex_with_key(amount, "testnet", Some(spending_key)); + + // Save to cache + let cache_content = format!("{}\n{}", ua, bundle_hex); + if let Err(e) = fs::write(cache_path, cache_content) { + eprintln!("Warning: Failed to cache bundle: {}", e); + } + + (ua, bundle_hex) +} diff --git a/contracts/satoshi-bridge/tests/setup/utils.rs b/contracts/satoshi-bridge/tests/setup/utils.rs index 7a45574..cac6975 100644 --- a/contracts/satoshi-bridge/tests/setup/utils.rs +++ b/contracts/satoshi-bridge/tests/setup/utils.rs @@ -6,6 +6,7 @@ use bitcoin::{ Psbt, Transaction as BtcTransaction, TxIn, TxOut, }; use near_workspaces::{result::ExecutionFinalResult, Result}; +use satoshi_bridge::network::Chain; pub const PRICE_ORICE_BTC_PRICE_ID: &str = "btc_price_id"; pub const PRICE_ORICE_NEAR_PRICE_ID: &str = "near_price_id"; @@ -81,16 +82,17 @@ pub fn generate_tx_in(tx_id: &str, vout: u32, script_addr: Option<&str>) -> TxIn tx_in } -pub fn generate_tx_out(value: u64, script_addr: &str) -> TxOut { - let address = Address::from_str(script_addr) - .expect("Invalid btc address") - .assume_checked(); +pub fn generate_tx_out(value: u64, script_addr: &str, chain: Chain) -> TxOut { + let address = + satoshi_bridge::network::Address::parse(script_addr, chain).expect("Invalid btc address"); TxOut { value: Amount::from_sat(value), - script_pubkey: address.script_pubkey(), + script_pubkey: address + .script_pubkey() + .expect("Failed to get script pubkey"), } } - +#[cfg(not(feature = "zcash"))] pub fn generate_transaction_bytes( tx_ins: Vec<(&str, u32, Option<&str>)>, tx_outs: Vec<(&str, u64)>, @@ -104,7 +106,7 @@ pub fn generate_transaction_bytes( .collect(), output: tx_outs .into_iter() - .map(|(script_addr, value)| generate_tx_out(value, script_addr)) + .map(|(script_addr, value)| generate_tx_out(value, script_addr, Chain::BitcoinMainnet)) .collect(), }) } @@ -119,6 +121,129 @@ pub fn generate_input_bytes( bytes } +#[cfg(feature = "zcash")] +pub fn generate_transaction_bytes( + tx_ins: Vec<(&str, u32, Option<&str>)>, + tx_outs: Vec<(&str, u64)>, +) -> Vec { + use zcash_primitives::consensus::{BlockHeight, BranchId}; + use zcash_primitives::transaction::{TransactionData, TxVersion}; + use zcash_transparent::bundle::{ + Authorized, OutPoint as ZcashOutPoint, TxIn as ZcashTxIn, TxOut as ZcashTxOut, + }; + + // Create transparent inputs + let zcash_inputs: Vec> = tx_ins + .into_iter() + .map(|(tx_id, vout, script_addr)| { + // Parse the txid string to bytes + let txid_bytes = hex::decode(tx_id).expect("Invalid txid hex"); + let mut txid_array = [0u8; 32]; + txid_array.copy_from_slice(&txid_bytes); + + let prevout = ZcashOutPoint::new(txid_array, vout); + + // Create script_sig from address if provided + let script_sig = if let Some(addr) = script_addr { + let address = Address::from_str(addr) + .expect("Invalid btc address") + .assume_checked(); + zcash_transparent::address::Script(address.script_pubkey().to_bytes()) + } else { + zcash_transparent::address::Script(vec![]) + }; + + ZcashTxIn { + prevout, + script_sig, + sequence: 4294967293, // Same as Bitcoin version + } + }) + .collect(); + + // Create transparent outputs + let zcash_outputs: Vec = tx_outs + .into_iter() + .map(|(script_addr, value)| { + // Try to parse as Zcash address first, fallback to Bitcoin address + let script_pubkey = if script_addr.starts_with('t') || script_addr.starts_with('z') { + // Zcash address - decode it properly + use zcash_address::ZcashAddress; + match ZcashAddress::try_from_encoded(script_addr) { + Ok(zcash_addr) => { + // Use zcash_address crate to properly convert to transparent address + use zcash_protocol::consensus::NetworkType; + let (_network, addr_data) = zcash_addr.convert::<(NetworkType, zcash_transparent::address::TransparentAddress)>() + .expect("Failed to convert Zcash address to transparent address"); + + // Create script from the transparent address + let script_bytes = match addr_data { + zcash_transparent::address::TransparentAddress::PublicKeyHash(hash) => { + // P2PKH: OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG + let mut script = vec![0x76, 0xa9, 0x14]; // OP_DUP, OP_HASH160, push 20 bytes + script.extend_from_slice(&hash); + script.push(0x88); // OP_EQUALVERIFY + script.push(0xac); // OP_CHECKSIG + script + }, + zcash_transparent::address::TransparentAddress::ScriptHash(hash) => { + // P2SH: OP_HASH160 OP_EQUAL + let mut script = vec![0xa9, 0x14]; // OP_HASH160, push 20 bytes + script.extend_from_slice(&hash); + script.push(0x87); // OP_EQUAL + script + }, + }; + zcash_transparent::address::Script(script_bytes) + }, + Err(_) => panic!("Invalid Zcash address: {}", script_addr), + } + } else { + // Bitcoin address + let address = Address::from_str(script_addr) + .expect("Invalid btc address") + .assume_checked(); + zcash_transparent::address::Script(address.script_pubkey().to_bytes()) + }; + + ZcashTxOut { + value: zcash_protocol::value::Zatoshis::const_from_u64(value), + script_pubkey, + } + }) + .collect(); + + // Create transparent bundle + let transparent_bundle = zcash_transparent::bundle::Bundle { + vin: zcash_inputs, + vout: zcash_outputs, + authorization: zcash_transparent::bundle::Authorized, + }; + + // Build Zcash v5 transaction + // Use Nu6_1 for testnet to match contract's decode expectations + let tx_data = TransactionData::from_parts( + TxVersion::V5, // V5 + BranchId::Nu6_1, // Use Nu6_1 for testnet + 0, // lock_time + BlockHeight::from_u32(2000), // expiry_height (must be > 0 for v5) + Some(transparent_bundle), + None, // sapling + None, // orchard_v5 + None, // orchard (will be added later in withdrawal flow) + ); + + // Freeze the transaction to get the final Transaction object + let tx = tx_data.freeze().expect("Failed to freeze transaction"); + + // Serialize the transaction + let mut buf = Vec::new(); + tx.write(&mut buf) + .expect("Failed to serialize Zcash transaction"); + + buf +} + pub fn tool_err_msg(outcome: &Result) -> String { match outcome { Ok(res) => { diff --git a/contracts/satoshi-bridge/tests/test_orchard_validation.rs b/contracts/satoshi-bridge/tests/test_orchard_validation.rs new file mode 100644 index 0000000..61c0874 --- /dev/null +++ b/contracts/satoshi-bridge/tests/test_orchard_validation.rs @@ -0,0 +1,375 @@ +mod setup; +use setup::*; + +#[cfg(feature = "zcash")] +use bitcoin::{Amount, TxOut}; +#[cfg(feature = "zcash")] +use satoshi_bridge::network::{Address, Chain}; + +/// Test: Bundle with wrong recipient should be rejected +/// +/// Generates two bundles with different spending keys to create different recipients. +/// Uses bundle A but claims it's for recipient B - should be rejected. +#[tokio::test] +#[cfg(feature = "zcash")] +async fn test_orchard_wrong_recipient() { + // Set chain to ZcashTestnet for this test + std::env::set_var("TEST_CHAIN", "ZcashTestnet"); + + let worker = near_workspaces::sandbox().await.unwrap(); + let context = Context::new(&worker, None).await; + + check!(context.set_deposit_bridge_fee(10000, 0, 9000)); + check!(context.set_withdraw_bridge_fee(20000, 0, 9000)); + + let config = context.get_bridge_config().await.unwrap(); + + // Setup: Deposit for alice + let alice_btc_deposit_address = context + .get_user_deposit_address(DepositMsg { + recipient_id: context.get_account_by_name("alice").id().clone(), + post_actions: None, + extra_msg: None, + safe_deposit: None, + }) + .await + .unwrap(); + + check!(context.verify_deposit( + "relayer", + DepositMsg { + recipient_id: context.get_account_by_name("alice").id().clone(), + post_actions: None, + extra_msg: None, + safe_deposit: None, + }, + generate_transaction_bytes( + vec![( + "c6774e76452c36bba6c357653f620a4364fc063ba021e2acf6049f8d9e6b0234", + 1, + None, + )], + vec![ + ("1MgiBKohM2poApYamQadp21vJrNyh5T19G", 90000), + (alice_btc_deposit_address.as_str(), 500000), + ], + ), + 1, + "0000000000000c3f818b0b6374c609dd8e548a0a9e61065e942cd466c426e00d".to_string(), + 1, + vec![] + )); + + let utxos_keys = context + .get_utxos_paged() + .await + .unwrap() + .keys() + .cloned() + .collect::>(); + let first_utxo = utxos_keys[0].split('@').collect::>(); + + // Withdrawal with Orchard bundle and change output + let utxo_value = 500000u128; + let withdraw_amount = 200000u128; + let btc_gas_fee = 10000u128; + let withdraw_fee = config.withdraw_bridge_fee.get_fee(withdraw_amount); + let orchard_amount = withdraw_amount - btc_gas_fee - withdraw_fee; + let change_amount = utxo_value - orchard_amount as u128 - btc_gas_fee; + + // Generate bundle for recipient A (using spending key [1u8; 32]) + let (recipient_a, bundle_a) = gen_bundle_with_key(orchard_amount as u64, [1u8; 32]); + + // Generate bundle for recipient B (using spending key [2u8; 32]) + let (recipient_b, _bundle_b) = gen_bundle_with_key(orchard_amount as u64, [2u8; 32]); + + println!("Recipient A: {}", recipient_a); + println!("Recipient B: {}", recipient_b); + assert_ne!( + recipient_a, recipient_b, + "Recipients should be different with different spending keys" + ); + + // Get change address and parse it for Zcash + let withdraw_change_address = context.get_change_address().await.unwrap(); + let change_script_pubkey = Address::parse(&withdraw_change_address, Chain::ZcashTestnet) + .expect("Invalid change address") + .script_pubkey() + .expect("Failed to get script pubkey"); + + // This should fail: use bundle_a but claim it's for recipient_b + let result = context + .do_withdraw( + "alice", + "bridge", + withdraw_amount, + TokenReceiverMessage::Withdraw { + target_btc_address: recipient_b, // Wrong recipient! + input: vec![OutPoint { + txid: first_utxo[0].parse().unwrap(), + vout: first_utxo[1].parse().unwrap(), + }], + output: vec![TxOut { + value: Amount::from_sat(change_amount as u64), + script_pubkey: change_script_pubkey, + }], + max_gas_fee: None, + chain_specific_data: Some(ChainSpecificData { + orchard_bundle_bytes: hex::decode(&bundle_a).unwrap().into(), // Bundle for recipient A + expiry_height: 10000, + }), + }, + ) + .await; + + // Verify the error message + let err_msg = tool_err_msg(&result); + assert!( + err_msg.contains("Orchard bundle validation failed"), + "Expected 'Orchard bundle validation failed' error, got: {}", + err_msg + ); +} + +/// Test: Missing Orchard bundle when no transparent outputs are provided +/// +/// Should reject with "empty output" error when neither transparent outputs +/// nor Orchard bundle is provided. +#[tokio::test] +#[cfg(feature = "zcash")] +async fn test_orchard_missing_bundle() { + // Set chain to ZcashTestnet for this test + std::env::set_var("TEST_CHAIN", "ZcashTestnet"); + + let worker = near_workspaces::sandbox().await.unwrap(); + let context = Context::new(&worker, None).await; + + check!(context.set_deposit_bridge_fee(10000, 0, 9000)); + check!(context.set_withdraw_bridge_fee(20000, 0, 9000)); + + let _config = context.get_bridge_config().await.unwrap(); + + // Setup: Deposit for alice + let alice_btc_deposit_address = context + .get_user_deposit_address(DepositMsg { + recipient_id: context.get_account_by_name("alice").id().clone(), + post_actions: None, + extra_msg: None, + safe_deposit: None, + }) + .await + .unwrap(); + + check!(context.verify_deposit( + "relayer", + DepositMsg { + recipient_id: context.get_account_by_name("alice").id().clone(), + post_actions: None, + extra_msg: None, + safe_deposit: None, + }, + generate_transaction_bytes( + vec![( + "c6774e76452c36bba6c357653f620a4364fc063ba021e2acf6049f8d9e6b0234", + 1, + None, + )], + vec![ + ("1MgiBKohM2poApYamQadp21vJrNyh5T19G", 90000), + (alice_btc_deposit_address.as_str(), 500000), + ], + ), + 1, + "0000000000000c3f818b0b6374c609dd8e548a0a9e61065e942cd466c426e00d".to_string(), + 1, + vec![] + )); + + let utxos_keys = context + .get_utxos_paged() + .await + .unwrap() + .keys() + .cloned() + .collect::>(); + let first_utxo = utxos_keys[0].split('@').collect::>(); + + let withdraw_amount = 200000u128; + + // Generate a Unified Address (but don't provide a bundle) + let (unified_address, _bundle) = get_or_gen_bundle(100000); // Just get a UA, ignore bundle + + // This should FAIL: no outputs and no Orchard bundle + let result = context + .do_withdraw( + "alice", + "bridge", + withdraw_amount, + TokenReceiverMessage::Withdraw { + target_btc_address: unified_address, // UA provided + input: vec![OutPoint { + txid: first_utxo[0].parse().unwrap(), + vout: first_utxo[1].parse().unwrap(), + }], + output: vec![], + max_gas_fee: None, + chain_specific_data: None, // No bundle provided + }, + ) + .await; + + // Verify the error message - contract requires either outputs or orchard bundle + let err_msg = tool_err_msg(&result); + assert!( + err_msg.contains("empty output"), + "Expected 'empty output' error when no bundle and no outputs provided, got: {}", + err_msg + ); + + println!("✓ Missing bundle with empty outputs correctly rejected"); +} + +/// Test: Verify the generated Zcash transaction includes the Orchard bundle +#[tokio::test] +#[cfg(feature = "zcash")] +async fn test_orchard_bundle_in_zcash_tx() { + // Set chain to ZcashTestnet for this test + std::env::set_var("TEST_CHAIN", "ZcashTestnet"); + + let worker = near_workspaces::sandbox().await.unwrap(); + let context = Context::new(&worker, None).await; + + check!(context.set_deposit_bridge_fee(10000, 0, 9000)); + check!(context.set_withdraw_bridge_fee(20000, 0, 9000)); + + let config = context.get_bridge_config().await.unwrap(); + + // Setup: Deposit for alice + let alice_btc_deposit_address = context + .get_user_deposit_address(DepositMsg { + recipient_id: context.get_account_by_name("alice").id().clone(), + post_actions: None, + extra_msg: None, + safe_deposit: None, + }) + .await + .unwrap(); + + check!(context.verify_deposit( + "relayer", + DepositMsg { + recipient_id: context.get_account_by_name("alice").id().clone(), + post_actions: None, + extra_msg: None, + safe_deposit: None, + }, + generate_transaction_bytes( + vec![( + "c6774e76452c36bba6c357653f620a4364fc063ba021e2acf6049f8d9e6b0234", + 1, + None, + )], + vec![ + ("1MgiBKohM2poApYamQadp21vJrNyh5T19G", 90000), + (alice_btc_deposit_address.as_str(), 500000), + ], + ), + 1, + "0000000000000c3f818b0b6374c609dd8e548a0a9e61065e942cd466c426e00d".to_string(), + 1, + vec![] + )); + + let utxos_keys = context + .get_utxos_paged() + .await + .unwrap() + .keys() + .cloned() + .collect::>(); + let first_utxo = utxos_keys[0].split('@').collect::>(); + + // Withdrawal with Orchard bundle and change output + let utxo_value = 500000u128; + let withdraw_amount = 200000u128; + let btc_gas_fee = 10000u128; + let withdraw_fee = config.withdraw_bridge_fee.get_fee(withdraw_amount); + let orchard_amount = withdraw_amount - btc_gas_fee - withdraw_fee; + let change_amount = utxo_value - orchard_amount as u128 - btc_gas_fee; + + let (recipient_ua, bundle_hex) = get_or_gen_bundle(orchard_amount as u64); + + // Get change address and parse it for Zcash + let withdraw_change_address = context.get_change_address().await.unwrap(); + let change_script_pubkey = Address::parse(&withdraw_change_address, Chain::ZcashTestnet) + .expect("Invalid change address") + .script_pubkey() + .expect("Failed to get script pubkey"); + + check!(print "Withdrawal" context.do_withdraw( + "alice", + "bridge", + withdraw_amount, + TokenReceiverMessage::Withdraw { + target_btc_address: recipient_ua, + input: vec![OutPoint { + txid: first_utxo[0].parse().unwrap(), + vout: first_utxo[1].parse().unwrap(), + }], + output: vec![TxOut { + value: Amount::from_sat(change_amount as u64), + script_pubkey: change_script_pubkey, + }], + max_gas_fee: None, + chain_specific_data: Some(ChainSpecificData { + orchard_bundle_bytes: hex::decode(&bundle_hex).unwrap().into(), + expiry_height: 10000, + }), + } + )); + + let btc_pending_sign_txs = context + .get_btc_pending_infos_paged() + .await + .unwrap() + .keys() + .cloned() + .collect::>(); + + println!("Pending transactions: {:?}", btc_pending_sign_txs); + assert!( + !btc_pending_sign_txs.is_empty(), + "Should have pending transactions" + ); + + check!(print "Signing" context.sign_btc_transaction("relayer", &btc_pending_sign_txs[0], 0, 0)); + + // Fetch the pending info and check the transaction bytes + let pending_infos = context.get_btc_pending_infos_paged().await.unwrap(); + + let pending_info = pending_infos + .get(&btc_pending_sign_txs[0]) + .expect("Pending info not found"); + + // The tx_bytes_with_sign should contain the Orchard bundle + if let Some(tx_bytes) = &pending_info.tx_bytes_with_sign { + let tx_hex = hex::encode(tx_bytes); + + // The bundle hex should appear somewhere in the transaction bytes + // (It won't be exact match due to the transaction wrapper, but the bundle data should be there) + println!("Transaction hex length: {}", tx_hex.len()); + println!("Bundle hex length: {}", bundle_hex.len()); + + // At minimum, verify the transaction is longer than just transparent data + // A v5 Zcash transaction with Orchard should be significantly larger + assert!( + tx_hex.len() > 1000, + "Transaction should include Orchard bundle (tx_len={})", + tx_hex.len() + ); + + println!("✓ Zcash transaction includes Orchard data"); + } else { + panic!("No transaction bytes found after signing"); + } +} diff --git a/contracts/satoshi-bridge/tests/test_orchard_withdrawal.rs b/contracts/satoshi-bridge/tests/test_orchard_withdrawal.rs new file mode 100644 index 0000000..f8d726a --- /dev/null +++ b/contracts/satoshi-bridge/tests/test_orchard_withdrawal.rs @@ -0,0 +1,285 @@ +mod setup; +use setup::*; + +#[cfg(feature = "zcash")] +use bitcoin::{Amount, TxOut}; +#[cfg(feature = "zcash")] +use satoshi_bridge::network::{Address, Chain}; + +#[tokio::test] +#[cfg(feature = "zcash")] +async fn test_orchard_withdrawal_with_ovk_validation() { + // Set chain to ZcashTestnet for this test + std::env::set_var("TEST_CHAIN", "ZcashTestnet"); + + let worker = near_workspaces::sandbox().await.unwrap(); + let context = Context::new(&worker, None).await; + + // Setup bridge fees + check!(context.set_deposit_bridge_fee(10000, 0, 9000)); + check!(context.set_withdraw_bridge_fee(20000, 0, 9000)); + + let config = context.get_bridge_config().await.unwrap(); + + // Verify we're on Zcash chain + println!("Testing on chain: {:?}", config.chain); + assert_eq!(format!("{:?}", config.chain), "ZcashTestnet"); + + // Deposit for alice using Zcash transaction format + let alice_btc_deposit_address = context + .get_user_deposit_address(DepositMsg { + recipient_id: context.get_account_by_name("alice").id().clone(), + post_actions: None, + extra_msg: None, + safe_deposit: None, + }) + .await + .unwrap(); + + println!("Alice deposit address: {}", alice_btc_deposit_address); + + // Generate Zcash v5 transaction for deposit + let zcash_tx_bytes = setup::utils::generate_transaction_bytes( + vec![( + "c6774e76452c36bba6c357653f620a4364fc063ba021e2acf6049f8d9e6b0234", + 1, + None, + )], + vec![ + ("1MgiBKohM2poApYamQadp21vJrNyh5T19G", 90000), + (alice_btc_deposit_address.as_str(), 500000), + ], + ); + + println!( + "Generated Zcash transaction, size: {} bytes", + zcash_tx_bytes.len() + ); + + // Verify the deposit using Zcash transaction + check!(context.verify_deposit( + "relayer", + DepositMsg { + recipient_id: context.get_account_by_name("alice").id().clone(), + post_actions: None, + extra_msg: None, + safe_deposit: None, + }, + zcash_tx_bytes, + 1, + "0000000000000c3f818b0b6374c609dd8e548a0a9e61065e942cd466c426e00d".to_string(), + 1, + vec![] + )); + + println!("✅ Deposit verified successfully"); + + let utxos_keys = context + .get_utxos_paged() + .await + .unwrap() + .keys() + .cloned() + .collect::>(); + + assert!(!utxos_keys.is_empty(), "Should have UTXOs after deposit"); + println!("UTXOs: {:?}", utxos_keys); + + let first_utxo = utxos_keys[0].split('@').collect::>(); + + // Withdrawal with Orchard bundle and change output + let utxo_value = 500000u128; + let withdraw_amount = 200000u128; + let btc_gas_fee = 10000u128; + let withdraw_fee = config.withdraw_bridge_fee.get_fee(withdraw_amount); + let orchard_amount = (withdraw_amount - withdraw_fee - btc_gas_fee) as u64; + let change_amount = utxo_value - orchard_amount as u128 - btc_gas_fee; + + println!( + "Withdraw fee: {}, BTC gas fee: {}", + withdraw_fee, btc_gas_fee + ); + + println!( + "Withdraw amount: {}, Orchard amount: {}, Change amount: {}", + withdraw_amount, orchard_amount, change_amount + ); + + // Generate Orchard bundle with correct amount + let (recipient_ua, bundle_hex) = setup::orchard::get_or_gen_bundle(orchard_amount); + println!("Generated Orchard bundle for recipient: {}", recipient_ua); + println!("Bundle size: {} bytes", bundle_hex.len() / 2); + + // Get change address and parse it for Zcash + let withdraw_change_address = context.get_change_address().await.unwrap(); + let change_script_pubkey = Address::parse(&withdraw_change_address, Chain::ZcashTestnet) + .expect("Invalid change address") + .script_pubkey() + .expect("Failed to get script pubkey"); + + // Perform Orchard withdrawal with change output + check!(context.do_withdraw( + "alice", + "bridge", + withdraw_amount, + TokenReceiverMessage::Withdraw { + target_btc_address: recipient_ua.clone(), + input: vec![OutPoint { + txid: first_utxo[0].parse().unwrap(), + vout: first_utxo[1].parse().unwrap(), + }], + output: vec![TxOut { + value: Amount::from_sat(change_amount as u64), + script_pubkey: change_script_pubkey, + }], + max_gas_fee: None, + chain_specific_data: Some(ChainSpecificData { + orchard_bundle_bytes: hex::decode(&bundle_hex).unwrap().into(), + expiry_height: 10000, + }), + } + )); + + println!("✅ Withdrawal with Orchard bundle completed successfully"); +} + +#[tokio::test] +#[cfg(feature = "zcash")] +async fn test_orchard_withdrawal_amount_mismatch() { + // Set chain to ZcashTestnet for this test + std::env::set_var("TEST_CHAIN", "ZcashTestnet"); + + let worker = near_workspaces::sandbox().await.unwrap(); + let context = Context::new(&worker, None).await; + + check!(context.set_deposit_bridge_fee(10000, 0, 9000)); + check!(context.set_withdraw_bridge_fee(20000, 0, 9000)); + + let config = context.get_bridge_config().await.unwrap(); + + // Deposit for alice using Zcash transaction format + let alice_btc_deposit_address = context + .get_user_deposit_address(DepositMsg { + recipient_id: context.get_account_by_name("alice").id().clone(), + post_actions: None, + extra_msg: None, + safe_deposit: None, + }) + .await + .unwrap(); + + // Generate Zcash v5 transaction for deposit + let zcash_tx_bytes = setup::utils::generate_transaction_bytes( + vec![( + "c6774e76452c36bba6c357653f620a4364fc063ba021e2acf6049f8d9e6b0234", + 1, + None, + )], + vec![ + ("1MgiBKohM2poApYamQadp21vJrNyh5T19G", 90000), + (alice_btc_deposit_address.as_str(), 500000), + ], + ); + + check!(context.verify_deposit( + "relayer", + DepositMsg { + recipient_id: context.get_account_by_name("alice").id().clone(), + post_actions: None, + extra_msg: None, + safe_deposit: None, + }, + zcash_tx_bytes, + 1, + "0000000000000c3f818b0b6374c609dd8e548a0a9e61065e942cd466c426e00d".to_string(), + 1, + vec![] + )); + + let utxos_keys = context + .get_utxos_paged() + .await + .unwrap() + .keys() + .cloned() + .collect::>(); + let first_utxo = utxos_keys[0].split('@').collect::>(); + + // Withdrawal with Orchard bundle and change output - test amount mismatch + let utxo_value = 500000u128; + let withdraw_amount = 200000u128; + let btc_gas_fee = 10000u128; + let withdraw_fee = config.withdraw_bridge_fee.get_fee(withdraw_amount); + + // Calculate expected orchard amount + let expected_orchard_amount = (withdraw_amount - withdraw_fee - btc_gas_fee) as u64; + + // Generate bundle with WRONG amount (different from what we're withdrawing) + let wrong_amount = 100000u64; // Different from expected_orchard_amount + let (recipient_ua, bundle_hex) = get_or_gen_bundle(wrong_amount); + + // Change amount must be calculated based on the ACTUAL orchard amount in the bundle + // to ensure gas_fee stays within valid range + let change_amount = utxo_value - wrong_amount as u128 - btc_gas_fee; + + println!( + "Expected orchard amount: {}, Using wrong amount: {}", + expected_orchard_amount, wrong_amount + ); + + // Get change address and parse it for Zcash + let withdraw_change_address = context.get_change_address().await.unwrap(); + let change_script_pubkey = Address::parse(&withdraw_change_address, Chain::ZcashTestnet) + .expect("Invalid change address") + .script_pubkey() + .expect("Failed to get script pubkey"); + + // This should fail with "Orchard amount mismatch" because the bundle has wrong_amount + // but we're withdrawing expected_orchard_amount (the contract expects the orchard amount + // to match withdraw_amount - withdraw_fee - gas_fee) + let result = context + .do_withdraw( + "alice", + "bridge", + withdraw_amount, + TokenReceiverMessage::Withdraw { + target_btc_address: recipient_ua, // Use the bundle's actual recipient + input: vec![OutPoint { + txid: first_utxo[0].parse().unwrap(), + vout: first_utxo[1].parse().unwrap(), + }], + output: vec![TxOut { + value: Amount::from_sat(change_amount as u64), + script_pubkey: change_script_pubkey, + }], + max_gas_fee: None, + chain_specific_data: Some(ChainSpecificData { + orchard_bundle_bytes: hex::decode(&bundle_hex).unwrap().into(), + expiry_height: 10000, + }), + }, + ) + .await; + + // Check that it failed with the expected error + assert!( + result.is_ok(), + "Withdrawal call should not fail at network level" + ); + let outcome = result.unwrap(); + assert!( + !outcome.is_success() || !outcome.receipt_failures().is_empty(), + "Withdrawal should fail due to Orchard validation" + ); + + // Check the error message - the contract validates that the user's output amount + // matches the expected range based on withdraw_amount - withdraw_fee - gas_fee + let err_msg = setup::utils::tool_err_msg(&Ok(outcome)); + assert!( + err_msg.contains("output amount") && err_msg.contains("out of the valid range"), + "Expected output amount validation error, got: {}", + err_msg + ); + + println!("✓ Orchard amount mismatch correctly rejected"); +} diff --git a/contracts/satoshi-bridge/tests/test_satoshi_bridge.rs b/contracts/satoshi-bridge/tests/test_satoshi_bridge.rs index 509f372..5502ebc 100644 --- a/contracts/satoshi-bridge/tests/test_satoshi_bridge.rs +++ b/contracts/satoshi-bridge/tests/test_satoshi_bridge.rs @@ -1,15 +1,32 @@ mod setup; -use std::str::FromStr; - -use bitcoin::{Address, Amount, OutPoint, TxOut}; +use bitcoin::{Amount, OutPoint, TxOut}; use near_sdk::{AccountId, Gas}; +use satoshi_bridge::network::{Address, Chain}; use satoshi_bridge::{DepositMsg, PendingInfoState, PostAction, TokenReceiverMessage}; use setup::*; +use std::string::ToString; + +#[cfg(feature = "zcash")] +const CHAIN: &str = "ZcashTestnet"; +#[cfg(not(feature = "zcash"))] +const CHAIN: &str = "BitcoinMainnet"; + +#[cfg(feature = "zcash")] +const TARGET_ADDRESS: &str = "tmD67UTsZ4iBbhCae4D43k1x8fhFNhwd4Jn"; +#[cfg(not(feature = "zcash"))] +const TARGET_ADDRESS: &str = "1PAGsaT5vDz6hjzvuenSw33hWzESTR3ZHQ"; + +fn get_chain() -> Chain { + match CHAIN { + "ZcashTestnet" => Chain::ZcashTestnet, + _ => Chain::BitcoinMainnet, + } +} #[tokio::test] async fn test_role() { let worker = near_workspaces::sandbox().await.unwrap(); - let context = Context::new(&worker).await; + let context = Context::new(&worker, Some(CHAIN.to_string())).await; assert_eq!( context.get_metadata().await.unwrap().super_admins, vec!["test.near".parse::().unwrap()] @@ -88,7 +105,7 @@ async fn test_role() { #[tokio::test] async fn test_base() { let worker = near_workspaces::sandbox().await.unwrap(); - let context = Context::new(&worker).await; + let context = Context::new(&worker, Some(CHAIN.to_string())).await; let config = context.get_bridge_config().await.unwrap(); let withdraw_change_address = context.get_change_address().await.unwrap(); let alice_btc_deposit_address = context @@ -126,7 +143,7 @@ async fn test_base() { )], vec![ (alice_btc_deposit_address.as_str(), 10000), - ("1MgiBKohM2poApYamQadp21vJrNyh5T19G", 90000) + (TARGET_ADDRESS, 90000) ], ), 0, @@ -173,7 +190,7 @@ async fn test_base() { None, ),], vec![ - ("1MgiBKohM2poApYamQadp21vJrNyh5T19G", 90000), + (TARGET_ADDRESS, 90000), (alice_btc_deposit_address.as_str(), 50000), ], ), @@ -222,7 +239,7 @@ async fn test_base() { None, ),], vec![ - ("1MgiBKohM2poApYamQadp21vJrNyh5T19G", 90000), + (TARGET_ADDRESS, 90000), (alice_btc_deposit_address.as_str(), 50000), ], ), @@ -256,7 +273,7 @@ async fn test_base() { ),], vec![ (bob_btc_deposit_address.as_str(), 200000), - ("1F3HTDzfWnPPbBaUrxg99LJEjHQd4NsisC", 50000), + (TARGET_ADDRESS, 50000), ], ), 0, @@ -297,12 +314,11 @@ async fn test_base() { let first_utxo = utxos_keys[0].split('@').collect::>(); let second_utxo = utxos_keys[1].split('@').collect::>(); let withdraw_amount = 110000; - let btc_gas_fee = 10000; + let btc_gas_fee = 25000; let withdraw_fee = config.withdraw_bridge_fee.get_fee(withdraw_amount); let total_change_amount = 250000 - (withdraw_amount - withdraw_fee) as u64; check!(print context.do_withdraw("alice", "bridge", withdraw_amount, TokenReceiverMessage::Withdraw { - target_btc_address: "1PAGsaT5vDz6hjzvuenSw33hWzESTR3ZHQ".to_string(), - max_gas_fee: None, + target_btc_address: TARGET_ADDRESS.to_string(), input: vec![ OutPoint { txid: first_utxo[0].parse().unwrap(), @@ -314,30 +330,32 @@ async fn test_base() { }], output: vec![TxOut { value: Amount::from_sat((withdraw_amount - btc_gas_fee - withdraw_fee) as u64),// 50000 - script_pubkey: Address::from_str("1PAGsaT5vDz6hjzvuenSw33hWzESTR3ZHQ") + script_pubkey: Address::parse(TARGET_ADDRESS, get_chain()) .expect("Invalid btc address") - .assume_checked().script_pubkey() + .script_pubkey().expect("Failed to get script pubkey") },TxOut { value: Amount::from_sat(total_change_amount / 4), - script_pubkey: Address::from_str(withdraw_change_address.as_str()) + script_pubkey: Address::parse(withdraw_change_address.as_str(), get_chain()) .expect("Invalid btc address") - .assume_checked().script_pubkey() + .script_pubkey().expect("Failed to get script pubkey") },TxOut { value: Amount::from_sat(total_change_amount / 4), - script_pubkey: Address::from_str(withdraw_change_address.as_str()) + script_pubkey: Address::parse(withdraw_change_address.as_str(), get_chain()) .expect("Invalid btc address") - .assume_checked().script_pubkey() + .script_pubkey().expect("Failed to get script pubkey") },TxOut { value: Amount::from_sat(total_change_amount / 4), - script_pubkey: Address::from_str(withdraw_change_address.as_str()) + script_pubkey: Address::parse(withdraw_change_address.as_str(), get_chain()) .expect("Invalid btc address") - .assume_checked().script_pubkey() + .script_pubkey().expect("Failed to get script pubkey") },TxOut { value: Amount::from_sat(total_change_amount / 4 + total_change_amount % 4), - script_pubkey: Address::from_str(withdraw_change_address.as_str()) + script_pubkey: Address::parse(withdraw_change_address.as_str(), get_chain()) .expect("Invalid btc address") - .assume_checked().script_pubkey() + .script_pubkey().expect("Failed to get script pubkey") }], + max_gas_fee: None, + chain_specific_data: None, })); assert_eq!( @@ -454,7 +472,7 @@ async fn test_base() { #[tokio::test] async fn test_fix_bridge_fee_and_relayer() { let worker = near_workspaces::sandbox().await.unwrap(); - let context = Context::new(&worker).await; + let context = Context::new(&worker, Some(CHAIN.to_string())).await; check!(context.set_deposit_bridge_fee(10000, 0, 9000)); check!(context.set_withdraw_bridge_fee(20000, 0, 9000)); let config = context.get_bridge_config().await.unwrap(); @@ -514,23 +532,24 @@ async fn test_fix_bridge_fee_and_relayer() { let btc_gas_fee = 10000; let withdraw_fee = config.withdraw_bridge_fee.get_fee(withdraw_amount); check!(print "do_withdraw" context.do_withdraw("alice", "bridge", withdraw_amount, TokenReceiverMessage::Withdraw { - target_btc_address: "1PAGsaT5vDz6hjzvuenSw33hWzESTR3ZHQ".to_string(), - max_gas_fee: None, + target_btc_address: TARGET_ADDRESS.to_string(), input: vec![OutPoint { txid: first_utxo[0].parse().unwrap(), vout: first_utxo[1].parse().unwrap(), }], output: vec![TxOut { value: Amount::from_sat((withdraw_amount - btc_gas_fee - withdraw_fee) as u64),// 50000 - script_pubkey: Address::from_str("1PAGsaT5vDz6hjzvuenSw33hWzESTR3ZHQ") + script_pubkey: Address::parse(TARGET_ADDRESS, get_chain()) .expect("Invalid btc address") - .assume_checked().script_pubkey() + .script_pubkey().expect("Failed to get script pubkey") },TxOut { value: Amount::from_sat(320000), - script_pubkey: Address::from_str(withdraw_change_address.as_str()) + script_pubkey: Address::parse(withdraw_change_address.as_str(), get_chain()) .expect("Invalid btc address") - .assume_checked().script_pubkey() + .script_pubkey().expect("Failed to get script pubkey") }], + max_gas_fee: None, + chain_specific_data: None, })); let btc_pending_sign_txs = context .get_btc_pending_infos_paged() @@ -593,7 +612,7 @@ async fn test_fix_bridge_fee_and_relayer() { #[tokio::test] async fn test_ratio_bridge_fee_and_relayer() { let worker = near_workspaces::sandbox().await.unwrap(); - let context = Context::new(&worker).await; + let context = Context::new(&worker, Some(CHAIN.to_string())).await; check!(context.set_deposit_bridge_fee(0, 1000, 9000)); check!(context.set_withdraw_bridge_fee(0, 2000, 9000)); let config = context.get_bridge_config().await.unwrap(); @@ -653,23 +672,24 @@ async fn test_ratio_bridge_fee_and_relayer() { let btc_gas_fee = 10000; let withdraw_fee = config.withdraw_bridge_fee.get_fee(withdraw_amount); check!(print "do_withdraw" context.do_withdraw("alice", "bridge", withdraw_amount, TokenReceiverMessage::Withdraw { - target_btc_address: "1PAGsaT5vDz6hjzvuenSw33hWzESTR3ZHQ".to_string(), - max_gas_fee: None, + target_btc_address: TARGET_ADDRESS.to_string(), input: vec![OutPoint { txid: first_utxo[0].parse().unwrap(), vout: first_utxo[1].parse().unwrap(), }], output: vec![TxOut { value: Amount::from_sat((withdraw_amount - btc_gas_fee - withdraw_fee) as u64),// 50000 - script_pubkey: Address::from_str("1PAGsaT5vDz6hjzvuenSw33hWzESTR3ZHQ") + script_pubkey: Address::parse(TARGET_ADDRESS, get_chain()) .expect("Invalid btc address") - .assume_checked().script_pubkey() + .script_pubkey().expect("Failed to get script pubkey") },TxOut { value: Amount::from_sat(500000 - (withdraw_amount - withdraw_fee) as u64), - script_pubkey: Address::from_str(withdraw_change_address.as_str()) + script_pubkey: Address::parse(withdraw_change_address.as_str(), get_chain()) .expect("Invalid btc address") - .assume_checked().script_pubkey() + .script_pubkey().expect("Failed to get script pubkey") }], + max_gas_fee: None, + chain_specific_data: None, })); let btc_pending_sign_txs = context .get_btc_pending_infos_paged() @@ -735,7 +755,7 @@ async fn test_ratio_bridge_fee_and_relayer() { #[tokio::test] async fn test_directly_withdraw() { let worker = near_workspaces::sandbox().await.unwrap(); - let context = Context::new(&worker).await; + let context = Context::new(&worker, Some(CHAIN.to_string())).await; check!(context.set_deposit_bridge_fee(10000, 0, 9000)); check!(context.set_withdraw_bridge_fee(20000, 0, 9000)); let config = context.get_bridge_config().await.unwrap(); @@ -801,23 +821,24 @@ async fn test_directly_withdraw() { let btc_gas_fee = 10000; let withdraw_fee = config.withdraw_bridge_fee.get_fee(withdraw_amount); check!(print "do_withdraw" context.do_withdraw("bob", "bridge", withdraw_amount, TokenReceiverMessage::Withdraw { - target_btc_address: "1PAGsaT5vDz6hjzvuenSw33hWzESTR3ZHQ".to_string(), - max_gas_fee: None, + target_btc_address: TARGET_ADDRESS.to_string(), input: vec![OutPoint { txid: first_utxo[0].parse().unwrap(), vout: first_utxo[1].parse().unwrap(), }], output: vec![TxOut { value: Amount::from_sat((withdraw_amount - btc_gas_fee - withdraw_fee) as u64),// 50000 - script_pubkey: Address::from_str("1PAGsaT5vDz6hjzvuenSw33hWzESTR3ZHQ") + script_pubkey: Address::parse(TARGET_ADDRESS, get_chain()) .expect("Invalid btc address") - .assume_checked().script_pubkey() + .script_pubkey().expect("Failed to get script pubkey") },TxOut { value: Amount::from_sat(320000), - script_pubkey: Address::from_str(withdraw_change_address.as_str()) + script_pubkey: Address::parse(withdraw_change_address.as_str(), get_chain()) .expect("Invalid btc address") - .assume_checked().script_pubkey() + .script_pubkey().expect("Failed to get script pubkey") }], + max_gas_fee: None, + chain_specific_data: None, })); let btc_pending_sign_txs = context .get_btc_pending_infos_paged() @@ -858,7 +879,7 @@ async fn test_directly_withdraw() { #[tokio::test] async fn test_one_click() { let worker = near_workspaces::sandbox().await.unwrap(); - let context = Context::new(&worker).await; + let context = Context::new(&worker, Some(CHAIN.to_string())).await; check!(context.set_deposit_bridge_fee(10000, 0, 9000)); let mut times = 0; { @@ -1370,7 +1391,7 @@ async fn test_one_click() { #[tokio::test] async fn test_utxo_passive_management() { let worker = near_workspaces::sandbox().await.unwrap(); - let context = Context::new(&worker).await; + let context = Context::new(&worker, Some(CHAIN.to_string())).await; check!(context.set_deposit_bridge_fee(0, 0, 9000)); check!(context.set_withdraw_bridge_fee(0, 0, 9000)); // The bridge deposit fee is 0, so the bridge will not be automatically registered with mint @@ -1452,7 +1473,7 @@ async fn test_utxo_passive_management() { .clone(); let utxo60000 = utxo_key60000.split('@').collect::>(); let withdraw_amount = 200000; - let btc_gas_fee = 10000; + let btc_gas_fee = 15000; let withdraw_fee = config.withdraw_bridge_fee.get_fee(withdraw_amount); check!(context.set_passive_management_limit(3, 10)); check!( @@ -1461,8 +1482,7 @@ async fn test_utxo_passive_management() { "bridge", withdraw_amount, TokenReceiverMessage::Withdraw { - target_btc_address: "1PAGsaT5vDz6hjzvuenSw33hWzESTR3ZHQ".to_string(), - max_gas_fee: None, + target_btc_address: TARGET_ADDRESS.to_string(), input: vec![OutPoint { txid: utxo500000[0].parse().unwrap(), vout: utxo500000[1].parse().unwrap(), @@ -1472,19 +1492,24 @@ async fn test_utxo_passive_management() { value: Amount::from_sat( (withdraw_amount - btc_gas_fee - withdraw_fee) as u64 ), - script_pubkey: Address::from_str("1PAGsaT5vDz6hjzvuenSw33hWzESTR3ZHQ") + script_pubkey: Address::parse(TARGET_ADDRESS, get_chain()) .expect("Invalid btc address") - .assume_checked() .script_pubkey() + .expect("Failed to get script pubkey") }, TxOut { value: Amount::from_sat(500000 - (withdraw_amount - withdraw_fee) as u64), - script_pubkey: Address::from_str(withdraw_change_address.as_str()) - .expect("Invalid btc address") - .assume_checked() - .script_pubkey() + script_pubkey: Address::parse( + withdraw_change_address.as_str(), + get_chain() + ) + .expect("Invalid btc address") + .script_pubkey() + .expect("Failed to get script pubkey") } ], + max_gas_fee: None, + chain_specific_data: None, } ), "require input_num < change_num" @@ -1497,8 +1522,7 @@ async fn test_utxo_passive_management() { "bridge", withdraw_amount, TokenReceiverMessage::Withdraw { - target_btc_address: "1PAGsaT5vDz6hjzvuenSw33hWzESTR3ZHQ".to_string(), - max_gas_fee: None, + target_btc_address: TARGET_ADDRESS.to_string(), input: vec![OutPoint { txid: utxo500000[0].parse().unwrap(), vout: utxo500000[1].parse().unwrap(), @@ -1508,26 +1532,34 @@ async fn test_utxo_passive_management() { value: Amount::from_sat( (withdraw_amount - btc_gas_fee - withdraw_fee) as u64 ), - script_pubkey: Address::from_str("1PAGsaT5vDz6hjzvuenSw33hWzESTR3ZHQ") + script_pubkey: Address::parse(TARGET_ADDRESS, get_chain()) .expect("Invalid btc address") - .assume_checked() .script_pubkey() + .expect("Failed to get script pubkey") }, TxOut { value: Amount::from_sat(total_change / 2), - script_pubkey: Address::from_str(withdraw_change_address.as_str()) - .expect("Invalid btc address") - .assume_checked() - .script_pubkey() + script_pubkey: Address::parse( + withdraw_change_address.as_str(), + get_chain() + ) + .expect("Invalid btc address") + .script_pubkey() + .expect("Failed to get script pubkey") }, TxOut { value: Amount::from_sat(total_change / 2 + total_change % 2), - script_pubkey: Address::from_str(withdraw_change_address.as_str()) - .expect("Invalid btc address") - .assume_checked() - .script_pubkey() + script_pubkey: Address::parse( + withdraw_change_address.as_str(), + get_chain() + ) + .expect("Invalid btc address") + .script_pubkey() + .expect("Failed to get script pubkey") } ], + max_gas_fee: None, + chain_specific_data: None, } ), "require input_num > change_num" @@ -1540,8 +1572,7 @@ async fn test_utxo_passive_management() { "bridge", withdraw_amount, TokenReceiverMessage::Withdraw { - target_btc_address: "1PAGsaT5vDz6hjzvuenSw33hWzESTR3ZHQ".to_string(), - max_gas_fee: None, + target_btc_address: TARGET_ADDRESS.to_string(), input: vec![ OutPoint { txid: utxo500000[0].parse().unwrap(), @@ -1557,19 +1588,24 @@ async fn test_utxo_passive_management() { value: Amount::from_sat( (withdraw_amount - btc_gas_fee - withdraw_fee) as u64 ), - script_pubkey: Address::from_str("1PAGsaT5vDz6hjzvuenSw33hWzESTR3ZHQ") + script_pubkey: Address::parse(TARGET_ADDRESS, get_chain()) .expect("Invalid btc address") - .assume_checked() .script_pubkey() + .expect("Failed to get script pubkey") }, TxOut { value: Amount::from_sat(total_change), - script_pubkey: Address::from_str(withdraw_change_address.as_str()) - .expect("Invalid btc address") - .assume_checked() - .script_pubkey() + script_pubkey: Address::parse( + withdraw_change_address.as_str(), + get_chain() + ) + .expect("Invalid btc address") + .script_pubkey() + .expect("Failed to get script pubkey") } ], + max_gas_fee: None, + chain_specific_data: None, } ), "The change amount must be less than all inputs" @@ -1579,7 +1615,7 @@ async fn test_utxo_passive_management() { #[tokio::test] async fn test_cancel_withdraw() { let worker = near_workspaces::sandbox().await.unwrap(); - let context = Context::new(&worker).await; + let context = Context::new(&worker, Some(CHAIN.to_string())).await; check!(context.set_deposit_bridge_fee(10000, 0, 9000)); check!(context.set_withdraw_bridge_fee(20000, 0, 9000)); let config = context.get_bridge_config().await.unwrap(); @@ -1640,23 +1676,24 @@ async fn test_cancel_withdraw() { let withdraw_fee = config.withdraw_bridge_fee.get_fee(withdraw_amount); let change_amount = 500000 - (withdraw_amount - withdraw_fee) as u64; check!(print "do_withdraw" context.do_withdraw("alice", "bridge", withdraw_amount, TokenReceiverMessage::Withdraw { - target_btc_address: "1PAGsaT5vDz6hjzvuenSw33hWzESTR3ZHQ".to_string(), - max_gas_fee: None, + target_btc_address: TARGET_ADDRESS.to_string(), input: vec![OutPoint { txid: first_utxo[0].parse().unwrap(), vout: first_utxo[1].parse().unwrap(), }], output: vec![TxOut { value: Amount::from_sat((withdraw_amount - btc_gas_fee - withdraw_fee) as u64),// 50000 - script_pubkey: Address::from_str("1PAGsaT5vDz6hjzvuenSw33hWzESTR3ZHQ") + script_pubkey: Address::parse(TARGET_ADDRESS, get_chain()) .expect("Invalid btc address") - .assume_checked().script_pubkey() + .script_pubkey().expect("Failed to get script pubkey") },TxOut { value: Amount::from_sat(change_amount), - script_pubkey: Address::from_str(withdraw_change_address.as_str()) + script_pubkey: Address::parse(withdraw_change_address.as_str(), get_chain()) .expect("Invalid btc address") - .assume_checked().script_pubkey() + .script_pubkey().expect("Failed to get script pubkey") }], + max_gas_fee: None, + chain_specific_data: None, })); let btc_pending_sign_txs = context @@ -1682,9 +1719,10 @@ async fn test_cancel_withdraw() { vec![ generate_tx_out( (withdraw_amount - btc_gas_fee - withdraw_fee) as u64, - "1PAGsaT5vDz6hjzvuenSw33hWzESTR3ZHQ" + TARGET_ADDRESS, + get_chain() ), - generate_tx_out(change_amount, withdraw_change_address.as_str()), + generate_tx_out(change_amount, withdraw_change_address.as_str(), get_chain()), ] ), "Please wait user rbf" @@ -1698,23 +1736,26 @@ async fn test_cancel_withdraw() { vec![ generate_tx_out( (withdraw_amount - btc_gas_fee - withdraw_fee) as u64, - "1PAGsaT5vDz6hjzvuenSw33hWzESTR3ZHQ" + TARGET_ADDRESS, + get_chain() ), - generate_tx_out(change_amount, withdraw_change_address.as_str()), + generate_tx_out(change_amount, withdraw_change_address.as_str(), get_chain()), ] ), "Invalid output script_pubkey" ); + #[cfg(not(feature = "zcash"))] check!( context.cancel_withdraw( &original_btc_pending_verify_id, vec![ generate_tx_out( (withdraw_amount - btc_gas_fee - withdraw_fee) as u64, - withdraw_change_address.as_str() + withdraw_change_address.as_str(), + get_chain() ), - generate_tx_out(change_amount, withdraw_change_address.as_str()), + generate_tx_out(change_amount, withdraw_change_address.as_str(), get_chain()), ] ), "No gas increase." @@ -1727,9 +1768,9 @@ async fn test_cancel_withdraw() { vec![ generate_tx_out( (withdraw_amount - new_btc_gas_fee - withdraw_fee) as u64, - withdraw_change_address.as_str() + withdraw_change_address.as_str(), get_chain() ), - generate_tx_out(change_amount, withdraw_change_address.as_str()), + generate_tx_out(change_amount, withdraw_change_address.as_str(), get_chain()), ] ) ); @@ -1809,7 +1850,7 @@ async fn test_cancel_withdraw() { #[tokio::test] async fn test_cancel_withdraw2() { let worker = near_workspaces::sandbox().await.unwrap(); - let context = Context::new(&worker).await; + let context = Context::new(&worker, Some(CHAIN.to_string())).await; check!(context.set_deposit_bridge_fee(10000, 0, 9000)); check!(context.set_withdraw_bridge_fee(20000, 0, 9000)); let config = context.get_bridge_config().await.unwrap(); @@ -1870,23 +1911,24 @@ async fn test_cancel_withdraw2() { let withdraw_fee = config.withdraw_bridge_fee.get_fee(withdraw_amount); let change_amount = 500000 - (withdraw_amount - withdraw_fee) as u64; check!(print "do_withdraw" context.do_withdraw("alice", "bridge", withdraw_amount, TokenReceiverMessage::Withdraw { - target_btc_address: "1PAGsaT5vDz6hjzvuenSw33hWzESTR3ZHQ".to_string(), - max_gas_fee: None, + target_btc_address: TARGET_ADDRESS.to_string(), input: vec![OutPoint { txid: first_utxo[0].parse().unwrap(), vout: first_utxo[1].parse().unwrap(), }], output: vec![TxOut { value: Amount::from_sat((withdraw_amount - btc_gas_fee - withdraw_fee) as u64),// 50000 - script_pubkey: Address::from_str("1PAGsaT5vDz6hjzvuenSw33hWzESTR3ZHQ") + script_pubkey: Address::parse(TARGET_ADDRESS, get_chain()) .expect("Invalid btc address") - .assume_checked().script_pubkey() + .script_pubkey().expect("Failed to get script pubkey") },TxOut { value: Amount::from_sat(change_amount), - script_pubkey: Address::from_str(withdraw_change_address.as_str()) + script_pubkey: Address::parse(withdraw_change_address.as_str(), get_chain()) .expect("Invalid btc address") - .assume_checked().script_pubkey() + .script_pubkey().expect("Failed to get script pubkey") }], + max_gas_fee: None, + chain_specific_data: None, })); let btc_pending_sign_txs = context @@ -1910,7 +1952,7 @@ async fn test_cancel_withdraw2() { // (withdraw_amount - new_btc_gas_fee - withdraw_fee) as u64, // withdraw_change_address.as_str() // ), - generate_tx_out(change_amount - 111, withdraw_change_address.as_str()), + generate_tx_out(change_amount - 111, withdraw_change_address.as_str(), get_chain()), ] ) ); @@ -1992,7 +2034,7 @@ async fn test_cancel_withdraw2() { #[tokio::test] async fn test_utxo_active_management() { let worker = near_workspaces::sandbox().await.unwrap(); - let context = Context::new(&worker).await; + let context = Context::new(&worker, Some(CHAIN.to_string())).await; check!(context.set_deposit_bridge_fee(10000, 0, 10000)); // The bridge deposit fee is 0, so the bridge will not be automatically registered with mint check!(context.storage_deposit("nbtc", "bridge")); @@ -2088,8 +2130,8 @@ async fn test_utxo_active_management() { } ], vec![ - generate_tx_out(output_amount, "1PAGsaT5vDz6hjzvuenSw33hWzESTR3ZHQ"), - generate_tx_out(output_amount, withdraw_change_address.as_str()), + generate_tx_out(output_amount, TARGET_ADDRESS, get_chain()), + generate_tx_out(output_amount, withdraw_change_address.as_str(), get_chain()), ] ), "Active management conditions are not met" @@ -2108,8 +2150,8 @@ async fn test_utxo_active_management() { } ], vec![ - generate_tx_out(output_amount, "1PAGsaT5vDz6hjzvuenSw33hWzESTR3ZHQ"), - generate_tx_out(output_amount, withdraw_change_address.as_str()), + generate_tx_out(output_amount, TARGET_ADDRESS, get_chain()), + generate_tx_out(output_amount, withdraw_change_address.as_str(), get_chain()), ] ), "require input_num < output_num" @@ -2128,8 +2170,8 @@ async fn test_utxo_active_management() { } ], vec![ - generate_tx_out(output_amount, "1PAGsaT5vDz6hjzvuenSw33hWzESTR3ZHQ"), - generate_tx_out(output_amount, withdraw_change_address.as_str()), + generate_tx_out(output_amount, TARGET_ADDRESS, get_chain()), + generate_tx_out(output_amount, withdraw_change_address.as_str(), get_chain()), ] ), "require input_num > output_num" @@ -2148,7 +2190,8 @@ async fn test_utxo_active_management() { ], vec![generate_tx_out( output_amount * 2, - "1PAGsaT5vDz6hjzvuenSw33hWzESTR3ZHQ" + TARGET_ADDRESS, + get_chain() ),] ), "Invalid output script_pubkey" @@ -2167,7 +2210,8 @@ async fn test_utxo_active_management() { ], vec![generate_tx_out( output_amount * 2 - 30000, - withdraw_change_address.as_str() + withdraw_change_address.as_str(), + get_chain() ),] ), "Insufficient protocol_fee" @@ -2192,7 +2236,7 @@ async fn test_utxo_active_management() { vec![ generate_tx_out( output_amount * 2 - 10000, - withdraw_change_address.as_str() + withdraw_change_address.as_str(), get_chain() ), ] ) @@ -2206,7 +2250,8 @@ async fn test_utxo_active_management() { original_btc_pending_verify_id, vec![generate_tx_out( output_amount * 2 - 10000, - withdraw_change_address.as_str() + withdraw_change_address.as_str(), + get_chain() ),] ), "No gas increase." @@ -2215,8 +2260,16 @@ async fn test_utxo_active_management() { context.active_utxo_management_rbf( original_btc_pending_verify_id, vec![ - generate_tx_out(output_amount - 10000, withdraw_change_address.as_str()), - generate_tx_out(output_amount - 10000, withdraw_change_address.as_str()), + generate_tx_out( + output_amount - 10000, + withdraw_change_address.as_str(), + get_chain() + ), + generate_tx_out( + output_amount - 10000, + withdraw_change_address.as_str(), + get_chain() + ), ] ), "Invalid output num" @@ -2226,7 +2279,8 @@ async fn test_utxo_active_management() { original_btc_pending_verify_id, vec![generate_tx_out( output_amount * 2 - 25000, - withdraw_change_address.as_str() + withdraw_change_address.as_str(), + get_chain() ),] ), "Insufficient protocol fee" @@ -2235,7 +2289,8 @@ async fn test_utxo_active_management() { original_btc_pending_verify_id, vec![generate_tx_out( output_amount * 2 - 15000, - withdraw_change_address.as_str() + withdraw_change_address.as_str(), + get_chain() ),] )); @@ -2258,7 +2313,8 @@ async fn test_utxo_active_management() { original_btc_pending_verify_id, vec![generate_tx_out( output_amount * 2 - 15000, - withdraw_change_address.as_str() + withdraw_change_address.as_str(), + get_chain() ),] ), "Please wait user rbf" @@ -2268,8 +2324,12 @@ async fn test_utxo_active_management() { context.cancel_active_utxo_management( original_btc_pending_verify_id, vec![ - generate_tx_out(output_amount - 15000, withdraw_change_address.as_str()), - generate_tx_out(output_amount, withdraw_change_address.as_str()), + generate_tx_out( + output_amount - 15000, + withdraw_change_address.as_str(), + get_chain() + ), + generate_tx_out(output_amount, withdraw_change_address.as_str(), get_chain()), ] ), "No gas increase." @@ -2280,11 +2340,11 @@ async fn test_utxo_active_management() { vec![ generate_tx_out( output_amount - 16000, - withdraw_change_address.as_str() + withdraw_change_address.as_str(), get_chain() ), generate_tx_out( output_amount, - withdraw_change_address.as_str() + withdraw_change_address.as_str(), get_chain() ), ] ) @@ -2343,7 +2403,7 @@ async fn test_utxo_active_management() { #[tokio::test] async fn test_utxo_active_management2() { let worker = near_workspaces::sandbox().await.unwrap(); - let context = Context::new(&worker).await; + let context = Context::new(&worker, Some(CHAIN.to_string())).await; check!(context.set_deposit_bridge_fee(10000, 0, 10000)); // The bridge deposit fee is 0, so the bridge will not be automatically registered with mint check!(context.storage_deposit("nbtc", "bridge")); @@ -2447,7 +2507,7 @@ async fn test_utxo_active_management2() { vec![ generate_tx_out( output_amount * 2 - 10000, - withdraw_change_address.as_str() + withdraw_change_address.as_str(), get_chain() ), ] ) @@ -2460,7 +2520,8 @@ async fn test_utxo_active_management2() { original_btc_pending_verify_id, vec![generate_tx_out( output_amount * 2 - 15000, - withdraw_change_address.as_str() + withdraw_change_address.as_str(), + get_chain() ),] )); let btc_pending_verify_txs = context.get_btc_pending_infos_paged().await.unwrap(); @@ -2484,11 +2545,11 @@ async fn test_utxo_active_management2() { vec![ generate_tx_out( output_amount - 16000, - withdraw_change_address.as_str() + withdraw_change_address.as_str(), get_chain() ), generate_tx_out( output_amount, - withdraw_change_address.as_str() + withdraw_change_address.as_str(), get_chain() ), ] ) diff --git a/contracts/satoshi-bridge/tests/test_upgrade.rs b/contracts/satoshi-bridge/tests/test_upgrade.rs index 90eb98c..541771e 100644 --- a/contracts/satoshi-bridge/tests/test_upgrade.rs +++ b/contracts/satoshi-bridge/tests/test_upgrade.rs @@ -6,12 +6,12 @@ async fn test_btc_bridge_upgrade() { let worker = near_workspaces::sandbox().await.unwrap(); let upgrade_context = UpgradeContext::new( &worker, - "../../res/satoshi_bridge.wasm", + "../../res/bitcoin_bridge.wasm", "../../res/nbtc.wasm", ) .await; check!(view upgrade_context.get_satoshi_bridge_version()); - check!(upgrade_context.upgrade_satoshi_bridge("../../res/satoshi_bridge.wasm")); + check!(upgrade_context.upgrade_satoshi_bridge("../../res/bitcoin_bridge.wasm")); check!(view upgrade_context.get_satoshi_bridge_version()); } @@ -25,7 +25,7 @@ async fn test_btc_bridge_upgrade_from_v0_5_1() { ) .await; check!(view upgrade_context.get_satoshi_bridge_version()); - check!(upgrade_context.upgrade_satoshi_bridge("../../res/satoshi_bridge.wasm")); + check!(upgrade_context.upgrade_satoshi_bridge("../../res/bitcoin_bridge.wasm")); check!(view upgrade_context.get_satoshi_bridge_version()); } @@ -39,7 +39,7 @@ async fn test_zcash_bridge_upgrade_from_v0_6_0() { ) .await; check!(view upgrade_context.get_satoshi_bridge_version()); - check!(upgrade_context.upgrade_satoshi_bridge("../../res/zcash.wasm")); + check!(upgrade_context.upgrade_satoshi_bridge("../../res/zcash_bridge.wasm")); check!(view upgrade_context.get_satoshi_bridge_version()); } @@ -48,7 +48,7 @@ async fn test_nbtc_upgrade() { let worker = near_workspaces::sandbox().await.unwrap(); let upgrade_context = UpgradeContext::new( &worker, - "../../res/satoshi_bridge.wasm", + "../../res/bitcoin_bridge.wasm", "../../res/nbtc.wasm", ) .await; @@ -74,7 +74,7 @@ async fn test_nbtc_upgrade_from_v0_5_1() { #[tokio::test] async fn test_set_icon() { let worker = near_workspaces::sandbox().await.unwrap(); - let context = Context::new(&worker).await; + let context = Context::new(&worker, None).await; println!("{:?}", context.ft_metadata().await.unwrap().icon); check!(context.set_metadata("new icon")); println!("{:?}", context.ft_metadata().await.unwrap().icon); From bb1e2a516cc038f32730d4dab6fa19517fd76711 Mon Sep 17 00:00:00 2001 From: Olga Kunyavskaya Date: Mon, 16 Feb 2026 23:33:46 +0000 Subject: [PATCH 16/19] Added CLAUDE.md and AGENTS.md (#25) * add claude * add AGENTS.md * update CLAUDE * reduce Claude.md * reduce Claude.md * remove before suggestin section * remove key contract section * Safe function section * remove code example * remove reference * remove command for production relese * remove dublicate * fix state managment * remove dublicate * Design Decission --- AGENTS.md | 1 + CLAUDE.md | 149 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 150 insertions(+) create mode 100644 AGENTS.md create mode 100644 CLAUDE.md diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..ceb2b98 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1 @@ +CLAUDE.md diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..c803a0b --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,149 @@ +# NEAR BTC/Zcash Bridge + +Bridge between Bitcoin/Zcash and NEAR Protocol. Users deposit BTC/ZEC to receive nBTC/nZEC (NEP-141 token) and withdraw nBTC/nZEC to receive BTC/ZEC back. + +**Trust Model:** +- **BTC → NEAR (deposit):** Trustless verification via BTC Light Client (Merkle proof validation) +- **NEAR → BTC (withdraw):** Requires trust in NEAR validator set for Chain Signatures (MPC) + +--- + +## Build / Test / Lint + +```bash +# Build for development (non-reproducible) +make build-local-bitcoin # Bitcoin bridge +make build-local-zcash # Zcash bridge + +# Run tests +make test + +# Format and clippy +cargo fmt --all # Format all code +make clippy-bitcoin # Clippy for Bitcoin +make clippy-zcash # Clippy for Zcash +``` + +--- + +## Key Architecture + +**Contracts:** `contracts/nbtc/` (NEP-141 token), `contracts/satoshi-bridge/` (main bridge), `contracts/mock-*` (testing) + +**External Dependencies:** BTC Light Client (Merkle proof verification), Chain Signatures (MPC signing) + +### Bridge Flows + +**Deposit (BTC → nBTC)** +``` +1. User sends BTC to deposit address (derived from DepositMsg hash) +2. Relayer: bridge.verify_deposit(tx_proof) +3. Bridge verifies with Light Client → calls nbtc.mint(user, amount) +4. UTXO added to bridge's available set +``` + +**Withdraw (nBTC → BTC)** +``` +1. User: nbtc.ft_transfer(bridge, amount, WithdrawMsg) + → Tokens TRANSFERRED to bridge (not burned yet!) +2. nBTC: bridge.ft_on_transfer(user, amount, msg) → Bridge returns 0 (keeps tokens) +3. Bridge creates BTC tx, Chain Signatures signs +4. Tx broadcast to Bitcoin network +5. Relayer: bridge.verify_withdraw(tx_proof) +6. Bridge verifies → calls nbtc.burn(user, amount, relayer, fee) + → Burns from bridge balance (tokens already there!) +``` + +--- + +## Security Invariants + +### Token Flow (NEP-141) +- **Withdraw tokens already transferred:** By the time `burn()` is called, tokens are in bridge balance via `ft_transfer` +- **burn_account_id is for events only:** Actual burn happens from bridge balance, not from burn_account_id +- **ft_on_transfer return value:** `0` = keep all tokens, `amount` = refund amount +- Only burn after BTC tx is verified on-chain + +### Arithmetic Safety +- **overflow-checks = true:** All overflow panics in release mode (fail-safe) +- Use `checked_mul()`, `checked_add()` for explicit error handling +- Prefer panic over silent + +### State Management +- Mutate state (mark UTXO used, update balances) BEFORE cross-contract calls +- Create and emit events AFTER all state mutations complete +- **Cross-contract calls are NOT atomic:** Each callback is a separate transaction - must manually rollback state in callback if external call fails + +### Zcash-Specific +- **Mutual exclusion:** `actual_received_amounts.len() == 1` ensures EITHER transparent OR Orchard output, never both +- **OVK required:** All Orchard bundles must provide valid Outgoing Viewing Key for decryption +- **Address restrictions:** Transparent addresses CANNOT accept Orchard bundles (panics) +- **Bridge transparency:** Full transaction tracking required, privacy is NOT a design goal +- **Branch IDs hardcoded:** Network upgrades require contract redeployment anyway + +--- + +## Critical Patterns + +**NEAR decorators:** `#[private]` for callbacks, `#[access_control_any(roles(...))]` for admin functions, `#[pause(except(roles(...)))]` for pausable functions, `assert_one_yocto()` to prevent batching + +**Security checks:** Always use `require!(condition, "message")` for validation, `checked_*` arithmetic for money operations, emit events AFTER state changes + +--- + +## Safe Functions (Omni Bridge Integration) + +The bridge provides "safe" versions of deposit/mint functions primarily used by Omni Bridge: + +### verify_deposit vs safe_verify_deposit + +**verify_deposit (standard):** +- Normal deposit flow with fees +- Charges deposit bridge fee +- Pays for user's token storage +- Requires `safe_deposit: None` in DepositMsg +- Does NOT revert on mint failures (uses lost & found) + +**safe_verify_deposit (integration):** +- Primarily used by Omni Bridge +- NO fees charged +- User must attach NEAR for storage (via `#[payable]`) +- **Reverts entire transaction if mint fails** (no lost & found) +- Requires `safe_deposit: Some(SafeDepositMsg)` in DepositMsg +- **post_actions must be None** (not supported in safe mode) +- Safer for integrations - atomic success/failure + +### mint vs safe_mint (nbtc contract) + +**mint (standard):** +- Mints tokens unconditionally +- If account not registered → panics or creates account + +**safe_mint (integration):** +- Checks if account is registered first +- If NOT registered → returns `U128(0)` instead of panicking +- Used by safe_verify_deposit to detect failures + +--- + +## Design Decisions (Non-Issues) + +These patterns are intentional. Do not flag or "fix" them: + +- **DAO powers are by design:** Governance functions with DAO role are necessary, not a vulnerability +- **Expiry height gap:** Buffer for transaction processing delays (Zcash) +- **No validation for self-serialized data:** Format guaranteed by construction - only validate external inputs +- **Public API vs private callbacks:** If parameter cannot be passed through public API, no vulnerability exists + +--- + +## Git Workflow + +**Main branch:** `omni-main` (use for PRs) + +**Before committing:** Run `cargo test`, `cargo fmt`, `cargo clippy`. **Only commit if user explicitly requests.** + +--- + +*Version: 2.1* +*Last Updated: 2026-02-16* From 3b00d858ec2d58adc876ebcaf8d628ff878372ab Mon Sep 17 00:00:00 2001 From: Ivan Frolov <59515280+frolvanya@users.noreply.github.com> Date: Thu, 26 Mar 2026 19:33:11 -0400 Subject: [PATCH 17/19] feat: added trusted relayer (#26) * chore: updated `near-sdk` and `near-contract-standards` versions * feat: added trusted relayer * chore: added comment about account id conversion * chore: fmt * fix: tests * fix(tests): grant `UnrestrictedRelayer` role * feat: made `verify_active_utxo_management` callable only by trusted relayer * feat: covered max result length with tests * feat(tests): covered that random account can't call trusted relayer only methods * chore: bumped bridge version --- Cargo.lock | 196 +++++++++------ Cargo.toml | 7 +- contracts/mock-dapp/src/storage.rs | 7 +- contracts/nbtc/src/lib.rs | 20 +- contracts/satoshi-bridge/Cargo.toml | 3 +- contracts/satoshi-bridge/src/api/bridge.rs | 5 + .../active_utxo_management.rs | 8 +- .../src/btc_light_client/deposit.rs | 32 +-- .../src/btc_light_client/withdraw.rs | 8 +- .../satoshi-bridge/src/chain_signature.rs | 8 +- contracts/satoshi-bridge/src/kdf.rs | 7 +- contracts/satoshi-bridge/src/lib.rs | 10 +- contracts/satoshi-bridge/src/nbtc/burn.rs | 3 +- contracts/satoshi-bridge/src/unit/mod.rs | 1 + contracts/satoshi-bridge/src/unit/utils.rs | 70 ++++++ contracts/satoshi-bridge/src/utils.rs | 9 + .../satoshi-bridge/tests/setup/context.rs | 17 +- contracts/satoshi-bridge/tests/setup/mod.rs | 14 ++ .../tests/test_orchard_validation.rs | 12 +- .../tests/test_orchard_withdrawal.rs | 8 +- .../tests/test_satoshi_bridge.rs | 231 ++++++++++++++---- 21 files changed, 495 insertions(+), 181 deletions(-) create mode 100644 contracts/satoshi-bridge/src/unit/utils.rs diff --git a/Cargo.lock b/Cargo.lock index ba1975f..0e7e5ac 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -786,7 +786,7 @@ dependencies = [ "borsh", "getrandom 0.2.16", "k256", - "near-account-id", + "near-account-id 1.1.3", "near-sdk", "serde", "serde_json", @@ -995,6 +995,7 @@ dependencies = [ "proc-macro2", "quote", "syn 2.0.106", + "unicode-xid", ] [[package]] @@ -1980,6 +1981,15 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "1.0.15" @@ -2311,6 +2321,16 @@ dependencies = [ "serde", ] +[[package]] +name = "near-account-id" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "702dbca982e748975658812c7be2ca53211f454137486f98f6cf768934e2cb29" +dependencies = [ + "borsh", + "serde", +] + [[package]] name = "near-chain-configs" version = "0.30.3" @@ -2349,9 +2369,9 @@ dependencies = [ [[package]] name = "near-config-utils" -version = "0.31.1" +version = "0.34.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4627060004177ea30e122644de51aaf2ea076fd1b6d22f6f3d19e7dfb86af949" +checksum = "da2ba8f7129472fc147b867e904e4b8f398aa79f263f54dff6283c4860446ef8" dependencies = [ "anyhow", "json_comments", @@ -2361,9 +2381,9 @@ dependencies = [ [[package]] name = "near-contract-standards" -version = "5.17.2" +version = "5.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deeee26550aaf4b670eab42e56bd1f329a29759d26424db5a97a9277eb27fa3f" +checksum = "d59d3d4fd5d6cb11907c69b57f1c15e30acd48d775be5b5c4ccc79ffd6a35ab5" dependencies = [ "near-sdk", ] @@ -2381,7 +2401,7 @@ dependencies = [ "derive_more 1.0.0", "ed25519-dalek", "hex", - "near-account-id", + "near-account-id 1.1.3", "near-config-utils 0.30.3", "near-schema-checker-lib 0.30.3", "near-stdx 0.30.3", @@ -2396,9 +2416,9 @@ dependencies = [ [[package]] name = "near-crypto" -version = "0.31.1" +version = "0.34.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40596a621b4cbf7c07189dac59ebf1239f8108ef4755620622db5b86743e0c3a" +checksum = "7c12a12485f8baafa85d5c413885b795bfa1d7d0ab7fd49b4f7fbe6cd270325b" dependencies = [ "blake2", "borsh", @@ -2407,10 +2427,10 @@ dependencies = [ "derive_more 2.0.1", "ed25519-dalek", "hex", - "near-account-id", - "near-config-utils 0.31.1", - "near-schema-checker-lib 0.31.1", - "near-stdx 0.31.1", + "near-account-id 2.6.0", + "near-config-utils 0.34.7", + "near-schema-checker-lib 0.34.7", + "near-stdx 0.34.7", "primitive-types", "secp256k1 0.27.0", "serde", @@ -2430,11 +2450,11 @@ dependencies = [ [[package]] name = "near-fmt" -version = "0.31.1" +version = "0.34.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96e9fa3af54e4b13f4f0657e3ae640e63f7f8953a5fbedf836bc47b43f973dde" +checksum = "f31b6d8fb4146cf0a7dcadf7816bf7b8efd5c081d6d2ca524bc80815b5f86812" dependencies = [ - "near-primitives-core 0.31.1", + "near-primitives-core 0.34.7", ] [[package]] @@ -2492,7 +2512,7 @@ checksum = "3e364f850512d7f1ee1eb398e1da85fd3ef95eb3cbce8db2d505eed054bbe848" dependencies = [ "borsh", "enum-map", - "near-account-id", + "near-account-id 1.1.3", "near-primitives-core 0.30.3", "near-schema-checker-lib 0.30.3", "num-rational", @@ -2505,15 +2525,15 @@ dependencies = [ [[package]] name = "near-parameters" -version = "0.31.1" +version = "0.34.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a261341fca84a5322710f6f4eae45d809fce24a19b9913333e436da5d4de3574" +checksum = "e7a561606a8beb563bf166c8a9ceb7f97058b376d17ea1a9b4b65ebc9bff29ac" dependencies = [ "borsh", "enum-map", - "near-account-id", - "near-primitives-core 0.31.1", - "near-schema-checker-lib 0.31.1", + "near-account-id 2.6.0", + "near-primitives-core 0.34.7", + "near-schema-checker-lib 0.34.7", "num-rational", "serde", "serde_repr", @@ -2563,7 +2583,7 @@ dependencies = [ "easy-ext", "enum-map", "hex", - "itertools", + "itertools 0.12.1", "near-crypto 0.30.3", "near-fmt 0.30.3", "near-parameters 0.30.3", @@ -2589,9 +2609,9 @@ dependencies = [ [[package]] name = "near-primitives" -version = "0.31.1" +version = "0.34.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271dbac58be374c7dddbc511ade1f4eeeea7ae972ef368b358e3298facb2eec6" +checksum = "5ccddcf4a73e19afd681faaa7e83fc4046ec71f4bbe58c58ff4ae4432f36e3aa" dependencies = [ "arbitrary", "base64 0.21.7", @@ -2604,14 +2624,14 @@ dependencies = [ "easy-ext", "enum-map", "hex", - "itertools", - "near-crypto 0.31.1", - "near-fmt 0.31.1", - "near-parameters 0.31.1", - "near-primitives-core 0.31.1", - "near-schema-checker-lib 0.31.1", - "near-stdx 0.31.1", - "near-time 0.31.1", + "itertools 0.14.0", + "near-crypto 0.34.7", + "near-fmt 0.34.7", + "near-parameters 0.34.7", + "near-primitives-core 0.34.7", + "near-schema-checker-lib 0.34.7", + "near-stdx 0.34.7", + "near-time 0.34.7", "num-rational", "ordered-float", "primitive-types", @@ -2619,6 +2639,7 @@ dependencies = [ "serde_json", "serde_with", "sha3", + "smallvec", "smart-default", "strum 0.24.1", "thiserror 2.0.16", @@ -2638,7 +2659,7 @@ dependencies = [ "bs58 0.4.0", "derive_more 1.0.0", "enum-map", - "near-account-id", + "near-account-id 1.1.3", "near-schema-checker-lib 0.30.3", "num-rational", "serde", @@ -2649,9 +2670,9 @@ dependencies = [ [[package]] name = "near-primitives-core" -version = "0.31.1" +version = "0.34.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "621c20e3fd77ba5e1d4fd33f6b7383dadcaca3faf60e2a8fc71a6cc7e4463c31" +checksum = "7c93d8c5d6aecfec0aa9d60ab34408c68b13d5c1bfc0f3afeee8c99fa521cdb3" dependencies = [ "arbitrary", "base64 0.21.7", @@ -2659,11 +2680,14 @@ dependencies = [ "bs58 0.4.0", "derive_more 2.0.1", "enum-map", - "near-account-id", - "near-schema-checker-lib 0.31.1", + "near-account-id 2.6.0", + "near-gas", + "near-schema-checker-lib 0.34.7", + "near-token", "num-rational", "serde", "serde_repr", + "serde_with", "sha2 0.10.9", "thiserror 2.0.16", ] @@ -2689,9 +2713,9 @@ checksum = "ecf3abb048646186aef4796d5bcda22c2c9246beaabaf3ea568c0cce2229257b" [[package]] name = "near-schema-checker-core" -version = "0.31.1" +version = "0.34.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3515d1bd55d87bfb392f6889313dcfbcaaec4229bb4a4abb5640ab8dc5eda70c" +checksum = "f969a965d1ea04e1f085ee4d6c7273ae1064f578711087f3beaf8d400672cc7e" [[package]] name = "near-schema-checker-lib" @@ -2705,12 +2729,12 @@ dependencies = [ [[package]] name = "near-schema-checker-lib" -version = "0.31.1" +version = "0.34.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93739f2bcb64be8bd04342beae187317836b9c2826b6cfba429c2001e4db73a8" +checksum = "e4ae7538880de8a8d75e150dd0f4f685211ddd654ab12a339f40458df6d191dd" dependencies = [ - "near-schema-checker-core 0.31.1", - "near-schema-checker-macro 0.31.1", + "near-schema-checker-core 0.34.7", + "near-schema-checker-macro 0.34.7", ] [[package]] @@ -2721,25 +2745,25 @@ checksum = "a60d29f7f64c2fc6d2fd25139863a6887b4d7fbcc79db8caad9c72eca67f05e9" [[package]] name = "near-schema-checker-macro" -version = "0.31.1" +version = "0.34.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dc45bb3760350de7f957c11827e1e20c5a4aff8d95d19fd2c0c492d795bfb02" +checksum = "8a9eb7d4dc413fe39ffa7fe5591ed4c24bc8139b9de8497689178d0101ae5167" [[package]] name = "near-sdk" -version = "5.17.2" +version = "5.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29b8a870f6bfe533f2f5b35f6f1fb1a818105de80b2de6c0d78000f78729e4cc" +checksum = "0f3fa35758aba48e4f13528ba2f603e860dad03233d446e5c65ebd619296b607" dependencies = [ "base64 0.22.1", "borsh", "bs58 0.5.1", - "near-account-id", - "near-crypto 0.31.1", + "near-account-id 2.6.0", + "near-crypto 0.34.7", "near-gas", - "near-parameters 0.31.1", - "near-primitives 0.31.1", - "near-primitives-core 0.31.1", + "near-parameters 0.34.7", + "near-primitives 0.34.7", + "near-primitives-core 0.34.7", "near-sdk-macros", "near-sys", "near-token", @@ -2747,14 +2771,15 @@ dependencies = [ "once_cell", "serde", "serde_json", + "serde_with", "wee_alloc", ] [[package]] name = "near-sdk-macros" -version = "5.17.2" +version = "5.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "342e608e586394911a799adb2536e3ac93c45e83cc472acdc882f603c18b6046" +checksum = "bb141510850a842d010d706c00bcbf31beba188c706415cc9392ffd62a127e09" dependencies = [ "Inflector", "darling 0.20.11", @@ -2775,15 +2800,15 @@ checksum = "13869f432b1b457c36c9332471d868da6b0ee971e2da0b94deb376aba8d27e6b" [[package]] name = "near-stdx" -version = "0.31.1" +version = "0.34.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3c38fc0843ef7c5bca717cc4daaf2af05441c3cb9cf259824e226387b18740" +checksum = "2c5dc0456309fcb256a0609d829971fd99f343e1a7f3b72f85364e64250a4555" [[package]] name = "near-sys" -version = "0.2.5" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e64e114297f37c94aa20df6a6f92822a1b41da76b4961298caf08ba80b7779b2" +checksum = "f4ea77bb86969ff09c83faa517b2209c4876928381ed31e29c06cae2de0a216b" [[package]] name = "near-time" @@ -2797,9 +2822,9 @@ dependencies = [ [[package]] name = "near-time" -version = "0.31.1" +version = "0.34.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "697acb90b55637c075ce47be4e7834654c34157b88036b199d7189ced6d0f89c" +checksum = "de9ae070cbd84d16b948fcc335ea82db35919bf856e349f333143ff2894eeafd" dependencies = [ "parking_lot", "serde", @@ -2808,9 +2833,9 @@ dependencies = [ [[package]] name = "near-token" -version = "0.3.0" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd3e60aa26a74dc514b1b6408fdd06cefe2eb0ff029020956c1c6517594048fd" +checksum = "34de6b54d82d0790b2a56b677e7b4ecb7f021a7e8559f8611065c890d56cfcda" dependencies = [ "borsh", "serde", @@ -2818,9 +2843,9 @@ dependencies = [ [[package]] name = "near-vm-runner" -version = "0.31.1" +version = "0.34.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ddefc8e4460b2c080b34f800b0bd06fd971b37d64ec7279552d792468228924" +checksum = "3c9b4794d695cf13a1a117d76a3e87b6b660f8f7862f9df1544ba8bbd96634c9" dependencies = [ "blst", "borsh", @@ -2828,11 +2853,11 @@ dependencies = [ "ed25519-dalek", "enum-map", "lru", - "near-crypto 0.31.1", - "near-parameters 0.31.1", - "near-primitives-core 0.31.1", - "near-schema-checker-lib 0.31.1", - "near-stdx 0.31.1", + "near-crypto 0.34.7", + "near-parameters 0.34.7", + "near-primitives-core 0.34.7", + "near-schema-checker-lib 0.34.7", + "near-stdx 0.34.7", "num-rational", "parking_lot", "rand", @@ -2864,7 +2889,7 @@ dependencies = [ "json-patch", "libc", "near-abi-client", - "near-account-id", + "near-account-id 1.1.3", "near-crypto 0.30.3", "near-gas", "near-jsonrpc-client", @@ -2995,6 +3020,27 @@ dependencies = [ "memchr", ] +[[package]] +name = "omni-utils" +version = "0.1.0" +source = "git+https://github.com/near-one/omni-utils?rev=077d09daf7a7b32ad237f0530033c7db804f2c67#077d09daf7a7b32ad237f0530033c7db804f2c67" +dependencies = [ + "near-sdk", + "omni-utils-derive", + "serde", + "serde_json", +] + +[[package]] +name = "omni-utils-derive" +version = "0.1.0" +source = "git+https://github.com/near-one/omni-utils?rev=077d09daf7a7b32ad237f0530033c7db804f2c67#077d09daf7a7b32ad237f0530033c7db804f2c67" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + [[package]] name = "once_cell" version = "1.21.3" @@ -3715,7 +3761,7 @@ dependencies = [ [[package]] name = "satoshi-bridge" -version = "0.7.4" +version = "0.7.5" dependencies = [ "bitcoin", "bs58 0.5.1", @@ -3729,6 +3775,7 @@ dependencies = [ "near-plugins", "near-sdk", "near-workspaces", + "omni-utils", "orchard", "rand", "sapling-crypto", @@ -3925,6 +3972,7 @@ version = "1.0.143" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d401abef1d108fbd9cbaebc3e46611f4b1021f714a0597a71f41ee463f5f4a5a" dependencies = [ + "indexmap 2.11.0", "itoa", "memchr", "ryu", @@ -4618,6 +4666,12 @@ version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + [[package]] name = "universal-hash" version = "0.5.1" diff --git a/Cargo.toml b/Cargo.toml index 10aa8c2..b157ccb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,11 +10,12 @@ publish = false repository = "https://github.com/Near-One/btc-bridge" [workspace.dependencies] -near-sdk = { version = "5.14.0", features = ["unstable", "unit-testing"] } -near-contract-standards = "5.14.0" +near-sdk = { version = "=5.24.1", features = ["unstable", "unit-testing"] } +near-contract-standards = "=5.24.1" hex="0.4.3" bitcoin = { version = "0.32.0", default-features = false, features = ["serde"] } near-plugins = { git = "https://github.com/aurora-is-near/near-plugins", tag = "v0.4.1" } +omni-utils = { git = "https://github.com/near-one/omni-utils", rev = "077d09daf7a7b32ad237f0530033c7db804f2c67" } [profile.release] codegen-units = 1 @@ -22,4 +23,4 @@ opt-level = "z" lto = true debug = false panic = "abort" -overflow-checks = true \ No newline at end of file +overflow-checks = true diff --git a/contracts/mock-dapp/src/storage.rs b/contracts/mock-dapp/src/storage.rs index c18f4ac..0b9670a 100644 --- a/contracts/mock-dapp/src/storage.rs +++ b/contracts/mock-dapp/src/storage.rs @@ -17,7 +17,9 @@ impl StorageManagement for Contract { let registration_only = registration_only.unwrap_or(false); if let Some(account) = self.accounts.get_mut(&account_id) { if registration_only && !amount.is_zero() { - Promise::new(env::predecessor_account_id()).transfer(amount); + Promise::new(env::predecessor_account_id()) + .transfer(amount) + .detach(); } else { account.deposit += amount.as_yoctonear(); } @@ -31,7 +33,8 @@ impl StorageManagement for Contract { let refund = amount.as_yoctonear() - min_balance.as_yoctonear(); if refund > 0 { Promise::new(env::predecessor_account_id()) - .transfer(NearToken::from_yoctonear(refund)); + .transfer(NearToken::from_yoctonear(refund)) + .detach(); } min_balance.as_yoctonear() } else { diff --git a/contracts/nbtc/src/lib.rs b/contracts/nbtc/src/lib.rs index 3e6ea2d..5e502f1 100644 --- a/contracts/nbtc/src/lib.rs +++ b/contracts/nbtc/src/lib.rs @@ -133,7 +133,9 @@ impl Contract { self.mint_inner(&relayer_account_id, relayer_fee); } if let Some(post_actions) = post_actions { - Self::ext(env::current_account_id()).handle_post_actions(mint_account_id, post_actions); + Self::ext(env::current_account_id()) + .handle_post_actions(mint_account_id, post_actions) + .detach(); } } @@ -374,15 +376,12 @@ impl Contract { Self::ext(env::current_account_id()) .with_static_gas(gas) .handle_post_action(sender_id.clone(), receiver_id, amount, memo, msg) + .detach(); } else { - Self::ext(env::current_account_id()).handle_post_action( - sender_id.clone(), - receiver_id, - amount, - memo, - msg, - ) - }; + Self::ext(env::current_account_id()) + .handle_post_action(sender_id.clone(), receiver_id, amount, memo, msg) + .detach(); + } } } @@ -413,6 +412,7 @@ impl Contract { ext_ft_resolver::ext(env::current_account_id()) .with_static_gas(GAS_FOR_RESOLVE_TRANSFER) .ft_resolve_transfer(sender_id, receiver_id, amount.into()), - ); + ) + .detach(); } } diff --git a/contracts/satoshi-bridge/Cargo.toml b/contracts/satoshi-bridge/Cargo.toml index eba415f..3acc25a 100644 --- a/contracts/satoshi-bridge/Cargo.toml +++ b/contracts/satoshi-bridge/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "satoshi-bridge" -version = "0.7.4" +version = "0.7.5" edition.workspace = true publish.workspace = true repository.workspace = true @@ -33,6 +33,7 @@ near-contract-standards.workspace = true bitcoin.workspace = true hex.workspace = true near-plugins.workspace = true +omni-utils.workspace = true k256 = "0.13.1" ed25519-dalek = "2.1.0" crypto-shared = { git = "https://github.com/near/mpc_old", rev = "0afee9004a1b1c3386940e60c28cff7cf1b5978c" } diff --git a/contracts/satoshi-bridge/src/api/bridge.rs b/contracts/satoshi-bridge/src/api/bridge.rs index d61975c..1e0dc9f 100644 --- a/contracts/satoshi-bridge/src/api/bridge.rs +++ b/contracts/satoshi-bridge/src/api/bridge.rs @@ -2,6 +2,7 @@ use crate::psbt_wrapper::PsbtWrapper; use crate::*; use near_plugins::{access_control_any, pause}; +#[trusted_relayer] #[near] impl Contract { /// Verify that the user has transferred BTC asset to the protocol's designated BTC deposit account, and mint NBTC to the user's NEAR account. @@ -18,6 +19,7 @@ impl Contract { /// # Returns /// /// bool - Whether nBTC minting was successful. + #[trusted_relayer] #[pause(except(roles(Role::DAO)))] pub fn verify_deposit( &mut self, @@ -91,6 +93,7 @@ impl Contract { /// /// bool - Whether nBTC minting was successful. #[payable] + #[trusted_relayer] #[pause(except(roles(Role::DAO)))] pub fn safe_verify_deposit( &mut self, @@ -164,6 +167,7 @@ impl Contract { /// # Returns /// /// bool - Whether nBTC burning was successful. + #[trusted_relayer] #[pause(except(roles(Role::DAO)))] pub fn verify_withdraw( &mut self, @@ -264,6 +268,7 @@ impl Contract { /// # Returns /// /// bool - Whether nBTC burning was successful. + #[trusted_relayer] #[pause(except(roles(Role::DAO)))] pub fn verify_active_utxo_management( &mut self, diff --git a/contracts/satoshi-bridge/src/btc_light_client/active_utxo_management.rs b/contracts/satoshi-bridge/src/btc_light_client/active_utxo_management.rs index 1fb5969..385470e 100644 --- a/contracts/satoshi-bridge/src/btc_light_client/active_utxo_management.rs +++ b/contracts/satoshi-bridge/src/btc_light_client/active_utxo_management.rs @@ -1,6 +1,6 @@ use crate::{ - env, near, promise_result_as_success, require, serde_json, BTCPendingInfo, Contract, - ContractExt, Gas, Promise, PromiseOrValue, + env, near, require, serde_json, BTCPendingInfo, Contract, ContractExt, Gas, Promise, + PromiseOrValue, MAX_BOOL_RESULT, }; pub const GAS_FOR_VERIFY_ACTIVE_UTXO_MANAGEMENT_CALL_BACK: Gas = Gas::from_tgas(50); @@ -39,8 +39,8 @@ impl Contract { &mut self, tx_id: String, ) -> PromiseOrValue { - let result_bytes = - promise_result_as_success().expect("Call verify_transaction_inclusion failed"); + let result_bytes = env::promise_result_checked(0, MAX_BOOL_RESULT) + .expect("Call verify_transaction_inclusion failed"); let is_valid = serde_json::from_slice::(&result_bytes) .expect("verify_transaction_inclusion return not bool"); require!(is_valid, "verify_transaction_inclusion return false"); diff --git a/contracts/satoshi-bridge/src/btc_light_client/deposit.rs b/contracts/satoshi-bridge/src/btc_light_client/deposit.rs index 7b69aa9..6f9a40a 100644 --- a/contracts/satoshi-bridge/src/btc_light_client/deposit.rs +++ b/contracts/satoshi-bridge/src/btc_light_client/deposit.rs @@ -1,12 +1,12 @@ -use near_sdk::{serde_json::Value, PromiseResult}; +use near_sdk::serde_json::Value; use crate::{ burn::GAS_FOR_BURN_CALL, env, ext_nbtc, mint::{GAS_FOR_MINT_CALL, GAS_FOR_MINT_CALL_BACK}, - near, promise_result_as_success, require, serde_json, AccountId, Contract, ContractExt, - DepositMsg, Event, Gas, NearToken, PendingUTXOInfo, PostAction, Promise, PromiseOrValue, - SafeDepositMsg, U128, + near, require, serde_json, AccountId, Contract, ContractExt, DepositMsg, Event, Gas, NearToken, + PendingUTXOInfo, PostAction, Promise, PromiseOrValue, SafeDepositMsg, MAX_BOOL_RESULT, + MAX_FT_TRANSFER_CALL_RESULT, U128, }; pub const GAS_FOR_VERIFY_DEPOSIT_CALL_BACK: Gas = Gas::from_tgas(190); @@ -118,8 +118,8 @@ impl Contract { recipient_id: AccountId, pending_utxo_info: PendingUTXOInfo, ) -> PromiseOrValue { - let result_bytes = - promise_result_as_success().expect("Call verify_transaction_inclusion failed"); + let result_bytes = env::promise_result_checked(0, MAX_BOOL_RESULT) + .expect("Call verify_transaction_inclusion failed"); let is_valid = serde_json::from_slice::(&result_bytes) .expect("verify_transaction_inclusion return not bool"); require!(is_valid, "verify_transaction_inclusion return false"); @@ -153,8 +153,8 @@ impl Contract { pending_utxo_info: PendingUTXOInfo, post_actions: Option>, ) -> PromiseOrValue { - let result_bytes = - promise_result_as_success().expect("Call verify_transaction_inclusion failed"); + let result_bytes = env::promise_result_checked(0, MAX_BOOL_RESULT) + .expect("Call verify_transaction_inclusion failed"); let is_valid = serde_json::from_slice::(&result_bytes) .expect("verify_transaction_inclusion return not bool"); require!(is_valid, "verify_transaction_inclusion return false"); @@ -183,8 +183,8 @@ impl Contract { msg: String, pending_utxo_info: PendingUTXOInfo, ) -> PromiseOrValue { - let result_bytes = - promise_result_as_success().expect("Call verify_transaction_inclusion failed"); + let result_bytes = env::promise_result_checked(0, MAX_BOOL_RESULT) + .expect("Call verify_transaction_inclusion failed"); let is_valid = serde_json::from_slice::(&result_bytes) .expect("verify_transaction_inclusion return not bool"); require!(is_valid, "verify_transaction_inclusion return false"); @@ -238,10 +238,12 @@ impl Contract { mint_amount, relayer_account_id, U128(0), - ); + ) + .detach(); Promise::new(env::signer_account_id()) - .transfer(self.required_balance_for_safe_deposit()); + .transfer(self.required_balance_for_safe_deposit()) + .detach(); } Event::VerifyDepositDetails { @@ -258,8 +260,8 @@ impl Contract { } fn is_refund_required() -> bool { - match env::promise_result(0) { - PromiseResult::Successful(value) => { + match env::promise_result_checked(0, MAX_FT_TRANSFER_CALL_RESULT) { + Ok(value) => { if let Ok(amount) = near_sdk::serde_json::from_slice::(&value) { // Normal case: refund if the used token amount is zero // The amount can be zero if the `ft_on_transfer` in the receiver contract returns an amount instead of `0`, or if it panics. @@ -270,7 +272,7 @@ fn is_refund_required() -> bool { } } // Unexpected case: don't refund - PromiseResult::Failed => false, + Err(_) => false, } } diff --git a/contracts/satoshi-bridge/src/btc_light_client/withdraw.rs b/contracts/satoshi-bridge/src/btc_light_client/withdraw.rs index 0aa984e..794a068 100644 --- a/contracts/satoshi-bridge/src/btc_light_client/withdraw.rs +++ b/contracts/satoshi-bridge/src/btc_light_client/withdraw.rs @@ -1,6 +1,6 @@ use crate::{ - env, near, promise_result_as_success, require, serde_json, BTCPendingInfo, Contract, - ContractExt, Gas, Promise, PromiseOrValue, + env, near, require, serde_json, BTCPendingInfo, Contract, ContractExt, Gas, Promise, + PromiseOrValue, MAX_BOOL_RESULT, }; pub const GAS_FOR_VERIFY_WITHDRAW_CALL_BACK: Gas = Gas::from_tgas(50); @@ -37,8 +37,8 @@ impl Contract { impl Contract { #[private] pub fn internal_verify_withdraw_callback(&mut self, tx_id: String) -> PromiseOrValue { - let result_bytes = - promise_result_as_success().expect("Call verify_transaction_inclusion failed"); + let result_bytes = env::promise_result_checked(0, MAX_BOOL_RESULT) + .expect("Call verify_transaction_inclusion failed"); let is_valid = serde_json::from_slice::(&result_bytes) .expect("verify_transaction_inclusion return not bool"); require!(is_valid, "verify_transaction_inclusion return false"); diff --git a/contracts/satoshi-bridge/src/chain_signature.rs b/contracts/satoshi-bridge/src/chain_signature.rs index 19fdc66..daff549 100644 --- a/contracts/satoshi-bridge/src/chain_signature.rs +++ b/contracts/satoshi-bridge/src/chain_signature.rs @@ -1,6 +1,6 @@ use crate::{ - env, ext_contract, nano_to_sec, near, promise_result_as_success, require, serde_json, - AccountId, Contract, ContractExt, Event, Gas, Promise, PublicKey, + env, ext_contract, nano_to_sec, near, require, serde_json, AccountId, Contract, ContractExt, + Event, Gas, Promise, PublicKey, MAX_PUBLIC_KEY_RESULT, MAX_SIGNATURE_RESULT, }; use bitcoin::ecdsa::Signature; @@ -117,7 +117,7 @@ impl Contract { impl Contract { #[private] pub fn sync_root_public_key_callback(&mut self) -> bool { - if let Some(result_bytes) = promise_result_as_success() { + if let Ok(result_bytes) = env::promise_result_checked(0, MAX_PUBLIC_KEY_RESULT) { let root_public_key = serde_json::from_slice::(&result_bytes).expect("Invalid PublicKey"); self.internal_mut_config().chain_signatures_root_public_key = Some(root_public_key); @@ -138,7 +138,7 @@ impl Contract { btc_pending_sign_id: String, sign_index: usize, ) -> bool { - if let Some(result_bytes) = promise_result_as_success() { + if let Ok(result_bytes) = env::promise_result_checked(0, MAX_SIGNATURE_RESULT) { let signature = serde_json::from_slice::(&result_bytes) .expect("Invalid signature"); diff --git a/contracts/satoshi-bridge/src/kdf.rs b/contracts/satoshi-bridge/src/kdf.rs index a1026c9..e827c22 100644 --- a/contracts/satoshi-bridge/src/kdf.rs +++ b/contracts/satoshi-bridge/src/kdf.rs @@ -21,7 +21,12 @@ impl Contract { .clone() .expect("Missing chain_signatures_root_public_key"), ); - let epsilon = crypto_shared::derive_epsilon(&env::current_account_id(), path); + let epsilon = crypto_shared::derive_epsilon( + // NOTE: conversion to string with parsing later on is needed to convert to the proper + // version of `AccountId` + &env::current_account_id().as_str().parse().unwrap(), + path, + ); let user_pk = crypto_shared::derive_key(mpc_pk, epsilon); let user_pk_encoded_point = user_pk.to_encoded_point(false); user_pk_encoded_point.as_bytes().to_vec() diff --git a/contracts/satoshi-bridge/src/lib.rs b/contracts/satoshi-bridge/src/lib.rs index 05c8348..a0e00d8 100644 --- a/contracts/satoshi-bridge/src/lib.rs +++ b/contracts/satoshi-bridge/src/lib.rs @@ -4,13 +4,14 @@ use near_sdk::{ borsh::{BorshDeserialize, BorshSerialize}, env, ext_contract, is_promise_success, json_types::{U128, U64}, - log, near, promise_result_as_success, require, + log, near, require, serde::{Deserialize, Serialize}, serde_json::{self, json, Value}, store::{IterableMap, IterableSet, LazyOption, LookupSet}, AccountId, BorshStorageKey, Gas, NearToken, PanicOnDefault, Promise, PromiseOrValue, PublicKey, Timestamp, }; +use omni_utils::macros::trusted_relayer; use std::collections::{HashMap, HashSet}; use bitcoin::{absolute::LockTime, Amount, OutPoint, PublicKey as BtcPublicKey, ScriptBuf, TxOut}; @@ -101,6 +102,8 @@ pub enum Role { PauseManager, UpgradableCodeStager, UpgradableCodeDeployer, + UnrestrictedRelayer, + RelayerManager, } #[near(serializers = [borsh])] @@ -147,6 +150,11 @@ pub struct Contract { data: VersionedContractData, } +#[trusted_relayer( + bypass_roles(Role::DAO, Role::UnrestrictedRelayer), + manager_roles(Role::DAO, Role::RelayerManager), + config_roles(Role::DAO) +)] #[near] impl Contract { #[init] diff --git a/contracts/satoshi-bridge/src/nbtc/burn.rs b/contracts/satoshi-bridge/src/nbtc/burn.rs index e69ccbf..e288a70 100644 --- a/contracts/satoshi-bridge/src/nbtc/burn.rs +++ b/contracts/satoshi-bridge/src/nbtc/burn.rs @@ -135,7 +135,8 @@ impl Contract { self.data_mut().cur_available_protocol_fee += protocol_fee.0; } if refund > 0 { - self.internal_transfer_nbtc(&btc_pending_info.account_id, refund); + self.internal_transfer_nbtc(&btc_pending_info.account_id, refund) + .detach(); } self.internal_remove_btc_pending_info(&tx_id); Event::UtxoAdded { utxo_storage_keys }.emit(); diff --git a/contracts/satoshi-bridge/src/unit/mod.rs b/contracts/satoshi-bridge/src/unit/mod.rs index 06c2332..87b86a3 100644 --- a/contracts/satoshi-bridge/src/unit/mod.rs +++ b/contracts/satoshi-bridge/src/unit/mod.rs @@ -8,6 +8,7 @@ pub use near_sdk::testing_env; mod post_action; mod storage; +mod utils; pub fn burrowland_id() -> AccountId { "burrowland_id".parse().unwrap() diff --git a/contracts/satoshi-bridge/src/unit/utils.rs b/contracts/satoshi-bridge/src/unit/utils.rs new file mode 100644 index 0000000..16e2bad --- /dev/null +++ b/contracts/satoshi-bridge/src/unit/utils.rs @@ -0,0 +1,70 @@ +use crate::chain_signature::{BigR, SignatureResponse, S}; +use crate::{ + serde_json, MAX_BOOL_RESULT, MAX_FT_TRANSFER_CALL_RESULT, MAX_PUBLIC_KEY_RESULT, + MAX_SIGNATURE_RESULT, +}; +use near_sdk::json_types::U128; +use near_sdk::PublicKey; + +#[test] +fn test_bool_result_size_fits_constant() { + // `false` is the larger of the two bool JSON representations (5 bytes vs 4 for `true`) + let serialized = serde_json::to_vec(&false).unwrap(); + assert!( + serialized.len() <= MAX_BOOL_RESULT, + "serialized bool ({} bytes) exceeds MAX_BOOL_RESULT ({})", + serialized.len(), + MAX_BOOL_RESULT, + ); +} + +#[test] +fn test_ft_transfer_call_result_size_fits_constant() { + // U128(u128::MAX) produces the longest possible decimal string representation + let serialized = serde_json::to_vec(&U128(u128::MAX)).unwrap(); + assert!( + serialized.len() <= MAX_FT_TRANSFER_CALL_RESULT, + "serialized U128::MAX ({} bytes) exceeds MAX_FT_TRANSFER_CALL_RESULT ({})", + serialized.len(), + MAX_FT_TRANSFER_CALL_RESULT, + ); +} + +#[test] +fn test_public_key_result_size_fits_constant() { + // secp256k1 compressed public key (33 bytes raw, base58-encoded with curve prefix) + let pk: PublicKey = "secp256k1:4NfTiv3UsGahebgTaHyD9vF8KYKMBnfd6kh94mK6xv8fGBiJB8TBtFMP5WWXz6B89Ac1fbpzPwAvoyQebemHFwx3" + .parse() + .unwrap(); + let serialized = serde_json::to_vec(&pk).unwrap(); + assert!( + serialized.len() <= MAX_PUBLIC_KEY_RESULT, + "serialized PublicKey ({} bytes) exceeds MAX_PUBLIC_KEY_RESULT ({})", + serialized.len(), + MAX_PUBLIC_KEY_RESULT, + ); +} + +#[test] +fn test_signature_result_size_fits_constant() { + // Realistic worst-case SignatureResponse with full-length hex strings + let response = SignatureResponse { + big_r: BigR { + // Compressed secp256k1 point: 02/03 prefix + 64 hex digits = 66 chars + affine_point: "025802983164945D1C3E40818FF569E275451CC33613EDDFA0E54D23710DFAF3C8" + .to_string(), + }, + s: S { + // 256-bit scalar: 64 hex digits + scalar: "07511DF9E947BC61F88011A3166AA0E60E2D45BFCACD61AD35DB4340941C84DE".to_string(), + }, + recovery_id: 1, + }; + let serialized = serde_json::to_vec(&response).unwrap(); + assert!( + serialized.len() <= MAX_SIGNATURE_RESULT, + "serialized SignatureResponse ({} bytes) exceeds MAX_SIGNATURE_RESULT ({})", + serialized.len(), + MAX_SIGNATURE_RESULT, + ); +} diff --git a/contracts/satoshi-bridge/src/utils.rs b/contracts/satoshi-bridge/src/utils.rs index 36fc615..f1ecea9 100644 --- a/contracts/satoshi-bridge/src/utils.rs +++ b/contracts/satoshi-bridge/src/utils.rs @@ -4,6 +4,15 @@ use crate::{env, Timestamp}; pub const UTXO_STORAGE_KEY_TAG: &str = "@"; +/// Maximum expected byte length of a JSON-serialized `bool` promise result (`true`/`false`). +pub const MAX_BOOL_RESULT: usize = 10; +/// Maximum expected byte length of a JSON-serialized `U128` promise result (e.g. from `ft_on_transfer`). +pub const MAX_FT_TRANSFER_CALL_RESULT: usize = 50; +/// Maximum expected byte length of a JSON-serialized `near_sdk::PublicKey` promise result. +pub const MAX_PUBLIC_KEY_RESULT: usize = 200; +/// Maximum expected byte length of a JSON-serialized `SignatureResponse` promise result. +pub const MAX_SIGNATURE_RESULT: usize = 300; + pub fn generate_utxo_storage_key(txid: String, vout: u32) -> String { format!( "{}{}{}", diff --git a/contracts/satoshi-bridge/tests/setup/context.rs b/contracts/satoshi-bridge/tests/setup/context.rs index 3c2054a..5885cd3 100644 --- a/contracts/satoshi-bridge/tests/setup/context.rs +++ b/contracts/satoshi-bridge/tests/setup/context.rs @@ -237,6 +237,20 @@ impl Context { .unwrap() .unwrap(); + // Grant UnrestrictedRelayer role to test accounts so they can call + // methods guarded by #[trusted_relayer] + for account in [&relayer, &alice, &bob, &charlie, &tx_listener] { + root.call(bridge_contract.id(), "acl_grant_role") + .args_json(json!({ + "role": "UnrestrictedRelayer", + "account_id": account.id() + })) + .transact() + .await + .unwrap() + .unwrap(); + } + Self { root, tx_listener, @@ -277,7 +291,8 @@ impl Context { worker: &Worker, account_id: &AccountId, ) -> u128 { - match worker.view_account(account_id).await { + let ws_account_id: near_workspaces::AccountId = account_id.as_str().parse().unwrap(); + match worker.view_account(&ws_account_id).await { Ok(a) => a.balance.as_yoctonear(), Err(_) => 0, } diff --git a/contracts/satoshi-bridge/tests/setup/mod.rs b/contracts/satoshi-bridge/tests/setup/mod.rs index 76d00fc..5ddd6de 100644 --- a/contracts/satoshi-bridge/tests/setup/mod.rs +++ b/contracts/satoshi-bridge/tests/setup/mod.rs @@ -14,3 +14,17 @@ pub use bitcoin::OutPoint; #[cfg(feature = "zcash")] pub use satoshi_bridge::zcash_utils::types::ChainSpecificData; pub use satoshi_bridge::{DepositMsg, TokenReceiverMessage}; + +/// Extension trait to convert `near_workspaces::Account` IDs (`near-account-id` v1) +/// to `near_sdk::AccountId` (`near-account-id` v2) via string roundtrip. +/// Required because `near-workspaces` and `near-sdk` depend on different major +/// versions of the `near-account-id` crate. +pub trait ToSdkAccountId { + fn sdk_id(&self) -> near_sdk::AccountId; +} + +impl ToSdkAccountId for near_workspaces::Account { + fn sdk_id(&self) -> near_sdk::AccountId { + self.id().as_str().parse().unwrap() + } +} diff --git a/contracts/satoshi-bridge/tests/test_orchard_validation.rs b/contracts/satoshi-bridge/tests/test_orchard_validation.rs index 61c0874..fbd115d 100644 --- a/contracts/satoshi-bridge/tests/test_orchard_validation.rs +++ b/contracts/satoshi-bridge/tests/test_orchard_validation.rs @@ -27,7 +27,7 @@ async fn test_orchard_wrong_recipient() { // Setup: Deposit for alice let alice_btc_deposit_address = context .get_user_deposit_address(DepositMsg { - recipient_id: context.get_account_by_name("alice").id().clone(), + recipient_id: context.get_account_by_name("alice").sdk_id(), post_actions: None, extra_msg: None, safe_deposit: None, @@ -38,7 +38,7 @@ async fn test_orchard_wrong_recipient() { check!(context.verify_deposit( "relayer", DepositMsg { - recipient_id: context.get_account_by_name("alice").id().clone(), + recipient_id: context.get_account_by_name("alice").sdk_id(), post_actions: None, extra_msg: None, safe_deposit: None, @@ -152,7 +152,7 @@ async fn test_orchard_missing_bundle() { // Setup: Deposit for alice let alice_btc_deposit_address = context .get_user_deposit_address(DepositMsg { - recipient_id: context.get_account_by_name("alice").id().clone(), + recipient_id: context.get_account_by_name("alice").sdk_id(), post_actions: None, extra_msg: None, safe_deposit: None, @@ -163,7 +163,7 @@ async fn test_orchard_missing_bundle() { check!(context.verify_deposit( "relayer", DepositMsg { - recipient_id: context.get_account_by_name("alice").id().clone(), + recipient_id: context.get_account_by_name("alice").sdk_id(), post_actions: None, extra_msg: None, safe_deposit: None, @@ -247,7 +247,7 @@ async fn test_orchard_bundle_in_zcash_tx() { // Setup: Deposit for alice let alice_btc_deposit_address = context .get_user_deposit_address(DepositMsg { - recipient_id: context.get_account_by_name("alice").id().clone(), + recipient_id: context.get_account_by_name("alice").sdk_id(), post_actions: None, extra_msg: None, safe_deposit: None, @@ -258,7 +258,7 @@ async fn test_orchard_bundle_in_zcash_tx() { check!(context.verify_deposit( "relayer", DepositMsg { - recipient_id: context.get_account_by_name("alice").id().clone(), + recipient_id: context.get_account_by_name("alice").sdk_id(), post_actions: None, extra_msg: None, safe_deposit: None, diff --git a/contracts/satoshi-bridge/tests/test_orchard_withdrawal.rs b/contracts/satoshi-bridge/tests/test_orchard_withdrawal.rs index f8d726a..618c29a 100644 --- a/contracts/satoshi-bridge/tests/test_orchard_withdrawal.rs +++ b/contracts/satoshi-bridge/tests/test_orchard_withdrawal.rs @@ -28,7 +28,7 @@ async fn test_orchard_withdrawal_with_ovk_validation() { // Deposit for alice using Zcash transaction format let alice_btc_deposit_address = context .get_user_deposit_address(DepositMsg { - recipient_id: context.get_account_by_name("alice").id().clone(), + recipient_id: context.get_account_by_name("alice").sdk_id(), post_actions: None, extra_msg: None, safe_deposit: None, @@ -60,7 +60,7 @@ async fn test_orchard_withdrawal_with_ovk_validation() { check!(context.verify_deposit( "relayer", DepositMsg { - recipient_id: context.get_account_by_name("alice").id().clone(), + recipient_id: context.get_account_by_name("alice").sdk_id(), post_actions: None, extra_msg: None, safe_deposit: None, @@ -160,7 +160,7 @@ async fn test_orchard_withdrawal_amount_mismatch() { // Deposit for alice using Zcash transaction format let alice_btc_deposit_address = context .get_user_deposit_address(DepositMsg { - recipient_id: context.get_account_by_name("alice").id().clone(), + recipient_id: context.get_account_by_name("alice").sdk_id(), post_actions: None, extra_msg: None, safe_deposit: None, @@ -184,7 +184,7 @@ async fn test_orchard_withdrawal_amount_mismatch() { check!(context.verify_deposit( "relayer", DepositMsg { - recipient_id: context.get_account_by_name("alice").id().clone(), + recipient_id: context.get_account_by_name("alice").sdk_id(), post_actions: None, extra_msg: None, safe_deposit: None, diff --git a/contracts/satoshi-bridge/tests/test_satoshi_bridge.rs b/contracts/satoshi-bridge/tests/test_satoshi_bridge.rs index 5502ebc..256ab58 100644 --- a/contracts/satoshi-bridge/tests/test_satoshi_bridge.rs +++ b/contracts/satoshi-bridge/tests/test_satoshi_bridge.rs @@ -1,6 +1,6 @@ mod setup; use bitcoin::{Amount, OutPoint, TxOut}; -use near_sdk::{AccountId, Gas}; +use near_sdk::{AccountId, Gas, NearToken}; use satoshi_bridge::network::{Address, Chain}; use satoshi_bridge::{DepositMsg, PendingInfoState, PostAction, TokenReceiverMessage}; use setup::*; @@ -31,7 +31,7 @@ async fn test_role() { context.get_metadata().await.unwrap().super_admins, vec!["test.near".parse::().unwrap()] ); - check!(print context.bridge_add_super_admin("root", context.get_account_by_name("alice").id())); + check!(print context.bridge_add_super_admin("root", &context.get_account_by_name("alice").sdk_id())); assert_eq!( context.get_metadata().await.unwrap().super_admins, vec![ @@ -39,17 +39,17 @@ async fn test_role() { "alice.test.near".parse::().unwrap() ] ); - check!(print context.bridge_remove_super_admin("alice", context.get_account_by_name("root").id())); + check!(print context.bridge_remove_super_admin("alice", &context.get_account_by_name("root").sdk_id())); assert_eq!( context.get_metadata().await.unwrap().super_admins, vec!["alice.test.near".parse::().unwrap()] ); check!( - context.bridge_add_super_admin("root", context.get_account_by_name("alice").id()), + context.bridge_add_super_admin("root", &context.get_account_by_name("alice").sdk_id()), "Insufficient permissions" ); check!( - context.bridge_remove_super_admin("alice", context.get_account_by_name("alice").id()), + context.bridge_remove_super_admin("alice", &context.get_account_by_name("alice").sdk_id()), "cannot remove oneself" ); assert_eq!( @@ -110,7 +110,7 @@ async fn test_base() { let withdraw_change_address = context.get_change_address().await.unwrap(); let alice_btc_deposit_address = context .get_user_deposit_address(DepositMsg { - recipient_id: context.get_account_by_name("alice").id().clone(), + recipient_id: context.get_account_by_name("alice").sdk_id(), post_actions: None, extra_msg: None, safe_deposit: None, @@ -119,7 +119,7 @@ async fn test_base() { .unwrap(); let bob_btc_deposit_address = context .get_user_deposit_address(DepositMsg { - recipient_id: context.get_account_by_name("bob").id().clone(), + recipient_id: context.get_account_by_name("bob").sdk_id(), post_actions: None, extra_msg: None, safe_deposit: None, @@ -130,7 +130,7 @@ async fn test_base() { check!(printr "alice 10000" context.verify_deposit( "relayer", DepositMsg { - recipient_id: context.get_account_by_name("alice").id().clone(), + recipient_id: context.get_account_by_name("alice").sdk_id(), post_actions: None, extra_msg: None, safe_deposit: None, @@ -178,7 +178,7 @@ async fn test_base() { check!(printr "alice 50000" context.verify_deposit( "relayer", DepositMsg { - recipient_id: context.get_account_by_name("alice").id().clone(), + recipient_id: context.get_account_by_name("alice").sdk_id(), post_actions: None, extra_msg: None, safe_deposit: None, @@ -227,7 +227,7 @@ async fn test_base() { context.verify_deposit( "relayer", DepositMsg { - recipient_id: context.get_account_by_name("alice").id().clone(), + recipient_id: context.get_account_by_name("alice").sdk_id(), post_actions: None, extra_msg: None, safe_deposit: None, @@ -260,7 +260,7 @@ async fn test_base() { check!(context.verify_deposit( "relayer", DepositMsg { - recipient_id: context.get_account_by_name("bob").id().clone(), + recipient_id: context.get_account_by_name("bob").sdk_id(), post_actions: None, extra_msg: None, safe_deposit: None, @@ -479,7 +479,7 @@ async fn test_fix_bridge_fee_and_relayer() { let withdraw_change_address = context.get_change_address().await.unwrap(); let alice_btc_deposit_address = context .get_user_deposit_address(DepositMsg { - recipient_id: context.get_account_by_name("alice").id().clone(), + recipient_id: context.get_account_by_name("alice").sdk_id(), post_actions: None, extra_msg: None, safe_deposit: None, @@ -490,7 +490,7 @@ async fn test_fix_bridge_fee_and_relayer() { check!(printr "alice 500000" context.verify_deposit( "relayer", DepositMsg { - recipient_id: context.get_account_by_name("alice").id().clone(), + recipient_id: context.get_account_by_name("alice").sdk_id(), post_actions: None, extra_msg: None, safe_deposit: None, @@ -619,7 +619,7 @@ async fn test_ratio_bridge_fee_and_relayer() { let withdraw_change_address = context.get_change_address().await.unwrap(); let alice_btc_deposit_address = context .get_user_deposit_address(DepositMsg { - recipient_id: context.get_account_by_name("alice").id().clone(), + recipient_id: context.get_account_by_name("alice").sdk_id(), post_actions: None, extra_msg: None, safe_deposit: None, @@ -630,7 +630,7 @@ async fn test_ratio_bridge_fee_and_relayer() { check!(printr "alice 500000" context.verify_deposit( "relayer", DepositMsg { - recipient_id: context.get_account_by_name("alice").id().clone(), + recipient_id: context.get_account_by_name("alice").sdk_id(), post_actions: None, extra_msg: None, safe_deposit: None, @@ -762,7 +762,7 @@ async fn test_directly_withdraw() { let withdraw_change_address = context.get_change_address().await.unwrap(); let alice_btc_deposit_address = context .get_user_deposit_address(DepositMsg { - recipient_id: context.get_account_by_name("alice").id().clone(), + recipient_id: context.get_account_by_name("alice").sdk_id(), post_actions: None, extra_msg: None, safe_deposit: None, @@ -773,7 +773,7 @@ async fn test_directly_withdraw() { check!(printr "alice 500000" context.verify_deposit( "relayer", DepositMsg { - recipient_id: context.get_account_by_name("alice").id().clone(), + recipient_id: context.get_account_by_name("alice").sdk_id(), post_actions: None, extra_msg: None, safe_deposit: None, @@ -885,9 +885,9 @@ async fn test_one_click() { { // dapp not in post_action_receiver_id_white_list let deposit_msg = DepositMsg { - recipient_id: context.get_account_by_name("alice").id().clone(), + recipient_id: context.get_account_by_name("alice").sdk_id(), post_actions: Some(vec![PostAction { - receiver_id: context.get_account_by_name("dapp").id().clone(), + receiver_id: context.get_account_by_name("dapp").sdk_id(), amount: 5000.into(), memo: None, msg: "".to_string(), @@ -942,13 +942,12 @@ async fn test_one_click() { check!( context.extend_post_action_receiver_id_white_list(vec![context .get_account_by_name("dapp") - .id() - .clone()]) + .sdk_id()]) ); let deposit_msg = DepositMsg { - recipient_id: context.get_account_by_name("alice").id().clone(), + recipient_id: context.get_account_by_name("alice").sdk_id(), post_actions: Some(vec![PostAction { - receiver_id: context.get_account_by_name("dapp").id().clone(), + receiver_id: context.get_account_by_name("dapp").sdk_id(), amount: 5000.into(), memo: None, msg: "".to_string(), @@ -1003,9 +1002,9 @@ async fn test_one_click() { { // PostAction gas too large let deposit_msg = DepositMsg { - recipient_id: context.get_account_by_name("alice").id().clone(), + recipient_id: context.get_account_by_name("alice").sdk_id(), post_actions: Some(vec![PostAction { - receiver_id: context.get_account_by_name("dapp").id().clone(), + receiver_id: context.get_account_by_name("dapp").sdk_id(), amount: 5000.into(), memo: None, msg: "".to_string(), @@ -1060,17 +1059,17 @@ async fn test_one_click() { { // PostAction total gas too large let deposit_msg = DepositMsg { - recipient_id: context.get_account_by_name("alice").id().clone(), + recipient_id: context.get_account_by_name("alice").sdk_id(), post_actions: Some(vec![ PostAction { - receiver_id: context.get_account_by_name("dapp").id().clone(), + receiver_id: context.get_account_by_name("dapp").sdk_id(), amount: 5000.into(), memo: None, msg: "".to_string(), gas: Some(Gas::from_tgas(100)), }, PostAction { - receiver_id: context.get_account_by_name("dapp").id().clone(), + receiver_id: context.get_account_by_name("dapp").sdk_id(), amount: 5000.into(), memo: None, msg: "".to_string(), @@ -1126,24 +1125,24 @@ async fn test_one_click() { { // PostAction > 2 let deposit_msg = DepositMsg { - recipient_id: context.get_account_by_name("alice").id().clone(), + recipient_id: context.get_account_by_name("alice").sdk_id(), post_actions: Some(vec![ PostAction { - receiver_id: context.get_account_by_name("dapp").id().clone(), + receiver_id: context.get_account_by_name("dapp").sdk_id(), amount: 5000.into(), memo: None, msg: "".to_string(), gas: None, }, PostAction { - receiver_id: context.get_account_by_name("dapp").id().clone(), + receiver_id: context.get_account_by_name("dapp").sdk_id(), amount: 5000.into(), memo: None, msg: "".to_string(), gas: None, }, PostAction { - receiver_id: context.get_account_by_name("dapp").id().clone(), + receiver_id: context.get_account_by_name("dapp").sdk_id(), amount: 5000.into(), memo: None, msg: "".to_string(), @@ -1199,9 +1198,9 @@ async fn test_one_click() { { // amount > current deposit let deposit_msg = DepositMsg { - recipient_id: context.get_account_by_name("alice").id().clone(), + recipient_id: context.get_account_by_name("alice").sdk_id(), post_actions: Some(vec![PostAction { - receiver_id: context.get_account_by_name("dapp").id().clone(), + receiver_id: context.get_account_by_name("dapp").sdk_id(), amount: 500000.into(), memo: None, msg: "".to_string(), @@ -1256,17 +1255,17 @@ async fn test_one_click() { { // The user is not registered with the dapp let deposit_msg = DepositMsg { - recipient_id: context.get_account_by_name("alice").id().clone(), + recipient_id: context.get_account_by_name("alice").sdk_id(), post_actions: Some(vec![ PostAction { - receiver_id: context.get_account_by_name("dapp").id().clone(), + receiver_id: context.get_account_by_name("dapp").sdk_id(), amount: 20000.into(), memo: None, msg: "".to_string(), gas: Some(Gas::from_tgas(50)), }, PostAction { - receiver_id: context.get_account_by_name("dapp").id().clone(), + receiver_id: context.get_account_by_name("dapp").sdk_id(), amount: 20000.into(), memo: None, msg: "".to_string(), @@ -1323,17 +1322,17 @@ async fn test_one_click() { check!(context.storage_deposit("nbtc", "dapp")); check!(context.storage_deposit("dapp", "alice")); let deposit_msg = DepositMsg { - recipient_id: context.get_account_by_name("alice").id().clone(), + recipient_id: context.get_account_by_name("alice").sdk_id(), post_actions: Some(vec![ PostAction { - receiver_id: context.get_account_by_name("dapp").id().clone(), + receiver_id: context.get_account_by_name("dapp").sdk_id(), amount: 20000.into(), memo: None, msg: "".to_string(), gas: Some(Gas::from_tgas(100)), }, PostAction { - receiver_id: context.get_account_by_name("dapp").id().clone(), + receiver_id: context.get_account_by_name("dapp").sdk_id(), amount: 20000.into(), memo: None, msg: "".to_string(), @@ -1400,7 +1399,7 @@ async fn test_utxo_passive_management() { let withdraw_change_address = context.get_change_address().await.unwrap(); let alice_btc_deposit_address = context .get_user_deposit_address(DepositMsg { - recipient_id: context.get_account_by_name("alice").id().clone(), + recipient_id: context.get_account_by_name("alice").sdk_id(), post_actions: None, extra_msg: None, safe_deposit: None, @@ -1412,7 +1411,7 @@ async fn test_utxo_passive_management() { check!(printr "alice 500000" context.verify_deposit( "relayer", DepositMsg { - recipient_id: context.get_account_by_name("alice").id().clone(), + recipient_id: context.get_account_by_name("alice").sdk_id(), post_actions: None, extra_msg: None, safe_deposit: None, @@ -1436,7 +1435,7 @@ async fn test_utxo_passive_management() { check!(printr "alice 60000" context.verify_deposit( "relayer", DepositMsg { - recipient_id: context.get_account_by_name("alice").id().clone(), + recipient_id: context.get_account_by_name("alice").sdk_id(), post_actions: None, extra_msg: None, safe_deposit: None, @@ -1622,7 +1621,7 @@ async fn test_cancel_withdraw() { let withdraw_change_address = context.get_change_address().await.unwrap(); let alice_btc_deposit_address = context .get_user_deposit_address(DepositMsg { - recipient_id: context.get_account_by_name("alice").id().clone(), + recipient_id: context.get_account_by_name("alice").sdk_id(), post_actions: None, extra_msg: None, safe_deposit: None, @@ -1633,7 +1632,7 @@ async fn test_cancel_withdraw() { check!(printr "alice 500000" context.verify_deposit( "relayer", DepositMsg { - recipient_id: context.get_account_by_name("alice").id().clone(), + recipient_id: context.get_account_by_name("alice").sdk_id(), post_actions: None, extra_msg: None, safe_deposit: None, @@ -1857,7 +1856,7 @@ async fn test_cancel_withdraw2() { let withdraw_change_address = context.get_change_address().await.unwrap(); let alice_btc_deposit_address = context .get_user_deposit_address(DepositMsg { - recipient_id: context.get_account_by_name("alice").id().clone(), + recipient_id: context.get_account_by_name("alice").sdk_id(), post_actions: None, extra_msg: None, safe_deposit: None, @@ -1868,7 +1867,7 @@ async fn test_cancel_withdraw2() { check!(printr "alice 500000" context.verify_deposit( "relayer", DepositMsg { - recipient_id: context.get_account_by_name("alice").id().clone(), + recipient_id: context.get_account_by_name("alice").sdk_id(), post_actions: None, extra_msg: None, safe_deposit: None, @@ -2041,7 +2040,7 @@ async fn test_utxo_active_management() { let withdraw_change_address = context.get_change_address().await.unwrap(); let alice_btc_deposit_address = context .get_user_deposit_address(DepositMsg { - recipient_id: context.get_account_by_name("alice").id().clone(), + recipient_id: context.get_account_by_name("alice").sdk_id(), post_actions: None, extra_msg: None, safe_deposit: None, @@ -2053,7 +2052,7 @@ async fn test_utxo_active_management() { check!(printr "alice 500000" context.verify_deposit( "relayer", DepositMsg { - recipient_id: context.get_account_by_name("alice").id().clone(), + recipient_id: context.get_account_by_name("alice").sdk_id(), post_actions: None, extra_msg: None, safe_deposit: None, @@ -2077,7 +2076,7 @@ async fn test_utxo_active_management() { check!(printr "alice 60000" context.verify_deposit( "relayer", DepositMsg { - recipient_id: context.get_account_by_name("alice").id().clone(), + recipient_id: context.get_account_by_name("alice").sdk_id(), post_actions: None, extra_msg: None, safe_deposit: None, @@ -2410,7 +2409,7 @@ async fn test_utxo_active_management2() { let withdraw_change_address = context.get_change_address().await.unwrap(); let alice_btc_deposit_address = context .get_user_deposit_address(DepositMsg { - recipient_id: context.get_account_by_name("alice").id().clone(), + recipient_id: context.get_account_by_name("alice").sdk_id(), post_actions: None, extra_msg: None, safe_deposit: None, @@ -2422,7 +2421,7 @@ async fn test_utxo_active_management2() { check!(printr "alice 500000" context.verify_deposit( "relayer", DepositMsg { - recipient_id: context.get_account_by_name("alice").id().clone(), + recipient_id: context.get_account_by_name("alice").sdk_id(), post_actions: None, extra_msg: None, safe_deposit: None, @@ -2446,7 +2445,7 @@ async fn test_utxo_active_management2() { check!(printr "alice 60000" context.verify_deposit( "relayer", DepositMsg { - recipient_id: context.get_account_by_name("alice").id().clone(), + recipient_id: context.get_account_by_name("alice").sdk_id(), post_actions: None, extra_msg: None, safe_deposit: None, @@ -2603,3 +2602,129 @@ async fn test_utxo_active_management2() { 560000 - 20000 ); } + +#[tokio::test] +async fn test_unauthorized_account_cannot_call_trusted_relayer_methods() { + let worker = near_workspaces::sandbox().await.unwrap(); + let context = Context::new(&worker, Some(CHAIN.to_string())).await; + + // Create a new account that does NOT receive the UnrestrictedRelayer role. + // Context::new only grants UnrestrictedRelayer to relayer, alice, bob, charlie, and tx_listener. + let unauthorized = worker.dev_create_account().await.unwrap(); + + let alice_btc_deposit_address = context + .get_user_deposit_address(DepositMsg { + recipient_id: context.get_account_by_name("alice").sdk_id(), + post_actions: None, + extra_msg: None, + safe_deposit: None, + }) + .await + .unwrap(); + + // verify_deposit should fail for an account without the trusted-relayer role + let outcome = unauthorized + .call(context.bridge_contract.id(), "verify_deposit") + .args_json(near_sdk::serde_json::json!({ + "deposit_msg": DepositMsg { + recipient_id: context.get_account_by_name("alice").sdk_id(), + post_actions: None, + extra_msg: None, + safe_deposit: None, + }, + "tx_bytes": generate_transaction_bytes( + vec![( + "c6774e76452c36bba6c357653f620a4364fc063ba021e2acf6049f8d9e6b0234", + 1, + None, + )], + vec![ + (alice_btc_deposit_address.as_str(), 50000), + (TARGET_ADDRESS, 90000), + ], + ), + "vout": 0u32, + "tx_block_blockhash": "0000000000000c3f818b0b6374c609dd8e548a0a9e61065e942cd466c426e00d", + "tx_index": 1u64, + "merkle_proof": Vec::::new(), + })) + .max_gas() + .transact() + .await; + assert!( + tool_err_msg(&outcome).contains("Relayer is not active"), + "verify_deposit should reject an account without trusted-relayer role" + ); + + // safe_verify_deposit should fail for an account without the trusted-relayer role + let outcome = unauthorized + .call(context.bridge_contract.id(), "safe_verify_deposit") + .args_json(near_sdk::serde_json::json!({ + "deposit_msg": DepositMsg { + recipient_id: context.get_account_by_name("alice").sdk_id(), + post_actions: None, + extra_msg: None, + safe_deposit: None, + }, + "tx_bytes": generate_transaction_bytes( + vec![( + "c6774e76452c36bba6c357653f620a4364fc063ba021e2acf6049f8d9e6b0234", + 1, + None, + )], + vec![ + (alice_btc_deposit_address.as_str(), 50000), + (TARGET_ADDRESS, 90000), + ], + ), + "vout": 0u32, + "tx_block_blockhash": "0000000000000c3f818b0b6374c609dd8e548a0a9e61065e942cd466c426e00d", + "tx_index": 1u64, + "merkle_proof": Vec::::new(), + })) + .max_gas() + .deposit(NearToken::from_near(1)) + .transact() + .await; + assert!( + tool_err_msg(&outcome).contains("Relayer is not active"), + "safe_verify_deposit should reject an account without trusted-relayer role" + ); + + // verify_withdraw should fail for an account without the trusted-relayer role + let outcome = unauthorized + .call(context.bridge_contract.id(), "verify_withdraw") + .args_json(near_sdk::serde_json::json!({ + "tx_id": "", + "tx_block_blockhash": "0000000000000c3f818b0b6374c609dd8e548a0a9e61065e942cd466c426e00d", + "tx_index": 1u64, + "merkle_proof": Vec::::new(), + })) + .max_gas() + .transact() + .await; + assert!( + tool_err_msg(&outcome).contains("Relayer is not active"), + "verify_withdraw should reject an account without trusted-relayer role" + ); + + // verify_active_utxo_management should fail for an account without the trusted-relayer role + let outcome = unauthorized + .call( + context.bridge_contract.id(), + "verify_active_utxo_management", + ) + .args_json(near_sdk::serde_json::json!({ + "tx_id": "", + "tx_block_blockhash": "0000000000000c3f818b0b6374c609dd8e548a0a9e61065e942cd466c426e00d", + "tx_index": 1u64, + "merkle_proof": Vec::::new(), + })) + .max_gas() + .transact() + .await; + assert!( + tool_err_msg(&outcome).contains("Relayer is not active"), + "verify_active_utxo_management should reject an account without trusted-relayer role" + ); +} From 042955ed56fb9004b5c7b9ff6893221a2c894a70 Mon Sep 17 00:00:00 2001 From: Ivan Frolov <59515280+frolvanya@users.noreply.github.com> Date: Thu, 26 Mar 2026 21:42:40 -0400 Subject: [PATCH 18/19] chore: updated `omni-utils` (#27) --- Cargo.lock | 4 ++-- Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0e7e5ac..2188155 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3023,7 +3023,7 @@ dependencies = [ [[package]] name = "omni-utils" version = "0.1.0" -source = "git+https://github.com/near-one/omni-utils?rev=077d09daf7a7b32ad237f0530033c7db804f2c67#077d09daf7a7b32ad237f0530033c7db804f2c67" +source = "git+https://github.com/near-one/omni-utils?rev=f9bc3ea4a72e97f02660b8f1c0b2f79a9fbde3a4#f9bc3ea4a72e97f02660b8f1c0b2f79a9fbde3a4" dependencies = [ "near-sdk", "omni-utils-derive", @@ -3034,7 +3034,7 @@ dependencies = [ [[package]] name = "omni-utils-derive" version = "0.1.0" -source = "git+https://github.com/near-one/omni-utils?rev=077d09daf7a7b32ad237f0530033c7db804f2c67#077d09daf7a7b32ad237f0530033c7db804f2c67" +source = "git+https://github.com/near-one/omni-utils?rev=f9bc3ea4a72e97f02660b8f1c0b2f79a9fbde3a4#f9bc3ea4a72e97f02660b8f1c0b2f79a9fbde3a4" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index b157ccb..da22ecb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,7 +15,7 @@ near-contract-standards = "=5.24.1" hex="0.4.3" bitcoin = { version = "0.32.0", default-features = false, features = ["serde"] } near-plugins = { git = "https://github.com/aurora-is-near/near-plugins", tag = "v0.4.1" } -omni-utils = { git = "https://github.com/near-one/omni-utils", rev = "077d09daf7a7b32ad237f0530033c7db804f2c67" } +omni-utils = { git = "https://github.com/near-one/omni-utils", rev = "f9bc3ea4a72e97f02660b8f1c0b2f79a9fbde3a4" } [profile.release] codegen-units = 1 From 719fc0c0ca455904cbb22f79cdeb12846089f70c Mon Sep 17 00:00:00 2001 From: karim-en Date: Tue, 7 Apr 2026 20:43:55 +0100 Subject: [PATCH 19/19] PoC: external id --- .../satoshi-bridge/src/api/token_receiver.rs | 14 +++- .../src/bitcoin_utils/contract_methods.rs | 3 + contracts/satoshi-bridge/src/event.rs | 1 + contracts/satoshi-bridge/src/legacy.rs | 70 +++++++++++++++++++ contracts/satoshi-bridge/src/lib.rs | 8 ++- .../src/zcash_utils/contract_methods.rs | 10 ++- 6 files changed, 103 insertions(+), 3 deletions(-) diff --git a/contracts/satoshi-bridge/src/api/token_receiver.rs b/contracts/satoshi-bridge/src/api/token_receiver.rs index 7906b8e..acbd3c3 100644 --- a/contracts/satoshi-bridge/src/api/token_receiver.rs +++ b/contracts/satoshi-bridge/src/api/token_receiver.rs @@ -14,6 +14,7 @@ pub enum TokenReceiverMessage { output: Vec, max_gas_fee: Option, chain_specific_data: Option, + external_id: Option, }, } @@ -54,14 +55,16 @@ impl FungibleTokenReceiver for Contract { output, max_gas_fee, chain_specific_data, + external_id, } => self.ft_on_transfer_withdraw_chain_specific( - sender_id, + sender_id.clone(), amount, target_btc_address, input, output, max_gas_fee, chain_specific_data, + external_id.map(|id| format!("{sender_id}:{id}")), ), } } @@ -75,6 +78,7 @@ impl Contract { target_btc_address: String, mut psbt: PsbtWrapper, max_gas_fee: Option, + external_id: Option, ) { let (utxo_storage_keys, vutxos) = self.generate_vutxos(&mut psbt); require!( @@ -128,12 +132,20 @@ impl Contract { .is_none(), "pending info already exist" ); + + if let Some(external_id) = &external_id { + self.data_mut() + .btc_pending_infos_by_external_id + .insert(external_id.clone(), btc_pending_id.clone()); + } + self.internal_unwrap_mut_account(&sender_id) .btc_pending_sign_id = Some(btc_pending_id.clone()); Event::UtxoRemoved { utxo_storage_keys }.emit(); Event::GenerateBtcPendingInfo { account_id: &sender_id, btc_pending_id: &btc_pending_id, + external_id, } .emit(); } diff --git a/contracts/satoshi-bridge/src/bitcoin_utils/contract_methods.rs b/contracts/satoshi-bridge/src/bitcoin_utils/contract_methods.rs index 5a5114c..af084b8 100644 --- a/contracts/satoshi-bridge/src/bitcoin_utils/contract_methods.rs +++ b/contracts/satoshi-bridge/src/bitcoin_utils/contract_methods.rs @@ -37,6 +37,7 @@ macro_rules! define_rbf_method { Event::GenerateBtcPendingInfo { account_id: &account_id, btc_pending_id: &btc_pending_id, + external_id: None, } .emit(); } @@ -72,6 +73,7 @@ impl Contract { output: Vec, max_gas_fee: Option, _chain_specific_data: Option, + external_id: Option, ) -> PromiseOrValue { self.create_btc_pending_info( sender_id, @@ -79,6 +81,7 @@ impl Contract { target_btc_address, PsbtWrapper::new(input, output), max_gas_fee, + external_id, ); PromiseOrValue::Value(U128(0)) } diff --git a/contracts/satoshi-bridge/src/event.rs b/contracts/satoshi-bridge/src/event.rs index eeca095..41b1b93 100644 --- a/contracts/satoshi-bridge/src/event.rs +++ b/contracts/satoshi-bridge/src/event.rs @@ -43,6 +43,7 @@ pub enum Event<'a> { GenerateBtcPendingInfo { account_id: &'a AccountId, btc_pending_id: &'a String, + external_id: Option, }, BtcInputSignature { account_id: &'a AccountId, diff --git a/contracts/satoshi-bridge/src/legacy.rs b/contracts/satoshi-bridge/src/legacy.rs index f891f7e..3b0f33e 100644 --- a/contracts/satoshi-bridge/src/legacy.rs +++ b/contracts/satoshi-bridge/src/legacy.rs @@ -1,3 +1,5 @@ +use near_sdk::store::LookupMap; + use crate::{ env, near, AccountId, BridgeFee, Config, ContractData, HashMap, HashSet, IterableMap, IterableSet, LazyOption, LookupSet, PublicKey, StorageKey, VAccount, VBTCPendingInfo, VUTXO, @@ -470,3 +472,71 @@ impl From for ContractData { } } } + +#[near(serializers = [borsh])] +pub struct ContractDataV3 { + pub config: LazyOption, + pub accounts: IterableMap, + pub utxos: IterableMap, + pub unavailable_utxos: IterableMap, + pub verified_deposit_utxo: LookupSet, + pub btc_pending_infos: IterableMap, + pub rbf_txs: IterableMap>, + pub relayer_white_list: IterableSet, + pub extra_msg_relayer_white_list: IterableSet, + pub post_action_receiver_id_white_list: IterableSet, + pub post_action_msg_templates: IterableMap>, + pub lost_found: IterableMap, + pub acc_collected_protocol_fee: u128, + pub cur_available_protocol_fee: u128, + pub acc_claimed_protocol_fee: u128, + pub cur_reserved_protocol_fee: u128, + pub acc_protocol_fee_for_gas: u128, +} + +impl From for ContractData { + fn from(c: ContractDataV3) -> Self { + let ContractDataV3 { + config, + accounts, + utxos, + unavailable_utxos, + verified_deposit_utxo, + btc_pending_infos, + rbf_txs, + relayer_white_list, + extra_msg_relayer_white_list, + post_action_receiver_id_white_list, + post_action_msg_templates, + lost_found, + acc_collected_protocol_fee, + cur_available_protocol_fee, + acc_claimed_protocol_fee, + cur_reserved_protocol_fee, + acc_protocol_fee_for_gas, + } = c; + + Self { + config, + accounts, + utxos, + unavailable_utxos, + verified_deposit_utxo, + btc_pending_infos, + btc_pending_infos_by_external_id: LookupMap::new( + StorageKey::BTCPendingInfosByExternalId, + ), + rbf_txs, + relayer_white_list, + extra_msg_relayer_white_list, + post_action_receiver_id_white_list, + post_action_msg_templates, + lost_found, + acc_collected_protocol_fee, + cur_available_protocol_fee, + acc_claimed_protocol_fee, + cur_reserved_protocol_fee, + acc_protocol_fee_for_gas, + } + } +} diff --git a/contracts/satoshi-bridge/src/lib.rs b/contracts/satoshi-bridge/src/lib.rs index a0e00d8..270ff28 100644 --- a/contracts/satoshi-bridge/src/lib.rs +++ b/contracts/satoshi-bridge/src/lib.rs @@ -7,7 +7,7 @@ use near_sdk::{ log, near, require, serde::{Deserialize, Serialize}, serde_json::{self, json, Value}, - store::{IterableMap, IterableSet, LazyOption, LookupSet}, + store::{IterableMap, IterableSet, LazyOption, LookupMap, LookupSet}, AccountId, BorshStorageKey, Gas, NearToken, PanicOnDefault, Promise, PromiseOrValue, PublicKey, Timestamp, }; @@ -92,6 +92,7 @@ enum StorageKey { LostFound, PostActionMsgTemplates, ExtraMsgRelayerWhiteList, + BTCPendingInfosByExternalId, } #[derive(AccessControlRole, Deserialize, Serialize, Copy, Clone)] @@ -114,6 +115,7 @@ pub struct ContractData { pub unavailable_utxos: IterableMap, pub verified_deposit_utxo: LookupSet, pub btc_pending_infos: IterableMap, + pub btc_pending_infos_by_external_id: LookupMap, pub rbf_txs: IterableMap>, pub relayer_white_list: IterableSet, pub extra_msg_relayer_white_list: IterableSet, @@ -132,6 +134,7 @@ pub enum VersionedContractData { V0(ContractDataV0), V1(ContractDataV1), V2(ContractDataV2), + V3(ContractDataV3), Current(ContractData), } @@ -176,6 +179,9 @@ impl Contract { unavailable_utxos: IterableMap::new(StorageKey::UnavailableUTXOs), verified_deposit_utxo: LookupSet::new(StorageKey::VerifiedDepositUtxos), btc_pending_infos: IterableMap::new(StorageKey::BTCPendingInfos), + btc_pending_infos_by_external_id: LookupMap::new( + StorageKey::BTCPendingInfosByExternalId, + ), rbf_txs: IterableMap::new(StorageKey::RbfTxs), relayer_white_list: IterableSet::new(StorageKey::RelayerWhiteList), extra_msg_relayer_white_list: IterableSet::new( diff --git a/contracts/satoshi-bridge/src/zcash_utils/contract_methods.rs b/contracts/satoshi-bridge/src/zcash_utils/contract_methods.rs index 64b0628..104e3df 100644 --- a/contracts/satoshi-bridge/src/zcash_utils/contract_methods.rs +++ b/contracts/satoshi-bridge/src/zcash_utils/contract_methods.rs @@ -113,6 +113,7 @@ impl Contract { output: Vec, max_gas_fee: Option, chain_specific_data: Option, + external_id: Option, #[callback_unwrap] last_block_height: u32, ) -> U128 { let expiry_height = self.get_expiry_height(&chain_specific_data, last_block_height); @@ -128,7 +129,14 @@ impl Contract { self.internal_config(), ); - self.create_btc_pending_info(sender_id, amount.0, target_btc_address, psbt, max_gas_fee); + self.create_btc_pending_info( + sender_id, + amount.0, + target_btc_address, + psbt, + max_gas_fee, + external_id, + ); U128(0) }