Skip to content

Commit 49213f2

Browse files
committed
update schemata scripts
1 parent c9b133e commit 49213f2

13 files changed

+376
-219
lines changed

Cargo.lock

Lines changed: 5 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ bp-dbc = { git = "https://github.com/BP-WG/bp-core", branch = "develop" }
5252
bp-seals = { git = "https://github.com/BP-WG/bp-core", branch = "develop" }
5353
bp-core = { git = "https://github.com/BP-WG/bp-core", branch = "develop" }
5454
bp-invoice = { git = "https://github.com/BP-WG/bp-std", branch = "develop" }
55-
rgb-core = { git = "https://github.com/RGB-WG/rgb-core", branch = "feat/fungible-nonconf" }
55+
rgb-core = { git = "https://github.com/RGB-WG/rgb-core", branch = "feat/asm" }
5656
rgb-invoice = { git = "https://github.com/RGB-WG/rgb-std", branch = "feat/fungible-nonconf" }
5757
rgb-std = { git = "https://github.com/RGB-WG/rgb-std", branch = "feat/fungible-nonconf" }
5858
rgb-interfaces = { git = "https://github.com/RGB-WG/rgb-interfaces", branch = "feat/fungible-nonconf" }

schemata/CollectibleFungibleAsset.rgb

61 Bytes
Binary file not shown.

schemata/CollectibleFungibleAsset.rgba

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
-----BEGIN RGB KIT-----
2-
Id: rgb:kit:9MjsRLx8-ZsEU0o5-EmeSB3F-JjShSzg-MYxsXUy-lYD!O6E
2+
Id: rgb:kit:xW0USI!D-IGKC74C-32$yhDw-eB$pRBD-L9dNB4E-2z4W3cY
33
Version: 2
44
Schema: CollectibleFungibleAsset;
5-
id=so!3RW45M!uWA6pEYoKHn21cYqsINcbBEub7OjtUy3I#biology-temple-garbo;
5+
id=XGLkK4Ouc3ry5Oz$Zt6PstuH43KdgUnXaA$VIyAzsCo#nobel-style-rodent;
66
dev=ssi:LZS1ux-gjD9nXPF-OcetUUkW-6r3uSCS6-aQhs9W5f-8JE7w
77
Interface: RGB25Base;
88
id=xCgpButl-IG39Nk!-aynmAEm-Od5vc99-5WGtRbI-ej5!FiY#edison-secret-elvis;
99
dev=ssi:LZS1ux-gjD9nXPF-OcetUUkW-6r3uSCS6-aQhs9W5f-8JE7w
10-
Implementation: 0VoxuFqG-QOkPe43-qm5Eh3g-f4XVqEw-R3T8fQA-YOls71I#concert-juice-hilton;
10+
Implementation: Zx!9tKwx-vrCKETz-nokbCqk-x4CHedR-jeqrl7F-$08jnwY#scale-diet-scroll;
1111
interface=xCgpButl-IG39Nk!-aynmAEm-Od5vc99-5WGtRbI-ej5!FiY#edison-secret-elvis;
12-
schema=so!3RW45M!uWA6pEYoKHn21cYqsINcbBEub7OjtUy3I#biology-temple-garbo;
12+
schema=XGLkK4Ouc3ry5Oz$Zt6PstuH43KdgUnXaA$VIyAzsCo#nobel-style-rodent;
1313
dev=ssi:LZS1ux-gjD9nXPF-OcetUUkW-6r3uSCS6-aQhs9W5f-8JE7w
1414
Type-System: sts:!sszu938-NL3ZW9T-DBsfmGE-cQLyhXS-53N8TEP-Ju$dT8o#marvin-silence-school
15-
Alu-Lib: alu:$6jROmtH-krFeZwW-N$PMhJc-GX9BtLo-7VTiTjq-8tfFew4#morning-shrink-igloo
16-
Check-SHA256: b1e06d874b9f5c6327427d00c937707a53ac8576034d8fdd0bc019739f97e2f3
15+
Alu-Lib: alu:VWggsFAX-IHhDsgn-orDlH6$-0eFHj5n-86x!gxY-ySVe0gU#bless-prime-zero
16+
Check-SHA256: 624fec2a49b9db2ead9c7f11d15666a014cd6150faacc3225c6b53ac5e7966b2
1717

