forked from RGB-WG/rgb-schemata
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
add CFA schema + merge terms with media
- Loading branch information
Showing
30 changed files
with
884 additions
and
390 deletions.
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,117 @@ | ||
use std::convert::Infallible; | ||
|
||
use amplify::hex::FromHex; | ||
use bp::{Chain, Outpoint, Tx, Txid}; | ||
use rgb_schemata::{cfa_rgb25, cfa_schema}; | ||
use rgbstd::containers::BindleContent; | ||
use rgbstd::interface::{rgb25, ContractBuilder, FungibleAllocation}; | ||
use rgbstd::persistence::{Inventory, Stock}; | ||
use rgbstd::resolvers::ResolveHeight; | ||
use rgbstd::stl::{ | ||
Amount, Attachment, ContractData, Details, MediaType, Name, Precision, RicardianContract, | ||
Timestamp, | ||
}; | ||
use rgbstd::validation::{ResolveTx, TxResolverError}; | ||
use sha2::{Digest, Sha256}; | ||
use strict_encoding::StrictDumb; | ||
|
||
struct DumbResolver; | ||
|
||
impl ResolveTx for DumbResolver { | ||
fn resolve_tx(&self, _txid: Txid) -> Result<Tx, TxResolverError> { Ok(Tx::strict_dumb()) } | ||
} | ||
|
||
impl ResolveHeight for DumbResolver { | ||
type Error = Infallible; | ||
fn resolve_height(&mut self, _txid: Txid) -> Result<u32, Self::Error> { Ok(0) } | ||
} | ||
|
||
#[rustfmt::skip] | ||
fn main() { | ||
let name = Name::try_from("Test asset").unwrap(); | ||
let details = Details::try_from("details with ℧nicode characters").unwrap(); | ||
let precision = Precision::CentiMicro; | ||
let terms = RicardianContract::default(); | ||
let file_bytes = std::fs::read("README.md").unwrap(); | ||
let mut hasher = Sha256::new(); | ||
hasher.update(file_bytes); | ||
let file_hash = hasher.finalize(); | ||
let media = Some(Attachment { | ||
ty: MediaType::with("text/*"), | ||
digest: file_hash.into(), | ||
}); | ||
let contract_data = ContractData { | ||
terms, | ||
media, | ||
}; | ||
let created = Timestamp::default(); | ||
let beneficiary = Outpoint::new( | ||
Txid::from_hex("623554ac1dcd15496c105a27042c438921f2a82873579be88e74d7ef559a3d91").unwrap(), | ||
0 | ||
); | ||
|
||
const ISSUE: u64 = 1_000_000_000_000; | ||
|
||
let contract = ContractBuilder::with( | ||
rgb25(), | ||
cfa_schema(), | ||
cfa_rgb25() | ||
).expect("schema fails to implement RGB25 interface") | ||
|
||
.set_chain(Chain::Testnet3) | ||
.add_global_state("name", name) | ||
.expect("invalid name") | ||
|
||
.add_global_state("details", details) | ||
.expect("invalid details") | ||
|
||
.add_global_state("precision", precision) | ||
.expect("invalid precision") | ||
|
||
.add_global_state("created", created) | ||
.expect("invalid created") | ||
|
||
.add_global_state("issuedSupply", Amount::from(ISSUE)) | ||
.expect("invalid issuedSupply") | ||
|
||
.add_global_state("data", contract_data) | ||
.expect("invalid contract data") | ||
|
||
.add_fungible_state("assetOwner", beneficiary, ISSUE) | ||
.expect("invalid asset amount") | ||
|
||
.issue_contract() | ||
.expect("contract doesn't fit schema requirements"); | ||
|
||
let contract_id = contract.contract_id(); | ||
debug_assert_eq!(contract_id, contract.contract_id()); | ||
|
||
let bindle = contract.bindle(); | ||
eprintln!("{bindle}"); | ||
bindle.save("examples/rgb25-simplest.contract.rgb").expect("unable to save contract"); | ||
|
||
// Let's create some stock - an in-memory stash and inventory around it: | ||
let mut stock = Stock::default(); | ||
stock.import_iface(rgb25()).unwrap(); | ||
stock.import_schema(cfa_schema()).unwrap(); | ||
stock.import_iface_impl(cfa_rgb25()).unwrap(); | ||
|
||
// Noe we verify our contract consignment and add it to the stock | ||
let verified_contract = match bindle.unbindle().validate(&mut DumbResolver) { | ||
Ok(consignment) => consignment, | ||
Err(consignment) => { | ||
panic!("can't produce valid consignment. Report: {}", consignment.validation_status().expect("status always present upon validation")); | ||
} | ||
}; | ||
stock.import_contract(verified_contract, &mut DumbResolver).unwrap(); | ||
|
||
// Reading contract state through the interface from the stock: | ||
let contract = stock.contract_iface(contract_id, rgb25().iface_id()).unwrap(); | ||
let name = contract.global("name").unwrap(); | ||
let allocations = contract.fungible("assetOwner", &None).unwrap(); | ||
eprintln!("{}", Name::from_strict_val_unchecked(&name[0])); | ||
|
||
for FungibleAllocation { owner, witness, value } in allocations { | ||
eprintln!("(amount={value}, owner={owner}, witness={witness})"); | ||
} | ||
} |
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,33 +1,33 @@ | ||
-----BEGIN RGB INTERFACE----- | ||
Id: BR2fhPEKPtsjoEz2PDpBV4o24HCjvD1Dk4nHnaRx94fQ | ||
Id: 4CXiewut3xPYxYusN3PhwjawdLnMhZw7hpiVSJUcCHaU | ||
Name: RGB20 | ||
|
||
AAVSR0IyMAYMYnVybmVkU3VwcGx5AYiMWGVjOvE7lbfNGo2K8trB3BQLl3JR2dTa | ||
88dRHI6EAAEHY3JlYXRlZAFZbno6DqNlnhAw8YtNZaO5E+5YUAf8914Lts3BacHA | ||
OwEADGlzc3VlZFN1cHBseQGIjFhlYzrxO5W3zRqNivLawdwUC5dyUdnU2vPHURyO | ||
hAEBDnJlcGxhY2VkU3VwcGx5AYiMWGVjOvE7lbfNGo2K8trB3BQLl3JR2dTa88dR | ||
HI6EAAEEc3BlYwGZYk235CaSmVSTLt/I0melUpcCKTzVq8BWTm8iWzP68QEABXRl | ||
cm1zARjLlG8Sk88YDp143MZbxZtHL//+rfv1jbGYzIMo9ksBAQAFCmFzc2V0T3du | ||
ZXICAAABCWJ1cm5FcG9jaAEBAAAJYnVyblJpZ2h0AQEAARJpbmZsYXRpb25BbGxv | ||
d2FuY2UCAQABC3VwZGF0ZVJpZ2h0AQEAAAABRnusgTmx9RP9N7MedEWdhgqy9nAz | ||
2prUcubaPR/zinsEB2NyZWF0ZWQAAQABAAxpc3N1ZWRTdXBwbHkAAQABAARzcGVj | ||
AAEAAQAFdGVybXMAAQABAAQKYXNzZXRPd25lcgAAAP//CWJ1cm5FcG9jaAAAAAEA | ||
EmluZmxhdGlvbkFsbG93YW5jZQAAAP//C3VwZGF0ZVJpZ2h0AAAAAQAAAwEDBAYE | ||
QnVybgEBMY7KoHKHC9lSMKlRWmqqFJgrrJ4/sV6iUo6wQFInp6EBDGJ1cm5lZFN1 | ||
cHBseQABAAEAAQR1c2VkAQlidXJuUmlnaHQBAAEAAQZmdXR1cmUBCWJ1cm5SaWdo | ||
dAAAAQAAAwEDBQAFSXNzdWUBAUZ7rIE5sfUT/TezHnRFnYYKsvZwM9qa1HLm2j0f | ||
84p7AQxpc3N1ZWRTdXBwbHkAAQABAAEEdXNlZAESaW5mbGF0aW9uQWxsb3dhbmNl | ||
AQD//wILYmVuZWZpY2lhcnkBCmFzc2V0T3duZXIAAP//BmZ1dHVyZQESaW5mbGF0 | ||
aW9uQWxsb3dhbmNlAAD//wAEAQMEBgELYmVuZWZpY2lhcnkJT3BlbkVwb2NoAQAA | ||
AQR1c2VkAQlidXJuRXBvY2gBAAEAAglidXJuUmlnaHQAAQABAARuZXh0AQlidXJu | ||
RXBvY2gAAAEAAAABCWJ1cm5SaWdodAZSZW5hbWUBAAEDbmV3AQRzcGVjAQABAAEE | ||
dXNlZAELdXBkYXRlUmlnaHQBAAEAAQZmdXR1cmUBC3VwZGF0ZVJpZ2h0AAABAAAA | ||
AQZmdXR1cmUHUmVwbGFjZQEBMY7KoHKHC9lSMKlRWmqqFJgrrJ4/sV6iUo6wQFIn | ||
p6EBDnJlcGxhY2VkU3VwcGx5AAEAAQABBHVzZWQBCWJ1cm5SaWdodAEAAQACC2Jl | ||
bmVmaWNpYXJ5AQphc3NldE93bmVyAAD//wZmdXR1cmUBCWJ1cm5SaWdodAAAAQAA | ||
BAECAwUBC2JlbmVmaWNpYXJ5CFRyYW5zZmVyAAAAAQhwcmV2aW91cwEKYXNzZXRP | ||
d25lcgEA//8BC2JlbmVmaWNpYXJ5AQphc3NldE93bmVyAQD//wABAgELYmVuZWZp | ||
Y2lhcnkAoYeej1a91v2MoyO5TzngYGQ6ppo5IZGU1gxMinx7AcgBCFRyYW5zZmVy | ||
OwEABGRhdGEBHUILZdBBGlIYHYsC89qDqplVfYLTs7sHm15bzCA8M+MBAAxpc3N1 | ||
ZWRTdXBwbHkBiIxYZWM68TuVt80ajYry2sHcFAuXclHZ1Nrzx1EcjoQBAQ5yZXBs | ||
YWNlZFN1cHBseQGIjFhlYzrxO5W3zRqNivLawdwUC5dyUdnU2vPHURyOhAABBHNw | ||
ZWMBmWJNt+QmkplUky7fyNJnpVKXAik81avAVk5vIlsz+vEBAAUKYXNzZXRPd25l | ||
cgIAAAEJYnVybkVwb2NoAQEAAAlidXJuUmlnaHQBAQABEmluZmxhdGlvbkFsbG93 | ||
YW5jZQIBAAELdXBkYXRlUmlnaHQBAQAAAAFGe6yBObH1E/03sx50RZ2GCrL2cDPa | ||
mtRy5to9H/OKewQHY3JlYXRlZAABAAEABGRhdGEAAQABAAxpc3N1ZWRTdXBwbHkA | ||
AQABAARzcGVjAAEAAQAECmFzc2V0T3duZXIAAAD//wlidXJuRXBvY2gAAAABABJp | ||
bmZsYXRpb25BbGxvd2FuY2UAAAD//wt1cGRhdGVSaWdodAAAAAEAAAMBAwQGBEJ1 | ||
cm4BATGOyqByhwvZUjCpUVpqqhSYK6yeP7FeolKOsEBSJ6ehAQxidXJuZWRTdXBw | ||
bHkAAQABAAEEdXNlZAEJYnVyblJpZ2h0AQABAAEGZnV0dXJlAQlidXJuUmlnaHQA | ||
AAEAAAMBAwUABUlzc3VlAQFGe6yBObH1E/03sx50RZ2GCrL2cDPamtRy5to9H/OK | ||
ewEMaXNzdWVkU3VwcGx5AAEAAQABBHVzZWQBEmluZmxhdGlvbkFsbG93YW5jZQEA | ||
//8CC2JlbmVmaWNpYXJ5AQphc3NldE93bmVyAAD//wZmdXR1cmUBEmluZmxhdGlv | ||
bkFsbG93YW5jZQAA//8ABAEDBAYBC2JlbmVmaWNpYXJ5CU9wZW5FcG9jaAEAAAEE | ||
dXNlZAEJYnVybkVwb2NoAQABAAIJYnVyblJpZ2h0AAEAAQAEbmV4dAEJYnVybkVw | ||
b2NoAAABAAAAAQlidXJuUmlnaHQGUmVuYW1lAQABA25ldwEEc3BlYwEAAQABBHVz | ||
ZWQBC3VwZGF0ZVJpZ2h0AQABAAEGZnV0dXJlAQt1cGRhdGVSaWdodAAAAQAAAAEG | ||
ZnV0dXJlB1JlcGxhY2UBATGOyqByhwvZUjCpUVpqqhSYK6yeP7FeolKOsEBSJ6eh | ||
AQ5yZXBsYWNlZFN1cHBseQABAAEAAQR1c2VkAQlidXJuUmlnaHQBAAEAAgtiZW5l | ||
ZmljaWFyeQEKYXNzZXRPd25lcgAA//8GZnV0dXJlAQlidXJuUmlnaHQAAAEAAAQB | ||
AgMFAQtiZW5lZmljaWFyeQhUcmFuc2ZlcgAAAAEIcHJldmlvdXMBCmFzc2V0T3du | ||
ZXIBAP//AQtiZW5lZmljaWFyeQEKYXNzZXRPd25lcgEA//8AAQIBC2JlbmVmaWNp | ||
YXJ5AKGHno9Wvdb9jKMjuU854GBkOqaaOSGRlNYMTIp8ewHIAQhUcmFuc2Zlcg== | ||
|
||
|
||
-----END RGB INTERFACE----- |
Binary file not shown.
Oops, something went wrong.