Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/bitlightlabs/bitlight-rgb20-contract-testnet4
Demonstrating the RGB20 Contract using RGB v0.11.0-beta and Testing RGB Features on Testnet4
https://github.com/bitlightlabs/bitlight-rgb20-contract-testnet4
Last synced: about 1 month ago
JSON representation
Demonstrating the RGB20 Contract using RGB v0.11.0-beta and Testing RGB Features on Testnet4
- Host: GitHub
- URL: https://github.com/bitlightlabs/bitlight-rgb20-contract-testnet4
- Owner: bitlightlabs
- License: apache-2.0
- Created: 2024-07-15T06:37:25.000Z (5 months ago)
- Default Branch: main
- Last Pushed: 2024-07-15T06:42:42.000Z (5 months ago)
- Last Synced: 2024-08-01T13:22:42.161Z (4 months ago)
- Language: Rust
- Homepage: https://bitlightlabs.com
- Size: 14.6 KB
- Stars: 3
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-rgb-protocol - Bitlight RGB20 Contract Testnet4
README
# bitlight-rgb20-contract-testnet4
Demonstrating the RGB20 Contract using RGB v0.11.0-beta and Testing RGB Features on Testnet4## Pre-request
To complete the demo, you need to set up the following toolchains:
**⚠️ Warning:** Because the `RGB-WG` official repository has not yet merged the Testnet4-related PR, we are temporarily relying on the bitlightlabs repository.
1. [Git][git]
2. [Rust][rust]
3. [RGB-CLI][rgb-cli][git]: https://git-scm.com/
[rust]: https://www.rust-lang.org/tools/install
[rgb-cli]: https://github.com/will-bitlight/rgb
### RGB-CLI
First, clone it from GitHub:
```bash
git clone https://github.com/will-bitlight/rgb.git
cd rgb
git checkout testnet4
```Then, build it, copy the binary to `~/.cargo/bin/`:
```
cargo build --package rgb-wallet --bin rgb --release
cp target/release/rgb ~/.cargo/bin/
```### Key preparation
Users should prepare two funded keys in advance on bitcoin-testnet4.
If not, you can use the public test key provided by bitlight below.
```
# Alice
[5183a8d8/86'/1'/0']tpubDDtdVYn7LWnWNUXADgoLGu48aLH4dZ17hYfRfV9rjB7QQK3BrphnrSV6pGAeyfyiAM7DmXPJgRzGoBdwWvRoFdJoMVpWfmM9FCk8ojVhbMS/<0;1;9;10>/*"# Bob
[3abb3cbb/86'/1'/0']tpubDDeBXqUqyVcbe75SbHAPNXMojntFu5C8KTUEhnyQc74Bty6h8XxqmCavPBMd1fqQQAAYDdp6MAAcN4e2eJQFH3v4txc89s8wvHg98QSUrdL/<0;1;9;10>/*
```## Create and Import Contract
To create a RGB20 contract, just clone this repo to you local machine. Then
compile and run it.```bash
git clone https://github.com/bitlightlabs/bitlight-rgb20-contract-testnet4.git
cd bitlight-rgb20-contract-testnet4
```edit main.rs, change the beneficiary to alice's address
Note: The following `1240a...f6d51e` is the transaction-id in which Alice receives the payment. `0` is the index of the output of the transaction.
```rust
let beneficiary_txid = Txid::from_hex("1240a21693434f5e872551ded3d349692490db7839aff89a1667e78d36f6d51e").unwrap();
let beneficiary = Outpoint::new(beneficiary_txid, 0);
``````
make run
``````text
The issued contract data:
{"ticker":"TEST","name":"Test asset","details":null,"precision":"centiMicro"}
amount=adMhBHaQ, owner=bc:tapret1st:1240a21693434f5e872551ded3d349692490db7839aff89a1667e78d36f6d51e:0, witness=~
totalSupply=adMhBHaQContracts are available in the examples directory
---------------------------------
./examples:
-rw-r--r-- 1 bitlight staff 5639 Jul 12 21:52 rgb20-simplest.rgb
-rw-r--r-- 1 bitlight staff 7548 Jul 12 21:52 rgb20-simplest.rgba
---------------------------------
```Now, we are creating a RGB20 #TEST contract, which stores in `examples` fold.
Before importing contracts, let's import our wallets to rgb.
Export `LNPBP_NETWORK` env set the network environment used by the wallet to bitcoin-testnet4.
Export `MEMPOOL_SERVER` env set the data source used by the wallet to mempool-testnet4
```bash
export LNPBP_NETWORK=testnet4
export MEMPOOL_SERVER="https://mempool.space/testnet4/api"
```Create rgb wallet container for Alice:
```bash
# rgb -d .alice create default --tapret-key-only
$ rgb -d .alice create default --tapret-key-only "[5183a8d8/86'/1'/0']tpubDDtdVYn7LWnWNUXADgoLGu48aLH4dZ17hYfRfV9rjB7QQK3BrphnrSV6pGAeyfyiAM7DmXPJgRzGoBdwWvRoFdJoMVpWfmM9FCk8ojVhbMS/<0;1;9;10>/*"Loading descriptor from command-line argument ... success
Syncing keychain 0 ........... keychain 1 .......... keychain 9 ........... keychain 10 .......... success
Saving the wallet as 'default' ... success$ rgb -d .alice utxos
Height Amount, ṩ Outpoint
tb1pn0s2pajhsw38fnpgcj79w3kr3c0r89y3xyekjt8qaudje70g4shs8keguu &0/0
34489 245069 f5fcd7d27fe8e0915942f65c97886a2bffc674fcd1d77f5e952f4bebac8cf601:0
34506 100000 f656506f6909ab44b78320859dd5bd8b3f2634a471c706649574cba485392dc7:1tb1pr3rupmav8a7av7dqfyvynu2wk02lduggnh9ln4ndze9aqvuv9y3smxy992 &9/0
34527 108000 1240a21693434f5e872551ded3d349692490db7839aff89a1667e78d36f6d51e:0Loading descriptor from wallet default ... success
Wallet total balance: 453069 ṩ
```
Create rgb wallet container for Bob:
```bash
# rgb -d .bob create default --tapret-key-only$ rgb -d .bob create default --tapret-key-only "[3abb3cbb/86'/1'/0']tpubDDeBXqUqyVcbe75SbHAPNXMojntFu5C8KTUEhnyQc74Bty6h8XxqmCavPBMd1fqQQAAYDdp6MAAcN4e2eJQFH3v4txc89s8wvHg98QSUrdL/<0;1;9;10>/*"
Loading descriptor from command-line argument ... success
Syncing keychain 0 ........... keychain 1 .......... keychain 9 ........... keychain 10 .......... success
Saving the wallet as 'default' ... success$ rgb -d .bob utxos
Height Amount, ṩ Outpoint
tb1plphl407vyfpml2thhypzuqk232256njnaw4zhtmyrrku66pqn9ustvvjsd &0/0
34491 66123 6b5c3df74418e04a9f580625288f53c321121a2028c572c984940b60f8de7725:0tb1p9yjaffzhuh9p7d9gnwfunxssngesk25tz7rudu4v69dl6e7w7qhqellhrw &9/0
34528 121000 ce8dc940f5ff7c5867b9102f2e9e6588fa8f668c0d41d01d803b50f41c0ba56c:1Loading descriptor from wallet default ... success
Wallet total balance: 187123 ṩ
```
Import contract for Alice
```
$ rgb -d .alice import examples/rgb20-simplest.rgbImporting consignment rgb:csg:OzVmRfgj-9IJSfE1-mA6T3a0-j3eTOk8-nOgjsaQ-etElCHc#athena-voyage-everest:
- validating the contract rgb:WvHfDZDt-8UNnXDY-JuOjr2A-1n8T3hV-avzUeh2-sfNyku4 ... success
Consignment is imported
```After that, we can inspect contracts state with `rgb state` command.
get the state of the contract for Alice
```bash
$ rgb -d .alice contractsrgb:WvHfDZDt-8UNnXDY-JuOjr2A-1n8T3hV-avzUeh2-sfNyku4 bitcoin 2024-07-12 rgb:sch:KzMZV9bO7gFhox97!klj0FonG2ZKnjuOIg2tFChu$YA#lucas-episode-silicon
Developer: ssi:anonymous# rgb -d state
$ rgb -d .alice state 'rgb:WvHfDZDt-8UNnXDY-JuOjr2A-1n8T3hV-avzUeh2-sfNyku4' RGB20FixedGlobal:
spec := (ticker=("TEST"), name=("Test asset"), details=~, precision=8)
terms := (text=(""), media=~)
issuedSupply := (100000000000)Owned:
assetOwner:
value=100000000000, utxo=bc:tapret1st:1240a21693434f5e872551ded3d349692490db7839aff89a1667e78d36f6d51e:0, witness=~
```Import contract For Bob:
```bash
$ rgb -d .bob import examples/rgb20-simplest.rgb
$ rgb -d .bob contracts
$ rgb -d .bob state 'rgb:WvHfDZDt-8UNnXDY-JuOjr2A-1n8T3hV-avzUeh2-sfNyku4' RGB20FixedGlobal:
spec := (ticker=("TEST"), name=("Test asset"), details=~, precision=8)
terms := (text=(""), media=~)
issuedSupply := (100000000000)Owned:
assetOwner:
```Now we have successfully created an rgb20 token, and the owner
is `bc:tapret1st:1240a21693434f5e872551ded3d349692490db7839aff89a1667e78d36f6d51e:0`, which belongs to Alice.## Transfer
There are about five steps in a complete transfer:
1. Create an invoice
2. Construct a PSBT
3. Make a transfer
4. Accept the transfer### Create an invoice
To receive 1,000 #Test, Bob needs to create an invoice and send it to Alice.
```bash
$ rgb -d .bob invoice 'rgb:WvHfDZDt-8UNnXDY-JuOjr2A-1n8T3hV-avzUeh2-sfNyku4' RGB20Fixed 2000rgb:WvHfDZDt-8UNnXDY-JuOjr2A-1n8T3hV-avzUeh2-sfNyku4/RGB20Fixed/TadF+tb:utxob:!TvWPzkY-Sx6U9fY-S5Cjx3V-!D3v75N-DefZ5W7-ymNJceu-vAgLw
```### Make a transfer
```bash
$ rgb -d .alice transfer 'rgb:WvHfDZDt-8UNnXDY-JuOjr2A-1n8T3hV-avzUeh2-sfNyku4/RGB20Fixed/TadF+tb:utxob:!TvWPzkY-Sx6U9fY-S5Cjx3V-!D3v75N-DefZ5W7-ymNJceu-vAgLw' transfer.consignment alice.psbt
```The consignment is saved in the `transfer.consignment` file, and needs to be sent to Bob, who is waiting to accept it.
### Accept transfer
After receiving the `transfer.consignment` file, Bob could validate it before accepting.
```bash
$ rgb -d .bob validate transfer.consignment
The provided consignment is valid
```Bob accepts the consignment:
```bash
$ rgb -d .bob accept -f transfer.consignment
Transfer accepted into the stash
```