1818
0s#RDQb$5EH9}!?WdefyeA22rmXX)ZV_yI}MH~YN>;K=mRmV)&;+=Xmp=5=Yl+T7onDsqJ)(GyQzUOj0
1919
_|udNLf4!^9@NX6Lz#s60cHRI0000617UJ>0e1iJJu1QEX=%Xy>vn1>teUKtq)w3djjO=VIO}{ZUjP6H
@@ -34,9 +34,9 @@ h#a~`69Ra6;9P9?0RRBn2LOnSSY=~6@jI2b%^Ho0^4h`N6bqMfQQ6em^T$yfj)VaK0JsYPcK`4_D#7Gw
3434
X~6yKc4{fCnyi?lPLTMGtH94V>wGO=0RRBG3jly##k^Az$U%@qU7>2Bz={du0O&G0&#r1CLJBFZ06hT!
3535
0K5wTKPz&##IG7-47St%2#c>Z5R>jkTb_MKDq#SE<Vn}$0RRBK3jkdM#21aJj($Hn^F!mAeRLol5%ecA
3636
&%UCtOO8MBUm^hj00E#60EmoOWn((=JC(Q18jXtb+QHlu3zu?H+0@$e$59-Pga7~r(FXwl0RY+u0RRC2
37-
xC;OP0RXuR0RRC2ybAyT0RX)V0RRC20iX{70RR600spAcI%`Lgv0i5djr{W=CBc{U8%v|LQ;9h0^4G<C
38-
4h8@K0T3qu00E#60RaF10iX{70RR600spAcI%`Lgv0i5djr{W=CBc{U8%v|LQ;9h0^4G<C4gdfE00000
39-
000010kV&`MQ%AW>y`tmL}G%6pKV-Xs|Yp5!4l^CIy+R$a>OVp2J2-YZT&V+n#y^A5@Vg__dWNOhP4*R
37+
xC;OP0RXuR0RRC2ybAyT0RX)V0RRC20iX{70RR600aa)quuvBuctf%Y=&U(M>-`=Sc=?~svHA>H$t7OW
38+
1qJ{B0T3qu00E#60RaF10iX{70RR600aa)quuvBuctf%Y=&U(M>-`=Sc=?~svHA>H$t7OW1poj500000
39+
000010bF9_D}%0cdh+D#|7PBgvfGE_a-D%m*JuybBOo)dD#R!$2J2-YZT&V+n#y^A5@Vg__dWNOhP4*R
4040
dOm&@CXkIEW&i*H000Kj2L*Ixa&2<}0002m2MlR*b9H58Q+04~Y<U0x006iP17UJ>00000xeEktVQpmq
4141
0002I3kPInbYW?1a{vGU0KE$daB^j1X>)0BZU6uP00E#63So0|Wpqz>Ze?-+000000T3q$baG*Cb7p07
4242
0000000ICHZf|ZyadlyAL2Yk!Zgg`1000014rz09b!B8tX>)C1bYo}$0000q0CRI`I!szqF?Dz?XKF+_
@@ -214,7 +214,8 @@ Eg#>2x#JO!0is)`buE3*f$s=72pp@w!`LRkztQP;3W%Qi%!_9htpQ3t>=3qD6)+-@LI3~&000000RR60
214214
000000QIdGAw<m5-D2$LPw@K`WF3=gfWe^2KEIc8afFF{ya-6XBNr;@ghiU?gEXK9KMDE{F?;HZBRuDV
215215
qlk6qmbd@_00000001Wd00000008+H2n5}(1bO(?uXL+B(gNn{L2}utxi<$D8ry%w450%W0byYQVqyVf
216216
V*zAj0cB+YW@Z6rX8~wv0cmLgYH9&%YXNL*0c~voZf*f@Zvk*{0da8wa&iH4a{+X80d;i&c6I@GcL8{K
217-
0eN`=dV2e*SaKRYGgJn%Xv1$>f_VvG%;GuzyszPjx|liD+IRs000RR-OjQU%P((>bMN?D*Qb$4?01E&B
218-
009RJ0096C2mk;J0RjNX+6MtSFaQAu1ONa500000
217+
0eN`=dV2e*SaKRYGgJn%Xv1$>f_VvG%;GuzyszPjx|liD+IRs000RR-OjQU%P((>bMN?D*Qb$5H01E*C
218+
0Kp9e3sC|9IWw;T3xNax1poj53jhWH8F_I52Md7&00jU500kic01E&D02zUC0S5;F+6Mptpbr57KdW~?
219+
GO^3};mOgvH7UGe8wQe4n%)7JK7QsxT5dF(00
219220

220221
-----END RGB KIT-----

schemata/NonInflatableAssets.rgb

160 Bytes
Binary file not shown.

schemata/NonInflatableAssets.rgba

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,20 @@
11
-----BEGIN RGB KIT-----
2-
Id: rgb:kit:sstMiKFc-sQtkR41-rlNSnXt-TlnJjhh-kk8iZjS-3LjfVis
2+
Id: rgb:kit:DwsdhjXJ-5dkQHm7-ESuqDHr-i5tWzS4-hQ6UzWS-hHJkhUE
33
Version: 2
44
Schema: NonInflatableAsset;
5-
id=3UhXmwkss!wkBXlmYktxLMooF!B8Exbo8zYCg31RAjk#moses-monica-cello;
5+
id=iIr5Jb83RvcOLO2JhzFB2bjJ2PTyTsKWvRluwYOTLaE#numeric-omega-ground;
66
dev=ssi:LZS1ux-gjD9nXPF-OcetUUkW-6r3uSCS6-aQhs9W5f-8JE7w
77
Interface: RGB20Fixed;
88
id=Oq2rlfVG-m!!reli-q10Jxut-FBhzKXQ-mxtfYzg-Td1qVfQ#club-factor-montana;
99
dev=ssi:LZS1ux-gjD9nXPF-OcetUUkW-6r3uSCS6-aQhs9W5f-8JE7w
10-
Implementation: KsGa69z0-d7gBO!k-dYlkhBd-DKZu8Sv-fx1m!a8-JJP8IWM#radius-private-elastic;
10+
Implementation: LeLkKJ3x-6Ch9GOz-x4ur5!6-b7MK5rS-MaLkrRe-X8H6YKI#next-coral-battery;
1111
interface=Oq2rlfVG-m!!reli-q10Jxut-FBhzKXQ-mxtfYzg-Td1qVfQ#club-factor-montana;
12-
schema=3UhXmwkss!wkBXlmYktxLMooF!B8Exbo8zYCg31RAjk#moses-monica-cello;
12+
schema=iIr5Jb83RvcOLO2JhzFB2bjJ2PTyTsKWvRluwYOTLaE#numeric-omega-ground;
1313
dev=ssi:LZS1ux-gjD9nXPF-OcetUUkW-6r3uSCS6-aQhs9W5f-8JE7w
1414
Type-System: sts:!sszu938-NL3ZW9T-DBsfmGE-cQLyhXS-53N8TEP-Ju$dT8o#marvin-silence-school
15-
Alu-Lib: alu:$6jROmtH-krFeZwW-N$PMhJc-GX9BtLo-7VTiTjq-8tfFew4#morning-shrink-igloo
16-
Check-SHA256: 3a9eca0b66a5acaded1efb659bc1dace623ec718ec4fba50ee2c1457e868ef1a
15+
Alu-Lib: alu:P6t3PzKx-y$jhydG-7NSm8Yh-sGklCa3-gGYPn7m-QlpuNJs#service-user-flash
16+
Alu-Lib: alu:VWggsFAX-IHhDsgn-orDlH6$-0eFHj5n-86x!gxY-ySVe0gU#bless-prime-zero
17+
Check-SHA256: 3fad329df8695b4678aa814a123017338bbff4701cc1082f34f43756d83aa217
1718

1819
0s#REQb$5EFh*&3Wn=_aPh8{kau)pw>ewj^T{#F%_1b`zh4BqG=$aXZ#JgXGmXyziN0{|JN7e}Lp}yyG
1920
JowX;3qseNLLSu1oI{zd+?yZx(V;8SnC`hL-TfxJSk!DhyM4=xS*w!UK;ApTd|%<8%-b!M&HBwn)KKUr
@@ -30,9 +31,9 @@ b$BgjYD771SWreSPh(|tRaI+OEjDs9byGuAHZ5UMXmdGNHD)b1N<}w!0RR915>9V!Np5CrVRT_)Y-K@n
3031
b7gdpjUQ$J0000q0CRI`I!szqF?Dz?XKF+_Zdg!8El*=*bX8SrS1mSjGj&r#Q#LJOQD}2HS2boWI7&q~
3132
cK`#>2LRXnzT+P7s9j%|JK7ryjGlh`%f(kEcQ`Dp)4jAIiU9!t0MQ2kTZ_k3I5GuF9U{JzB5UVUixWB~
3233
h#a~`69Ra6;9P9?0RRBn2LOnSSY=~6@jI2b%^Ho0^4h`N6bqMfQQ6em^T$yfj)VaK00E#60EmoOWn((=
33-
JC(Q18jXtb+QHlu3zu?H+0@$e$59-Pga7~o&<6nk0RYhl0RRC2+6Msu0RRD@4*>xG{{R91sL?uWN0PB#
34-
X9bP?^C2a{m-HJ;qqS3sIO_7(#d{700003HCjbBepbr56|NjA?4*>xG{{R91sL?uWN0PB#X9bP?^C2a{
35-
m-HJ;qqS3sIO_7(#d{6_0000000000009BrNLQN)EVJw+1$ky-OK~j9C>P*-6Bg+6HUfivQ35$St*e#w
34+
JC(Q18jXtb+QHlu3zu?H+0@$e$59-Pga7~o&<6nk0RYhl0RRC2+6Msu0RRD@4*>xG{{R71Xdtjq7a({;
35+
vI*#{IY;aL9u#=_pU$!R3|Pq}UeW~y0003HCjbBepbr56|NjA?4*>xG{{R71Xdtjq7a({;vI*#{IY;aL
36+
9u#=_pU$!R3|Pq}UeW~s0000000000009AriuonKH%9jkEbWPhF+th5$=LMrPQsSG8E(OYlP#e-t*e#w
3637
Mw{=edRVI0LUFp$L5DJzLTqh)jNnb(YE|@*jUQ$J000001JDNqb8uy200000(FX-|WpZtE00000+6N42
3738
b8~fNWK(r;aBO)100001pbrXRb8}^MPj_x*asU7T0003HCkS+MVQzC~WpV%j0000201s|&Zbfl*VQfKd
3839
Z*^{Ta{vGU009nZb8~fNWKC&vZDDj{XaE2J05kw|b7?wET2nD~cr9mYL^*C)P)03JV`X$zRclu*HgYp{
@@ -210,7 +211,9 @@ Wo&k3LkM(eX>xRBWo|?WW^Z+JbY*33MF(bSW^`p`ZbtIDB!Cv4eL6_}05B~d-+;N}5sv|)Tc&j_eb0gK
210211
`xImylWKs$pvgYJmvV80iF~{WNWLQ%D(Hkon&*Qwpawq)`VKLB>Wd>h=Ype%b?2720000000000CjbBd
211212
00000`4<QT-L3?A_|>m;t2@#H=ITLm*{QiV2NfFIf5Z%-0~!HgVF6-d0b^qUWMlzlWdUYp0cU3cXlMax
212213
X#r|#0c&dkY-|B-Z2@j>0dH>saBu-}aRG920dsQ!baVlAbpdvE0e5!+cz6MMc>#KQ`>9xR8a*>q2D50x
213-
Z(4$R31H0PIsUw_;fcDKIn~;D0RaF513^qx2trUqNk>IfR0C2+LK^@J000012MYiJ01F5J01E*E0La=0
214-
0XZ-L0S5#C00961000
214+
Z(4$R31H0PIsUw_;fcDKIn~;D0RjL613^qx2trUqNk>IfR0C2+LP7uwQ2+o7g8~4+7l0%I|G@$TIW(XF
215+
Ab?;2Bmw^e0018c3sC?73yS~%z#o7l0sp}R1UWRI0U(HA0VDzc0{{RY2MPcH000000000000096K}=N$
216+
LQq6WM@3Uq15!sqH2@0%006-a1Pf6D068<S0Skcy00jU501E&H02z640S60#1ONp9000Fc000XB0st9-
217+
aRCPh0NMut0H6;60Y9sEKQgh)_~FUXyEQ4iVjBjMP@3KWm_B~yLRxM#n*a
215218

216219
-----END RGB KIT-----

schemata/UniqueDigitalAsset.rgb

5 Bytes
Binary file not shown.

schemata/UniqueDigitalAsset.rgba

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
-----BEGIN RGB KIT-----
2-
Id: rgb:kit:Teg5X4ru-4k1slWX-ev3ME3G-CSmuNEe-Oswr7MJ-aH8oTyc
2+
Id: rgb:kit:teE3x7vZ-v$9YKUp-HaF0BTC-g3lzVY1-9FVaT5e-4YYlCg4
33
Version: 2
44
Schema: UniqueDigitalAsset;
5-
id=PeD2xU6fhqcc5v3vZ$$yLEuL3zeiZ116ygOwDDIOKzA#margo-flex-fiber;
5+
id=08$NoeyUKRv0srRplmISVv3J7SjAA5oSEdt0Tod6reU#arcade-hobby-igloo;
66
dev=ssi:LZS1ux-gjD9nXPF-OcetUUkW-6r3uSCS6-aQhs9W5f-8JE7w
77
Interface: RGB21Unique;
88
id=kymCOGIa-NmKvwpn-1d6tvAZ-e4vilfE-vnlugPf-s0w2P$c#speed-color-cipher;
99
dev=ssi:LZS1ux-gjD9nXPF-OcetUUkW-6r3uSCS6-aQhs9W5f-8JE7w
10-
Implementation: FrdOYWg1-z8e$dWH-vW7jyts-gzoENCb-kTAHkwI-vynzh3U#broken-bicycle-ladder;
10+
Implementation: yCk$9blq-neYaWQA-PPzZqJk-2V6p70r-3UW6rmi-I8Ez978#pencil-java-patrol;
1111
interface=kymCOGIa-NmKvwpn-1d6tvAZ-e4vilfE-vnlugPf-s0w2P$c#speed-color-cipher;
12-
schema=PeD2xU6fhqcc5v3vZ$$yLEuL3zeiZ116ygOwDDIOKzA#margo-flex-fiber;
12+
schema=08$NoeyUKRv0srRplmISVv3J7SjAA5oSEdt0Tod6reU#arcade-hobby-igloo;
1313
dev=ssi:LZS1ux-gjD9nXPF-OcetUUkW-6r3uSCS6-aQhs9W5f-8JE7w
1414
Type-System: sts:kpZfoOkQ-QBnpq7x-EJj84tu-U$4kkhC-rBTh4YL-iXu5rnw#atomic-enigma-image
15-
Alu-Lib: alu:NhZxdclE-0421s28-MHR$kz$-SadRGjv-iUElfKp-6DiE1KU#metal-coral-charter
16-
Check-SHA256: df9b4111649e843ae7dd123d32703457b082fa2c6a0ae33f39d008854996ba0f
15+
Alu-Lib: alu:sEUjL73M-75sHyss-EEUjrYd-PS6Csi4-AJj5gxb-JDfT9nw#kevin-century-granite
16+
Check-SHA256: 4f09257f2e62698994517b1a1cb755b08a5ad6970c24608bf73ab91f1fea69ec
1717

1818
0s#RFQb$5EF;#A9adl+`R!>~x^Kusb3F_D>3|%=0P4(J<mWA;RHt3oehQzyHV%jp;&2=G}UMKp!;*oOE
1919
<`7J_f%|6IrHK%KPM;|~9DH^hiD%?FRr>XvjR(~i7`}+dRIMW)E%}WETGtn8n`Mj)aOlxt9k`1fWGHk&
@@ -36,9 +36,9 @@ Zdg!8El*=*bX8SrS1mSjGj&r#Q#LJOQD}2HS2boWI7&q~cL4wZ01{PhX>oOBL}_PfbYW~kb8}^Mkc}T^
3636
{J!HJ@Tgs1mpj@U3yhwA`^&{wC3iS1tkb=;A&LP3007Yk09%X4R5&sPN*yA;lp<^AQ;QQiCWsumMiT;f
3737
c;H-Y_W=L^HV6R!A_u9FkY$C#EP-5hof9%0*j%0yZw<Q3j<8qj%<WbI001}$0CA?l=SYgYyhW`tp#RGm
3838
T}~>Us_xvd)#O5wx83<g*#Q6m0iX{6VU{+^W`cnQ%??R|3qTSHpra(ku*HuAQ$q+KGO7#i000Eg2LS*9
39-
0MQ2l0096t2mt^A05}K$00962pbr560RR92HWqPp$wbqQwX<&w9UtV+^qO@MqrN2smGY_RIE2)t3jhEC
40-
5GMct0iX{700962pbr560RR92HWqPp$wbqQwX<&w9UtV+^qO@MqrN2smGY_RIE2)t000000000000032
41-
J>d4mPM?OS9OnJ+XaDjnON-w(qGw%t$^)<rG7c*+lPQ8YVj4DLufm!2cdKs!m$<$uUlRG{x&z;{Og2CF
39+
0MQ2l0096t2mt^A05}K$00962pbr560RR92utg&;z0B{M2g=I?5lHJ{)6(cGBH#jJ<_udTH`Dff3jhEC
40+
5GMct0iX{700962pbr560RR92utg&;z0B{M2g=I?5lHJ{)6(cGBH#jJ<_udTH`Dff000000000000032
41+
)6dPJ?35`R^s=;RmSPfC{mJbpzyq2R5!-Z5hkC8$lPQ8YVj4DLufm!2cdKs!m$<$uUlRG{x&z;{Og2CF
4242
kc}T^0000000htn1aoj@V*mgE0MQ2pbY*gFa{vGU05%8)bZ={AZgT(t001}$4`Fn4VPj}*Wo~p-d2nTO
4343
000000iX{GVRLh3bWe9~WpV%j000015GM$9a$#<BW@T~!000000sstkZfkCDcWzW~Yh`W#0000A5^is9
4444
Msi_ebZKvHVQf@yYh`W#0000q0CRI`I!szqF?Dz?XKF+_Zdg!8El*=*bX8SrS1mSjGj&r#Q#LJOQD}2H
@@ -243,8 +243,8 @@ Pue$g9R_r1V{2t{E8n<KJxdz(fwc)SY1`R=bsQP${hcDMp~L&2I*~!W1a4t%Wue-9Yt#1Jp*e72xXvv~
243243
_Ej0eK<_)d?1f|rB(T3THwR>8bYW?1b49m+C58dTCbBzQNMS|_kWk@2HT%AU1*iZKSL6XWhzD?TWp-(0
244244
clRD;j;BmNHBOwq)*#;<L?Bf&wD(odi6_qI74u|O1O;tnWNBgGhp04`Gl!Y4#EOy;XgWfDE7LwMr|Y<=
245245
xPa<PwCjNjVRUq1V`yz<Zgg|ZkLS5x^+<}LcGEaI7ODd}u5+h&HA24Gvz{DuJelnXa%FR6a&~2NZgk9_
246-
9SqA<&i^g*B+1lO!K~_XGCIw-T+RZwy_cg^0RRI7K}=N$LQq6WM@3Uq15!sqKmZE?006|G4*&ue01E*C
247-
01F5J0LV570Sf>C068E43kd)K#h?!nIUxZV0YL!^00ICD5d#1@F(3;I1ppZVVF3*Q000UE0096100000
248-
0000
246+
9SqA<&i^g*B+1lO!K~_XGCIw-T+RZwy_cg^0RRI7K}=N$LQq6WM@3Uq15!sqK>!N@000Yt0sz4R1OgWT
247+
3jqKC3wZ<p!NCJLAOH)20sz5B068H63jhEB839273jhWH3lRqZIWZs$3kd)j0bv0V0001>4>kx21ONd5
248+
0000000000
249249

250250
-----END RGB KIT-----

src/nia.rs

Lines changed: 80 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,6 @@
2222
//! Non-Inflatable Assets (NIA) schema implementing RGB20 fungible assets
2323
//! interface.
2424
25-
use aluvm::isa::Instr;
26-
use aluvm::isa::opcodes::{INSTR_PUTA, INSTR_TEST};
2725
use aluvm::library::{Lib, LibSite};
2826
use amplify::confinement::Confined;
2927
use bp::dbc::Method;
@@ -38,7 +36,6 @@ use rgbstd::schema::{
3836
GenesisSchema, GlobalStateSchema, Occurrences, OwnedStateSchema, Schema, TransitionSchema,
3937
};
4038
use rgbstd::validation::Scripts;
41-
use rgbstd::vm::RgbIsa;
4239
use rgbstd::{Identity, rgbasm};
4340
use strict_encoding::InvalidRString;
4441
use strict_types::TypeSystem;
@@ -48,33 +45,78 @@ use crate::{
4845
OS_ASSET, TS_TRANSFER,
4946
};
5047

51-
pub(crate) fn nia_lib() -> Lib {
52-
let code = rgbasm! {
53-
// SUBROUTINE Transfer validation
54-
// Set errno
55-
put a8[0],ERRNO_NON_EQUAL_IN_OUT;
56-
// Checking that the sum of pedersen commitments in inputs is equal to the sum in outputs.
57-
// ..................
58-
test;
59-
ret;
48+
pub(crate) fn util_lib() -> Lib {
49+
rgbasm! {
50+
// SUBROUTINE Compute sum of inputs
51+
// Input: a16[16] - state to compute
52+
// Output: a64[16] - sum
53+
// Uses: a16[0] - counter, a16[10] - zero constant, a64[0] - extracted amounts
54+
// Fails: on sum overflow or invalid state (should not happen)
55+
// St0: unmodified if not fails
56+
put a16[10],0; // zero constant
57+
put a64[16],0; // init sum with 0
58+
cn.i a16[0],a16[16]; // count state
59+
dec a16[0]; // counter = len - 1
60+
/**/ld.i s16[0],a16[16],a16[0]; // load state
61+
extr s16[4],a64[0],a16[10]; // extract 64 bits
62+
test; // fail if state is absent or invalid
63+
add.uc a64[16],a64[0]; // add amount to the sum
64+
test; // fail on sum overflow
65+
dec a16[0]; // dec counter
66+
jif 0/**/; // repeat for all assignments
67+
inv st0; // reset status flag
68+
ret; // finish
6069

70+
// SUBROUTINE Compute sum of outputs
71+
// Input: a16[16] - state to compute
72+
// Output: a64[17] - sum
73+
// Uses: a16[0] - counter, a16[10] - zero constant, a64[0] - extracted amounts
74+
// Fails: on sum overflow or invalid state (should not happen)
75+
// St0: unmodified if not fails
76+
put a16[10],0; // zero constant
77+
put a64[17],0; // init sum with 0
78+
cn.o a16[0],a16[16]; // count state
79+
dec a16[0]; // counter = len - 1
80+
/**/ld.o s16[0],a16[16],a16[0]; // load state
81+
extr s16[4],a64[0],a16[10]; // extract 64 bits
82+
test; // fail if state is absent or invalid
83+
add.uc a64[17],a64[0]; // add amount to the sum
84+
test; // fail on sum overflow
85+
dec a16[0]; // dec counter
86+
jif 0/**/; // repeat for all assignments
87+
inv st0; // reset status flag
88+
ret; // finish
89+
}
90+
}
91+
92+
pub(crate) fn nia_lib() -> Lib {
93+
let util = util_lib().id();
94+
const ISSUED: u16 = GS_ISSUED_SUPPLY.to_u16();
95+
const DISTRIBUTED: u16 = OS_ASSET.to_u16();
96+
rgbasm! {
6197
// SUBROUTINE Genesis validation
62-
// Checking pedersen commitments against reported amount of issued assets present in the
63-
// global state.
64-
put a8[0],ERRNO_ISSUED_MISMATCH;
65-
put a8[1],0;
66-
put a16[0],0;
67-
// Read global state into s16[0]
68-
ldg GS_ISSUED_SUPPLY,a8[1],s16[0];
69-
// Extract 64 bits from the beginning of s16[0] into a64[1]
70-
// NB: if the global state is invalid, we will fail here and fail the validation
71-
extr s16[0],a64[0],a16[0];
72-
// verify sum of pedersen commitments for assignments against a64[0] value
73-
// ..................
74-
test;
75-
ret;
76-
};
77-
Lib::assemble::<Instr<RgbIsa<MemContract>>>(&code).expect("wrong non-inflatable asset script")
98+
put a16[0],ISSUED; // global state to load
99+
ld.g s16[3],a16[16],a16[0]; // load reported issued amount
100+
put a16[10],0; // zero offset
101+
extr s16[3],a64[15],a16[10]; // a64[15] <- GS_ISSUED_SUPPLY
102+
test; // fail if state is absent or invalid
103+
104+
put a16[16],DISTRIBUTED; // owned state to load
105+
call 0x00 @ util; // a64[17] <- sum of OS_ASSET allocations
106+
put a8[0],ERRNO_ISSUED_MISMATCH; // set errno to return if we fail
107+
eq.n a64[15],a64[17]; // check if ISSUED =? sum(DISTRIBUTED)
108+
test; // fail if not
109+
ret; // complete
110+
111+
// SUBROUTINE Transfer validation
112+
put a16[16],DISTRIBUTED; // owned state to load
113+
call 0x00 @ util; // a64[16] <- sum of inputs
114+
call 0x21 @ util; // a64[17] <- sum of outputs
115+
put a8[0],ERRNO_NON_EQUAL_IN_OUT; // set errno to return if we fail
116+
eq.n a64[16],a64[17]; // check if sum(inputs) =? sum(outputs)
117+
test; // fail if not
118+
ret; // complete
119+
}
78120
}
79121
pub(crate) const FN_NIA_GENESIS_OFFSET: u16 = 4 + 3 + 2 - 3;
80122
pub(crate) const FN_NIA_TRANSFER_OFFSET: u16 = 0;
@@ -84,10 +126,6 @@ fn nia_schema() -> Schema {
84126

85127
let alu_lib = nia_lib();
86128
let alu_id = alu_lib.id();
87-
assert_eq!(alu_lib.code.as_ref()[FN_NIA_TRANSFER_OFFSET as usize + 4], INSTR_TEST);
88-
assert_eq!(alu_lib.code.as_ref()[FN_NIA_GENESIS_OFFSET as usize], INSTR_PUTA);
89-
assert_eq!(alu_lib.code.as_ref()[FN_NIA_GENESIS_OFFSET as usize + 4], INSTR_PUTA);
90-
assert_eq!(alu_lib.code.as_ref()[FN_NIA_GENESIS_OFFSET as usize + 8], INSTR_PUTA);
91129

92130
Schema {
93131
ffv: zero!(),
@@ -187,8 +225,9 @@ impl IssuerWrapper for NonInflatableAsset {
187225
fn types() -> TypeSystem { StandardTypes::with(Self::FEATURES.stl()).type_system() }
188226

189227
fn scripts() -> Scripts {
228+
let util = util_lib();
190229
let lib = nia_lib();
191-
Confined::from_checked(bmap! { lib.id() => lib })
230+
Confined::from_checked(bmap! { lib.id() => lib, util.id() => util })
192231
}
193232
}
194233

@@ -221,10 +260,16 @@ mod test {
221260
use ifaces::stl::*;
222261
use rgbstd::containers::{BuilderSeal, ConsignmentExt};
223262
use rgbstd::interface::*;
224-
use rgbstd::*;
263+
use rgbstd::{disassemble, *};
225264

226265
use super::*;
227266

267+
#[test]
268+
fn lib_check() {
269+
let util = util_lib();
270+
println!("{}", disassemble(&util));
271+
}
272+
228273
#[test]
229274
fn iimpl_check() {
230275
let iface = NonInflatableAsset::FEATURES.iface();
@@ -282,7 +327,7 @@ mod test {
282327

283328
assert_eq!(
284329
contract.contract_id().to_string(),
285-
s!("rgb:pOIzGFyQ-mA!yQq2-QH8vB5!-5fAplY!-x2lW!vz-JHDbYPg")
330+
s!("rgb:vGAyeGF9-bPAAV8T-w1V46jM-Iz7TW7K-QzZBzcf-RMuzznw")
286331
);
287332
}
288333
}

0 commit comments

Comments
 (0)