diff --git a/apps/README.md b/apps/README.md new file mode 100644 index 0000000000..98e8a7945f --- /dev/null +++ b/apps/README.md @@ -0,0 +1,17 @@ +# Rooch DAO Apps + +Package address: 0x701c21bf1c8cd5af8c42983890d8ca55e7a820171b8e744c13f2d9998bf76cc3 + +* app_admin +* gas_faucet +* gas_market +* grow_bitcoin + +### Publish packages + +```bash +rooch move publish -p apps/app_admin --named-addresses app_admin=default +rooch move publish -p apps/gas_faucet --named-addresses app_admin=default,gas_faucet=default +rooch move publish -p apps/gas_market --named-addresses app_admin=default,gas_market=default +rooch move publish -p apps/grow_bitcoin --named-addresses app_admin=default,grow_bitcoin=default +``` diff --git a/examples/btc_holder_farmer/Move.toml b/apps/app_admin/Move.toml similarity index 51% rename from examples/btc_holder_farmer/Move.toml rename to apps/app_admin/Move.toml index bf362d92cd..41786443a2 100644 --- a/examples/btc_holder_farmer/Move.toml +++ b/apps/app_admin/Move.toml @@ -1,6 +1,6 @@ [package] -name = "btc_holder_farmer" -version = "0.0.1" +name = "app_admin" +version = "1.0.0" [dependencies] MoveStdlib = { local = "../../frameworks/move-stdlib" } @@ -9,10 +9,13 @@ RoochFramework = { local = "../../frameworks/rooch-framework" } BitcoinMove = { local = "../../frameworks/bitcoin-move" } [addresses] -btc_holder_farmer = "_" -moveos_std = "0x2" -rooch_framework = "0x3" -bitcoin_move = "0x4" +#bc1prcajaj9n7e29u4dfp33x3hcf52yqeegspdpcd79pqu4fpr6llx4sugkfjt +#0x701c21bf1c8cd5af8c42983890d8ca55e7a820171b8e744c13f2d9998bf76cc3 +app_admin = "_" +std = "0x1" +moveos_std = "0x2" +rooch_framework = "0x3" +bitcoin_move = "0x4" [dev-addresses] -btc_holder_farmer = "0x42" +app_admin = "0x42" diff --git a/infra/rooch-portal-v2/contract/gas_market/sources/admin.move b/apps/app_admin/sources/admin.move similarity index 88% rename from infra/rooch-portal-v2/contract/gas_market/sources/admin.move rename to apps/app_admin/sources/admin.move index 713a49ec12..77dff0476f 100644 --- a/infra/rooch-portal-v2/contract/gas_market/sources/admin.move +++ b/apps/app_admin/sources/admin.move @@ -1,4 +1,4 @@ -module gas_market::admin { +module app_admin::admin { use moveos_std::object::{Self,transfer}; @@ -6,7 +6,7 @@ module gas_market::admin { fun init() { let admin_cap = object::new_named_object(AdminCap {}); - transfer(admin_cap, @gas_market) + transfer(admin_cap, @app_admin) } #[deprecated] diff --git a/apps/gas_faucet/Move.toml b/apps/gas_faucet/Move.toml new file mode 100644 index 0000000000..57b7112eab --- /dev/null +++ b/apps/gas_faucet/Move.toml @@ -0,0 +1,25 @@ +[package] +name = "gas_faucet" +version = "1.0.0" + +[dependencies] +MoveStdlib = { local = "../../frameworks/move-stdlib" } +MoveosStdlib = { local = "../../frameworks/moveos-stdlib" } +RoochFramework = { local = "../../frameworks/rooch-framework" } +BitcoinMove = { local = "../../frameworks/bitcoin-move" } +app_admin = { local = "../app_admin" } + +[addresses] +std = "0x1" +moveos_std = "0x2" +rooch_framework = "0x3" +bitcoin_move = "0x4" + +#bc1prcajaj9n7e29u4dfp33x3hcf52yqeegspdpcd79pqu4fpr6llx4sugkfjt +#0x701c21bf1c8cd5af8c42983890d8ca55e7a820171b8e744c13f2d9998bf76cc3 +app_admin = "_" +gas_faucet = "_" + +[dev-addresses] +app_admin = "0x42" +gas_faucet = "0x43" diff --git a/infra/rooch-portal-v2/contract/gas_market/sources/gas_faucet.move b/apps/gas_faucet/sources/gas_faucet.move similarity index 98% rename from infra/rooch-portal-v2/contract/gas_market/sources/gas_faucet.move rename to apps/gas_faucet/sources/gas_faucet.move index 4d8bdf1c6c..4a72d892b2 100644 --- a/infra/rooch-portal-v2/contract/gas_market/sources/gas_faucet.move +++ b/apps/gas_faucet/sources/gas_faucet.move @@ -1,4 +1,4 @@ -module gas_market::gas_faucet { +module gas_faucet::gas_faucet { use std::vector; @@ -15,7 +15,7 @@ module gas_market::gas_faucet { use bitcoin_move::utxo::{Self, UTXO}; - use gas_market::admin::AdminCap; + use app_admin::admin::AdminCap; const INIT_GAS_AMOUNT: u256 = 5000000_00000000; const ONE_RGAS: u256 = 1_00000000; diff --git a/apps/gas_market/Move.toml b/apps/gas_market/Move.toml new file mode 100644 index 0000000000..1a6c32ffdc --- /dev/null +++ b/apps/gas_market/Move.toml @@ -0,0 +1,25 @@ +[package] +name = "gas_market" +version = "1.0.0" + +[dependencies] +MoveStdlib = { local = "../../frameworks/move-stdlib" } +MoveosStdlib = { local = "../../frameworks/moveos-stdlib" } +RoochFramework = { local = "../../frameworks/rooch-framework" } +BitcoinMove = { local = "../../frameworks/bitcoin-move" } +app_admin = { local = "../app_admin" } + +[addresses] +std = "0x1" +moveos_std = "0x2" +rooch_framework = "0x3" +bitcoin_move = "0x4" + +#bc1prcajaj9n7e29u4dfp33x3hcf52yqeegspdpcd79pqu4fpr6llx4sugkfjt +#0x701c21bf1c8cd5af8c42983890d8ca55e7a820171b8e744c13f2d9998bf76cc3 +gas_market = "_" +app_admin = "_" + +[dev-addresses] +app_admin = "0x42" +gas_market = "0x43" diff --git a/infra/rooch-portal-v2/contract/gas_market/sources/gas_market.move b/apps/gas_market/sources/gas_market.move similarity index 99% rename from infra/rooch-portal-v2/contract/gas_market/sources/gas_market.move rename to apps/gas_market/sources/gas_market.move index 869560368b..9446324a47 100644 --- a/infra/rooch-portal-v2/contract/gas_market/sources/gas_market.move +++ b/apps/gas_market/sources/gas_market.move @@ -20,7 +20,7 @@ module gas_market::gas_market { use bitcoin_move::utxo::{ReceiveUTXOEvent, unpack_receive_utxo_event}; use gas_market::trusted_oracle::trusted_price; - use gas_market::admin::AdminCap; + use app_admin::admin::AdminCap; #[test_only] use moveos_std::decimal_value; diff --git a/infra/rooch-portal-v2/contract/gas_market/sources/trusted_oracle.move b/apps/gas_market/sources/trusted_oracle.move similarity index 99% rename from infra/rooch-portal-v2/contract/gas_market/sources/trusted_oracle.move rename to apps/gas_market/sources/trusted_oracle.move index 707563df6b..1d02801432 100644 --- a/infra/rooch-portal-v2/contract/gas_market/sources/trusted_oracle.move +++ b/apps/gas_market/sources/trusted_oracle.move @@ -11,7 +11,7 @@ module gas_market::trusted_oracle { use rooch_framework::oracle_meta; use rooch_framework::oracle::{SimpleOracle}; - use gas_market::admin::{AdminCap}; + use app_admin::admin::{AdminCap}; const ErrorTrustedOracleNotExists: u64 = 1; diff --git a/apps/grow_bitcoin/Move.toml b/apps/grow_bitcoin/Move.toml new file mode 100644 index 0000000000..06592a0f53 --- /dev/null +++ b/apps/grow_bitcoin/Move.toml @@ -0,0 +1,25 @@ +[package] +name = "grow_bitcoin" +version = "1.0.0" + +[dependencies] +MoveStdlib = { local = "../../frameworks/move-stdlib" } +MoveosStdlib = { local = "../../frameworks/moveos-stdlib" } +RoochFramework = { local = "../../frameworks/rooch-framework" } +BitcoinMove = { local = "../../frameworks/bitcoin-move" } +app_admin = { local = "../app_admin" } + +[addresses] +std = "0x1" +moveos_std = "0x2" +rooch_framework = "0x3" +bitcoin_move = "0x4" + +#bc1prcajaj9n7e29u4dfp33x3hcf52yqeegspdpcd79pqu4fpr6llx4sugkfjt +#0x701c21bf1c8cd5af8c42983890d8ca55e7a820171b8e744c13f2d9998bf76cc3 +grow_bitcoin = "_" +app_admin = "_" + +[dev-addresses] +app_admin = "0x42" +grow_bitcoin = "0x43" diff --git a/examples/btc_holder_farmer/sources/holder_farmer.move b/apps/grow_bitcoin/sources/grow_bitcoin.move similarity index 97% rename from examples/btc_holder_farmer/sources/holder_farmer.move rename to apps/grow_bitcoin/sources/grow_bitcoin.move index 7a0112f285..c56faef2ac 100644 --- a/examples/btc_holder_farmer/sources/holder_farmer.move +++ b/apps/grow_bitcoin/sources/grow_bitcoin.move @@ -1,7 +1,7 @@ // Copyright (c) RoochNetwork // SPDX-License-Identifier: Apache-2.0 -module btc_holder_farmer::hold_farmer { +module grow_bitcoin::grow_bitcoin { use std::string; use std::option; @@ -17,7 +17,7 @@ module btc_holder_farmer::hold_farmer { use moveos_std::table::Table; use moveos_std::object; use moveos_std::signer; - use moveos_std::object::{Object, ObjectID, transfer}; + use moveos_std::object::{Object, ObjectID}; use moveos_std::timestamp; use moveos_std::account; use moveos_std::event_queue::{Self, Subscriber}; @@ -31,8 +31,10 @@ module btc_holder_farmer::hold_farmer { #[test_only] use bitcoin_move::bitcoin::add_latest_block; + use app_admin::admin::AdminCap; - const DEPLOYER: address = @btc_holder_farmer; + + const DEPLOYER: address = @grow_bitcoin; const MaxLockDay: u64 = 1000; // 1 Day seconds @@ -146,8 +148,6 @@ module btc_holder_farmer::hold_farmer { /// If the UTXO is spent, the stake info will be removed struct StakeInfo has store, drop {} - /// Capability to modify parameter such as period and release amount - struct AdminCap has key, store, drop {} struct StakeEvent has copy, drop { asset_id: ObjectID, @@ -182,12 +182,10 @@ module btc_holder_farmer::hold_farmer { } fun init() { - let admin_cap = object::new_named_object(AdminCap {}); - transfer(admin_cap, @btc_holder_farmer); let state_info_name = type_info::type_name(); let subscriber = event_queue::subscribe(state_info_name); - let btc_holder_farmer_signer = signer::module_signer(); - account::move_resource_to(&btc_holder_farmer_signer, SubscriberInfo { + let grow_bitcoin_signer = signer::module_signer(); + account::move_resource_to(&grow_bitcoin_signer, SubscriberInfo { subscriber }); } @@ -584,7 +582,7 @@ module btc_holder_farmer::hold_farmer { } public fun process_expired_state(){ - let subscriber_info = account::borrow_mut_resource(@btc_holder_farmer); + let subscriber_info = account::borrow_mut_resource(@grow_bitcoin); let event = event_queue::consume(&mut subscriber_info.subscriber); if (option::is_some(&event)){ let event = option::destroy_some(event); @@ -648,8 +646,8 @@ module btc_holder_farmer::hold_farmer { add_latest_block(100, @0x77dfc2fe598419b00641c296181a96cf16943697f573480b023b77cce82ada21); init(); let admin_cap_id = object::named_object_id(); - let btc_holder_farmer_signer = signer::module_signer(); - let admin_cap = object::borrow_mut_object(&btc_holder_farmer_signer, admin_cap_id); + let grow_bitcoin_signer = signer::module_signer(); + let admin_cap = object::borrow_mut_object(&grow_bitcoin_signer, admin_cap_id); deploy(&sender, 1, 0, 200, b"BTC Holder Coin", b"HDC", 6, admin_cap); let seconds = 100; let tx_id = @0x77dfc2fe598419b00641c296181a96cf16943697f573480b023b77cce82ada21; diff --git a/crates/rooch-types/src/error.rs b/crates/rooch-types/src/error.rs index b728b4c37c..20c4762193 100644 --- a/crates/rooch-types/src/error.rs +++ b/crates/rooch-types/src/error.rs @@ -140,7 +140,12 @@ pub enum RoochError { impl From for RoochError { fn from(e: anyhow::Error) -> Self { - RoochError::UnexpectedError(e.to_string()) + let message = e + .chain() + .map(|e| e.to_string()) + .collect::>() + .join("\n"); + RoochError::UnexpectedError(message) } } diff --git a/crates/testsuite/features/portal.feature b/crates/testsuite/features/portal.feature index ce5155b804..915413bf74 100644 --- a/crates/testsuite/features/portal.feature +++ b/crates/testsuite/features/portal.feature @@ -18,7 +18,13 @@ Feature: Rooch Portal contract tests Then assert: "{{$.move[-1].execution_info.status.type}} == executed" # publish gas_market via default address - Then cmd: "move publish -p ../../infra/rooch-portal-v2/contract/gas_market --named-addresses gas_market=default --json" + Then cmd: "move publish -p ../../apps/app_admin --named-addresses app_admin=default --json" + Then assert: "{{$.move[-1].execution_info.status.type}} == executed" + Then cmd: "move publish -p ../../apps/gas_market --named-addresses app_admin=default,gas_market=default --json" + Then assert: "{{$.move[-1].execution_info.status.type}} == executed" + Then cmd: "move publish -p ../../apps/gas_faucet --named-addresses app_admin=default,gas_faucet=default --json" + Then assert: "{{$.move[-1].execution_info.status.type}} == executed" + Then cmd: "move publish -p ../../apps/grow_bitcoin --named-addresses app_admin=default,grow_bitcoin=default --json" Then assert: "{{$.move[-1].execution_info.status.type}} == executed" Then cmd: "object -t default::gas_market::RGasMarket" diff --git a/docs/website/pages/build/bitcoin/programming_with_utxo_and_inscription.en-US.mdx b/docs/website/pages/build/bitcoin/programming_with_utxo_and_inscription.en-US.mdx index 542f12f1d0..27c376e4bc 100644 --- a/docs/website/pages/build/bitcoin/programming_with_utxo_and_inscription.en-US.mdx +++ b/docs/website/pages/build/bitcoin/programming_with_utxo_and_inscription.en-US.mdx @@ -81,7 +81,7 @@ In the above code, `TempState` is an example state structure, which should be re ### Examples 1. [btc_holder_coin](https://github.com/rooch-network/rooch/blob/main/examples/btc_holder_coin): A simple UTXO example that implements token distribution based on the duration a Bitcoin is held. -2. [btc_holder_farmer](https://github.com/rooch-network/rooch/blob/main/examples/btc_holder_farmer): A more complex UTXO example that implements token rewards for Bitcoin holders through a DeFi farmer model. +2. [grow_bitcoin](https://github.com/rooch-network/rooch/blob/main/apps/grow_bitcoin): A more complex UTXO example that implements token rewards for Bitcoin holders through a DeFi farmer model. ## Programming with Inscription diff --git a/docs/website/pages/build/bitcoin/programming_with_utxo_and_inscription.zh-CN.mdx b/docs/website/pages/build/bitcoin/programming_with_utxo_and_inscription.zh-CN.mdx index 2f3f219545..2f1ec7a937 100644 --- a/docs/website/pages/build/bitcoin/programming_with_utxo_and_inscription.zh-CN.mdx +++ b/docs/website/pages/build/bitcoin/programming_with_utxo_and_inscription.zh-CN.mdx @@ -81,7 +81,7 @@ let removed_state = remove_temp_state::(&mut utxo); ### 示例 1. [btc_holder_coin](https://github.com/rooch-network/rooch/blob/main/examples/btc_holder_coin):一个简单的 UTXO 示例,实现了给 Bitcoin 持有者按持有时间发放代币的功能。 -2. [btc_holder_farmer](https://github.com/rooch-network/rooch/blob/main/examples/btc_holder_farmer):一个更复杂的 UTXO 示例,实现了给 Bitcoin 持有者通过 DeFi farmer 模式发放代币奖励的功能。 +2. [grow_bitcoin](https://github.com/rooch-network/rooch/blob/main/apps/grow_bitcoin):一个更复杂的 UTXO 示例,实现了给 Bitcoin 持有者通过 DeFi farmer 模式发放代币奖励的功能。 ## 用 Inscription 编程 diff --git a/infra/rooch-portal-v2/contract/gas_market/Move.toml b/infra/rooch-portal-v2/contract/gas_market/Move.toml deleted file mode 100644 index 38f8493849..0000000000 --- a/infra/rooch-portal-v2/contract/gas_market/Move.toml +++ /dev/null @@ -1,22 +0,0 @@ -[package] -name = "gas_market" -version = "1.0.0" - -[dependencies] -MoveStdlib = { local = "../../../../frameworks/move-stdlib" } -MoveosStdlib = { local = "../../../../frameworks/moveos-stdlib" } -RoochFramework = { local = "../../../../frameworks/rooch-framework" } -BitcoinMove = { local = "../../../../frameworks/bitcoin-move" } - - -[addresses] -#bc1prcajaj9n7e29u4dfp33x3hcf52yqeegspdpcd79pqu4fpr6llx4sugkfjt -#0x701c21bf1c8cd5af8c42983890d8ca55e7a820171b8e744c13f2d9998bf76cc3 -gas_market = "_" -std = "0x1" -moveos_std = "0x2" -rooch_framework = "0x3" -bitcoin_move = "0x4" - -[dev-addresses] -gas_market = "0x42" diff --git a/infra/rooch-portal-v2/contract/gas_market/README.md b/infra/rooch-portal-v2/contract/gas_market/README.md deleted file mode 100644 index d1e5770806..0000000000 --- a/infra/rooch-portal-v2/contract/gas_market/README.md +++ /dev/null @@ -1,16 +0,0 @@ -# GasMarket and GasFaucet - -1. build package - -```bash -rooch move build -p infra/rooch-portal-v2/contract/gas_market --named-addresses gas_market=bc1prcajaj9n7e29u4dfp33x3hcf52yqeegspdpcd79pqu4fpr6llx4sugkfjt -``` - -2. build tx - -```bash -rooch tx build --sender bc1prcajaj9n7e29u4dfp33x3hcf52yqeegspdpcd79pqu4fpr6llx4sugkfjt --function 0x2::module_store::publish_package_entry --args file:infra/rooch-portal-v2/contract/gas_market/build/gas_market/package.rpd -``` - -3. sign tx -4. submit tx \ No newline at end of file diff --git a/infra/rooch-portal-v2/contract/gas_market/released/1/package.rpd b/infra/rooch-portal-v2/contract/gas_market/released/1/package.rpd deleted file mode 100644 index 881bba5c7c..0000000000 Binary files a/infra/rooch-portal-v2/contract/gas_market/released/1/package.rpd and /dev/null differ