From 33f157866998e1dacd348febd33a9b06bc95d75a Mon Sep 17 00:00:00 2001 From: WGB5445 Date: Wed, 22 Jun 2022 23:19:26 +0800 Subject: [PATCH 01/14] add checkpoints --- build/StarcoinFramework/BuildInfo.yaml | 2 +- .../bytecode_modules/Block.mv | Bin 764 -> 2327 bytes build/StarcoinFramework/docs/Block.md | 316 ++++++++++++++++++ .../StarcoinFramework/source_maps/Block.mvsm | Bin 3875 -> 17081 bytes sources/Block.move | 138 +++++++- 5 files changed, 454 insertions(+), 2 deletions(-) diff --git a/build/StarcoinFramework/BuildInfo.yaml b/build/StarcoinFramework/BuildInfo.yaml index 3e6d9bf5..8a0ab17a 100644 --- a/build/StarcoinFramework/BuildInfo.yaml +++ b/build/StarcoinFramework/BuildInfo.yaml @@ -258,7 +258,7 @@ compiled_package_info: ? address: "0x00000000000000000000000000000001" name: YieldFarmingV2 : StarcoinFramework - source_digest: 32826A6EC6BBC9EA88FE5A7FAFAA167756EDA62C7FD903B59751BCF002F09AE4 + source_digest: BF6C3B0DC4B1F8B86C7E2EB55B9CF77AFEB1CF8BA191369FF98931C0810B07BC build_flags: dev_mode: false test_mode: false diff --git a/build/StarcoinFramework/bytecode_modules/Block.mv b/build/StarcoinFramework/bytecode_modules/Block.mv index c6049e5ec0a75ce879823f6e8de04fdde1cef76d..f5618084b59aaea6ee11f5fedfe9a26693238668 100644 GIT binary patch literal 2327 zcmZ`*YiJx*6uytScV_O~+1=U9?)H(|OWZ&bDu)0hxDB3wS!9PHAdlu#hB}2sl zSmG?`;UUoD!vZKN8?eNPZ^SX^A5373*e2-c2ufnkH`^4pM^kA~9LuZ%LR%LzjxFoAH>Quq-{P4=8ENiYMc-cm`+!GlnS^gm4KR6@-TqMk!@f)v&4& zK`7QRQH72uR&|68hIK@Q7TUp*L?W1I6dMYNz?f@JAUGTVZP#M8aKxOb*8SZ4eBEy}{05(@*Q@mgn>y-O0zOjttClK((VI5R{r*y<7eR?aS1Hk(Hr!IB z6eJh?z%4ZEb#Uo=&7fGVuj=2L3u(HQW_ix9$3sEQi&TqVqbNdvlDAlT(YF@80BE|v zH1OSewHl;r^=bi*<+c#YZNgTw2E6?~Mcx88`ha!T{Zsipc{evX zIXjili@7SKX2~r#1Eo@}_{=ZYf@6BE*(kbmUg1dWewc`H#MLcEEcv2eSqO@}1*3wa zMz!plrOHu=-h3+4${cb06=1o;Qw z#@VmNwpxE(pS%3(mD4-PD>v`$zIEp6pUV5o_Q@|#Tpyi1cR6$Z_%XP*D>RI<6NlfM z{rApqALhRuzn47z*mp0l|Kj4WcONM~wY=-b+PCP1Y;I!W;J$-#`qo%uyw`owxCIDF~Wjn~b=n@awr-Z==fX-beZ%g|MDL*Ysj zx`wV5WH7pugphS`T_2#7C^k*A^)y4FW)VcR?FO=Ri}DUuMlws0iY3N~q=F`p-4&%( zyouT@1GTT!BxdXWry{X|1&yN=bl3>Z9VCfhg2YM6P+*`b2OA`=qzKeRWUlF<5r;@9 zAS&KKb!MAkjcqlDIyi|PuX{dB#1if z(^6vzKH64{EDaDp+O-^I+e~96%Z=bj@{?U_u>81dxsy$sawSVA`n*-4Mrjl<-j~Kh z>=_~819Mw~4%>_*29dhZqwQf@WM{EZb5CE8?KIt~hN zK%@>+MVf{*Ovg+Sq4(wZ6lQN?aL(8n!0kf7tu&a_nP;f2G!yvSfP7#W;P(Wk;ZMzf Ddx>Wa literal 764 zcmY*Xy^hmB5T4mT+iN?vLlROzL50NWM0=D67Xbw)L7=wwl2u|6+tJ#&lc?!<3f_U9 zSD@e#=#Y2@#`c{EQ+Pcy-}lYz&U}6FI}`vAB50;ZeEv+l74pMV?=${j{!gB&UtH@y z{9*J(e8c#=)C5Lgz(IiY0h9us2~-Fk#lfc(1e68c%SuAuqlB1ryr}}$uQ z^ZScM*ZPS`^ANSBVwl!~cZ=n6WazrC%{R8PP0`H$cXKm5NH5;Y=G$H{Evjp3 zcbyxzIh0gR+p=i$9zwG@HspSG=QA1cShJB#cuKEN<6t7?r@7L|WhPG`g$ctW z7blDzxopBXK_SkRhRoAIi!fM-nf&L#8I0i+nCQ5{Nl4gCK7mMSsa1*-TC>4skN7xL q=s^}d?s5rEX@6A$(-7%kQ!VJ=(@-UX@=S9r#(0LT+fUN&*7q;K&XMK- diff --git a/build/StarcoinFramework/docs/Block.md b/build/StarcoinFramework/docs/Block.md index 7368a1bc..c6f5137f 100644 --- a/build/StarcoinFramework/docs/Block.md +++ b/build/StarcoinFramework/docs/Block.md @@ -8,19 +8,27 @@ Block module provide metadata for generated blocks. - [Resource `BlockMetadata`](#0x1_Block_BlockMetadata) - [Struct `NewBlockEvent`](#0x1_Block_NewBlockEvent) +- [Struct `Checkpoint`](#0x1_Block_Checkpoint) +- [Resource `Checkpoints`](#0x1_Block_Checkpoints) - [Constants](#@Constants_0) - [Function `initialize`](#0x1_Block_initialize) - [Function `get_current_block_number`](#0x1_Block_get_current_block_number) - [Function `get_parent_hash`](#0x1_Block_get_parent_hash) - [Function `get_current_author`](#0x1_Block_get_current_author) - [Function `process_block_metadata`](#0x1_Block_process_block_metadata) +- [Function `checkpoints_init`](#0x1_Block_checkpoints_init) +- [Function `checkpoint`](#0x1_Block_checkpoint) +- [Function `latest_state_root`](#0x1_Block_latest_state_root) +- [Function `update_state_root`](#0x1_Block_update_state_root) - [Module Specification](#@Module_Specification_1)
use 0x1::CoreAddresses;
 use 0x1::Errors;
 use 0x1::Event;
+use 0x1::Option;
 use 0x1::Timestamp;
+use 0x1::Vector;
 
@@ -121,6 +129,78 @@ Events emitted when new block generated. + + + + +## Struct `Checkpoint` + + + +
struct Checkpoint has copy, drop, store
+
+ + + +
+Fields + + +
+
+block_number: u64 +
+
+ +
+
+block_hash: vector<u8> +
+
+ +
+
+state_root: Option::Option<vector<u8>> +
+
+ +
+
+ + +
+ + + +## Resource `Checkpoints` + + + +
struct Checkpoints has key
+
+ + + +
+Fields + + +
+
+checkpoints: vector<Block::Checkpoint> +
+
+ +
+
+index: u64 +
+
+ +
+
+ +
@@ -128,6 +208,24 @@ Events emitted when new block generated. ## Constants + + + + +
const BLOCK_HEADER_LENGTH: u64 = 247;
+
+ + + + + + + +
const CHECKPOINT_LENGTHR: u64 = 60;
+
+ + + @@ -137,6 +235,24 @@ Events emitted when new block generated. + + + + +
const ERROR_NOT_BLOCK_HEADER: u64 = 19;
+
+ + + + + + + +
const ERROR_NO_HAVE_CHECKPOINT: u64 = 18;
+
+ + + ## Function `initialize` @@ -363,6 +479,206 @@ Call at block prologue + + + + +## Function `checkpoints_init` + + + +
public fun checkpoints_init(account: &signer)
+
+ + + +
+Implementation + + +
public fun checkpoints_init(account: &signer){
+    let i = 0;
+    let checkpoints = Vector::empty<Checkpoint>();
+    while( i < CHECKPOINT_LENGTHR){
+        Vector::push_back<Checkpoint>(&mut checkpoints,Checkpoint {
+            block_number: 0,
+            block_hash  : Vector::empty<u8>(),
+            state_root  : Option::none<vector<u8>>(),
+        });
+        i = i + 1;
+    };
+    move_to<Checkpoints>(
+        account,
+        Checkpoints {
+           checkpoints: checkpoints,
+           index: 0
+        });
+}
+
+ + + +
+ +
+Specification + + + +
aborts_if exists<Checkpoints>(CoreAddresses::GENESIS_ADDRESS());
+
+ + + +
+ + + +## Function `checkpoint` + + + +
public fun checkpoint(account: &signer)
+
+ + + +
+Implementation + + +
public fun checkpoint(account: &signer) acquires BlockMetadata, Checkpoints{
+    CoreAddresses::assert_genesis_address(account);
+    let parent_block_number = get_current_block_number() - 1;
+    let parent_block_hash   = get_parent_hash();
+
+    let checkpoints = borrow_global_mut<Checkpoints>(CoreAddresses::GENESIS_ADDRESS());
+    checkpoints.index =  if( checkpoints.index + 1 >= CHECKPOINT_LENGTHR ){
+        0
+    }else{
+        checkpoints.index + 1
+    };
+
+    let checkpoint = Vector::borrow_mut<Checkpoint>(&mut checkpoints.checkpoints , checkpoints.index);
+    checkpoint.block_number = parent_block_number;
+    checkpoint.block_hash   = parent_block_hash;
+    checkpoint.state_root   = Option::none<vector<u8>>();
+}
+
+ + + +
+ + + +## Function `latest_state_root` + + + +
public fun latest_state_root(): (u64, vector<u8>)
+
+ + + +
+Implementation + + +
public fun latest_state_root():(u64,vector<u8>) acquires  Checkpoints{
+    let checkpoints = borrow_global<Checkpoints>(CoreAddresses::GENESIS_ADDRESS());
+    let len = Vector::length<Checkpoint>(&checkpoints.checkpoints);
+    let i = if(checkpoints.index == 0){
+        len
+    }else{
+        checkpoints.index - 1
+    };
+    while( i != checkpoints.index){
+        if( Option::is_some<vector<u8>>(&Vector::borrow(&checkpoints.checkpoints, i).state_root)) {
+            return (Vector::borrow(&checkpoints.checkpoints, i).block_number, *&Vector::borrow(&checkpoints.checkpoints, i).block_hash)
+        };
+
+        i = if( i == 0 ){
+            len
+        }else{
+            i - 1
+        };
+    };
+    abort Errors::invalid_state(ERROR_NO_HAVE_CHECKPOINT)
+}
+
+ + + +
+ + + +## Function `update_state_root` + + + +
public fun update_state_root(account: &signer, header: vector<u8>)
+
+ + + +
+Implementation + + +
public fun update_state_root(account: &signer, header:vector<u8>) acquires  Checkpoints{
+    CoreAddresses::assert_genesis_address(account);
+    header = x"20b82a2c11f2df62bf87c2933d0281e5fe47ea94d5f0049eec1485b682df29529abf17ac7d79010000000000000000000000000000000000000000000000000001002043609d52fdf8e4a253c62dfe127d33c77e1fb4afdefb306d46ec42e21b9103ae20414343554d554c41544f525f504c414345484f4c4445525f48415348000000002061125a3ab755b993d72accfea741f8537104db8e022098154f3a66d5c23e828d00000000000000000000000000000000000000000000000000000000000000000000000000b1ec37207564db97ee270a6c1f2f73fbf517dc0777a6119b7460b7eae2890d1ce504537b010000000000000000";
+
+    assert!(Vector::length<u8>(&header) == BLOCK_HEADER_LENGTH , Errors::invalid_argument(ERROR_NOT_BLOCK_HEADER));
+    let i = 1 ;
+    let block_hash = Vector::empty<u8>();
+    while(i < 33){
+        Vector::push_back<u8>(&mut block_hash , *Vector::borrow<u8>(&header , i));
+        i = i + 1;
+    };
+    i = 41 ;
+    let number_vec = Vector::empty<u8>();
+    while(i < 49){
+        Vector::push_back<u8>(&mut number_vec , *Vector::borrow<u8>(&header , i));
+        i = i + 1;
+    };
+    let state_root = Vector::empty<u8>();
+    i = 133;
+    while(i < 165){
+        Vector::push_back<u8>(&mut state_root , *Vector::borrow<u8>(&header , i));
+        i = i + 1;
+    };
+
+    let checkpoints = borrow_global_mut<Checkpoints>(CoreAddresses::GENESIS_ADDRESS());
+    let len = Vector::length<Checkpoint>(&checkpoints.checkpoints);
+    let i = if(checkpoints.index == 0){
+        len
+    }else{
+        checkpoints.index - 1
+    };
+    while( i != checkpoints.index){
+        if( &Vector::borrow(&mut checkpoints.checkpoints, i).block_hash == &block_hash ) {
+            Vector::borrow_mut(&mut checkpoints.checkpoints, i).block_number = 1;
+            let stro = &mut Vector::borrow_mut(&mut checkpoints.checkpoints, i).state_root;
+
+            *Option::borrow_mut<vector<u8>>( stro) = state_root;
+            return
+        };
+
+        i = if( i == 0 ){
+            len
+        }else{
+            i - 1
+        };
+    };
+    abort Errors::invalid_state(ERROR_NO_HAVE_CHECKPOINT)
+}
+
+ + +
diff --git a/build/StarcoinFramework/source_maps/Block.mvsm b/build/StarcoinFramework/source_maps/Block.mvsm index eada550c3273fb9784b22f392661014db4b43f12..ee4c02d9971ec43240931c63b51f095308104dc6 100644 GIT binary patch literal 17081 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 literal 3875 zcmb8xOKeP09LMo9?M$m$Wzc%mTT6*V2(chUn>L0HDN3r6>2wU!=*+Y;cOnEygT(t0 zi9}ODf(@|{gpCLl3n4Zh3ke&cHtMyJ2;UPVcE4ki@9uNYx%b@rPkZ3prM9zo&rID^ z*3+2lNHp|^E^Jx<=ydwd=AQ1xSpzRyj4`d`qkn(CKut$Fwl&X~17d~qTzb`B9#FC$ z^^ugTWY^gaJEt(7gS&{i?BKp&^7HLks5|UJ?Iz<_@-*r!DR&if-N8M?JaurdF>fiL zxBgjVOmOh;m+!E0Gju!YQ(A-yQJ#EyE4#^I(d~uCoFMyixZ7vYZ=~<`7U}`%yS4HM zInWz}jOio$^Xpd;}# zC?MqtR4)}sc@y=V3Z)!CeWF29))X+kR3v2?YB>#-GQ`f!$YLpnAxBY(lp9#Dg&dB) zx|mTQQ{ej5EEK$&3TD*Mt$V%&@>f!?a6r7izYkO6+6&->;}11tRtRP z{2=tW<*8hw+a5aJ8P-_t=kiANhvw zp$16L>wNZZB0aAoQB|bp_3tz3c}=ihiuAl@QTs^GtCfdIPvJ4tane(G1a*}36sA#K zq^GbI)kj0++q{ChN5iB%iMmfgDgW+1T*?ouH$Wq#e1dvIBc0?sWSNt+yO&E@#$UV& z8YSg-)+<4dc9J8IW1OVjeXNxAs79)gvI@0;#yQDaDC)dPS8|mX`7rQ+$GQRS, + //State root of the block + state_root: Option::Option>, + } + + // + struct Checkpoints has key{ + //all checkpoints + checkpoints: vector, + index:u64, + } + + const EBLOCK_NUMBER_MISMATCH : u64 = 17; + const ERROR_NO_HAVE_CHECKPOINT: u64 = 18; + const ERROR_NOT_BLOCK_HEADER : u64 = 19; + const CHECKPOINT_LENGTHR : u64 = 60; + const BLOCK_HEADER_LENGTH : u64 = 247; /// This can only be invoked by the GENESIS_ACCOUNT at genesis public fun initialize(account: &signer, parent_hash: vector) { @@ -116,5 +139,118 @@ module Block { spec schema AbortsIfBlockMetadataNotExist { aborts_if !exists(CoreAddresses::GENESIS_ADDRESS()); } + + public fun checkpoints_init(account: &signer){ + let i = 0; + let checkpoints = Vector::empty(); + while( i < CHECKPOINT_LENGTHR){ + Vector::push_back(&mut checkpoints,Checkpoint { + block_number: 0, + block_hash : Vector::empty(), + state_root : Option::none>(), + }); + i = i + 1; + }; + move_to( + account, + Checkpoints { + checkpoints: checkpoints, + index: 0 + }); + } + + spec checkpoints_init { + aborts_if exists(CoreAddresses::GENESIS_ADDRESS()); + } + + public fun checkpoint(account: &signer) acquires BlockMetadata, Checkpoints{ + CoreAddresses::assert_genesis_address(account); + let parent_block_number = get_current_block_number() - 1; + let parent_block_hash = get_parent_hash(); + + let checkpoints = borrow_global_mut(CoreAddresses::GENESIS_ADDRESS()); + checkpoints.index = if( checkpoints.index + 1 >= CHECKPOINT_LENGTHR ){ + 0 + }else{ + checkpoints.index + 1 + }; + + let checkpoint = Vector::borrow_mut(&mut checkpoints.checkpoints , checkpoints.index); + checkpoint.block_number = parent_block_number; + checkpoint.block_hash = parent_block_hash; + checkpoint.state_root = Option::none>(); + } + + public fun latest_state_root():(u64,vector) acquires Checkpoints{ + let checkpoints = borrow_global(CoreAddresses::GENESIS_ADDRESS()); + let len = Vector::length(&checkpoints.checkpoints); + let i = if(checkpoints.index == 0){ + len + }else{ + checkpoints.index - 1 + }; + while( i != checkpoints.index){ + if( Option::is_some>(&Vector::borrow(&checkpoints.checkpoints, i).state_root)) { + return (Vector::borrow(&checkpoints.checkpoints, i).block_number, *&Vector::borrow(&checkpoints.checkpoints, i).block_hash) + }; + + i = if( i == 0 ){ + len + }else{ + i - 1 + }; + }; + abort Errors::invalid_state(ERROR_NO_HAVE_CHECKPOINT) + } + + + public fun update_state_root(account: &signer, header:vector) acquires Checkpoints{ + CoreAddresses::assert_genesis_address(account); + header = x"20b82a2c11f2df62bf87c2933d0281e5fe47ea94d5f0049eec1485b682df29529abf17ac7d79010000000000000000000000000000000000000000000000000001002043609d52fdf8e4a253c62dfe127d33c77e1fb4afdefb306d46ec42e21b9103ae20414343554d554c41544f525f504c414345484f4c4445525f48415348000000002061125a3ab755b993d72accfea741f8537104db8e022098154f3a66d5c23e828d00000000000000000000000000000000000000000000000000000000000000000000000000b1ec37207564db97ee270a6c1f2f73fbf517dc0777a6119b7460b7eae2890d1ce504537b010000000000000000"; + + assert!(Vector::length(&header) == BLOCK_HEADER_LENGTH , Errors::invalid_argument(ERROR_NOT_BLOCK_HEADER)); + let i = 1 ; + let block_hash = Vector::empty(); + while(i < 33){ + Vector::push_back(&mut block_hash , *Vector::borrow(&header , i)); + i = i + 1; + }; + i = 41 ; + let number_vec = Vector::empty(); + while(i < 49){ + Vector::push_back(&mut number_vec , *Vector::borrow(&header , i)); + i = i + 1; + }; + let state_root = Vector::empty(); + i = 133; + while(i < 165){ + Vector::push_back(&mut state_root , *Vector::borrow(&header , i)); + i = i + 1; + }; + + let checkpoints = borrow_global_mut(CoreAddresses::GENESIS_ADDRESS()); + let len = Vector::length(&checkpoints.checkpoints); + let i = if(checkpoints.index == 0){ + len + }else{ + checkpoints.index - 1 + }; + while( i != checkpoints.index){ + if( &Vector::borrow(&mut checkpoints.checkpoints, i).block_hash == &block_hash ) { + Vector::borrow_mut(&mut checkpoints.checkpoints, i).block_number = 1; + let stro = &mut Vector::borrow_mut(&mut checkpoints.checkpoints, i).state_root; + + *Option::borrow_mut>( stro) = state_root; + return + }; + + i = if( i == 0 ){ + len + }else{ + i - 1 + }; + }; + abort Errors::invalid_state(ERROR_NO_HAVE_CHECKPOINT) + } } } \ No newline at end of file From 8e60a0509e6a3efdb47bfa55b56c51be1ed87d42 Mon Sep 17 00:00:00 2001 From: WGB5445 Date: Thu, 23 Jun 2022 09:21:09 +0800 Subject: [PATCH 02/14] optimization loop (#39) --- build/StarcoinFramework/BuildInfo.yaml | 2 +- .../bytecode_modules/Block.mv | Bin 2327 -> 2046 bytes build/StarcoinFramework/docs/Block.md | 54 ++++++++---------- .../StarcoinFramework/source_maps/Block.mvsm | Bin 17081 -> 17547 bytes integration-tests/block/block_checkpoint.move | 5 ++ sources/Block.move | 54 ++++++++---------- 6 files changed, 52 insertions(+), 63 deletions(-) create mode 100644 integration-tests/block/block_checkpoint.move diff --git a/build/StarcoinFramework/BuildInfo.yaml b/build/StarcoinFramework/BuildInfo.yaml index 8a0ab17a..bf26d29b 100644 --- a/build/StarcoinFramework/BuildInfo.yaml +++ b/build/StarcoinFramework/BuildInfo.yaml @@ -258,7 +258,7 @@ compiled_package_info: ? address: "0x00000000000000000000000000000001" name: YieldFarmingV2 : StarcoinFramework - source_digest: BF6C3B0DC4B1F8B86C7E2EB55B9CF77AFEB1CF8BA191369FF98931C0810B07BC + source_digest: EAB7A24EE64BCAB1F16279AAA66766062B05BD0B30EDF44BDE5E1027951498E3 build_flags: dev_mode: false test_mode: false diff --git a/build/StarcoinFramework/bytecode_modules/Block.mv b/build/StarcoinFramework/bytecode_modules/Block.mv index f5618084b59aaea6ee11f5fedfe9a26693238668..27789c5d25f5a3e603fa8e9e865ad0d3c66c5155 100644 GIT binary patch delta 613 zcmZ8eJx?1!5Z&3m-PxO+yYnUI0|&{GabbZ)5XM0p@gHa?+@z1v(jf|0sc52D2#E$7 zONas~@{h?+pyMZ??Aga*vCVwEd2eU;U4MAVet+7!1$>f^k-fr}nd6B5;g~P&Jtm9n z@6l(NO<>qgkt`^Z60KC>L?o45+`ze9wDeDye#>bnS&(RfH!MRG1p@)C(z34#J+9EI z)$!Phyj5MjzuuCCTN_Y?BrqUWr)1F13BV{X1_%N~XXr#8=d>%>&}G~oqBM|tl)!&Inbko-!rEbTr%qI zQ9alMcIGu_OV-%B>Z@aYnsNh@EyFIX$sQiqO-{*?{z~b7$u6+o*0cI3ye2chYMrHM zHg8nF>mNxrd&bS_Bz%wzA7qxkP>8{om||L`!Iuj?2QnE{y$&muPJVGJIHc03r!GO? h0l9HA;YB9fE_1JpP)9y#ON!U_i}jf^l~;e_jsNy&Fl+z- delta 856 zcmZ{gO-NKx6vywmAMeh)_r7tS%rI7lZ!9piPf~gb2GeLwU??*h)kcjF7qy7Kkgy>^ zs)b>UVA#hZ`hW;UimXk7i(1rHBCG_-jSLY%WJp7IMt$nSyE*rs^E>}@&p%r*SlGX@ z_!0079;Ut_9x$Hq5iCBNRjNX|N242_4McXt6=?*MXQZTA!Z z=D$BozT1&4?B4tSYRSuyZwtH69?Be?*>sx>JJDFIQeQI z)_61-&j~y2g(qvqTHd5TRea1ojm{^}(WzV5xf5!v>6n~2(9^fx^fmd>%s%Jh>8ZgV zW#UZ9uJa4O!(aI2C-&V7ZDVsYH?87Xn!K{I$O}L1gwzpRRAQxl34m)Tsv`;-%c>FL zXSSdUvG8JHxjU?oM2ZOQsOC$F!|HMhg19_DT_4%Ts=YT3%HEByOh&h&#ZsJ9y z0i%2=o5!Ta_IOx1tFmMs+o~m$(d(fad+cGgEN-bBmU3-TffW}#@0QSUja$dq2_Y0_ zt&4?~jj+VZ6lOkMN;=sf2wnifR8$d3c1o&!BYq=7F0mWnEw;$Gr~rp#9zU+{R9R9< v%e6vSn5(?(1J)0EI%5M`*wY9rCYdr>yX3&B9W29u5g-5^u-*_5K@|N5elmd? diff --git a/build/StarcoinFramework/docs/Block.md b/build/StarcoinFramework/docs/Block.md index c6f5137f..a999e203 100644 --- a/build/StarcoinFramework/docs/Block.md +++ b/build/StarcoinFramework/docs/Block.md @@ -588,21 +588,13 @@ Call at block prologue
public fun latest_state_root():(u64,vector<u8>) acquires  Checkpoints{
     let checkpoints = borrow_global<Checkpoints>(CoreAddresses::GENESIS_ADDRESS());
     let len = Vector::length<Checkpoint>(&checkpoints.checkpoints);
-    let i = if(checkpoints.index == 0){
-        len
-    }else{
-        checkpoints.index - 1
-    };
-    while( i != checkpoints.index){
-        if( Option::is_some<vector<u8>>(&Vector::borrow(&checkpoints.checkpoints, i).state_root)) {
-            return (Vector::borrow(&checkpoints.checkpoints, i).block_number, *&Vector::borrow(&checkpoints.checkpoints, i).block_hash)
+    let i = checkpoints.index ;
+    while( i <  len + checkpoints.index){
+        if( Option::is_some<vector<u8>>(&Vector::borrow(&checkpoints.checkpoints, i % len).state_root)) {
+            return (Vector::borrow(&checkpoints.checkpoints, i % len).block_number, *&Vector::borrow(&checkpoints.checkpoints, i % len).block_hash)
         };
 
-        i = if( i == 0 ){
-            len
-        }else{
-            i - 1
-        };
+        i = i + 1;
     };
     abort Errors::invalid_state(ERROR_NO_HAVE_CHECKPOINT)
 }
@@ -629,7 +621,7 @@ Call at block prologue
 
 
public fun update_state_root(account: &signer, header:vector<u8>) acquires  Checkpoints{
     CoreAddresses::assert_genesis_address(account);
-    header = x"20b82a2c11f2df62bf87c2933d0281e5fe47ea94d5f0049eec1485b682df29529abf17ac7d79010000000000000000000000000000000000000000000000000001002043609d52fdf8e4a253c62dfe127d33c77e1fb4afdefb306d46ec42e21b9103ae20414343554d554c41544f525f504c414345484f4c4445525f48415348000000002061125a3ab755b993d72accfea741f8537104db8e022098154f3a66d5c23e828d00000000000000000000000000000000000000000000000000000000000000000000000000b1ec37207564db97ee270a6c1f2f73fbf517dc0777a6119b7460b7eae2890d1ce504537b010000000000000000";
+    // header = x"20b82a2c11f2df62bf87c2933d0281e5fe47ea94d5f0049eec1485b682df29529abf17ac7d79010000000000000000000000000000000000000000000000000001002043609d52fdf8e4a253c62dfe127d33c77e1fb4afdefb306d46ec42e21b9103ae20414343554d554c41544f525f504c414345484f4c4445525f48415348000000002061125a3ab755b993d72accfea741f8537104db8e022098154f3a66d5c23e828d00000000000000000000000000000000000000000000000000000000000000000000000000b1ec37207564db97ee270a6c1f2f73fbf517dc0777a6119b7460b7eae2890d1ce504537b010000000000000000";
 
     assert!(Vector::length<u8>(&header) == BLOCK_HEADER_LENGTH , Errors::invalid_argument(ERROR_NOT_BLOCK_HEADER));
     let i = 1 ;
@@ -644,6 +636,16 @@ Call at block prologue
         Vector::push_back<u8>(&mut number_vec , *Vector::borrow<u8>(&header , i));
         i = i + 1;
     };
+    let number: u128 = 0;
+    let offset  = 0;
+    let i = 0;
+    while (i < 8) {
+        let byte = *Vector::borrow(&number_vec, offset + i);
+        let s = (i as u8) * 8;
+        number = number + ((byte as u128) << s);
+        i = i + 1;
+    };
+
     let state_root = Vector::empty<u8>();
     i = 133;
     while(i < 165){
@@ -653,26 +655,16 @@ Call at block prologue
 
     let checkpoints = borrow_global_mut<Checkpoints>(CoreAddresses::GENESIS_ADDRESS());
     let len = Vector::length<Checkpoint>(&checkpoints.checkpoints);
-    let i = if(checkpoints.index == 0){
-        len
-    }else{
-        checkpoints.index - 1
-    };
-    while( i != checkpoints.index){
-        if( &Vector::borrow(&mut checkpoints.checkpoints, i).block_hash == &block_hash ) {
-            Vector::borrow_mut(&mut checkpoints.checkpoints, i).block_number = 1;
-            let stro = &mut Vector::borrow_mut(&mut checkpoints.checkpoints, i).state_root;
-
-            *Option::borrow_mut<vector<u8>>( stro) = state_root;
+    let i = checkpoints.index ;
+    while( i <  len + checkpoints.index){
+        if( &Vector::borrow(&mut checkpoints.checkpoints, i % len).block_hash == &block_hash ) {
+            Vector::borrow_mut(&mut checkpoints.checkpoints, i % len).block_number = (number as u64 );
+            *Option::borrow_mut<vector<u8>>( &mut Vector::borrow_mut(&mut checkpoints.checkpoints, i % len).state_root) = state_root;
             return
         };
-
-        i = if( i == 0 ){
-            len
-        }else{
-            i - 1
-        };
+        i = i + 1 ;
     };
+
     abort Errors::invalid_state(ERROR_NO_HAVE_CHECKPOINT)
 }
 
diff --git a/build/StarcoinFramework/source_maps/Block.mvsm b/build/StarcoinFramework/source_maps/Block.mvsm index ee4c02d9971ec43240931c63b51f095308104dc6..6335792c7e3f68142b19e97e62266b4aa14ffd9b 100644 GIT binary patch literal 17547 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 diff --git a/integration-tests/block/block_checkpoint.move b/integration-tests/block/block_checkpoint.move new file mode 100644 index 00000000..c2220888 --- /dev/null +++ b/integration-tests/block/block_checkpoint.move @@ -0,0 +1,5 @@ +//# init -n dev + +//# faucet --addr alice + +//# run --signers alice diff --git a/sources/Block.move b/sources/Block.move index 7aafb018..494e5140 100644 --- a/sources/Block.move +++ b/sources/Block.move @@ -184,21 +184,13 @@ module Block { public fun latest_state_root():(u64,vector) acquires Checkpoints{ let checkpoints = borrow_global(CoreAddresses::GENESIS_ADDRESS()); let len = Vector::length(&checkpoints.checkpoints); - let i = if(checkpoints.index == 0){ - len - }else{ - checkpoints.index - 1 - }; - while( i != checkpoints.index){ - if( Option::is_some>(&Vector::borrow(&checkpoints.checkpoints, i).state_root)) { - return (Vector::borrow(&checkpoints.checkpoints, i).block_number, *&Vector::borrow(&checkpoints.checkpoints, i).block_hash) + let i = checkpoints.index ; + while( i < len + checkpoints.index){ + if( Option::is_some>(&Vector::borrow(&checkpoints.checkpoints, i % len).state_root)) { + return (Vector::borrow(&checkpoints.checkpoints, i % len).block_number, *&Vector::borrow(&checkpoints.checkpoints, i % len).block_hash) }; - i = if( i == 0 ){ - len - }else{ - i - 1 - }; + i = i + 1; }; abort Errors::invalid_state(ERROR_NO_HAVE_CHECKPOINT) } @@ -206,7 +198,7 @@ module Block { public fun update_state_root(account: &signer, header:vector) acquires Checkpoints{ CoreAddresses::assert_genesis_address(account); - header = x"20b82a2c11f2df62bf87c2933d0281e5fe47ea94d5f0049eec1485b682df29529abf17ac7d79010000000000000000000000000000000000000000000000000001002043609d52fdf8e4a253c62dfe127d33c77e1fb4afdefb306d46ec42e21b9103ae20414343554d554c41544f525f504c414345484f4c4445525f48415348000000002061125a3ab755b993d72accfea741f8537104db8e022098154f3a66d5c23e828d00000000000000000000000000000000000000000000000000000000000000000000000000b1ec37207564db97ee270a6c1f2f73fbf517dc0777a6119b7460b7eae2890d1ce504537b010000000000000000"; + // header = x"20b82a2c11f2df62bf87c2933d0281e5fe47ea94d5f0049eec1485b682df29529abf17ac7d79010000000000000000000000000000000000000000000000000001002043609d52fdf8e4a253c62dfe127d33c77e1fb4afdefb306d46ec42e21b9103ae20414343554d554c41544f525f504c414345484f4c4445525f48415348000000002061125a3ab755b993d72accfea741f8537104db8e022098154f3a66d5c23e828d00000000000000000000000000000000000000000000000000000000000000000000000000b1ec37207564db97ee270a6c1f2f73fbf517dc0777a6119b7460b7eae2890d1ce504537b010000000000000000"; assert!(Vector::length(&header) == BLOCK_HEADER_LENGTH , Errors::invalid_argument(ERROR_NOT_BLOCK_HEADER)); let i = 1 ; @@ -221,6 +213,16 @@ module Block { Vector::push_back(&mut number_vec , *Vector::borrow(&header , i)); i = i + 1; }; + let number: u128 = 0; + let offset = 0; + let i = 0; + while (i < 8) { + let byte = *Vector::borrow(&number_vec, offset + i); + let s = (i as u8) * 8; + number = number + ((byte as u128) << s); + i = i + 1; + }; + let state_root = Vector::empty(); i = 133; while(i < 165){ @@ -230,26 +232,16 @@ module Block { let checkpoints = borrow_global_mut(CoreAddresses::GENESIS_ADDRESS()); let len = Vector::length(&checkpoints.checkpoints); - let i = if(checkpoints.index == 0){ - len - }else{ - checkpoints.index - 1 - }; - while( i != checkpoints.index){ - if( &Vector::borrow(&mut checkpoints.checkpoints, i).block_hash == &block_hash ) { - Vector::borrow_mut(&mut checkpoints.checkpoints, i).block_number = 1; - let stro = &mut Vector::borrow_mut(&mut checkpoints.checkpoints, i).state_root; - - *Option::borrow_mut>( stro) = state_root; + let i = checkpoints.index ; + while( i < len + checkpoints.index){ + if( &Vector::borrow(&mut checkpoints.checkpoints, i % len).block_hash == &block_hash ) { + Vector::borrow_mut(&mut checkpoints.checkpoints, i % len).block_number = (number as u64 ); + *Option::borrow_mut>( &mut Vector::borrow_mut(&mut checkpoints.checkpoints, i % len).state_root) = state_root; return }; - - i = if( i == 0 ){ - len - }else{ - i - 1 - }; + i = i + 1 ; }; + abort Errors::invalid_state(ERROR_NO_HAVE_CHECKPOINT) } } From 414b726a7016803d14a64def53c2d82a7501bebb Mon Sep 17 00:00:00 2001 From: WGB5445 Date: Wed, 22 Jun 2022 23:19:26 +0800 Subject: [PATCH 03/14] add checkpoints --- build/StarcoinFramework/BuildInfo.yaml | 2 +- .../bytecode_modules/Block.mv | Bin 764 -> 2327 bytes build/StarcoinFramework/docs/Block.md | 316 ++++++++++++++++++ .../StarcoinFramework/source_maps/Block.mvsm | Bin 3875 -> 17081 bytes sources/Block.move | 138 +++++++- 5 files changed, 454 insertions(+), 2 deletions(-) diff --git a/build/StarcoinFramework/BuildInfo.yaml b/build/StarcoinFramework/BuildInfo.yaml index 013c40fd..e5b06807 100644 --- a/build/StarcoinFramework/BuildInfo.yaml +++ b/build/StarcoinFramework/BuildInfo.yaml @@ -261,7 +261,7 @@ compiled_package_info: ? address: "0x00000000000000000000000000000001" name: YieldFarmingV2 : StarcoinFramework - source_digest: F39F5364AE53D568F6DE697F20438F49769B5D07FDB6D7231ED2F8262053CE66 + source_digest: 46D1985E82F1F2811309581FF12BAE4FB1128B8942EFAF866FE348B9D44FBC57 build_flags: dev_mode: false test_mode: false diff --git a/build/StarcoinFramework/bytecode_modules/Block.mv b/build/StarcoinFramework/bytecode_modules/Block.mv index c6049e5ec0a75ce879823f6e8de04fdde1cef76d..f5618084b59aaea6ee11f5fedfe9a26693238668 100644 GIT binary patch literal 2327 zcmZ`*YiJx*6uytScV_O~+1=U9?)H(|OWZ&bDu)0hxDB3wS!9PHAdlu#hB}2sl zSmG?`;UUoD!vZKN8?eNPZ^SX^A5373*e2-c2ufnkH`^4pM^kA~9LuZ%LR%LzjxFoAH>Quq-{P4=8ENiYMc-cm`+!GlnS^gm4KR6@-TqMk!@f)v&4& zK`7QRQH72uR&|68hIK@Q7TUp*L?W1I6dMYNz?f@JAUGTVZP#M8aKxOb*8SZ4eBEy}{05(@*Q@mgn>y-O0zOjttClK((VI5R{r*y<7eR?aS1Hk(Hr!IB z6eJh?z%4ZEb#Uo=&7fGVuj=2L3u(HQW_ix9$3sEQi&TqVqbNdvlDAlT(YF@80BE|v zH1OSewHl;r^=bi*<+c#YZNgTw2E6?~Mcx88`ha!T{Zsipc{evX zIXjili@7SKX2~r#1Eo@}_{=ZYf@6BE*(kbmUg1dWewc`H#MLcEEcv2eSqO@}1*3wa zMz!plrOHu=-h3+4${cb06=1o;Qw z#@VmNwpxE(pS%3(mD4-PD>v`$zIEp6pUV5o_Q@|#Tpyi1cR6$Z_%XP*D>RI<6NlfM z{rApqALhRuzn47z*mp0l|Kj4WcONM~wY=-b+PCP1Y;I!W;J$-#`qo%uyw`owxCIDF~Wjn~b=n@awr-Z==fX-beZ%g|MDL*Ysj zx`wV5WH7pugphS`T_2#7C^k*A^)y4FW)VcR?FO=Ri}DUuMlws0iY3N~q=F`p-4&%( zyouT@1GTT!BxdXWry{X|1&yN=bl3>Z9VCfhg2YM6P+*`b2OA`=qzKeRWUlF<5r;@9 zAS&KKb!MAkjcqlDIyi|PuX{dB#1if z(^6vzKH64{EDaDp+O-^I+e~96%Z=bj@{?U_u>81dxsy$sawSVA`n*-4Mrjl<-j~Kh z>=_~819Mw~4%>_*29dhZqwQf@WM{EZb5CE8?KIt~hN zK%@>+MVf{*Ovg+Sq4(wZ6lQN?aL(8n!0kf7tu&a_nP;f2G!yvSfP7#W;P(Wk;ZMzf Ddx>Wa literal 764 zcmY*Xy^hmB5T4mT+iN?vLlROzL50NWM0=D67Xbw)L7=wwl2u|6+tJ#&lc?!<3f_U9 zSD@e#=#Y2@#`c{EQ+Pcy-}lYz&U}6FI}`vAB50;ZeEv+l74pMV?=${j{!gB&UtH@y z{9*J(e8c#=)C5Lgz(IiY0h9us2~-Fk#lfc(1e68c%SuAuqlB1ryr}}$uQ z^ZScM*ZPS`^ANSBVwl!~cZ=n6WazrC%{R8PP0`H$cXKm5NH5;Y=G$H{Evjp3 zcbyxzIh0gR+p=i$9zwG@HspSG=QA1cShJB#cuKEN<6t7?r@7L|WhPG`g$ctW z7blDzxopBXK_SkRhRoAIi!fM-nf&L#8I0i+nCQ5{Nl4gCK7mMSsa1*-TC>4skN7xL q=s^}d?s5rEX@6A$(-7%kQ!VJ=(@-UX@=S9r#(0LT+fUN&*7q;K&XMK- diff --git a/build/StarcoinFramework/docs/Block.md b/build/StarcoinFramework/docs/Block.md index 7368a1bc..c6f5137f 100644 --- a/build/StarcoinFramework/docs/Block.md +++ b/build/StarcoinFramework/docs/Block.md @@ -8,19 +8,27 @@ Block module provide metadata for generated blocks. - [Resource `BlockMetadata`](#0x1_Block_BlockMetadata) - [Struct `NewBlockEvent`](#0x1_Block_NewBlockEvent) +- [Struct `Checkpoint`](#0x1_Block_Checkpoint) +- [Resource `Checkpoints`](#0x1_Block_Checkpoints) - [Constants](#@Constants_0) - [Function `initialize`](#0x1_Block_initialize) - [Function `get_current_block_number`](#0x1_Block_get_current_block_number) - [Function `get_parent_hash`](#0x1_Block_get_parent_hash) - [Function `get_current_author`](#0x1_Block_get_current_author) - [Function `process_block_metadata`](#0x1_Block_process_block_metadata) +- [Function `checkpoints_init`](#0x1_Block_checkpoints_init) +- [Function `checkpoint`](#0x1_Block_checkpoint) +- [Function `latest_state_root`](#0x1_Block_latest_state_root) +- [Function `update_state_root`](#0x1_Block_update_state_root) - [Module Specification](#@Module_Specification_1)
use 0x1::CoreAddresses;
 use 0x1::Errors;
 use 0x1::Event;
+use 0x1::Option;
 use 0x1::Timestamp;
+use 0x1::Vector;
 
@@ -121,6 +129,78 @@ Events emitted when new block generated. + + + + +## Struct `Checkpoint` + + + +
struct Checkpoint has copy, drop, store
+
+ + + +
+Fields + + +
+
+block_number: u64 +
+
+ +
+
+block_hash: vector<u8> +
+
+ +
+
+state_root: Option::Option<vector<u8>> +
+
+ +
+
+ + +
+ + + +## Resource `Checkpoints` + + + +
struct Checkpoints has key
+
+ + + +
+Fields + + +
+
+checkpoints: vector<Block::Checkpoint> +
+
+ +
+
+index: u64 +
+
+ +
+
+ +
@@ -128,6 +208,24 @@ Events emitted when new block generated. ## Constants + + + + +
const BLOCK_HEADER_LENGTH: u64 = 247;
+
+ + + + + + + +
const CHECKPOINT_LENGTHR: u64 = 60;
+
+ + + @@ -137,6 +235,24 @@ Events emitted when new block generated. + + + + +
const ERROR_NOT_BLOCK_HEADER: u64 = 19;
+
+ + + + + + + +
const ERROR_NO_HAVE_CHECKPOINT: u64 = 18;
+
+ + + ## Function `initialize` @@ -363,6 +479,206 @@ Call at block prologue + + + + +## Function `checkpoints_init` + + + +
public fun checkpoints_init(account: &signer)
+
+ + + +
+Implementation + + +
public fun checkpoints_init(account: &signer){
+    let i = 0;
+    let checkpoints = Vector::empty<Checkpoint>();
+    while( i < CHECKPOINT_LENGTHR){
+        Vector::push_back<Checkpoint>(&mut checkpoints,Checkpoint {
+            block_number: 0,
+            block_hash  : Vector::empty<u8>(),
+            state_root  : Option::none<vector<u8>>(),
+        });
+        i = i + 1;
+    };
+    move_to<Checkpoints>(
+        account,
+        Checkpoints {
+           checkpoints: checkpoints,
+           index: 0
+        });
+}
+
+ + + +
+ +
+Specification + + + +
aborts_if exists<Checkpoints>(CoreAddresses::GENESIS_ADDRESS());
+
+ + + +
+ + + +## Function `checkpoint` + + + +
public fun checkpoint(account: &signer)
+
+ + + +
+Implementation + + +
public fun checkpoint(account: &signer) acquires BlockMetadata, Checkpoints{
+    CoreAddresses::assert_genesis_address(account);
+    let parent_block_number = get_current_block_number() - 1;
+    let parent_block_hash   = get_parent_hash();
+
+    let checkpoints = borrow_global_mut<Checkpoints>(CoreAddresses::GENESIS_ADDRESS());
+    checkpoints.index =  if( checkpoints.index + 1 >= CHECKPOINT_LENGTHR ){
+        0
+    }else{
+        checkpoints.index + 1
+    };
+
+    let checkpoint = Vector::borrow_mut<Checkpoint>(&mut checkpoints.checkpoints , checkpoints.index);
+    checkpoint.block_number = parent_block_number;
+    checkpoint.block_hash   = parent_block_hash;
+    checkpoint.state_root   = Option::none<vector<u8>>();
+}
+
+ + + +
+ + + +## Function `latest_state_root` + + + +
public fun latest_state_root(): (u64, vector<u8>)
+
+ + + +
+Implementation + + +
public fun latest_state_root():(u64,vector<u8>) acquires  Checkpoints{
+    let checkpoints = borrow_global<Checkpoints>(CoreAddresses::GENESIS_ADDRESS());
+    let len = Vector::length<Checkpoint>(&checkpoints.checkpoints);
+    let i = if(checkpoints.index == 0){
+        len
+    }else{
+        checkpoints.index - 1
+    };
+    while( i != checkpoints.index){
+        if( Option::is_some<vector<u8>>(&Vector::borrow(&checkpoints.checkpoints, i).state_root)) {
+            return (Vector::borrow(&checkpoints.checkpoints, i).block_number, *&Vector::borrow(&checkpoints.checkpoints, i).block_hash)
+        };
+
+        i = if( i == 0 ){
+            len
+        }else{
+            i - 1
+        };
+    };
+    abort Errors::invalid_state(ERROR_NO_HAVE_CHECKPOINT)
+}
+
+ + + +
+ + + +## Function `update_state_root` + + + +
public fun update_state_root(account: &signer, header: vector<u8>)
+
+ + + +
+Implementation + + +
public fun update_state_root(account: &signer, header:vector<u8>) acquires  Checkpoints{
+    CoreAddresses::assert_genesis_address(account);
+    header = x"20b82a2c11f2df62bf87c2933d0281e5fe47ea94d5f0049eec1485b682df29529abf17ac7d79010000000000000000000000000000000000000000000000000001002043609d52fdf8e4a253c62dfe127d33c77e1fb4afdefb306d46ec42e21b9103ae20414343554d554c41544f525f504c414345484f4c4445525f48415348000000002061125a3ab755b993d72accfea741f8537104db8e022098154f3a66d5c23e828d00000000000000000000000000000000000000000000000000000000000000000000000000b1ec37207564db97ee270a6c1f2f73fbf517dc0777a6119b7460b7eae2890d1ce504537b010000000000000000";
+
+    assert!(Vector::length<u8>(&header) == BLOCK_HEADER_LENGTH , Errors::invalid_argument(ERROR_NOT_BLOCK_HEADER));
+    let i = 1 ;
+    let block_hash = Vector::empty<u8>();
+    while(i < 33){
+        Vector::push_back<u8>(&mut block_hash , *Vector::borrow<u8>(&header , i));
+        i = i + 1;
+    };
+    i = 41 ;
+    let number_vec = Vector::empty<u8>();
+    while(i < 49){
+        Vector::push_back<u8>(&mut number_vec , *Vector::borrow<u8>(&header , i));
+        i = i + 1;
+    };
+    let state_root = Vector::empty<u8>();
+    i = 133;
+    while(i < 165){
+        Vector::push_back<u8>(&mut state_root , *Vector::borrow<u8>(&header , i));
+        i = i + 1;
+    };
+
+    let checkpoints = borrow_global_mut<Checkpoints>(CoreAddresses::GENESIS_ADDRESS());
+    let len = Vector::length<Checkpoint>(&checkpoints.checkpoints);
+    let i = if(checkpoints.index == 0){
+        len
+    }else{
+        checkpoints.index - 1
+    };
+    while( i != checkpoints.index){
+        if( &Vector::borrow(&mut checkpoints.checkpoints, i).block_hash == &block_hash ) {
+            Vector::borrow_mut(&mut checkpoints.checkpoints, i).block_number = 1;
+            let stro = &mut Vector::borrow_mut(&mut checkpoints.checkpoints, i).state_root;
+
+            *Option::borrow_mut<vector<u8>>( stro) = state_root;
+            return
+        };
+
+        i = if( i == 0 ){
+            len
+        }else{
+            i - 1
+        };
+    };
+    abort Errors::invalid_state(ERROR_NO_HAVE_CHECKPOINT)
+}
+
+ + +
diff --git a/build/StarcoinFramework/source_maps/Block.mvsm b/build/StarcoinFramework/source_maps/Block.mvsm index eada550c3273fb9784b22f392661014db4b43f12..ee4c02d9971ec43240931c63b51f095308104dc6 100644 GIT binary patch literal 17081 zcmb7~d2~)^9>;I;CLsy3$%Z0{wTf0z`<6r#*+^oG5O0!~L}Zb?iP~DBv2_^}OC%_U z_76I9YAdJo7!G61n9`cTsm?K4OUHDmGci;L^SR`nwts!Eob&mI&;32mz3+YQ{XW0< z9q`2)-EMR{dTi?ChDlcr$1jXJcyV3Z6ONR)BgI+o^j@4b#W0NN-~m7X^Y9)uyEL!J z%P-Ua1-h_f3U(mcRbJPwAJs(Bgf8Yr(3 z=Yb8cCD$;_#&ztB(*u0<(6yn4u?Y;1X3o64(#jIIn(Sum9pLTg9P^Try~7Qo8vODK zTzN%hrG>iwYV-#1|LKqlHOz)E!`Kc%WzKR}i909PT;4ea&WZwcWEMviLC7zTEU7Hc zb(O1QBRH-H7`^p%_QdlAz5Kr7+WKMYMbHZ?0rV}Kgp~|l@>Wd58UxVK8@zmJVCu{;494!unvHqG_AYHUz)z$pRJ*VEwc?~D``H5)gA(**%qrE1WGd+ zt1kpevjbKX1WVIe(ygT#N4|x6^M}I+@iC9_CQ<}Z820|}eW*la3Tc$bsi_&}@ zYXiI_&3vp9=wr*AhxxKC(;U68G)=1>Y`l#B8f+L>!G1ithW#CQK1+TH4`Bs@N1@6b zURd5>MC#1Z9M9LRDzAuDRcDUQ)Efahb6Dr3GsigUrGw5KVr7_73^ zc9O(e%pIVU#96G*K_`hjSYC{-lSC)1VbD^3n(tFH1yg5^D$G<&ojImsIYDQRd@L8} z%#n+g2Rd_PV@-t+dG6-OGeD=4O<3DOr;|%q*C9-f{s`+a=p3^ft0hTa=a~7J)etF1 zZ$-TTu(5ThX<-<3VE)~aWrnwYsY@r7GvxNfl&&FoG4)p-&+0MsW4tlopu#SU%O25`*+IaZh_hIN} zoRp{CR)GWC5B!@p*LF7Kq4*umQFzeFJAMFS2Iy=AUuuE1ou^bsS+fw+ z4N=l8z*-E^(p-YI6k?<~8S72ZU86}@zk<%P<`Asa&_$X9uzGTpbl2!G=1I_9qeEEd zKzEJ)hIJlv*XTp63!uA3rg;@~FX%p&gLButpnI4Bn7S7fgcS_B7xXPPLojtO=mutc zOx+8*-el@t&<@NF)a)nkkT|S(=r7GgtTFJ4G)H44zyN7lS!0kir%}%dgQaQJ94gHk z>Mes|(p-tP3WiH_Io1joAx&$Zqog^6dP5;rnr3dRhd62e7VB#mEzMI{SKw7??ro}> zAWds@8!`WPY?zLl8)_fB`?C|+r{P)lXBY6l1|MgoyP#BlM|vCeF8I0&i(M6NXK|Uz zvb3!XU+}3c$(!wxU;PH6hMBs(?`+$lMuSK2)9;9jU2bQ-)9uVDcg;{UtKqmh;3XkH zw-UTca~x?VU{!%m*@v($flk>CSi3-{Z0nqK%DzRtM$jqy2Q2>pJ3CX;493*^%}}f` z&?!3vt2OA9eV5Viflk@ivBpqSXXidx384F=kyweKQ?@m_PT6JDs{-98&BU4kI**%X zG3Y#Qn&#*_k8i}<2D(qW7^@a^ayQL-(8=92&CzvoKaF((baLN?^(p9YhE4Mn=!|cg z=IA=(Kg4nb+W8Lo3g&-6?*>fs0qEU;X_}+!-N10HaiDhtgRpWz?*`UlHGtj??7=z+ zdN*(m>nrFgpWcmF4?yo5O0b#*+1WR=!VJRH`v%hr1{-aPM?{W*cBrb3h%JinMHZr^8c`zbfOlVR)wKl{HH>)wIg2Ruv1 zuQrOVCg_e|D3!y&QK);5{kbTwm>1ASckmXY-vPg;5hNZR(j|xHJ`hx8g!P*#99J6ORd9N)}E7;EBtNDTF_Z) zAN3A_&Qja34uj58zsEWUx?}k%))CMh%X+gOAFxhcw=umjb?Q2g>4T|Lmo>UhU6Isl z1Ns|pYvt%JXn*P@f=+VQTGvS~i+WQ)C%I`@(?KV>Y^@%!0p!3;jtiOQHXMeyt3HmpF z=E!G3=d*9IZi3EdSFx^v&SyS6zav5CGwTJR^V##%>j65S^}>1)bUu3lt0(Au)(LAT z=x*(JtbEX^YXR00(B0Y^tYx6PwFOwqLI1{YW|OJ=y2CM7fbQ!yU~L55*L@Fb3+TS? zCale%`?~9~>Ol8(&5^f)?(3ewx(K?jYvmT**S$f#o1pu;-(Xz@-Pe79^&fd7a25OfE)5o-Z8bqBZ$RzJ`k;AE@}&>i3jSQBA{JokZElVGGY2Q-=mYd_48=1#05v^ol;c^mTq6iV|ZmJeI_S<-BdaX6G{3|Q#VnU*BvvP=kY*TG1h}Pnp3xJz@>SAYNWDccSDNFnvf(vpCSw)AJZa9t zDuVga9Edd=7T7Z9VJ@^~n&-Yqng_6s!Ryl8gY_A_AmgY9<{RVz5&G)fBfLdv8$JzmFq-o7_oiry=Z!)Zx zrrAv24|UQ!h4l#PrFjkOAv8$yOjFH`(zHf5yn|yC;$xG>rX{9k<|N0bzM7ek?qP(C zN=}PS%1MYH85f`4^v^7k_^1DzIzD9-|D2MTkuowfHo=qsNKa2o&q+&6XJ7z8p_M~Klft`mjD0& literal 3875 zcmb8xOKeP09LMo9?M$m$Wzc%mTT6*V2(chUn>L0HDN3r6>2wU!=*+Y;cOnEygT(t0 zi9}ODf(@|{gpCLl3n4Zh3ke&cHtMyJ2;UPVcE4ki@9uNYx%b@rPkZ3prM9zo&rID^ z*3+2lNHp|^E^Jx<=ydwd=AQ1xSpzRyj4`d`qkn(CKut$Fwl&X~17d~qTzb`B9#FC$ z^^ugTWY^gaJEt(7gS&{i?BKp&^7HLks5|UJ?Iz<_@-*r!DR&if-N8M?JaurdF>fiL zxBgjVOmOh;m+!E0Gju!YQ(A-yQJ#EyE4#^I(d~uCoFMyixZ7vYZ=~<`7U}`%yS4HM zInWz}jOio$^Xpd;}# zC?MqtR4)}sc@y=V3Z)!CeWF29))X+kR3v2?YB>#-GQ`f!$YLpnAxBY(lp9#Dg&dB) zx|mTQQ{ej5EEK$&3TD*Mt$V%&@>f!?a6r7izYkO6+6&->;}11tRtRP z{2=tW<*8hw+a5aJ8P-_t=kiANhvw zp$16L>wNZZB0aAoQB|bp_3tz3c}=ihiuAl@QTs^GtCfdIPvJ4tane(G1a*}36sA#K zq^GbI)kj0++q{ChN5iB%iMmfgDgW+1T*?ouH$Wq#e1dvIBc0?sWSNt+yO&E@#$UV& z8YSg-)+<4dc9J8IW1OVjeXNxAs79)gvI@0;#yQDaDC)dPS8|mX`7rQ+$GQRS, + //State root of the block + state_root: Option::Option>, + } + + // + struct Checkpoints has key{ + //all checkpoints + checkpoints: vector, + index:u64, + } + + const EBLOCK_NUMBER_MISMATCH : u64 = 17; + const ERROR_NO_HAVE_CHECKPOINT: u64 = 18; + const ERROR_NOT_BLOCK_HEADER : u64 = 19; + const CHECKPOINT_LENGTHR : u64 = 60; + const BLOCK_HEADER_LENGTH : u64 = 247; /// This can only be invoked by the GENESIS_ACCOUNT at genesis public fun initialize(account: &signer, parent_hash: vector) { @@ -116,5 +139,118 @@ module Block { spec schema AbortsIfBlockMetadataNotExist { aborts_if !exists(CoreAddresses::GENESIS_ADDRESS()); } + + public fun checkpoints_init(account: &signer){ + let i = 0; + let checkpoints = Vector::empty(); + while( i < CHECKPOINT_LENGTHR){ + Vector::push_back(&mut checkpoints,Checkpoint { + block_number: 0, + block_hash : Vector::empty(), + state_root : Option::none>(), + }); + i = i + 1; + }; + move_to( + account, + Checkpoints { + checkpoints: checkpoints, + index: 0 + }); + } + + spec checkpoints_init { + aborts_if exists(CoreAddresses::GENESIS_ADDRESS()); + } + + public fun checkpoint(account: &signer) acquires BlockMetadata, Checkpoints{ + CoreAddresses::assert_genesis_address(account); + let parent_block_number = get_current_block_number() - 1; + let parent_block_hash = get_parent_hash(); + + let checkpoints = borrow_global_mut(CoreAddresses::GENESIS_ADDRESS()); + checkpoints.index = if( checkpoints.index + 1 >= CHECKPOINT_LENGTHR ){ + 0 + }else{ + checkpoints.index + 1 + }; + + let checkpoint = Vector::borrow_mut(&mut checkpoints.checkpoints , checkpoints.index); + checkpoint.block_number = parent_block_number; + checkpoint.block_hash = parent_block_hash; + checkpoint.state_root = Option::none>(); + } + + public fun latest_state_root():(u64,vector) acquires Checkpoints{ + let checkpoints = borrow_global(CoreAddresses::GENESIS_ADDRESS()); + let len = Vector::length(&checkpoints.checkpoints); + let i = if(checkpoints.index == 0){ + len + }else{ + checkpoints.index - 1 + }; + while( i != checkpoints.index){ + if( Option::is_some>(&Vector::borrow(&checkpoints.checkpoints, i).state_root)) { + return (Vector::borrow(&checkpoints.checkpoints, i).block_number, *&Vector::borrow(&checkpoints.checkpoints, i).block_hash) + }; + + i = if( i == 0 ){ + len + }else{ + i - 1 + }; + }; + abort Errors::invalid_state(ERROR_NO_HAVE_CHECKPOINT) + } + + + public fun update_state_root(account: &signer, header:vector) acquires Checkpoints{ + CoreAddresses::assert_genesis_address(account); + header = x"20b82a2c11f2df62bf87c2933d0281e5fe47ea94d5f0049eec1485b682df29529abf17ac7d79010000000000000000000000000000000000000000000000000001002043609d52fdf8e4a253c62dfe127d33c77e1fb4afdefb306d46ec42e21b9103ae20414343554d554c41544f525f504c414345484f4c4445525f48415348000000002061125a3ab755b993d72accfea741f8537104db8e022098154f3a66d5c23e828d00000000000000000000000000000000000000000000000000000000000000000000000000b1ec37207564db97ee270a6c1f2f73fbf517dc0777a6119b7460b7eae2890d1ce504537b010000000000000000"; + + assert!(Vector::length(&header) == BLOCK_HEADER_LENGTH , Errors::invalid_argument(ERROR_NOT_BLOCK_HEADER)); + let i = 1 ; + let block_hash = Vector::empty(); + while(i < 33){ + Vector::push_back(&mut block_hash , *Vector::borrow(&header , i)); + i = i + 1; + }; + i = 41 ; + let number_vec = Vector::empty(); + while(i < 49){ + Vector::push_back(&mut number_vec , *Vector::borrow(&header , i)); + i = i + 1; + }; + let state_root = Vector::empty(); + i = 133; + while(i < 165){ + Vector::push_back(&mut state_root , *Vector::borrow(&header , i)); + i = i + 1; + }; + + let checkpoints = borrow_global_mut(CoreAddresses::GENESIS_ADDRESS()); + let len = Vector::length(&checkpoints.checkpoints); + let i = if(checkpoints.index == 0){ + len + }else{ + checkpoints.index - 1 + }; + while( i != checkpoints.index){ + if( &Vector::borrow(&mut checkpoints.checkpoints, i).block_hash == &block_hash ) { + Vector::borrow_mut(&mut checkpoints.checkpoints, i).block_number = 1; + let stro = &mut Vector::borrow_mut(&mut checkpoints.checkpoints, i).state_root; + + *Option::borrow_mut>( stro) = state_root; + return + }; + + i = if( i == 0 ){ + len + }else{ + i - 1 + }; + }; + abort Errors::invalid_state(ERROR_NO_HAVE_CHECKPOINT) + } } } \ No newline at end of file From 07f7f3a52c0d480b03c2258dc38704e5ae20ead4 Mon Sep 17 00:00:00 2001 From: WGB5445 Date: Thu, 23 Jun 2022 09:21:09 +0800 Subject: [PATCH 04/14] optimization loop (#39) --- build/StarcoinFramework/BuildInfo.yaml | 2 +- .../bytecode_modules/Block.mv | Bin 2327 -> 2046 bytes build/StarcoinFramework/docs/Block.md | 54 ++++++++---------- .../StarcoinFramework/source_maps/Block.mvsm | Bin 17081 -> 17547 bytes integration-tests/block/block_checkpoint.move | 5 ++ sources/Block.move | 54 ++++++++---------- 6 files changed, 52 insertions(+), 63 deletions(-) create mode 100644 integration-tests/block/block_checkpoint.move diff --git a/build/StarcoinFramework/BuildInfo.yaml b/build/StarcoinFramework/BuildInfo.yaml index e5b06807..066fed93 100644 --- a/build/StarcoinFramework/BuildInfo.yaml +++ b/build/StarcoinFramework/BuildInfo.yaml @@ -261,7 +261,7 @@ compiled_package_info: ? address: "0x00000000000000000000000000000001" name: YieldFarmingV2 : StarcoinFramework - source_digest: 46D1985E82F1F2811309581FF12BAE4FB1128B8942EFAF866FE348B9D44FBC57 + source_digest: 2243CC10B7CBB0B46C88F5A71139BBD6F48CCB4A2917BBC82951B90305B63772 build_flags: dev_mode: false test_mode: false diff --git a/build/StarcoinFramework/bytecode_modules/Block.mv b/build/StarcoinFramework/bytecode_modules/Block.mv index f5618084b59aaea6ee11f5fedfe9a26693238668..27789c5d25f5a3e603fa8e9e865ad0d3c66c5155 100644 GIT binary patch delta 613 zcmZ8eJx?1!5Z&3m-PxO+yYnUI0|&{GabbZ)5XM0p@gHa?+@z1v(jf|0sc52D2#E$7 zONas~@{h?+pyMZ??Aga*vCVwEd2eU;U4MAVet+7!1$>f^k-fr}nd6B5;g~P&Jtm9n z@6l(NO<>qgkt`^Z60KC>L?o45+`ze9wDeDye#>bnS&(RfH!MRG1p@)C(z34#J+9EI z)$!Phyj5MjzuuCCTN_Y?BrqUWr)1F13BV{X1_%N~XXr#8=d>%>&}G~oqBM|tl)!&Inbko-!rEbTr%qI zQ9alMcIGu_OV-%B>Z@aYnsNh@EyFIX$sQiqO-{*?{z~b7$u6+o*0cI3ye2chYMrHM zHg8nF>mNxrd&bS_Bz%wzA7qxkP>8{om||L`!Iuj?2QnE{y$&muPJVGJIHc03r!GO? h0l9HA;YB9fE_1JpP)9y#ON!U_i}jf^l~;e_jsNy&Fl+z- delta 856 zcmZ{gO-NKx6vywmAMeh)_r7tS%rI7lZ!9piPf~gb2GeLwU??*h)kcjF7qy7Kkgy>^ zs)b>UVA#hZ`hW;UimXk7i(1rHBCG_-jSLY%WJp7IMt$nSyE*rs^E>}@&p%r*SlGX@ z_!0079;Ut_9x$Hq5iCBNRjNX|N242_4McXt6=?*MXQZTA!Z z=D$BozT1&4?B4tSYRSuyZwtH69?Be?*>sx>JJDFIQeQI z)_61-&j~y2g(qvqTHd5TRea1ojm{^}(WzV5xf5!v>6n~2(9^fx^fmd>%s%Jh>8ZgV zW#UZ9uJa4O!(aI2C-&V7ZDVsYH?87Xn!K{I$O}L1gwzpRRAQxl34m)Tsv`;-%c>FL zXSSdUvG8JHxjU?oM2ZOQsOC$F!|HMhg19_DT_4%Ts=YT3%HEByOh&h&#ZsJ9y z0i%2=o5!Ta_IOx1tFmMs+o~m$(d(fad+cGgEN-bBmU3-TffW}#@0QSUja$dq2_Y0_ zt&4?~jj+VZ6lOkMN;=sf2wnifR8$d3c1o&!BYq=7F0mWnEw;$Gr~rp#9zU+{R9R9< v%e6vSn5(?(1J)0EI%5M`*wY9rCYdr>yX3&B9W29u5g-5^u-*_5K@|N5elmd? diff --git a/build/StarcoinFramework/docs/Block.md b/build/StarcoinFramework/docs/Block.md index c6f5137f..a999e203 100644 --- a/build/StarcoinFramework/docs/Block.md +++ b/build/StarcoinFramework/docs/Block.md @@ -588,21 +588,13 @@ Call at block prologue
public fun latest_state_root():(u64,vector<u8>) acquires  Checkpoints{
     let checkpoints = borrow_global<Checkpoints>(CoreAddresses::GENESIS_ADDRESS());
     let len = Vector::length<Checkpoint>(&checkpoints.checkpoints);
-    let i = if(checkpoints.index == 0){
-        len
-    }else{
-        checkpoints.index - 1
-    };
-    while( i != checkpoints.index){
-        if( Option::is_some<vector<u8>>(&Vector::borrow(&checkpoints.checkpoints, i).state_root)) {
-            return (Vector::borrow(&checkpoints.checkpoints, i).block_number, *&Vector::borrow(&checkpoints.checkpoints, i).block_hash)
+    let i = checkpoints.index ;
+    while( i <  len + checkpoints.index){
+        if( Option::is_some<vector<u8>>(&Vector::borrow(&checkpoints.checkpoints, i % len).state_root)) {
+            return (Vector::borrow(&checkpoints.checkpoints, i % len).block_number, *&Vector::borrow(&checkpoints.checkpoints, i % len).block_hash)
         };
 
-        i = if( i == 0 ){
-            len
-        }else{
-            i - 1
-        };
+        i = i + 1;
     };
     abort Errors::invalid_state(ERROR_NO_HAVE_CHECKPOINT)
 }
@@ -629,7 +621,7 @@ Call at block prologue
 
 
public fun update_state_root(account: &signer, header:vector<u8>) acquires  Checkpoints{
     CoreAddresses::assert_genesis_address(account);
-    header = x"20b82a2c11f2df62bf87c2933d0281e5fe47ea94d5f0049eec1485b682df29529abf17ac7d79010000000000000000000000000000000000000000000000000001002043609d52fdf8e4a253c62dfe127d33c77e1fb4afdefb306d46ec42e21b9103ae20414343554d554c41544f525f504c414345484f4c4445525f48415348000000002061125a3ab755b993d72accfea741f8537104db8e022098154f3a66d5c23e828d00000000000000000000000000000000000000000000000000000000000000000000000000b1ec37207564db97ee270a6c1f2f73fbf517dc0777a6119b7460b7eae2890d1ce504537b010000000000000000";
+    // header = x"20b82a2c11f2df62bf87c2933d0281e5fe47ea94d5f0049eec1485b682df29529abf17ac7d79010000000000000000000000000000000000000000000000000001002043609d52fdf8e4a253c62dfe127d33c77e1fb4afdefb306d46ec42e21b9103ae20414343554d554c41544f525f504c414345484f4c4445525f48415348000000002061125a3ab755b993d72accfea741f8537104db8e022098154f3a66d5c23e828d00000000000000000000000000000000000000000000000000000000000000000000000000b1ec37207564db97ee270a6c1f2f73fbf517dc0777a6119b7460b7eae2890d1ce504537b010000000000000000";
 
     assert!(Vector::length<u8>(&header) == BLOCK_HEADER_LENGTH , Errors::invalid_argument(ERROR_NOT_BLOCK_HEADER));
     let i = 1 ;
@@ -644,6 +636,16 @@ Call at block prologue
         Vector::push_back<u8>(&mut number_vec , *Vector::borrow<u8>(&header , i));
         i = i + 1;
     };
+    let number: u128 = 0;
+    let offset  = 0;
+    let i = 0;
+    while (i < 8) {
+        let byte = *Vector::borrow(&number_vec, offset + i);
+        let s = (i as u8) * 8;
+        number = number + ((byte as u128) << s);
+        i = i + 1;
+    };
+
     let state_root = Vector::empty<u8>();
     i = 133;
     while(i < 165){
@@ -653,26 +655,16 @@ Call at block prologue
 
     let checkpoints = borrow_global_mut<Checkpoints>(CoreAddresses::GENESIS_ADDRESS());
     let len = Vector::length<Checkpoint>(&checkpoints.checkpoints);
-    let i = if(checkpoints.index == 0){
-        len
-    }else{
-        checkpoints.index - 1
-    };
-    while( i != checkpoints.index){
-        if( &Vector::borrow(&mut checkpoints.checkpoints, i).block_hash == &block_hash ) {
-            Vector::borrow_mut(&mut checkpoints.checkpoints, i).block_number = 1;
-            let stro = &mut Vector::borrow_mut(&mut checkpoints.checkpoints, i).state_root;
-
-            *Option::borrow_mut<vector<u8>>( stro) = state_root;
+    let i = checkpoints.index ;
+    while( i <  len + checkpoints.index){
+        if( &Vector::borrow(&mut checkpoints.checkpoints, i % len).block_hash == &block_hash ) {
+            Vector::borrow_mut(&mut checkpoints.checkpoints, i % len).block_number = (number as u64 );
+            *Option::borrow_mut<vector<u8>>( &mut Vector::borrow_mut(&mut checkpoints.checkpoints, i % len).state_root) = state_root;
             return
         };
-
-        i = if( i == 0 ){
-            len
-        }else{
-            i - 1
-        };
+        i = i + 1 ;
     };
+
     abort Errors::invalid_state(ERROR_NO_HAVE_CHECKPOINT)
 }
 
diff --git a/build/StarcoinFramework/source_maps/Block.mvsm b/build/StarcoinFramework/source_maps/Block.mvsm index ee4c02d9971ec43240931c63b51f095308104dc6..6335792c7e3f68142b19e97e62266b4aa14ffd9b 100644 GIT binary patch literal 17547 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 diff --git a/integration-tests/block/block_checkpoint.move b/integration-tests/block/block_checkpoint.move new file mode 100644 index 00000000..c2220888 --- /dev/null +++ b/integration-tests/block/block_checkpoint.move @@ -0,0 +1,5 @@ +//# init -n dev + +//# faucet --addr alice + +//# run --signers alice diff --git a/sources/Block.move b/sources/Block.move index 7aafb018..494e5140 100644 --- a/sources/Block.move +++ b/sources/Block.move @@ -184,21 +184,13 @@ module Block { public fun latest_state_root():(u64,vector) acquires Checkpoints{ let checkpoints = borrow_global(CoreAddresses::GENESIS_ADDRESS()); let len = Vector::length(&checkpoints.checkpoints); - let i = if(checkpoints.index == 0){ - len - }else{ - checkpoints.index - 1 - }; - while( i != checkpoints.index){ - if( Option::is_some>(&Vector::borrow(&checkpoints.checkpoints, i).state_root)) { - return (Vector::borrow(&checkpoints.checkpoints, i).block_number, *&Vector::borrow(&checkpoints.checkpoints, i).block_hash) + let i = checkpoints.index ; + while( i < len + checkpoints.index){ + if( Option::is_some>(&Vector::borrow(&checkpoints.checkpoints, i % len).state_root)) { + return (Vector::borrow(&checkpoints.checkpoints, i % len).block_number, *&Vector::borrow(&checkpoints.checkpoints, i % len).block_hash) }; - i = if( i == 0 ){ - len - }else{ - i - 1 - }; + i = i + 1; }; abort Errors::invalid_state(ERROR_NO_HAVE_CHECKPOINT) } @@ -206,7 +198,7 @@ module Block { public fun update_state_root(account: &signer, header:vector) acquires Checkpoints{ CoreAddresses::assert_genesis_address(account); - header = x"20b82a2c11f2df62bf87c2933d0281e5fe47ea94d5f0049eec1485b682df29529abf17ac7d79010000000000000000000000000000000000000000000000000001002043609d52fdf8e4a253c62dfe127d33c77e1fb4afdefb306d46ec42e21b9103ae20414343554d554c41544f525f504c414345484f4c4445525f48415348000000002061125a3ab755b993d72accfea741f8537104db8e022098154f3a66d5c23e828d00000000000000000000000000000000000000000000000000000000000000000000000000b1ec37207564db97ee270a6c1f2f73fbf517dc0777a6119b7460b7eae2890d1ce504537b010000000000000000"; + // header = x"20b82a2c11f2df62bf87c2933d0281e5fe47ea94d5f0049eec1485b682df29529abf17ac7d79010000000000000000000000000000000000000000000000000001002043609d52fdf8e4a253c62dfe127d33c77e1fb4afdefb306d46ec42e21b9103ae20414343554d554c41544f525f504c414345484f4c4445525f48415348000000002061125a3ab755b993d72accfea741f8537104db8e022098154f3a66d5c23e828d00000000000000000000000000000000000000000000000000000000000000000000000000b1ec37207564db97ee270a6c1f2f73fbf517dc0777a6119b7460b7eae2890d1ce504537b010000000000000000"; assert!(Vector::length(&header) == BLOCK_HEADER_LENGTH , Errors::invalid_argument(ERROR_NOT_BLOCK_HEADER)); let i = 1 ; @@ -221,6 +213,16 @@ module Block { Vector::push_back(&mut number_vec , *Vector::borrow(&header , i)); i = i + 1; }; + let number: u128 = 0; + let offset = 0; + let i = 0; + while (i < 8) { + let byte = *Vector::borrow(&number_vec, offset + i); + let s = (i as u8) * 8; + number = number + ((byte as u128) << s); + i = i + 1; + }; + let state_root = Vector::empty(); i = 133; while(i < 165){ @@ -230,26 +232,16 @@ module Block { let checkpoints = borrow_global_mut(CoreAddresses::GENESIS_ADDRESS()); let len = Vector::length(&checkpoints.checkpoints); - let i = if(checkpoints.index == 0){ - len - }else{ - checkpoints.index - 1 - }; - while( i != checkpoints.index){ - if( &Vector::borrow(&mut checkpoints.checkpoints, i).block_hash == &block_hash ) { - Vector::borrow_mut(&mut checkpoints.checkpoints, i).block_number = 1; - let stro = &mut Vector::borrow_mut(&mut checkpoints.checkpoints, i).state_root; - - *Option::borrow_mut>( stro) = state_root; + let i = checkpoints.index ; + while( i < len + checkpoints.index){ + if( &Vector::borrow(&mut checkpoints.checkpoints, i % len).block_hash == &block_hash ) { + Vector::borrow_mut(&mut checkpoints.checkpoints, i % len).block_number = (number as u64 ); + *Option::borrow_mut>( &mut Vector::borrow_mut(&mut checkpoints.checkpoints, i % len).state_root) = state_root; return }; - - i = if( i == 0 ){ - len - }else{ - i - 1 - }; + i = i + 1 ; }; + abort Errors::invalid_state(ERROR_NO_HAVE_CHECKPOINT) } } From 5f4affedd687003df610a8041036758bcf1724b8 Mon Sep 17 00:00:00 2001 From: WGB5445 <919603023@qq.com> Date: Thu, 30 Jun 2022 00:20:58 +0800 Subject: [PATCH 05/14] use bcs and ring --- build/StarcoinFramework/BuildInfo.yaml | 2 +- .../bytecode_modules/Block.mv | Bin 2046 -> 2573 bytes build/StarcoinFramework/docs/Block.md | 167 ++++++++++-------- .../StarcoinFramework/source_maps/Block.mvsm | Bin 17547 -> 21992 bytes sources/Block.move | 161 +++++++++-------- 5 files changed, 183 insertions(+), 147 deletions(-) diff --git a/build/StarcoinFramework/BuildInfo.yaml b/build/StarcoinFramework/BuildInfo.yaml index 0a5a20ac..cd1314ff 100644 --- a/build/StarcoinFramework/BuildInfo.yaml +++ b/build/StarcoinFramework/BuildInfo.yaml @@ -261,7 +261,7 @@ compiled_package_info: ? address: "0x00000000000000000000000000000001" name: YieldFarmingV2 : StarcoinFramework - source_digest: EAB7A24EE64BCAB1F16279AAA66766062B05BD0B30EDF44BDE5E1027951498E3 + source_digest: 50F7CEF7C69D7B6A649CC383A40C5CA005B4A75CB9F561BDEFDAF9C7DD46C501 build_flags: dev_mode: false test_mode: false diff --git a/build/StarcoinFramework/bytecode_modules/Block.mv b/build/StarcoinFramework/bytecode_modules/Block.mv index 27789c5d25f5a3e603fa8e9e865ad0d3c66c5155..2390ff5f15178dc8f07e4353c77034754c9c55ca 100644 GIT binary patch literal 2573 zcmZWrO>Y~=8J>4$XLfgX_^}i}B6ew&*h=U>yU=;tbZyN%^UnJ|&->2I z&hpEZ9|DIl77(lR`j$BQj+~!pL;i*TnY({;ev;l_bya<%f1`gN9GP!}KYFF_7U~Ef z#+hIalT0y}dCX_p1C7g=L0?kLS#d~_QZ6y(x(-@a#viL#R7ErkLBML@U<(qqI+$1k z1gr@Y@4!WEGoP5d6QET$ObP9-Uq*Y=M*{9GQ6=W>A%gFN)j6OVDfh50Fn7CQ;CI_J ziHSQxFmV@+^Tr}0CGR;7qxx!<03%afw+Bl2h=H`~}=nhzwAxVNX=gOcFnkx&W5W;ai9!T;q zDF^^1c*Na60RgMRMAikb!ix-_Bg$UPUpv`00T_UOB zuetrl9f#uq2Xe3mq+}WY|8aATqP>h&h(U-z1nS`htKg0RA#v_%90A`d+q4DQSeuN` z({r12G@PD4PtuB=7{|HmDe}~oU=W`TK25^2I76BdGR=}G z9gVW)I34v+U{o-iUnU$*$H+UGb5sR+Fh{J4MAUTHJ4+_jVRCWFlGrtx1bJ0Y;$i?VKNy^n%9R>Tz1z>y4N-C-&65;oDBQAC?h(b zX1JH;9}?b=mt*1mYKFoYT9~2QCDOdvIQj75v&SF2_w>PoNA^TMN#cHzGA>(UQS&9) z7Rz|maY=BoD%Lb#&tG=Da@g?+!Ae(U)tQ;4u!IpuzgxagpT2%zsC*J zxR>j*sitNX)(CK6YZ34+t5KH>m8lCQxfxJbknEsyIDxI=yVRA20(?qvj~7pkA0iWi zE|a0Z&#JtRyW(mn>Kq@2*{oCN(k504tD1$OwjYGz2`Kch2CS=U?2vJ!N_^oHFmr>O zsY+ef;FdxWMrfhctdv$q)a0WXfpN5>#ST{G*EUK!UC+4MMPXa=CVIaryV@|h=NlF< zaVWb1r`)dUft_~iJa7>=6KEPo*5M?l*L7P)YNye}uYl!TP0JxF~de~Z45BKbQX zOGhG>XI9GEA!R!&g-?c@lalfYoLnbt?&9N0thFCtwXlT@)l03aVr~;RMGXhRncWMIldUkD>{ztA1m&~2=)mDUU)21@h?Qq$2 zEa(7in|+||aK-Fc(@wZ*Zdh;w-n$m;0^GFVCcrIo7w8t^_N-|yTr3x0BEmu?{xEoj?yOjorf&=i(B%7usFXZ=hJ&%@I)Qh^=5&s}NXQdY*eW(wu z^gl`di!8j9=JMZ=<^dP~A^G1+>BHC37Ua_3Q*a2LIq60D_u}Ai!VfU~XGHe>#E&HW G4*MB6yo>n& literal 2046 zcmZ`)&5qne5bo;gAG_VQ$FrW<-DDHkEM&d_vShaDeBg`)fQ*GeTXrO^MW7h#HijECg_p?=cF9g%GsH;jfd!^sfq?o~ zI{-{xrw;d77nFJ}Mq0kn>yzQZ<`xk;L}dJR>hS0ifD+es2*h)(@LfL)+)fm^U3WwD zqbTf#LAXgYiJ1fh!@085q2a0#BqB=G4rqrPj^F^-#$^cFW#CD088=SjM^oOaNN^B5 zK`K-ZM+8Mm-gG3AR<&*b1j)E=4P6%K28K4KeP~M*v>9y(x;2*XT}%d#{QHwKzjt<4 z=2ewf>bNW?WhIXv=S8hPp4OvD;eI+A=T)7Jr|PqOP)|y~b^Iu=v$L$u%>7|Lcr=}i zirQO=mH#k*(%Q99X0SBsti&oE6{EU)p4aJMR+hA7n$7Crq}*CxI&EmC#cX_}WZn>tzmZiGLi}QM@<}jKzswU&y9~F-&dS~-sbe_+$@_aU?bDDfSs?!#R9@}~Y zbpBb)(Rp_%MN4U8DRmbT<1)sc;eEM@TXaL|LUX)?mkr;c`$)Hx^DA^;uOf00V_&|6 zo7fft?%efQAGQfH2h1u8qw1)&gzRG1Q=oa&+i!HCqB}r?>`@X_sC!1x;PgBd zx=jiU8qvkX$%fCPa9YA6<+eM?1V3tg*PS6UY)$W4Y9&X61z6ikR#ETP4sugQ3 z19f9z*m^eVTT9PyZpDjVZkmvNvfN|#MdeQUq_9Z9^e3NlQBW2t* zu9=IJ@o(g_Cff9+7_)8Ba*w~^A>|$ev5QYZ{s_jqv$RN9^AbYJ$=rkHBJq3NxND4E XSvHAnZULuXmC^+?&^JtC^LhUZbG{YP diff --git a/build/StarcoinFramework/docs/Block.md b/build/StarcoinFramework/docs/Block.md index a999e203..32604dbc 100644 --- a/build/StarcoinFramework/docs/Block.md +++ b/build/StarcoinFramework/docs/Block.md @@ -23,10 +23,13 @@ Block module provide metadata for generated blocks. - [Module Specification](#@Module_Specification_1) -
use 0x1::CoreAddresses;
+
use 0x1::BCS;
+use 0x1::CoreAddresses;
 use 0x1::Errors;
 use 0x1::Event;
+use 0x1::Hash;
 use 0x1::Option;
+use 0x1::Ring;
 use 0x1::Timestamp;
 use 0x1::Vector;
 
@@ -187,7 +190,7 @@ Events emitted when new block generated.
-checkpoints: vector<Block::Checkpoint> +checkpoints: Ring::Ring<Block::Checkpoint>
@@ -497,22 +500,13 @@ Call at block prologue
public fun checkpoints_init(account: &signer){
-    let i = 0;
-    let checkpoints = Vector::empty<Checkpoint>();
-    while( i < CHECKPOINT_LENGTHR){
-        Vector::push_back<Checkpoint>(&mut checkpoints,Checkpoint {
-            block_number: 0,
-            block_hash  : Vector::empty<u8>(),
-            state_root  : Option::none<vector<u8>>(),
-        });
-        i = i + 1;
-    };
+    let checkpoints = Ring::create_with_capacity<Checkpoint>(CHECKPOINT_LENGTHR);
     move_to<Checkpoints>(
         account,
         Checkpoints {
-           checkpoints: checkpoints,
-           index: 0
-        });
+           checkpoints  : checkpoints,
+           index        : 0
+    });
 }
 
@@ -538,7 +532,7 @@ Call at block prologue -
public fun checkpoint(account: &signer)
+
public fun checkpoint()
 
@@ -547,22 +541,24 @@ Call at block prologue Implementation -
public fun checkpoint(account: &signer) acquires BlockMetadata, Checkpoints{
-    CoreAddresses::assert_genesis_address(account);
+
public fun checkpoint() acquires BlockMetadata, Checkpoints{
     let parent_block_number = get_current_block_number() - 1;
     let parent_block_hash   = get_parent_hash();
 
     let checkpoints = borrow_global_mut<Checkpoints>(CoreAddresses::GENESIS_ADDRESS());
-    checkpoints.index =  if( checkpoints.index + 1 >= CHECKPOINT_LENGTHR ){
-        0
+    checkpoints.index = checkpoints.index + 1;
+
+    let op_checkpoint = Ring::push<Checkpoint>(&mut checkpoints.checkpoints, Checkpoint {
+                                                            block_number: parent_block_number,
+                                                            block_hash: parent_block_hash,
+                                                            state_root: Option::none<vector<u8>>(),
+                                                        } );
+    if(Option::is_some(&op_checkpoint)){
+        Option::destroy_some(op_checkpoint);
     }else{
-        checkpoints.index + 1
-    };
+        Option::destroy_none(op_checkpoint);
+    }
 
-    let checkpoint = Vector::borrow_mut<Checkpoint>(&mut checkpoints.checkpoints , checkpoints.index);
-    checkpoint.block_number = parent_block_number;
-    checkpoint.block_hash   = parent_block_hash;
-    checkpoint.state_root   = Option::none<vector<u8>>();
 }
 
@@ -587,15 +583,29 @@ Call at block prologue
public fun latest_state_root():(u64,vector<u8>) acquires  Checkpoints{
     let checkpoints = borrow_global<Checkpoints>(CoreAddresses::GENESIS_ADDRESS());
-    let len = Vector::length<Checkpoint>(&checkpoints.checkpoints);
+    let len = Ring::capacity<Checkpoint>(&checkpoints.checkpoints);
     let i = checkpoints.index ;
-    while( i <  len + checkpoints.index){
-        if( Option::is_some<vector<u8>>(&Vector::borrow(&checkpoints.checkpoints, i % len).state_root)) {
-            return (Vector::borrow(&checkpoints.checkpoints, i % len).block_number, *&Vector::borrow(&checkpoints.checkpoints, i % len).block_hash)
-        };
 
-        i = i + 1;
+    if( i < len - 1){
+        let j = 0;
+        while(j <= i){
+            let op_checkpoint = Ring::borrow(&checkpoints.checkpoints, j);
+            if( Option::is_some(op_checkpoint) && Option::is_some(&Option::borrow(op_checkpoint).state_root) ) {
+                return (Option::borrow(op_checkpoint).block_number, *&Option::borrow(op_checkpoint).block_hash)
+            };
+            j = j + 1;
+        };
+    }else{
+        let j = i - ( len - 1);
+        while( j < i ){
+            let op_checkpoint = Ring::borrow(&checkpoints.checkpoints, j);
+            if( Option::is_some(op_checkpoint) && Option::is_some(&Option::borrow(op_checkpoint).state_root) ) {
+                return (Option::borrow(op_checkpoint).block_number, *&Option::borrow(op_checkpoint).block_hash)
+            };
+            j = j + 1;
+        };
     };
+
     abort Errors::invalid_state(ERROR_NO_HAVE_CHECKPOINT)
 }
 
@@ -610,7 +620,7 @@ Call at block prologue -
public fun update_state_root(account: &signer, header: vector<u8>)
+
public fun update_state_root(header: vector<u8>)
 
@@ -619,50 +629,59 @@ Call at block prologue Implementation -
public fun update_state_root(account: &signer, header:vector<u8>) acquires  Checkpoints{
-    CoreAddresses::assert_genesis_address(account);
-    // header = x"20b82a2c11f2df62bf87c2933d0281e5fe47ea94d5f0049eec1485b682df29529abf17ac7d79010000000000000000000000000000000000000000000000000001002043609d52fdf8e4a253c62dfe127d33c77e1fb4afdefb306d46ec42e21b9103ae20414343554d554c41544f525f504c414345484f4c4445525f48415348000000002061125a3ab755b993d72accfea741f8537104db8e022098154f3a66d5c23e828d00000000000000000000000000000000000000000000000000000000000000000000000000b1ec37207564db97ee270a6c1f2f73fbf517dc0777a6119b7460b7eae2890d1ce504537b010000000000000000";
-
-    assert!(Vector::length<u8>(&header) == BLOCK_HEADER_LENGTH , Errors::invalid_argument(ERROR_NOT_BLOCK_HEADER));
-    let i = 1 ;
-    let block_hash = Vector::empty<u8>();
-    while(i < 33){
-        Vector::push_back<u8>(&mut block_hash , *Vector::borrow<u8>(&header , i));
-        i = i + 1;
-    };
-    i = 41 ;
-    let number_vec = Vector::empty<u8>();
-    while(i < 49){
-        Vector::push_back<u8>(&mut number_vec , *Vector::borrow<u8>(&header , i));
-        i = i + 1;
-    };
-    let number: u128 = 0;
-    let offset  = 0;
-    let i = 0;
-    while (i < 8) {
-        let byte = *Vector::borrow(&number_vec, offset + i);
-        let s = (i as u8) * 8;
-        number = number + ((byte as u128) << s);
-        i = i + 1;
-    };
-
-    let state_root = Vector::empty<u8>();
-    i = 133;
-    while(i < 165){
-        Vector::push_back<u8>(&mut state_root , *Vector::borrow<u8>(&header , i));
-        i = i + 1;
-    };
-
+
public fun update_state_root(header: vector<u8>)acquires  Checkpoints {
+    //header = x"20b82a2c11f2df62bf87c2933d0281e5fe47ea94d5f0049eec1485b682df29529abf17ac7d79010000000000000000000000000000000000000000000000000001002043609d52fdf8e4a253c62dfe127d33c77e1fb4afdefb306d46ec42e21b9103ae20414343554d554c41544f525f504c414345484f4c4445525f48415348000000002061125a3ab755b993d72accfea741f8537104db8e022098154f3a66d5c23e828d00000000000000000000000000000000000000000000000000000000000000000000000000b1ec37207564db97ee270a6c1f2f73fbf517dc0777a6119b7460b7eae2890d1ce504537b010000000000000000";
+    let prefix = b"STARCOIN::BlockHeader";
+    let prefix = Hash::sha3_256(prefix);
+
+
+    let (_parent_hash,new_offset) = BCS::deserialize_bytes(&header,0);
+    let (_timestamp,new_offset) = BCS::deserialize_u64(&header,new_offset);
+    let (number,new_offset) = BCS::deserialize_u64(&header,new_offset);
+    let (_author,new_offset) = BCS::deserialize_address(&header,new_offset);
+    let (_author_auth_key,new_offset) = BCS::deserialize_option_bytes_vector(&header,new_offset);
+    let (_txn_accumulator_root,new_offset) = BCS::deserialize_bytes(&header,new_offset);
+    let (_block_accumulator_root,new_offset) = BCS::deserialize_bytes(&header,new_offset);
+    let (state_root,new_offset) = BCS::deserialize_bytes(&header,new_offset);
+    let (_gas_used,new_offset) = BCS::deserialize_u64(&header,new_offset);
+    let (_difficultyfirst,new_offset) = BCS::deserialize_u128(&header,new_offset);
+    let (_difficultylast,new_offset) = BCS::deserialize_u128(&header,new_offset);
+    let (_body_hash,new_offset) = BCS::deserialize_bytes(&header,new_offset);
+    let (_chain_id,new_offset) = BCS::deserialize_u8(&header,new_offset);
+    let (_nonce,new_offset) = BCS::deserialize_u32(&header,new_offset);
+    let (_extra1,new_offset) = BCS::deserialize_u8(&header,new_offset);
+    let (_extra2,new_offset) = BCS::deserialize_u8(&header,new_offset);
+    let (_extra3,new_offset) = BCS::deserialize_u8(&header,new_offset);
+    let (_extra4,_new_offset) = BCS::deserialize_u8(&header,new_offset);
+
+    Vector::append(&mut prefix,header);
+    let block_hash = Hash::sha3_256(prefix);
     let checkpoints = borrow_global_mut<Checkpoints>(CoreAddresses::GENESIS_ADDRESS());
-    let len = Vector::length<Checkpoint>(&checkpoints.checkpoints);
+    let len = Ring::capacity<Checkpoint>(&checkpoints.checkpoints);
     let i = checkpoints.index ;
-    while( i <  len + checkpoints.index){
-        if( &Vector::borrow(&mut checkpoints.checkpoints, i % len).block_hash == &block_hash ) {
-            Vector::borrow_mut(&mut checkpoints.checkpoints, i % len).block_number = (number as u64 );
-            *Option::borrow_mut<vector<u8>>( &mut Vector::borrow_mut(&mut checkpoints.checkpoints, i % len).state_root) = state_root;
-            return
+
+    if( i < len - 1){
+        let j = 0;
+        while(j <= i){
+            let op_checkpoint = Ring::borrow_mut(&mut checkpoints.checkpoints, j);
+            if( Option::is_some(op_checkpoint) && &Option::borrow(op_checkpoint).block_hash == &block_hash) {
+                Option::borrow_mut<Checkpoint>(op_checkpoint).block_number = number ;
+                *Option::borrow_mut(&mut Option::borrow_mut<Checkpoint>(op_checkpoint).state_root )= state_root;
+                break
+            };
+            j = j + 1;
+        };
+    }else{
+        let j = i - ( len - 1);
+        while( j < i ){
+            let op_checkpoint = Ring::borrow_mut(&mut checkpoints.checkpoints, j);
+            if( Option::is_some(op_checkpoint) && &Option::borrow(op_checkpoint).block_hash == &block_hash) {
+                Option::borrow_mut<Checkpoint>(op_checkpoint).block_number = number ;
+                *Option::borrow_mut(&mut Option::borrow_mut<Checkpoint>(op_checkpoint).state_root )= state_root;
+                break
+            };
+            j = j + 1;
         };
-        i = i + 1 ;
     };
 
     abort Errors::invalid_state(ERROR_NO_HAVE_CHECKPOINT)
diff --git a/build/StarcoinFramework/source_maps/Block.mvsm b/build/StarcoinFramework/source_maps/Block.mvsm
index 6335792c7e3f68142b19e97e62266b4aa14ffd9b..f1c6a041e171908b9a04fb3133358ead6129f2bf 100644
GIT binary patch
literal 21992
zcmb80d3aA(9*1vML<|*sEg_1LQ#QB-GIt!YtOYU!A^GfX?}yl0v-$UmPe&+|T>Cwb5JoO|v)=ic)@$Ewc~
zO3M@4dv{0Nb8*Sa^1|3PX=U@GFSSfM(B|HE4xJi5+Hsum;0HJU_yzUJ$xojY=s2rH
zgn|B!GXk6-Wj=}Z6e#Z?&L=LsdI65p7*xDOoMA4!XK~8FPe$B8zibC5K-K+&v4V6P
z+u_{l!pp@e1%KJba;%-;_^URa#riuaFD%$`8bE+F8*IAWs_Cjv*KwSSz|~Yw&+?^DD#*{yD=tzkURjr?32NjQc&-;yrK0LNPA|Bv
zz+33cEB2(BQRvC?7GdMCBv{%K|iZQ
zu~I-kS+=Et@`;&Byaf;>P1|$9(mX`GOHf6c|0cuNgBvuiGN%IKSS5QZq(e)jt
z57d?BVyyL0Pnspvd>*sDG-EI?U^bAZoo5I^GZSk8L`c)t?qUM%6UMX%j$ajTdU}3IUa^|UhhdKb
zzgu}z6;fcPsm8_2a1Gv0Q-QqB*;sFYp8ak8diMXCc$YxW{&(=g?hJbNPr(`ndiMW`
zn#W@5*?%wQ0noGmIO2K0MK^sP%H`BR<;TU>Y$9qd=sOjK)eH2UGG+<5cv0tuIL^ah
zeq6M6Kk9kVt$h`1C+OB1^9s0lT-H^0oE>0(TzowSaVsK0xAq)Ce+1pyZ?HNO)5R#L
zFkL*{nN=L8033g}GstA@sZhP*Gt$kc=R^35Of7sy$a&!v#CJjW-4(2>p!@Cs)-}+5
z*Sf0XbOJqt_^>iT&ma$DEe1Vn!LQq#Lt#FVNqQ)v)db{r%XBniDar
z%extfSsnD3W)ks|!9_Q1Ul6YmH
z$GtH(fga8Fsnnx+Kk+^QJ(>?;9Ra;=Jcji#=yl^!tdBsi8xLR|1ifzDhn3L8&1&!h
z=0(t}K|6N!YLG>f;|F>*7=#rJdNt^e6$pAY_;0Re2BTB2@$M#Gf6!~ZyRcF~ukli`
zhC^fd4(Wh30`zLo&Qp3dID>c#pqZ@QygeQTy>7JcnHDl;Iq`Nugfw5k+6^tGxdQ7w
zh?M3cEb~5WB~5!p?WCDSycC|L4$?e@8H3qLnpZJ{Fr%b-9y1s-+LalG*+rVIj0Ih#
zS>IT2r!?zf^@eWJtXpArm!|E{9@4b;=q_zidp6uH%^a*;xJQ~3u_i$;X=Y&g;9hB(
zn)9HyG|fCW6Z%N=MXZ;guQbcGaYL-+$YU6tjFMfX{KPAc8-#!U7dNP
z*`9dyc$U1E|9?_u{XCsWg_yhOHBnOdFeSmxjFwJ>Rh9{+aG@vbuswW{%t=#*H`S#@D_VLg}zMH
zvhOJuRFe*Ft#c$NaKAG3$UD3Z>kQ}|NgL`O2s%en6{{iW9ErUqog*1Tyfn}`k_lMT
zK<7w|IU97w^C7IcpmQX1uzn9ZN0N@^1DzvD#o7TnpRp2a8|Zw-BUsx(?}OXg^*;C)
z#5)5z^RWl(W6+roV}1@g^I=R=yUu)6t3_Xe&U{=Z9-Zl8AKaK#Fm;Z^n5K3YITEZm
z&^eNZSnWXPNQ~JXbdJQBrgohpnS?bNbdDq$%L_V3V$3XPE@v=fn%Z?XWdqjRptC7!
zv5tVwrug4Rjumt^B^;}jL0(ZT)*!e;nrT>B&{~=&xSA5oHqxAdISaF`G>tVITqK#-
z^C7Vd9KYZ!pEpCFB-@R=2ciPmxapzZjsCn7#{hC?xy=*P)^VPJDjs(q5d%2PmISpb
z{Qv#qndFU2ZdF-i0b2
z-_+tlue@D9(72zV!k4>TF_Gjtpu(4XPYZFEUianB->0}=LN(6>Z;_{@$S1ovl&h@^
z)jfH>Qcr$nW|2?!?n!F60KuNT{JeCZx{GV+pmGTH+`@MI_;AO`fe?@D&*L)m*P*Vb
zcxs;KRv+kJ7z|siqS?A$D33{Kk?H#-~LGQDcU`>I*i4oB~)!kU#
z#&KQ&Hyf>|Y3Nx9asO=Oasx`C#`Pi*(NU^VIXr<=;HFY?^zEUM-`3!i~+7y;nqmnUxC34}yIZ
zI9#ca9Jcj%&cngwV*V%YjvrlcYeyu?m_&9!t(%WXbe7}yJQK=4A-I5KLH1Pj&|Pch
zIKM*G-*kQYr8Sq+5kkn56#HC#pu9m3?*-?8pUz466T1=UoJ2I%0MI!J+h(1USVFv~
zLFXi%!Fm>SPT~Qq=RoHq?2N5*661+y-pTsh#&N8ZptBdJur7ekUhKuX2s(T5|LIAt
z66_~~KH(9`U}_KgghvOg?w~UwwXk}C&WPB#Q)fi%z}Fd(Dbzd@bVlSstofibB4e=@
zfX;~6iCt$z>=H+3L{3oiSD^oAz!|K|pfe)dvAzSH5wUL_oe{BXFP#zT$pjVyIwKN`
zl>j;;(gJHR=!}ScCF+cb{dm?Hk>%9<0_cp$O04yuGa_@a%0OpC?E6}0MC|%jXGFfG
z<}08xBLBep8FWVE7}kG4XGHABgwBZA7h*d(EB53&BL><_GZrfW^og04Sc9RXjA_4g
zI!V*6U8AJAn3|u0XlX9TdI>s9b2`?`&_$Ydb)!$=j3%DRTj*0bUt?W@ZnE~vSXZID
zG>>3i1APj|uDp86m^P!L&+GJH)zcgFd7T)nL7>m;G{;H+eO|||3iWv%o5s@Tb>>m?
z;}9czX%W_Ph?Qm`*3-~Ons&w7SDH4>)=!!rQS)(#ljdhwXQ00{-^4l#1EgtJ)A7=@
zDW`$bY|7d<5(Y`L6;>1^NHYX08U{<#uJrY3A)9H`r-dd`^JGYtwHIQ|fFaTxfi)9`
zO4DW`Qlx2fp~IxPjhf#CeOl-(toLEKjQJAQei$K5n;{t~O`EON=ZXSMQVsOEqUu<6
zL7yx7j;pDMIa;>U=5NPH)8>=MO0z39_l9xOjKS&;`utNQ)&LkUV@}2@1+O&Iu%<$q
zG;MY_U7A~ncMLM5xeRMH_@rs`#F^3zBwvqVJ<~iEf7&BX%Hbp#9njMMP
z6DGMbdt>HG)8@$a>8p{%yASeZ%+Xlmpg@{ltTdP`O%K+1D3s>?Sfijwn!~UTwR3a&
zY8vKrm?C4^orF?pE+XC&FjbmMv6jI!X)eZE0@I~AA8Ri8#u?H)ig^NNO7kGrIe1W-
z-(p>WS<>8vbrEJu)23eMNV7J3$<5#)X_}qqaG2}LG<($Zq}dfK7UoMc5~~j^kY-D)
zM0ix1L$ORdACqPh)(}`IO}jt;q%?owPLATKTPn?BYTgcikmjZe^N-S8in$V=lBTKs
zMOg02EXRD>m1(Z%8EHn)Lml8*X$E73!E@65hMMbOJ}=GFn9VR(Nb@jebIcc{`5~sc
zqLtF@ixm$qO4B||FH5t4c#~n3G>frHV6`+0v5MdoY35+%!WwCsny0{8X_}e)VOS^4
zby({S(%gu(8Oo&jI@UILRhnC{w!#K!mYH}^E={}rzEPS7iFXKIljaeuqp(SuA7UMb
z&C=Y5wTG{Zt(uTERAHw#I4$+ogGpcDBXbAx*nSxl@`$h&L8?Nz)wH
z8V9>wndV^EThc7Vng#DjGaYL-yerK#tjA!FG@rmS?fjE87h)}fz0$OY+V)HH9^x(M
zsXHLe&6q#JA!&YBVSXshqnKa7VQHG$zl0;M%!`;uU76;JK9Z)F9-0Klq}dN^D10o<
zNURk2i!{Tr#=>8vSp&-hpGY$l%Usc?(wu`e4~|RIK1-iVvz&Mv;e<3dV{L)IN%J+V
zP4I;@*JG8zm(nyfZ-tZ6{28lGd&fB?&95=*VxE@f$qLg6s@*p}u5ZGS?+L<|ZMDSdtK1?MiD2L9JtpkVFzBv6f!R&5c;H$VTjrLyKC9+NmY9
zolfVp9mQx(tHY^uwALBsFrz5bDMP7_Z7}a&lY77Sm&9K?
z-+yEAY}f3R-92`!jem5#?D$uEPK$~
z!&(lmV{=R^3etyOQPZ+ElI5zD?)Bys=N74x-GnZq0C)4I?G+A)w5+)l?9KLhC+6pk
z*Xu8bucwfoA5y3ev$mFHZKoRf=>@*rB2R|-@%Ch=7iOzRj^a@hDg0ND%q`Bz@D-@X
z*5+}o$coa}*$)>)`p54a*ESfbe+b&5;z-}J15t_OFK@+oR00J^X+QfwDf3xxE>)7!
z{%%y3@(}A?rXVSIqV`a*l=fW|B4rTwX9QJoBEh^(97*%C+gQp2s3X)w%8yZJsHv1^QCFy$BY6$^tdyHj|DhIA+V3ANrL0k#
zbEM~_yu*=Q$mbo&s>oK3q&a$PDdSP2sEw3SsIJu3k?e>o;jMcUT@Mfhy9%N%rS)ZQb^AnLs8>M&m5_!G}1Fi0xCbk$t1A~Sw?!2
zIEFe-dXl(_^5^J!l4yqNNulz)xq~&6kb34QK_(;h%rO>~PI~6ZMEOY192qDt>6v3R
zY7B+T=WdRiMS42fh}uqiIysBFLbc@4AE6$To@3reg)-^uIc6GiF4d7ougZGW$iYX4
z`Bf}y4Vf-X;Ga&`$=SXLolg2}d!h!C
zK3gN_k%Ny=-9z{YMdr)FhxIkkJ*3Ze8tP@zXIqLoNcvTJYK3(0;(IrcLs#NS`8nMx
zaHE4Mq~gQ1lMm!I@r}$;c%hSbd>3FU>1#I+wTSe!8-rR*`r7S79U%PJ6x4q~8mV^1RO@^?TuJ)RAQW!_jY4kAJX@BAS#^ny=^}$
zeQy`A-b~W>_GHvT()ac-)FRUNwtb!Sy}gn3-Xwi*8~HBjJJ$Y=>O1xm*87z79eWV<
zIqB)`3)EjpPj5z^B|VcJMwOGE$qt}CBR!MtMMczeGHKPT%O`x&lU7|+H0epJBdQbW
zNvjL0JLyU51ypC!lU4|-2kE_~VAKH8drQ~3o^eRMxAYzICQ|P$6`^L6-did}Ev82D
zb!iD|DK(bzHPk9AfX>C@mN1y(M$xVA6X_4N$4{g1nQvp;D-`l+7yE>>{OobO%G>?-{QTnvY+BPN(@p
z=p*zr)BI`tMG8zWF3Qf6zfrpZ{gHx-#^?A7i_&xQ)kMYHq!mPg#kt-|KKYBn>d;z-
zJNpe^eP|PMg+2L=VvesUJu|&1-BaMpQfD@w$E_h=Eadks7gubKBV`<_g!HWU5$Y`I
zS#Le+9n!O&{haiycb)Zalb-eNp+c%T`5a?p7*c;asfnsZde#d^MUbBLe&pzPNY8p#
zPzkK5ch#a%aik}>I;eQk6P$f?J;CL(UJ2=4wKP-~>0LD=b4bs6Mw+ARS#JYsE9qHp
z4r&GIS_H;
zr$Qs|lb#BVG)LD{VK3AW(oInwjvZPb0z^J6Zm
zQVl2bV^w4gq@Ev*3L^&}mh%`n=8*HfzPadEC@|ZXo~i$KW+ikTRpqaUI;gkOHck0u
z4q-bwwZYE+253_Q_7KQFqqNAU)?d-cvR2d6Y$i2p!Z1vFGif2Gv54H`_1{)`Ig3of
zMysvNaZQ50xhx}NBku-;PA6P^9TrYE}Jvfh5u
zyLa|$iQc{YiuI0?o)S->PLZAxkD-o}o)QnElKBzTv)?^rWu%_{8ls*hJ^MX}dY<&`
zR|VCI^z0W>A@%HciD%Rrt!KZUs9vOJzrLs#(z9Q0R3Fl_UpG{D(zBmAazE0u-)PiJ
zq;~{Iphl9O{idOoke>bQ7k)kaZDzeUNY8%TP-UcNzb&Y(q-Vdis0O@`=!vczd4}{v
zcLVib(mR6pQ1?ksbmveHNbd-qt&n<0@DIrUk=_xk$`z_cdPgt}6;66busW&+=^epf
zR0!!EL388?(mR6PQ9VfS2-;JR-Vq$fdfC)TzQ21>W}wr1hoz`#r1uVIqGplaJDiT1
zL0#o}7NEK_GIf{oZR9TMA!QnBDE&stPf(vyPbv4K{zSc`T#q_Hy`@}NA^S*ae^BTv
zN33~<+rGRlSj(GpuVHAQhre()1};oyh<5TK14ktuaqvXr5|NV`Iz>2Z!JxbavSTtOB1Esiuxl>l5zoRALU4CZz|4QAspQ%E72qnk{8AY7otl(%xd8FJ(j4Gn>&1
zq-=ol(92SKQMvSrlw(mDv{1^rs8{)JE|&63k@;cI7`8TATikd}Rq}*)Q
zqpebILv5#RQf@Kp87<{{)CMY(vJADuB;}t`cj-+j&!g_pTT+%+togQ-_R+0?u$Z{m
zn1O=_#V4nE5@VAGq{XGUtnj{xgJK4H;$r*si%qHcXFmAFKKbY5p-FxD=cM@5q&{ge
kaen+qO3I)VPx7EN&o3Y7wrbn|;fd=rEY|b$q5Q4?16o,
-        index:u64,
+        checkpoints : Ring::Ring,
+        index       : u64
     }
 
     const EBLOCK_NUMBER_MISMATCH  : u64 = 17;
@@ -141,105 +144,119 @@ module Block {
     }
 
     public fun checkpoints_init(account: &signer){
-        let i = 0;
-        let checkpoints = Vector::empty();
-        while( i < CHECKPOINT_LENGTHR){
-            Vector::push_back(&mut checkpoints,Checkpoint {
-                block_number: 0,
-                block_hash  : Vector::empty(),
-                state_root  : Option::none>(),
-            });
-            i = i + 1;
-        };
+        let checkpoints = Ring::create_with_capacity(CHECKPOINT_LENGTHR);
         move_to(
             account,
             Checkpoints {
-               checkpoints: checkpoints,
-               index: 0
-            });
+               checkpoints  : checkpoints,
+               index        : 0
+        });
     }
 
     spec checkpoints_init {
         aborts_if exists(CoreAddresses::GENESIS_ADDRESS());
     }
 
-    public fun checkpoint(account: &signer) acquires BlockMetadata, Checkpoints{
-        CoreAddresses::assert_genesis_address(account);
+    public fun checkpoint() acquires BlockMetadata, Checkpoints{
         let parent_block_number = get_current_block_number() - 1;
         let parent_block_hash   = get_parent_hash();
         
         let checkpoints = borrow_global_mut(CoreAddresses::GENESIS_ADDRESS());
-        checkpoints.index =  if( checkpoints.index + 1 >= CHECKPOINT_LENGTHR ){
-            0 
-        }else{
-            checkpoints.index + 1
-        };
+        checkpoints.index = checkpoints.index + 1;
 
-        let checkpoint = Vector::borrow_mut(&mut checkpoints.checkpoints , checkpoints.index);
-        checkpoint.block_number = parent_block_number; 
-        checkpoint.block_hash   = parent_block_hash;
-        checkpoint.state_root   = Option::none>();
+        let op_checkpoint = Ring::push(&mut checkpoints.checkpoints, Checkpoint {
+                                                                block_number: parent_block_number,
+                                                                block_hash: parent_block_hash,
+                                                                state_root: Option::none>(),
+                                                            } );
+        if(Option::is_some(&op_checkpoint)){
+            Option::destroy_some(op_checkpoint);
+        }else{
+            Option::destroy_none(op_checkpoint);
+        }
+        
     }
 
     public fun latest_state_root():(u64,vector) acquires  Checkpoints{
         let checkpoints = borrow_global(CoreAddresses::GENESIS_ADDRESS());
-        let len = Vector::length(&checkpoints.checkpoints);
+        let len = Ring::capacity(&checkpoints.checkpoints);
         let i = checkpoints.index ;
-        while( i <  len + checkpoints.index){
-            if( Option::is_some>(&Vector::borrow(&checkpoints.checkpoints, i % len).state_root)) {
-                return (Vector::borrow(&checkpoints.checkpoints, i % len).block_number, *&Vector::borrow(&checkpoints.checkpoints, i % len).block_hash)
+        
+        if( i < len - 1){
+            let j = 0;
+            while(j <= i){
+                let op_checkpoint = Ring::borrow(&checkpoints.checkpoints, j);
+                if( Option::is_some(op_checkpoint) && Option::is_some(&Option::borrow(op_checkpoint).state_root) ) {
+                    return (Option::borrow(op_checkpoint).block_number, *&Option::borrow(op_checkpoint).block_hash)
+                };
+                j = j + 1;
+            };
+        }else{
+            let j = i - ( len - 1);
+            while( j < i ){
+                let op_checkpoint = Ring::borrow(&checkpoints.checkpoints, j);
+                if( Option::is_some(op_checkpoint) && Option::is_some(&Option::borrow(op_checkpoint).state_root) ) {
+                    return (Option::borrow(op_checkpoint).block_number, *&Option::borrow(op_checkpoint).block_hash)
+                };
+                j = j + 1;
             };
-
-            i = i + 1;
         };
+        
         abort Errors::invalid_state(ERROR_NO_HAVE_CHECKPOINT)
     }
 
-    
-    public fun update_state_root(account: &signer, header:vector) acquires  Checkpoints{
-        CoreAddresses::assert_genesis_address(account);
-        // header = x"20b82a2c11f2df62bf87c2933d0281e5fe47ea94d5f0049eec1485b682df29529abf17ac7d79010000000000000000000000000000000000000000000000000001002043609d52fdf8e4a253c62dfe127d33c77e1fb4afdefb306d46ec42e21b9103ae20414343554d554c41544f525f504c414345484f4c4445525f48415348000000002061125a3ab755b993d72accfea741f8537104db8e022098154f3a66d5c23e828d00000000000000000000000000000000000000000000000000000000000000000000000000b1ec37207564db97ee270a6c1f2f73fbf517dc0777a6119b7460b7eae2890d1ce504537b010000000000000000";
+    public fun update_state_root(header: vector)acquires  Checkpoints {
+        let prefix = b"STARCOIN::BlockHeader";
+        let prefix = Hash::sha3_256(prefix);
         
-        assert!(Vector::length(&header) == BLOCK_HEADER_LENGTH , Errors::invalid_argument(ERROR_NOT_BLOCK_HEADER));
-        let i = 1 ;
-        let block_hash = Vector::empty(); 
-        while(i < 33){
-            Vector::push_back(&mut block_hash , *Vector::borrow(&header , i));
-            i = i + 1;
-        };
-        i = 41 ;
-        let number_vec = Vector::empty(); 
-        while(i < 49){
-            Vector::push_back(&mut number_vec , *Vector::borrow(&header , i));
-            i = i + 1;
-        };
-        let number: u128 = 0;
-        let offset  = 0;
-        let i = 0;
-        while (i < 8) {
-            let byte = *Vector::borrow(&number_vec, offset + i);
-            let s = (i as u8) * 8;
-            number = number + ((byte as u128) << s);
-            i = i + 1;
-        };
 
-        let state_root = Vector::empty(); 
-        i = 133;
-        while(i < 165){
-            Vector::push_back(&mut state_root , *Vector::borrow(&header , i));
-            i = i + 1;
-        };
-        
+        let (_parent_hash,new_offset) = BCS::deserialize_bytes(&header,0);
+        let (_timestamp,new_offset) = BCS::deserialize_u64(&header,new_offset);
+        let (number,new_offset) = BCS::deserialize_u64(&header,new_offset);
+        let (_author,new_offset) = BCS::deserialize_address(&header,new_offset);
+        let (_author_auth_key,new_offset) = BCS::deserialize_option_bytes_vector(&header,new_offset);
+        let (_txn_accumulator_root,new_offset) = BCS::deserialize_bytes(&header,new_offset);
+        let (_block_accumulator_root,new_offset) = BCS::deserialize_bytes(&header,new_offset);
+        let (state_root,new_offset) = BCS::deserialize_bytes(&header,new_offset);
+        let (_gas_used,new_offset) = BCS::deserialize_u64(&header,new_offset);
+        let (_difficultyfirst,new_offset) = BCS::deserialize_u128(&header,new_offset);
+        let (_difficultylast,new_offset) = BCS::deserialize_u128(&header,new_offset);
+        let (_body_hash,new_offset) = BCS::deserialize_bytes(&header,new_offset);
+        let (_chain_id,new_offset) = BCS::deserialize_u8(&header,new_offset);
+        let (_nonce,new_offset) = BCS::deserialize_u32(&header,new_offset);
+        let (_extra1,new_offset) = BCS::deserialize_u8(&header,new_offset);
+        let (_extra2,new_offset) = BCS::deserialize_u8(&header,new_offset);
+        let (_extra3,new_offset) = BCS::deserialize_u8(&header,new_offset);
+        let (_extra4,_new_offset) = BCS::deserialize_u8(&header,new_offset);
+    
+        Vector::append(&mut prefix,header);
+        let block_hash = Hash::sha3_256(prefix);
         let checkpoints = borrow_global_mut(CoreAddresses::GENESIS_ADDRESS());
-        let len = Vector::length(&checkpoints.checkpoints);
+        let len = Ring::capacity(&checkpoints.checkpoints);
         let i = checkpoints.index ;
-        while( i <  len + checkpoints.index){
-            if( &Vector::borrow(&mut checkpoints.checkpoints, i % len).block_hash == &block_hash ) {
-                Vector::borrow_mut(&mut checkpoints.checkpoints, i % len).block_number = (number as u64 );
-                *Option::borrow_mut>( &mut Vector::borrow_mut(&mut checkpoints.checkpoints, i % len).state_root) = state_root;
-                return
+        
+        if( i < len - 1){
+            let j = 0;
+            while(j <= i){
+                let op_checkpoint = Ring::borrow_mut(&mut checkpoints.checkpoints, j);
+                if( Option::is_some(op_checkpoint) && &Option::borrow(op_checkpoint).block_hash == &block_hash) {
+                    Option::borrow_mut(op_checkpoint).block_number = number ;
+                    *Option::borrow_mut(&mut Option::borrow_mut(op_checkpoint).state_root )= state_root;
+                    break
+                };
+                j = j + 1;
+            };
+        }else{
+            let j = i - ( len - 1);
+            while( j < i ){
+                let op_checkpoint = Ring::borrow_mut(&mut checkpoints.checkpoints, j);
+                if( Option::is_some(op_checkpoint) && &Option::borrow(op_checkpoint).block_hash == &block_hash) {
+                    Option::borrow_mut(op_checkpoint).block_number = number ;
+                    *Option::borrow_mut(&mut Option::borrow_mut(op_checkpoint).state_root )= state_root;
+                    break
+                };
+                j = j + 1;
             };
-            i = i + 1 ; 
         };
         
         abort Errors::invalid_state(ERROR_NO_HAVE_CHECKPOINT)

From fd4dce502a4189285907f8c7e8945ae37cf6383d Mon Sep 17 00:00:00 2001
From: WGB5445 <919603023@qq.com>
Date: Thu, 30 Jun 2022 09:26:46 +0800
Subject: [PATCH 06/14] Fix checkpoints

---
 build/StarcoinFramework/BuildInfo.yaml        |   2 +-
 .../bytecode_modules/Block.mv                 | Bin 2573 -> 2679 bytes
 build/StarcoinFramework/docs/Block.md         |  73 ++++++++++++-
 .../StarcoinFramework/source_maps/Block.mvsm  | Bin 21992 -> 23094 bytes
 integration-tests/block/block_checkpoint.move |   5 -
 integration-tests/block/block_checkpoints.exp |  87 ++++++++++++++++
 .../block/block_checkpoints.move              |  97 ++++++++++++++++++
 sources/Block.move                            |  30 +++++-
 8 files changed, 278 insertions(+), 16 deletions(-)
 delete mode 100644 integration-tests/block/block_checkpoint.move
 create mode 100644 integration-tests/block/block_checkpoints.exp
 create mode 100644 integration-tests/block/block_checkpoints.move

diff --git a/build/StarcoinFramework/BuildInfo.yaml b/build/StarcoinFramework/BuildInfo.yaml
index cd1314ff..97fe8e15 100644
--- a/build/StarcoinFramework/BuildInfo.yaml
+++ b/build/StarcoinFramework/BuildInfo.yaml
@@ -261,7 +261,7 @@ compiled_package_info:
     ? address: "0x00000000000000000000000000000001"
       name: YieldFarmingV2
     : StarcoinFramework
-  source_digest: 50F7CEF7C69D7B6A649CC383A40C5CA005B4A75CB9F561BDEFDAF9C7DD46C501
+  source_digest: BF63BDE2783A076337DAF685886858A6990339131734069BD86E3D2D600DF02D
   build_flags:
     dev_mode: false
     test_mode: false
diff --git a/build/StarcoinFramework/bytecode_modules/Block.mv b/build/StarcoinFramework/bytecode_modules/Block.mv
index 2390ff5f15178dc8f07e4353c77034754c9c55ca..da07aa9c372d67ba6b4230ff63ed3a162d12812d 100644
GIT binary patch
delta 977
zcmYjQO>Y!O5Ur~Iny&8MnOSCb@fZjE6&u@&&6hm^6cOc;U%)A1wUJlIk}=3@xcUIs
zNI`Sp!ii%piNrk@B!t8zr%2?QAHXr!)NCS$IdpY*^{amGRnL#b-^EYWg_q=h(a&x2
zhBNz?NBla}@z3yk()qdQzu4VBT>%2Msub8S!6Ue}AfsK69T_kCu8bQV5NHzt+?L7^
zk|6--E7(KpwhJYgoifU~o!CcESEZD`b{^20>skZesOAB0Ru=$ws|CQl>I=ZSx(N7H
zbqVm+hGhKhCAq=fSzeJUcUD#rf{xtbE~lLHxxC<#``l^1#dR|H<`ADz42R?C$>`|G
z!yhKc%_mjm*}>7%@!`S#Xng$O$-~LfN#pg_pg*2YC&wqF2a}`8^k6y~@9!T^rqkx8
zUTGfd?dDhg9!>MeEMU<*Gxtu_rC>3^MYW_9>4BOv%c@eXexT%=Tv>5p_6?%WbyT_E
zpooka6b}2WS5?oHNdz-L+q3_jhQ$a0)KWlnI_EV>VsTch&zNG#n(;J+GGI!qgQ}s2
zHAd=EP3o5UI#8|9+?AjSg+>|~^2||fA_fR}cGuaYM?)e)VGkzvn~7?0nd#A)kfC(o8yl1|b_%9I6eJ}J;jm=>TZ1)A&hNPg7Ae;YfipG2=hn&p^Ypx|e
z*bKr`dH}-Fu+8*mrY@?U^wO!;?p;Zyx@3}|#9;}hHQc7Y3^ru}6D!s|CG-<1O>=*t
zbIo${cILnwm*T*uWE-iu=m#jG`~tf&?1Zhlo7(2SzkQeZeBFsd9$pcVzoB`D?No$x
vi^WLhJ^Dz2)CV*lF_g%gJQVD#NIS93M?XK`YHOQDAWseevF)GyR-oY@X#r;Q

delta 849
zcmYjPOKTKC5U%RS^h|Z{?#yOpH#2-Q~Pfy^xo5L
zdThJygFW_3U&i7W-Tu)W2=JN^Aeec}(L3i#99uz|<3a#@e_n?pr!Oc4crl#-yp&D?UQVX~yXhIg_4F)YmQDj+S>#M`
zb+&kBW3I`qHk$JYq%1iqQJE@Kjm9XZgj{|T7f`+1!zUvDCDXj6+WCFetkrtM;o#tK
zYkROi814+Wdj0;vV3?n%)hOKAf7sjI>2LK8wjb;b_7C%q>YKgBPKqV{D1WUtkHoa~
z(8n1mg{sSjo|UO&K>~!|jHJhwN2~5+q@0L?Md5%Tg!pf&Mo@voLIp`$kwFzRbXdkr
z$SFNzF_Wn07?eQnRtXGd+MxxD9zg!tt9L{!c$}QnQLqG|jD`B|sA8cD8Ko#Bh@xDX
zwE#2YJQ5+~*G(ruQkm}z8GdqBFE9q7&L5e&@5Qz_nEaJlKSI(>^T}u0roPL_w2U0;
zdjShV+0(mL;OL$Ui?oS_^||h!S*P_aCK(mgTBcB0U$U%<2Lr4~lgIM^v1eqJ$7@7X
zZ&8<%6`7D=5Q#+wm5^fa6YEt1E*2z7Rb^&{&#gt{I~tuI`(H
 
+
+
+last_number: u64 +
+
+
@@ -220,6 +226,15 @@ Events emitted when new block generated. + + + + +
const BLOCK_INTERVAL_NUMBER: u64 = 5;
+
+ + + @@ -238,6 +253,15 @@ Events emitted when new block generated. + + + + +
const ERROR_INTERVAL_TOO_LITTLE: u64 = 20;
+
+ + + @@ -500,12 +524,15 @@ Call at block prologue
public fun checkpoints_init(account: &signer){
+    CoreAddresses::assert_genesis_address(account);
+
     let checkpoints = Ring::create_with_capacity<Checkpoint>(CHECKPOINT_LENGTHR);
     move_to<Checkpoints>(
         account,
         Checkpoints {
            checkpoints  : checkpoints,
-           index        : 0
+           index        : 0,
+           last_number  : 0,
     });
 }
 
@@ -519,7 +546,7 @@ Call at block prologue -
aborts_if exists<Checkpoints>(CoreAddresses::GENESIS_ADDRESS());
+
pragma verify = false;
 
@@ -546,8 +573,10 @@ Call at block prologue let parent_block_hash = get_parent_hash(); let checkpoints = borrow_global_mut<Checkpoints>(CoreAddresses::GENESIS_ADDRESS()); - checkpoints.index = checkpoints.index + 1; + assert!(checkpoints.last_number + BLOCK_INTERVAL_NUMBER <= parent_block_number || checkpoints.last_number == 0, Errors::invalid_argument(ERROR_INTERVAL_TOO_LITTLE)); + checkpoints.index = checkpoints.index + 1; + checkpoints.last_number = parent_block_number; let op_checkpoint = Ring::push<Checkpoint>(&mut checkpoints.checkpoints, Checkpoint { block_number: parent_block_number, block_hash: parent_block_hash, @@ -564,6 +593,18 @@ Call at block prologue + + +
+Specification + + + +
pragma verify = false;
+
+ + +
@@ -612,6 +653,18 @@ Call at block prologue + + +
+Specification + + + +
pragma verify = false;
+
+ + +
@@ -630,11 +683,9 @@ Call at block prologue
public fun update_state_root(header: vector<u8>)acquires  Checkpoints {
-    //header = x"20b82a2c11f2df62bf87c2933d0281e5fe47ea94d5f0049eec1485b682df29529abf17ac7d79010000000000000000000000000000000000000000000000000001002043609d52fdf8e4a253c62dfe127d33c77e1fb4afdefb306d46ec42e21b9103ae20414343554d554c41544f525f504c414345484f4c4445525f48415348000000002061125a3ab755b993d72accfea741f8537104db8e022098154f3a66d5c23e828d00000000000000000000000000000000000000000000000000000000000000000000000000b1ec37207564db97ee270a6c1f2f73fbf517dc0777a6119b7460b7eae2890d1ce504537b010000000000000000";
     let prefix = b"STARCOIN::BlockHeader";
     let prefix = Hash::sha3_256(prefix);
 
-
     let (_parent_hash,new_offset) = BCS::deserialize_bytes(&header,0);
     let (_timestamp,new_offset) = BCS::deserialize_u64(&header,new_offset);
     let (number,new_offset) = BCS::deserialize_u64(&header,new_offset);
@@ -690,6 +741,18 @@ Call at block prologue
 
 
 
+
+
+
+Specification + + + +
pragma verify = false;
+
+ + +
diff --git a/build/StarcoinFramework/source_maps/Block.mvsm b/build/StarcoinFramework/source_maps/Block.mvsm index f1c6a041e171908b9a04fb3133358ead6129f2bf..12b95a1f59f04ff0f6cb912be156b92aa8bf25ee 100644 GIT binary patch literal 23094 zcmb80cXU-n0*CJlAt4lL5Y_8Jdzg^NM2&{LUC1Ef?(N2 zaa9(i7bSp#1r$L+!2(iNDGEsUSipjP71?hjBjumpg>$~+QNAg6-psvoe|P+KcF(A` z<5!J~-4a@K=BhoTBOiYLfvK(I;!aO`yU}AS;uD5Cjx!v5aN!?c#U8o&8Kc4-=T}if zpD@Q61WrX|K92P?C~q6iUJqV$1;@D>RDJz$(mZ&xaLT|ZYh1y&tO2KjYWqiHRn&cK zgOlLF%flH1VX}`av0ek+#}ioJfx4F35sp(2loyB71u96hKBLpZj8M3$vpZHVP~IS% zyF7ULIAc9{58*rpQM&18>Nw5<;P)K*&A2Q>@)g@Itm9bs0so9!>kRwe7vRxH%MsARA>Z$zL_mEFTod})Rw zK@Z(Yya?LSD=!MGGU)jqiB$>oEVMlhm$NI5`np0zY1)yCkmh9STL_WT%)}~&O479R zBubiQ7H)*fp3Dz1t4ebx)(NO4&Fxq_;0kGeiS-9mm*(eKUqB6M+7(zwnvPkg5bepV zi&;;a4Y17muP@DdSXUXOX|L#NX|801QmM1CG&^ApfF{yxgf$SZk*00EsWk7UzWX7@ zlQ{{qxim|$ra%j6PR1&MmeRZ%D;rvQGJ}}0o=nrv*3w*twI13?b2`>6XzR&big~Rk z)3hEZ&0ny>>N(DJ(maiM1!g;Gj>38n;-$F_>man3W}EtslLQ^4S%dmYFgr?fKUXvb zGeMg6d40V!7gFCU=p@Y0=CZ zm8K7?8FZ7TZQa90N6XmPQ zR9NM&&U)$Xt*BX`dmD>&J?P#VGYB3gYYP@$0+>G@-WMmKE&$!z09GOB-ezLG0D28( zl$#!2P>w}9&M9!hyxzaQ!Tt%Vl)nsmd4Xh=IaR>C49FQDgLn(*u?u1qgC4uySffFY z-D0fepzmKtv5tYhe}xenR0DngYKheg^!>|^H3Ibg>m{t$LEpcoV66jv|9YM4{s2?o zzb0Z%1^vFbmHM`Uhhchz$M|gEqP%1*iB~($T)^$99?y}D947-V=jr?rUHJ@rIjZ)e z296T~-$-R{zzpiz5P}6x*tP*lR&R~ zV@?IVn(eIAt9c&v%?G`j7hx?0o&GGtDg&MVJcso>==5g+)P+VpW;CYGbWWC=I@7V^sWTn>8|h4^D}C$+I@3wS>IpZ=`Pm(-2k7+YMpGZ? z^vATE1UmgO_qlZFA^SNNYaAp>^FgeM&{LWvSf!98%}H33;Z|whhxHHWB~80O>@Ce% z)HfUYNOLaMJh)Ao&tlDizS4XWt1i#te$w27c?9}Pb2rv0NRj5ZSl___X}*W`Jq(nl z-T$Uavo7x(%^*#h<_)DeqWyUZYI_AwURA_e%3D*Um=KDU_yZISPuTY3_6Npjes% zv2tLvG;hQj31g(0P;Pn%nr2=>>@{#X3E?LE44pg2QzX5@`%mvsJ`mx-cGqhqE-W6t#hYp@&X}$ra$C&3j
  • zuREE;iesFcEIw3&PbMEZ2_H;lwv&vIwP^yq%)FFsP7QyjN~}h&!96B zW1az>coGmeKF}G-pVW62bVhO*>nP}qWEWNft?N9aAyx;_c}6%^N2n=hh;3abA493n z4?6kiiZu{)@?p$7K_?%^G_C98V+z)zpp%bLSPy_cpJU7t&>4v_P3t-%S%b9+bVl+N z)^ngU5@Ws$IwLWrX}l#F!`G8aY3WX`}nq&0? zou-V(Dg~XUJd3pubeggO>s@Fmul*3#31}tF!C0puR+_&tmVaQjmZq`JfQOLz9X1lX z!SO|82mF~H&VwQ!fOg>=j_s_Tjdge?<^ytjd6YJ-wd1USNY~pYV#qbzSfEC^|JOg< zQGs!)S7j7h2X)KO&~oylIIlR@AIdLu3-j~k5s+Y0<`z_TN91RY^K=BaK{KWzL~-EP zpA&R*GF2z@ut!4;H!~+ID<`8kH#9CQr?5!(E{2m-Q2l~}xqe-4Gi5%8NH;JxROpvK zS7dWCe<=6mSFSYNA?JPh?P)IVlJma&^7l3FX^3*~@fW$pMFBa)jk(%ZP{j=f#<=-e zSw#Ukx5v4UG-Dmph?r zGMQVL3GMw%d3Folr{HqFv(Cg{1o}Jc%`Hg}L4RkRiZuFFAzo^8vFk*{ zzT)UaQ)CnD)s!$2n@30N-Z zM8rN4bs}On&pHt)qvh406Oos&)`Lz&p2XS!IuWtYYn_PL_gkHaoT24#p3FKCsfbk_ zbRzOOb=JVtiHO}y=tRUm5ZlPRVlpkKL0f62V+{j+Vx|+83vseeyVJQ&n)cnboirEH z@-m2*W*OEi&|aF4VZ90+q-o!7^eLPm^_kp4pThYKiwW=H6pjz83UreFJVu>WG4&}N z`{va})@c(JeO{+8EvJG$uaky#H|X;^9kGUiKCffn3iWv%8)ND7Ix}f`9(0qVG#{%B zx=XVZYdQ3grhQ{gl%|c@dP?&IEuVxWX`aIR1#Xq*POM*{mo)9$bZ=?e$f=Js<9YY( z47W+M3sxfZm1aY%o{%g}`=+l?3)!SmpB8$6mP;T-wqA<$FBl-r9IWXuP?|P{NR_6| zLer%AJ}vJAeOhQ2)_%BM*7*w70nq1)Y(jE}tkb5o`dm>op;|-G=ZYF(wE}&vC=4qW zhRS~0{Pr$s+C2GgY4)P!R2U}BG_1j(&p&m>8Un**oh4WggI}7(SdYL6Y1(u*Lz-Kt z?{mnM=2EP+5Rj(LiL<0xm%yee+#}6stT@P)=I`|JI?Nnt+K70hG`mw@GK}(Mrefwv z(`MxQ^wmhyGUUrTgIM=Mfiy!{#m1IqAyyF-N;4NL&)Cw;!aCf>%jv5}F&_hc`pSMu z7$aMsPkjqutTdNkEroH?T!^(8?vv&$tf$Ew@0aFr%x~cVX&%D*9UheC8LU5Hyfn9C zorMX~w9)HCX*TCua(kF8P4nfs1C)3&%{S^P((Hwm4pXJs8S8eKCe2P*!{K3RW@4Fs zJ|ay&Rt7vOP5XWRacS11zC32#3~4@u`2qY}n(vgGPf2qL=1cIjG)?O-!!w@DjhHh% zndXZABhBj>p>8lsn)R_-z-(#$kCt0vJ}b?iFxz9!k>*j%j+k?$c?8p3(L8Am!Ws(m zrD^BVLTOH>z7kj@&4;k2!eVKbVoiZ1(j1R90hUVBv^))-lcu?IKLgK8^9`)^uuPhp zur@=PG~dH|AC^mV3)Z`^LYf<}-h`FXw4dK!kme!kI}9&M^BC4~SS8IPSVv*CH1}cc zW_R(jG@J6>?^<|8nhmkKz^l@{5$h&cBh9KJ&HnqgSR+%C=I)cHN^kfv$DYg7R^C9@$f5l8n9n?M9?SFf}9!aS_CpzieU!41Qw_l&Me%;d( zdspBuQd3h>-To=*?u8Xrbn4l^aC>(jl;oc8LWEQQ++Y3ONP0?&o7^WoJvk}d`9DF` B|D6B; literal 21992 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 + } +} +// check: EXECUTED + + +//# block --author 0x1 --timestamp 86400000 + +//# run --signers Genesis +script { + use StarcoinFramework::Block; + + fun checkpoints_init(account: signer) { + Block::checkpoints_init(&account); + } +} +// check: EXECUTED + +//# run --signers Genesis +script { + use StarcoinFramework::Block; + + fun checkpoints_init(_account: signer) { + Block::latest_state_root(); + } +} +// check: MoveAbort 4609 + +//# run --signers Genesis +script { + use StarcoinFramework::Block; + + fun checkpoint(_account: signer) { + Block::checkpoint(); + } +} +// check: EXECUTED + + + +//# block --author 0x1 --timestamp 96400000 + +//# block --author 0x1 --timestamp 96500000 + +//# block --author 0x1 --timestamp 96600000 + +//# block --author 0x1 --timestamp 96700000 + +//# block --author 0x1 --timestamp 96800000 + +//# run --signers alice +script { + use StarcoinFramework::Block; + + fun checkpoint(_account: signer) { + Block::checkpoint(); + } +} +// check: EXECUTED + +//# run --signers alice +script { + use StarcoinFramework::Block; + + fun update_state_root(_account: signer) { + let header = x"20b82a2c11f2df62bf87c2933d0281e5fe47ea94d5f0049eec1485b682df29529abf17ac7d79010000000000000000000000000000000000000000000000000001002043609d52fdf8e4a253c62dfe127d33c77e1fb4afdefb306d46ec42e21b9103ae20414343554d554c41544f525f504c414345484f4c4445525f48415348000000002061125a3ab755b993d72accfea741f8537104db8e022098154f3a66d5c23e828d00000000000000000000000000000000000000000000000000000000000000000000000000b1ec37207564db97ee270a6c1f2f73fbf517dc0777a6119b7460b7eae2890d1ce504537b010000000000000000"; + Block::update_state_root(header); + } +} +// check: EXECUTED + + +//# run --signers alice +script { + use StarcoinFramework::Block; + use StarcoinFramework::Debug; + + fun latest_state_root(_account: signer) { + let (number,state_root) = Block::latest_state_root(); + Debug::print (&number); + Debug::print (&state_root); + } +} +// check: EXECUTED \ No newline at end of file diff --git a/sources/Block.move b/sources/Block.move index cb4ec90f..f6db634c 100644 --- a/sources/Block.move +++ b/sources/Block.move @@ -53,14 +53,18 @@ module Block { struct Checkpoints has key{ //all checkpoints checkpoints : Ring::Ring, - index : u64 + index : u64, + last_number : u64, } const EBLOCK_NUMBER_MISMATCH : u64 = 17; const ERROR_NO_HAVE_CHECKPOINT: u64 = 18; const ERROR_NOT_BLOCK_HEADER : u64 = 19; + const ERROR_INTERVAL_TOO_LITTLE: u64 = 20; + const CHECKPOINT_LENGTHR : u64 = 60; const BLOCK_HEADER_LENGTH : u64 = 247; + const BLOCK_INTERVAL_NUMBER : u64 = 5; /// This can only be invoked by the GENESIS_ACCOUNT at genesis public fun initialize(account: &signer, parent_hash: vector) { @@ -144,17 +148,20 @@ module Block { } public fun checkpoints_init(account: &signer){ + CoreAddresses::assert_genesis_address(account); + let checkpoints = Ring::create_with_capacity(CHECKPOINT_LENGTHR); move_to( account, Checkpoints { checkpoints : checkpoints, - index : 0 + index : 0, + last_number : 0, }); } spec checkpoints_init { - aborts_if exists(CoreAddresses::GENESIS_ADDRESS()); + pragma verify = false; } public fun checkpoint() acquires BlockMetadata, Checkpoints{ @@ -162,8 +169,10 @@ module Block { let parent_block_hash = get_parent_hash(); let checkpoints = borrow_global_mut(CoreAddresses::GENESIS_ADDRESS()); - checkpoints.index = checkpoints.index + 1; + assert!(checkpoints.last_number + BLOCK_INTERVAL_NUMBER <= parent_block_number || checkpoints.last_number == 0, Errors::invalid_argument(ERROR_INTERVAL_TOO_LITTLE)); + checkpoints.index = checkpoints.index + 1; + checkpoints.last_number = parent_block_number; let op_checkpoint = Ring::push(&mut checkpoints.checkpoints, Checkpoint { block_number: parent_block_number, block_hash: parent_block_hash, @@ -177,6 +186,10 @@ module Block { } + spec checkpoint { + pragma verify = false; + } + public fun latest_state_root():(u64,vector) acquires Checkpoints{ let checkpoints = borrow_global(CoreAddresses::GENESIS_ADDRESS()); let len = Ring::capacity(&checkpoints.checkpoints); @@ -205,11 +218,14 @@ module Block { abort Errors::invalid_state(ERROR_NO_HAVE_CHECKPOINT) } + spec latest_state_root { + pragma verify = false; + } + public fun update_state_root(header: vector)acquires Checkpoints { let prefix = b"STARCOIN::BlockHeader"; let prefix = Hash::sha3_256(prefix); - let (_parent_hash,new_offset) = BCS::deserialize_bytes(&header,0); let (_timestamp,new_offset) = BCS::deserialize_u64(&header,new_offset); let (number,new_offset) = BCS::deserialize_u64(&header,new_offset); @@ -261,5 +277,9 @@ module Block { abort Errors::invalid_state(ERROR_NO_HAVE_CHECKPOINT) } + + spec update_state_root { + pragma verify = false; + } } } \ No newline at end of file From be4bcfd082eaddce59d0cb4e3c55ad98069725dd Mon Sep 17 00:00:00 2001 From: WGB5445 <919603023@qq.com> Date: Thu, 30 Jun 2022 09:57:33 +0800 Subject: [PATCH 07/14] Add upgradeScript --- build/StarcoinFramework/BuildInfo.yaml | 5 +- .../abis/Block/checkpoint.abi | Bin 0 -> 48 bytes .../abis/Block/latest_state_root.abi | Bin 0 -> 55 bytes .../abis/Block/update_state_root.abi | Bin 0 -> 64 bytes .../upgrade_from_v11_to_v12.abi | Bin 0 -> 65 bytes .../bytecode_modules/CheckpointScript.mv | Bin 0 -> 194 bytes .../bytecode_modules/StdlibUpgradeScripts.mv | Bin 1869 -> 1982 bytes build/StarcoinFramework/docs/Block.md | 678 +----------------- build/StarcoinFramework/docs/README.md | 1 + .../docs/StdlibUpgradeScripts.md | 53 ++ .../StarcoinFramework/source_maps/Block.mvsm | Bin 23094 -> 23094 bytes .../source_maps/CheckpointScript.mvsm | Bin 0 -> 709 bytes .../source_maps/StdlibUpgradeScripts.mvsm | Bin 6151 -> 6593 bytes sources/Block.move | 58 ++ sources/StdlibUpgradeScripts.move | 10 + 15 files changed, 144 insertions(+), 661 deletions(-) create mode 100644 build/StarcoinFramework/abis/Block/checkpoint.abi create mode 100644 build/StarcoinFramework/abis/Block/latest_state_root.abi create mode 100644 build/StarcoinFramework/abis/Block/update_state_root.abi create mode 100644 build/StarcoinFramework/abis/StdlibUpgradeScripts/upgrade_from_v11_to_v12.abi create mode 100644 build/StarcoinFramework/bytecode_modules/CheckpointScript.mv create mode 100644 build/StarcoinFramework/source_maps/CheckpointScript.mvsm diff --git a/build/StarcoinFramework/BuildInfo.yaml b/build/StarcoinFramework/BuildInfo.yaml index 97fe8e15..681cb102 100644 --- a/build/StarcoinFramework/BuildInfo.yaml +++ b/build/StarcoinFramework/BuildInfo.yaml @@ -33,6 +33,9 @@ compiled_package_info: ? address: "0x00000000000000000000000000000001" name: ChainId : StarcoinFramework + ? address: "0x00000000000000000000000000000001" + name: CheckpointScript + : StarcoinFramework ? address: "0x00000000000000000000000000000001" name: Collection : StarcoinFramework @@ -261,7 +264,7 @@ compiled_package_info: ? address: "0x00000000000000000000000000000001" name: YieldFarmingV2 : StarcoinFramework - source_digest: BF63BDE2783A076337DAF685886858A6990339131734069BD86E3D2D600DF02D + source_digest: 6E4E82FB95C91699541DD41AD95BAF87F1AED91FEB471C1C743285A7D726C9CB build_flags: dev_mode: false test_mode: false diff --git a/build/StarcoinFramework/abis/Block/checkpoint.abi b/build/StarcoinFramework/abis/Block/checkpoint.abi new file mode 100644 index 0000000000000000000000000000000000000000..97e9e5be2d6cc2f72699a737607a37a8d49e5d01 GIT binary patch literal 48 hcmZSNO3p}4&MwH$%qw9)1&jjDaH-(rqRax20s#1e3c>&Y literal 0 HcmV?d00001 diff --git a/build/StarcoinFramework/abis/Block/latest_state_root.abi b/build/StarcoinFramework/abis/Block/latest_state_root.abi new file mode 100644 index 0000000000000000000000000000000000000000..6f2161b070a83c3e477c66f128a6ed395ef5323e GIT binary patch literal 55 ucmZP+%tKE&Z~d D8AlL4 literal 0 HcmV?d00001 diff --git a/build/StarcoinFramework/abis/StdlibUpgradeScripts/upgrade_from_v11_to_v12.abi b/build/StarcoinFramework/abis/StdlibUpgradeScripts/upgrade_from_v11_to_v12.abi new file mode 100644 index 0000000000000000000000000000000000000000..4e6f60b346a806989d5ea1ccc11dfce33b3150de GIT binary patch literal 65 zcmZP+FD*zfN=!+OPbs$f>~K;97d#fAtq1o7; zPo5s^9^T*HnLIe0Kb|}rk0*;cFI%f$^r}|Q&EH4Vd8lHKc&I=k8_`5!TB@cx*CimnhHTd)=2v(4LXv~EWqO}=>kRcyg zBKH&89alCOf<{~6aMh3|TO*J6M>c}%ww{rp2sC9Pf=n9Jn0d&9+#Se43#3?Uo2({s n*Q}Y)c2-~fKK55X{50$QZ4n?d6r5~B$~l$MKi!5WX-V)KBY8~y delta 569 zcmY+AyN=XA5Jhj5+iu(4({_)?^YqMkX1%<2hc}Ybjo=Fq2`T#-^9La0Yy%`jL`;Z8 zN`UwUazsi-LbZT^mg?xL>UMQ?eJZ}X!`tSEQ2;VR$6Xga`Aq5+FXQ+8h4jzpN~bSP znY=O2?Jx80_2KlWwT87Cv{xujErH5wfy^MFJP#V4SZlOHk3 zw@Dc!{3i*|9Ck!r_BAWH@4SPb_H5a~aNk7^ zy|QGek4X;4;+da`Cv&0q%I3ZqE_6q`;e~Gd=I>lUZ#m3E(!hgtkjnixV*0NfF@6J( C%PeUC diff --git a/build/StarcoinFramework/docs/Block.md b/build/StarcoinFramework/docs/Block.md index 51f3f230..f6d53556 100644 --- a/build/StarcoinFramework/docs/Block.md +++ b/build/StarcoinFramework/docs/Block.md @@ -1,565 +1,27 @@ - - -# Module `0x1::Block` - -Block module provide metadata for generated blocks. - - -- [Resource `BlockMetadata`](#0x1_Block_BlockMetadata) -- [Struct `NewBlockEvent`](#0x1_Block_NewBlockEvent) -- [Struct `Checkpoint`](#0x1_Block_Checkpoint) -- [Resource `Checkpoints`](#0x1_Block_Checkpoints) -- [Constants](#@Constants_0) -- [Function `initialize`](#0x1_Block_initialize) -- [Function `get_current_block_number`](#0x1_Block_get_current_block_number) -- [Function `get_parent_hash`](#0x1_Block_get_parent_hash) -- [Function `get_current_author`](#0x1_Block_get_current_author) -- [Function `process_block_metadata`](#0x1_Block_process_block_metadata) -- [Function `checkpoints_init`](#0x1_Block_checkpoints_init) -- [Function `checkpoint`](#0x1_Block_checkpoint) -- [Function `latest_state_root`](#0x1_Block_latest_state_root) -- [Function `update_state_root`](#0x1_Block_update_state_root) -- [Module Specification](#@Module_Specification_1) - - -
    use 0x1::BCS;
    -use 0x1::CoreAddresses;
    -use 0x1::Errors;
    -use 0x1::Event;
    -use 0x1::Hash;
    -use 0x1::Option;
    -use 0x1::Ring;
    -use 0x1::Timestamp;
    -use 0x1::Vector;
    -
    - - - - - -## Resource `BlockMetadata` - -Block metadata struct. - - -
    struct BlockMetadata has key
    -
    - - - -
    -Fields - - -
    -
    -number: u64 -
    -
    - number of the current block -
    -
    -parent_hash: vector<u8> -
    -
    - Hash of the parent block. -
    -
    -author: address -
    -
    - Author of the current block. -
    -
    -uncles: u64 -
    -
    - number of uncles. -
    -
    -new_block_events: Event::EventHandle<Block::NewBlockEvent> -
    -
    - Handle of events when new blocks are emitted -
    -
    - - -
    - - - -## Struct `NewBlockEvent` - -Events emitted when new block generated. - - -
    struct NewBlockEvent has drop, store
    -
    - - - -
    -Fields - - -
    -
    -number: u64 -
    -
    - -
    -
    -author: address -
    -
    - -
    -
    -timestamp: u64 -
    -
    - -
    -
    -uncles: u64 -
    -
    - -
    -
    - - -
    - - - -## Struct `Checkpoint` - - - -
    struct Checkpoint has copy, drop, store
    -
    - - - -
    -Fields - - -
    -
    -block_number: u64 -
    -
    - -
    -
    -block_hash: vector<u8> -
    -
    - -
    -
    -state_root: Option::Option<vector<u8>> -
    -
    - -
    -
    - - -
    - - - -## Resource `Checkpoints` - - - -
    struct Checkpoints has key
    -
    - - - -
    -Fields - - -
    -
    -checkpoints: Ring::Ring<Block::Checkpoint> -
    -
    - -
    -
    -index: u64 -
    -
    - -
    -
    -last_number: u64 -
    -
    - -
    -
    - - -
    - - - -## Constants - - - - - - -
    const BLOCK_HEADER_LENGTH: u64 = 247;
    -
    - - - - - - - -
    const BLOCK_INTERVAL_NUMBER: u64 = 5;
    -
    - - - - - - - -
    const CHECKPOINT_LENGTHR: u64 = 60;
    -
    - - - - - - - -
    const EBLOCK_NUMBER_MISMATCH: u64 = 17;
    -
    - - - - - - - -
    const ERROR_INTERVAL_TOO_LITTLE: u64 = 20;
    -
    - - - - - - - -
    const ERROR_NOT_BLOCK_HEADER: u64 = 19;
    -
    - - - - - - - -
    const ERROR_NO_HAVE_CHECKPOINT: u64 = 18;
    -
    - - - - - -## Function `initialize` - -This can only be invoked by the GENESIS_ACCOUNT at genesis - - -
    public fun initialize(account: &signer, parent_hash: vector<u8>)
    -
    - - - -
    -Implementation - - -
    public fun initialize(account: &signer, parent_hash: vector<u8>) {
    -    Timestamp::assert_genesis();
    -    CoreAddresses::assert_genesis_address(account);
    -
    -    move_to<BlockMetadata>(
    -        account,
    -        BlockMetadata {
    -            number: 0,
    -            parent_hash: parent_hash,
    -            author: CoreAddresses::GENESIS_ADDRESS(),
    -            uncles: 0,
    -            new_block_events: Event::new_event_handle<Self::NewBlockEvent>(account),
    -        });
    -}
    -
    - - - -
    - -
    -Specification - - - -
    aborts_if !Timestamp::is_genesis();
    -aborts_if Signer::address_of(account) != CoreAddresses::GENESIS_ADDRESS();
    -aborts_if exists<BlockMetadata>(Signer::address_of(account));
    -
    - - - -
    - - - -## Function `get_current_block_number` - -Get the current block number + +# Module `0x1::CheckpointScript` -
    public fun get_current_block_number(): u64
    -
    - - - -
    -Implementation - - -
    public fun get_current_block_number(): u64 acquires BlockMetadata {
    -  borrow_global<BlockMetadata>(CoreAddresses::GENESIS_ADDRESS()).number
    -}
    -
    - - - -
    - -
    -Specification - - - -
    aborts_if !exists<BlockMetadata>(CoreAddresses::GENESIS_ADDRESS());
    -
    - - - -
    - - - -## Function `get_parent_hash` - -Get the hash of the parent block. - - -
    public fun get_parent_hash(): vector<u8>
    -
    +- [Function `checkpoint`](#0x1_CheckpointScript_checkpoint) +- [Function `latest_state_root`](#0x1_CheckpointScript_latest_state_root) +- [Function `update_state_root`](#0x1_CheckpointScript_update_state_root) -
    -Implementation - -
    public fun get_parent_hash(): vector<u8> acquires BlockMetadata {
    -  *&borrow_global<BlockMetadata>(CoreAddresses::GENESIS_ADDRESS()).parent_hash
    -}
    +
    use 0x1::Block;
     
    -
    - -
    -Specification - - - -
    aborts_if !exists<BlockMetadata>(CoreAddresses::GENESIS_ADDRESS());
    -
    - - - -
    - - - -## Function `get_current_author` - -Gets the address of the author of the current block - - -
    public fun get_current_author(): address
    -
    - - - -
    -Implementation - - -
    public fun get_current_author(): address acquires BlockMetadata {
    -  borrow_global<BlockMetadata>(CoreAddresses::GENESIS_ADDRESS()).author
    -}
    -
    - - - -
    - -
    -Specification - - - -
    aborts_if !exists<BlockMetadata>(CoreAddresses::GENESIS_ADDRESS());
    -
    - - - -
    - - - -## Function `process_block_metadata` - -Call at block prologue - - -
    public fun process_block_metadata(account: &signer, parent_hash: vector<u8>, author: address, timestamp: u64, uncles: u64, number: u64)
    -
    - - - -
    -Implementation - - -
    public fun process_block_metadata(account: &signer, parent_hash: vector<u8>,author: address, timestamp: u64, uncles:u64, number:u64) acquires BlockMetadata{
    -    CoreAddresses::assert_genesis_address(account);
    -
    -    let block_metadata_ref = borrow_global_mut<BlockMetadata>(CoreAddresses::GENESIS_ADDRESS());
    -    assert!(number == (block_metadata_ref.number + 1), Errors::invalid_argument(EBLOCK_NUMBER_MISMATCH));
    -    block_metadata_ref.number = number;
    -    block_metadata_ref.author= author;
    -    block_metadata_ref.parent_hash = parent_hash;
    -    block_metadata_ref.uncles = uncles;
    -
    -    Event::emit_event<NewBlockEvent>(
    -      &mut block_metadata_ref.new_block_events,
    -      NewBlockEvent {
    -          number: number,
    -          author: author,
    -          timestamp: timestamp,
    -          uncles: uncles,
    -      }
    -    );
    -}
    -
    - - - -
    - -
    -Specification - - - -
    aborts_if Signer::address_of(account) != CoreAddresses::GENESIS_ADDRESS();
    -aborts_if !exists<BlockMetadata>(CoreAddresses::GENESIS_ADDRESS());
    -aborts_if number != global<BlockMetadata>(CoreAddresses::GENESIS_ADDRESS()).number + 1;
    -
    - - - - - - - -
    schema AbortsIfBlockMetadataNotExist {
    -    aborts_if !exists<BlockMetadata>(CoreAddresses::GENESIS_ADDRESS());
    -}
    -
    - - - -
    - - - -## Function `checkpoints_init` - - - -
    public fun checkpoints_init(account: &signer)
    -
    - - - -
    -Implementation - - -
    public fun checkpoints_init(account: &signer){
    -    CoreAddresses::assert_genesis_address(account);
    -
    -    let checkpoints = Ring::create_with_capacity<Checkpoint>(CHECKPOINT_LENGTHR);
    -    move_to<Checkpoints>(
    -        account,
    -        Checkpoints {
    -           checkpoints  : checkpoints,
    -           index        : 0,
    -           last_number  : 0,
    -    });
    -}
    -
    - - - -
    - -
    -Specification - - - -
    pragma verify = false;
    -
    - - - -
    - - + ## Function `checkpoint` -
    public fun checkpoint()
    +
    public(script) fun checkpoint(_account: signer)
     
    @@ -568,26 +30,8 @@ Call at block prologue Implementation -
    public fun checkpoint() acquires BlockMetadata, Checkpoints{
    -    let parent_block_number = get_current_block_number() - 1;
    -    let parent_block_hash   = get_parent_hash();
    -
    -    let checkpoints = borrow_global_mut<Checkpoints>(CoreAddresses::GENESIS_ADDRESS());
    -    assert!(checkpoints.last_number + BLOCK_INTERVAL_NUMBER <= parent_block_number || checkpoints.last_number == 0, Errors::invalid_argument(ERROR_INTERVAL_TOO_LITTLE));
    -
    -    checkpoints.index = checkpoints.index + 1;
    -    checkpoints.last_number = parent_block_number;
    -    let op_checkpoint = Ring::push<Checkpoint>(&mut checkpoints.checkpoints, Checkpoint {
    -                                                            block_number: parent_block_number,
    -                                                            block_hash: parent_block_hash,
    -                                                            state_root: Option::none<vector<u8>>(),
    -                                                        } );
    -    if(Option::is_some(&op_checkpoint)){
    -        Option::destroy_some(op_checkpoint);
    -    }else{
    -        Option::destroy_none(op_checkpoint);
    -    }
    -
    +
    public (script) fun checkpoint(_account: signer){
    +    Block::checkpoint();
     }
     
    @@ -607,13 +51,13 @@ Call at block prologue - + ## Function `latest_state_root` -
    public fun latest_state_root(): (u64, vector<u8>)
    +
    public(script) fun latest_state_root(_account: signer)
     
    @@ -622,32 +66,8 @@ Call at block prologue Implementation -
    public fun latest_state_root():(u64,vector<u8>) acquires  Checkpoints{
    -    let checkpoints = borrow_global<Checkpoints>(CoreAddresses::GENESIS_ADDRESS());
    -    let len = Ring::capacity<Checkpoint>(&checkpoints.checkpoints);
    -    let i = checkpoints.index ;
    -
    -    if( i < len - 1){
    -        let j = 0;
    -        while(j <= i){
    -            let op_checkpoint = Ring::borrow(&checkpoints.checkpoints, j);
    -            if( Option::is_some(op_checkpoint) && Option::is_some(&Option::borrow(op_checkpoint).state_root) ) {
    -                return (Option::borrow(op_checkpoint).block_number, *&Option::borrow(op_checkpoint).block_hash)
    -            };
    -            j = j + 1;
    -        };
    -    }else{
    -        let j = i - ( len - 1);
    -        while( j < i ){
    -            let op_checkpoint = Ring::borrow(&checkpoints.checkpoints, j);
    -            if( Option::is_some(op_checkpoint) && Option::is_some(&Option::borrow(op_checkpoint).state_root) ) {
    -                return (Option::borrow(op_checkpoint).block_number, *&Option::borrow(op_checkpoint).block_hash)
    -            };
    -            j = j + 1;
    -        };
    -    };
    -
    -    abort Errors::invalid_state(ERROR_NO_HAVE_CHECKPOINT)
    +
    public (script) fun latest_state_root(_account: signer){
    +    Block::latest_state_root();
     }
     
    @@ -667,13 +87,13 @@ Call at block prologue - + ## Function `update_state_root` -
    public fun update_state_root(header: vector<u8>)
    +
    public(script) fun update_state_root(_account: signer, header: vector<u8>)
     
    @@ -682,60 +102,8 @@ Call at block prologue Implementation -
    public fun update_state_root(header: vector<u8>)acquires  Checkpoints {
    -    let prefix = b"STARCOIN::BlockHeader";
    -    let prefix = Hash::sha3_256(prefix);
    -
    -    let (_parent_hash,new_offset) = BCS::deserialize_bytes(&header,0);
    -    let (_timestamp,new_offset) = BCS::deserialize_u64(&header,new_offset);
    -    let (number,new_offset) = BCS::deserialize_u64(&header,new_offset);
    -    let (_author,new_offset) = BCS::deserialize_address(&header,new_offset);
    -    let (_author_auth_key,new_offset) = BCS::deserialize_option_bytes_vector(&header,new_offset);
    -    let (_txn_accumulator_root,new_offset) = BCS::deserialize_bytes(&header,new_offset);
    -    let (_block_accumulator_root,new_offset) = BCS::deserialize_bytes(&header,new_offset);
    -    let (state_root,new_offset) = BCS::deserialize_bytes(&header,new_offset);
    -    let (_gas_used,new_offset) = BCS::deserialize_u64(&header,new_offset);
    -    let (_difficultyfirst,new_offset) = BCS::deserialize_u128(&header,new_offset);
    -    let (_difficultylast,new_offset) = BCS::deserialize_u128(&header,new_offset);
    -    let (_body_hash,new_offset) = BCS::deserialize_bytes(&header,new_offset);
    -    let (_chain_id,new_offset) = BCS::deserialize_u8(&header,new_offset);
    -    let (_nonce,new_offset) = BCS::deserialize_u32(&header,new_offset);
    -    let (_extra1,new_offset) = BCS::deserialize_u8(&header,new_offset);
    -    let (_extra2,new_offset) = BCS::deserialize_u8(&header,new_offset);
    -    let (_extra3,new_offset) = BCS::deserialize_u8(&header,new_offset);
    -    let (_extra4,_new_offset) = BCS::deserialize_u8(&header,new_offset);
    -
    -    Vector::append(&mut prefix,header);
    -    let block_hash = Hash::sha3_256(prefix);
    -    let checkpoints = borrow_global_mut<Checkpoints>(CoreAddresses::GENESIS_ADDRESS());
    -    let len = Ring::capacity<Checkpoint>(&checkpoints.checkpoints);
    -    let i = checkpoints.index ;
    -
    -    if( i < len - 1){
    -        let j = 0;
    -        while(j <= i){
    -            let op_checkpoint = Ring::borrow_mut(&mut checkpoints.checkpoints, j);
    -            if( Option::is_some(op_checkpoint) && &Option::borrow(op_checkpoint).block_hash == &block_hash) {
    -                Option::borrow_mut<Checkpoint>(op_checkpoint).block_number = number ;
    -                *Option::borrow_mut(&mut Option::borrow_mut<Checkpoint>(op_checkpoint).state_root )= state_root;
    -                break
    -            };
    -            j = j + 1;
    -        };
    -    }else{
    -        let j = i - ( len - 1);
    -        while( j < i ){
    -            let op_checkpoint = Ring::borrow_mut(&mut checkpoints.checkpoints, j);
    -            if( Option::is_some(op_checkpoint) && &Option::borrow(op_checkpoint).block_hash == &block_hash) {
    -                Option::borrow_mut<Checkpoint>(op_checkpoint).block_number = number ;
    -                *Option::borrow_mut(&mut Option::borrow_mut<Checkpoint>(op_checkpoint).state_root )= state_root;
    -                break
    -            };
    -            j = j + 1;
    -        };
    -    };
    -
    -    abort Errors::invalid_state(ERROR_NO_HAVE_CHECKPOINT)
    +
    public (script) fun update_state_root(_account: signer , header: vector<u8>){
    +    Block::update_state_root(header);
     }
     
    @@ -754,13 +122,3 @@ Call at block prologue - - - -## Module Specification - - - -
    pragma verify;
    -pragma aborts_if_is_strict = true;
    -
    diff --git a/build/StarcoinFramework/docs/README.md b/build/StarcoinFramework/docs/README.md index d15b13b8..e4b52280 100644 --- a/build/StarcoinFramework/docs/README.md +++ b/build/StarcoinFramework/docs/README.md @@ -21,6 +21,7 @@ This is the root document for the Move StarcoinFramework module documentation. T - [`0x1::Block`](Block.md#0x1_Block) - [`0x1::BlockReward`](BlockReward.md#0x1_BlockReward) - [`0x1::ChainId`](ChainId.md#0x1_ChainId) +- [`0x1::CheckpointScript`](Block.md#0x1_CheckpointScript) - [`0x1::Collection`](Collection.md#0x1_Collection) - [`0x1::Collection2`](Collection2.md#0x1_Collection2) - [`0x1::Compare`](Compare.md#0x1_Compare) diff --git a/build/StarcoinFramework/docs/StdlibUpgradeScripts.md b/build/StarcoinFramework/docs/StdlibUpgradeScripts.md index 6bf98043..158da55a 100644 --- a/build/StarcoinFramework/docs/StdlibUpgradeScripts.md +++ b/build/StarcoinFramework/docs/StdlibUpgradeScripts.md @@ -15,10 +15,13 @@ The module for StdlibUpgrade init scripts - [Function `do_upgrade_from_v6_to_v7_with_language_version`](#0x1_StdlibUpgradeScripts_do_upgrade_from_v6_to_v7_with_language_version) - [Function `upgrade_from_v7_to_v8`](#0x1_StdlibUpgradeScripts_upgrade_from_v7_to_v8) - [Function `do_upgrade_from_v7_to_v8`](#0x1_StdlibUpgradeScripts_do_upgrade_from_v7_to_v8) +- [Function `upgrade_from_v11_to_v12`](#0x1_StdlibUpgradeScripts_upgrade_from_v11_to_v12) +- [Function `do_upgrade_from_v11_to_v12`](#0x1_StdlibUpgradeScripts_do_upgrade_from_v11_to_v12) - [Module Specification](#@Module_Specification_0)
    use 0x1::Account;
    +use 0x1::Block;
     use 0x1::Collection;
     use 0x1::Config;
     use 0x1::CoreAddresses;
    @@ -293,6 +296,56 @@ deprecated, use do_upgrade_from_v6_to_v7_with_language_version.
     
     
     
    +
    +
    +
    +
    +## Function `upgrade_from_v11_to_v12`
    +
    +
    +
    +
    public(script) fun upgrade_from_v11_to_v12(sender: signer)
    +
    + + + +
    +Implementation + + +
    public(script) fun upgrade_from_v11_to_v12(sender: signer) {
    +    do_upgrade_from_v11_to_v12(&sender);
    +}
    +
    + + + +
    + + + +## Function `do_upgrade_from_v11_to_v12` + + + +
    public fun do_upgrade_from_v11_to_v12(sender: &signer)
    +
    + + + +
    +Implementation + + +
    public fun do_upgrade_from_v11_to_v12(sender: &signer) {
    +    {
    +        Block::checkpoints_init(sender);
    +    };
    +}
    +
    + + +
    diff --git a/build/StarcoinFramework/source_maps/Block.mvsm b/build/StarcoinFramework/source_maps/Block.mvsm index 12b95a1f59f04ff0f6cb912be156b92aa8bf25ee..40e86ab53eed62ce2ad6a04f1820e24e859e23f6 100644 GIT binary patch literal 23094 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 A{{R30 literal 23094 zcmb80cXU-n0*CJlAt4lL5Y_8Jdzg^NM2&{LUC1Ef?(N2 zaa9(i7bSp#1r$L+!2(iNDGEsUSipjP71?hjBjumpg>$~+QNAg6-psvoe|P+KcF(A` z<5!J~-4a@K=BhoTBOiYLfvK(I;!aO`yU}AS;uD5Cjx!v5aN!?c#U8o&8Kc4-=T}if zpD@Q61WrX|K92P?C~q6iUJqV$1;@D>RDJz$(mZ&xaLT|ZYh1y&tO2KjYWqiHRn&cK zgOlLF%flH1VX}`av0ek+#}ioJfx4F35sp(2loyB71u96hKBLpZj8M3$vpZHVP~IS% zyF7ULIAc9{58*rpQM&18>Nw5<;P)K*&A2Q>@)g@Itm9bs0so9!>kRwe7vRxH%MsARA>Z$zL_mEFTod})Rw zK@Z(Yya?LSD=!MGGU)jqiB$>oEVMlhm$NI5`np0zY1)yCkmh9STL_WT%)}~&O479R zBubiQ7H)*fp3Dz1t4ebx)(NO4&Fxq_;0kGeiS-9mm*(eKUqB6M+7(zwnvPkg5bepV zi&;;a4Y17muP@DdSXUXOX|L#NX|801QmM1CG&^ApfF{yxgf$SZk*00EsWk7UzWX7@ zlQ{{qxim|$ra%j6PR1&MmeRZ%D;rvQGJ}}0o=nrv*3w*twI13?b2`>6XzR&big~Rk z)3hEZ&0ny>>N(DJ(maiM1!g;Gj>38n;-$F_>man3W}EtslLQ^4S%dmYFgr?fKUXvb zGeMg6d40V!7gFCU=p@Y0=CZ zm8K7?8FZ7TZQa90N6XmPQ zR9NM&&U)$Xt*BX`dmD>&J?P#VGYB3gYYP@$0+>G@-WMmKE&$!z09GOB-ezLG0D28( zl$#!2P>w}9&M9!hyxzaQ!Tt%Vl)nsmd4Xh=IaR>C49FQDgLn(*u?u1qgC4uySffFY z-D0fepzmKtv5tYhe}xenR0DngYKheg^!>|^H3Ibg>m{t$LEpcoV66jv|9YM4{s2?o zzb0Z%1^vFbmHM`Uhhchz$M|gEqP%1*iB~($T)^$99?y}D947-V=jr?rUHJ@rIjZ)e z296T~-$-R{zzpiz5P}6x*tP*lR&R~ zV@?IVn(eIAt9c&v%?G`j7hx?0o&GGtDg&MVJcso>==5g+)P+VpW;CYGbWWC=I@7V^sWTn>8|h4^D}C$+I@3wS>IpZ=`Pm(-2k7+YMpGZ? z^vATE1UmgO_qlZFA^SNNYaAp>^FgeM&{LWvSf!98%}H33;Z|whhxHHWB~80O>@Ce% z)HfUYNOLaMJh)Ao&tlDizS4XWt1i#te$w27c?9}Pb2rv0NRj5ZSl___X}*W`Jq(nl z-T$Uavo7x(%^*#h<_)DeqWyUZYI_AwURA_e%3D*Um=KDU_yZISPuTY3_6Npjes% zv2tLvG;hQj31g(0P;Pn%nr2=>>@{#X3E?LE44pg2QzX5@`%mvsJ`mx-cGqhqE-W6t#hYp@&X}$ra$C&3j
  • zuREE;iesFcEIw3&PbMEZ2_H;lwv&vIwP^yq%)FFsP7QyjN~}h&!96B zW1az>coGmeKF}G-pVW62bVhO*>nP}qWEWNft?N9aAyx;_c}6%^N2n=hh;3abA493n z4?6kiiZu{)@?p$7K_?%^G_C98V+z)zpp%bLSPy_cpJU7t&>4v_P3t-%S%b9+bVl+N z)^ngU5@Ws$IwLWrX}l#F!`G8aY3WX`}nq&0? zou-V(Dg~XUJd3pubeggO>s@Fmul*3#31}tF!C0puR+_&tmVaQjmZq`JfQOLz9X1lX z!SO|82mF~H&VwQ!fOg>=j_s_Tjdge?<^ytjd6YJ-wd1USNY~pYV#qbzSfEC^|JOg< zQGs!)S7j7h2X)KO&~oylIIlR@AIdLu3-j~k5s+Y0<`z_TN91RY^K=BaK{KWzL~-EP zpA&R*GF2z@ut!4;H!~+ID<`8kH#9CQr?5!(E{2m-Q2l~}xqe-4Gi5%8NH;JxROpvK zS7dWCe<=6mSFSYNA?JPh?P)IVlJma&^7l3FX^3*~@fW$pMFBa)jk(%ZP{j=f#<=-e zSw#Ukx5v4UG-Dmph?r zGMQVL3GMw%d3Folr{HqFv(Cg{1o}Jc%`Hg}L4RkRiZuFFAzo^8vFk*{ zzT)UaQ)CnD)s!$2n@30N-Z zM8rN4bs}On&pHt)qvh406Oos&)`Lz&p2XS!IuWtYYn_PL_gkHaoT24#p3FKCsfbk_ zbRzOOb=JVtiHO}y=tRUm5ZlPRVlpkKL0f62V+{j+Vx|+83vseeyVJQ&n)cnboirEH z@-m2*W*OEi&|aF4VZ90+q-o!7^eLPm^_kp4pThYKiwW=H6pjz83UreFJVu>WG4&}N z`{va})@c(JeO{+8EvJG$uaky#H|X;^9kGUiKCffn3iWv%8)ND7Ix}f`9(0qVG#{%B zx=XVZYdQ3grhQ{gl%|c@dP?&IEuVxWX`aIR1#Xq*POM*{mo)9$bZ=?e$f=Js<9YY( z47W+M3sxfZm1aY%o{%g}`=+l?3)!SmpB8$6mP;T-wqA<$FBl-r9IWXuP?|P{NR_6| zLer%AJ}vJAeOhQ2)_%BM*7*w70nq1)Y(jE}tkb5o`dm>op;|-G=ZYF(wE}&vC=4qW zhRS~0{Pr$s+C2GgY4)P!R2U}BG_1j(&p&m>8Un**oh4WggI}7(SdYL6Y1(u*Lz-Kt z?{mnM=2EP+5Rj(LiL<0xm%yee+#}6stT@P)=I`|JI?Nnt+K70hG`mw@GK}(Mrefwv z(`MxQ^wmhyGUUrTgIM=Mfiy!{#m1IqAyyF-N;4NL&)Cw;!aCf>%jv5}F&_hc`pSMu z7$aMsPkjqutTdNkEroH?T!^(8?vv&$tf$Ew@0aFr%x~cVX&%D*9UheC8LU5Hyfn9C zorMX~w9)HCX*TCua(kF8P4nfs1C)3&%{S^P((Hwm4pXJs8S8eKCe2P*!{K3RW@4Fs zJ|ay&Rt7vOP5XWRacS11zC32#3~4@u`2qY}n(vgGPf2qL=1cIjG)?O-!!w@DjhHh% zndXZABhBj>p>8lsn)R_-z-(#$kCt0vJ}b?iFxz9!k>*j%j+k?$c?8p3(L8Am!Ws(m zrD^BVLTOH>z7kj@&4;k2!eVKbVoiZ1(j1R90hUVBv^))-lcu?IKLgK8^9`)^uuPhp zur@=PG~dH|AC^mV3)Z`^LYf<}-h`FXw4dK!kme!kI}9&M^BC4~SS8IPSVv*CH1}cc zW_R(jG@J6>?^<|8nhmkKz^l@{5$h&cBh9KJ&HnqgSR+%C=I)cHN^kfv$DYg7R^C9@$f5l8n9n?M9?SFf}9!aS_CpzieU!41Qw_l&Me%;d( zdspBuQd3h>-To=*?u8Xrbn4l^aC>(jl;oc8LWEQQ++Y3ONP0?&o7^WoJvk}d`9DF` B|D6B; diff --git a/build/StarcoinFramework/source_maps/CheckpointScript.mvsm b/build/StarcoinFramework/source_maps/CheckpointScript.mvsm new file mode 100644 index 0000000000000000000000000000000000000000..c2c79ed7cab870af7560161a10073b8a978cb1ab GIT binary patch literal 709 zcmZ46-gQAvp{t?x?s=(qeeq@qrI%~muB(fw&A9mKbE@VyH8TbVGazPUKn08f&Kar6 z*#-HTc_qQgMVSR949pA+YYCWE0yL=(h#43;;uDjT^Gowe2x+MYDsKmAVPGO`{w$!v zwLr{B&?O*M>p;d5R?272z#tFABsf|Ds9Xc2g&0R$0~Lk>F*89&gH(lqjAbIIbSF^R zDX>zaL;5sO`DGwx%ScU3Ni8B2G53H9LJyCb?@GFbH24%X}Ya9dx6Y_+L$jWWK5gW1nqLV_iUcLyZ3VM*_IfQ z&?{LetW`Ks77@}PK~l2)BdGKOb5ZQg$kkYoLa;`ln~LjmgaiHeJqs-L}EA2c{-p-MW6WIkVjuV?z%7_b+FDqZ>~+ zFEyoGGFIGfjAfj(n>9to^oxq^<;ENVlM~6>$+(?S1CAnpzf?T=KJF(Jmmo!gf^+H&h-B^7Pk>)7Y801Owd#v9eUz)w_ z)mbQz<}CHrV-`wt0BZ<}q`3#H6N;tTgLN57r0H2>5Mbl?5xCbO@L@QF{I)lM1jvaD zAP$0#>M+&_=%}8+8U-Cy&$Qpxu~Il4X*}yC6p$tWJ?=eA=++dvQ8?gPI@ha zws`-Eyvg(`I9F(~k8a=*akMuWyI*)cY3n?eIC) zcc5>FVXP4duuM(#6BoR|IxR{4&en!}5JLH_PSTC;w-2ZsZs$d4H{_+7o9&DpSAG}O zk9$)p(Yd{dHwZen!&uiq=k_GlbXR34iD9^tNbZ%E;Jp($oVXQjPxqTDsFzDRw z!FnHbZv9==x$UFgIncR1hIJlFWxw*Q3lLzLZgUV8+|S5ip@VD;7(&CFM86QS6VQ)J?foBARt$QL8n`z#ayD1qI~^ zCuv)mXoutOi)XBkXn>n*BEso|z)fR3%$*AbewWFrwh_ZlK*SrNyG#wUSqZtxREH{k z8t)s3r0tB8k_~JPYCRNYT`S{8U8hxk{XK^MG=%T$iki<-%ql4UKU+}5+AIR|uuk

    b5#d zy#lsYx78vq0HE9IU(_t|Y}w8HQ>Q-`E$TTiN7meg^)k$rrhjg9`}dDanXKs_^Lf(r z4^_D|yLg%tFkhOlV4Z{o((J|h2^LDzZ$^uxxgw934p=PB)mUrcZfUN=+5i>O^y+zb zr8GBTJqt^u*?{#t+#}50gZZOY!jG3+oirNb?JH5! zB~k%_zv?TImw5xY7v)5DA-)LuvaQ96dS&%J@)p`LPYwE8d^d8BH-KwbPI(gX8t5rc zW6gkmKj_1{0s8&Gvu;9wOR|(-DyksxGE^f!;tdG$^1l}`4tg0jV%eaV!Lypdn12CG CR4my5 literal 6151 zcmb7|Z)jCz9LJx#wR`tZ_kVMnb2(F+D@_DTEc>Gb3jLKqWpq2w##G@ zArV26vAqd0oIx&%{S$H_D@-UP0^OV-1ic6qdKc)Mg6#7M2YUBCUHH8FJkNd3bH2ad zbIzGu)A9YO_ZL=P_1m7lFq!RH>^#wSG2@?ZeEsn~lehN$^pY{gg#`TfmuNf~_6_C^ z_vZTpr_Vi@33Bku11gpBtzF*N}gOlCs>8)9)&MYqc>uplZks z1_s@9;QOH(^K+Fk*TAgS>u<+f4+(jtcUW{6W{EWSV(o`gX+DB=0Pd6KajbDDljaE4 z1SF+7kF@|PX`aUV7RseL&b|5sDx`Ux`PO1qN^=Tp2CAgF6U&2YX^vr?gH_VB)&j(c z$TI})HHcjdhmajRfCR{eOd(E#j_NGd9O$TyV$Fk&smQ~oq(|JKkn=rN>Gcfivi}sPRegZ?5$OH<0_z*l`}Z-{Inev(VJ(0z^+UCU0(7aj zV;u%v>gTa8fG+iMtRFy^y0tDsjEjGx&X^I1T^L2=x1ppofj%AH#hL_tI?Q6tL5vOE#-q>kU;~@$_w-}U3&_1tQa+UP!t{VUs&d%F z^TZBF`Pr-+xP8jcGkei4X_e0H8N6xGxt+zj3_7<*v95s5ZM0II+j6eI26S%gu-1Ui z?Qg8H6;tOnjgLappq*7^)$Y-le}9B+XsNjaH} zKkUiJ>H+KkYC}JC2GfNwlXiyU3>;(7hfvWlnDbmGNEdVAk-oqwreies#UufR*mZTj zjAIEZqCzaF%6bC(SxDLux)2krCIzLQUsO{c$2$SZyc^_vS>sKp?NC_=oghqyxgq(2 zRDs?AW%uriTF+lx=3S`%Keylp_wG+HJ-YK;!n*>x^L&oA1iJIou;3QZou?J68+7Nn z%|CC!)SV}~dfj>6VZJHQoo7GRm!LaOlug}vt~1~7pgYeEtec=a&yQHQK)+8#Rj1#l zb`#dUuv&JrPON=UBh9F8bcc+}rB2Qnm3h51qoQh%W}d4Vg+^(&LcELJnK8&>$ zI;FV@Yct$0&1H6eH|Bb2Mh9b;G|w>K3~Z3*9M&Q{AkAY~-@!&{X3KexfKAfOV;zId z(tHnV8XlD9EY=)!OY;@1dDtRNYn_ES52L(f-oE$oDCVb-JIH_A0i26+A=`NscntJm zTaUF1Vw_EHq77R$?ibw=#&{#y$#lS3XJ&|@$B%= diff --git a/sources/Block.move b/sources/Block.move index f6db634c..6c3006bf 100644 --- a/sources/Block.move +++ b/sources/Block.move @@ -281,5 +281,63 @@ module Block { spec update_state_root { pragma verify = false; } + + #[test] + fun header_test(){ + let prefix = b"STARCOIN::BlockHeader"; + let prefix = Hash::sha3_256(prefix); + let header = x"20b82a2c11f2df62bf87c2933d0281e5fe47ea94d5f0049eec1485b682df29529abf17ac7d79010000000000000000000000000000000000000000000000000001002043609d52fdf8e4a253c62dfe127d33c77e1fb4afdefb306d46ec42e21b9103ae20414343554d554c41544f525f504c414345484f4c4445525f48415348000000002061125a3ab755b993d72accfea741f8537104db8e022098154f3a66d5c23e828d00000000000000000000000000000000000000000000000000000000000000000000000000b1ec37207564db97ee270a6c1f2f73fbf517dc0777a6119b7460b7eae2890d1ce504537b010000000000000000"; + let (_parent_hash,new_offset) = BCS::deserialize_bytes(&header,0); + let (_timestamp,new_offset) = BCS::deserialize_u64(&header,new_offset); + let (number,new_offset) = BCS::deserialize_u64(&header,new_offset); + let (_author,new_offset) = BCS::deserialize_address(&header,new_offset); + let (_author_auth_key,new_offset) = BCS::deserialize_option_bytes_vector(&header,new_offset); + let (_txn_accumulator_root,new_offset) = BCS::deserialize_bytes(&header,new_offset); + let (_block_accumulator_root,new_offset) = BCS::deserialize_bytes(&header,new_offset); + let (state_root,new_offset) = BCS::deserialize_bytes(&header,new_offset); + let (_gas_used,new_offset) = BCS::deserialize_u64(&header,new_offset); + let (_difficultyfirst,new_offset) = BCS::deserialize_u128(&header,new_offset); + let (_difficultylast,new_offset) = BCS::deserialize_u128(&header,new_offset); + let (_body_hash,new_offset) = BCS::deserialize_bytes(&header,new_offset); + let (_chain_id,new_offset) = BCS::deserialize_u8(&header,new_offset); + let (_nonce,new_offset) = BCS::deserialize_u32(&header,new_offset); + let (_extra1,new_offset) = BCS::deserialize_u8(&header,new_offset); + let (_extra2,new_offset) = BCS::deserialize_u8(&header,new_offset); + let (_extra3,new_offset) = BCS::deserialize_u8(&header,new_offset); + let (_extra4,_new_offset) = BCS::deserialize_u8(&header,new_offset); + + Vector::append(&mut prefix,header); + let block_hash = Hash::sha3_256(prefix); + assert!(block_hash == x"80848150abee7e9a3bfe9542a019eb0b8b01f124b63b011f9c338fdb935c417d" ,1001); + assert!(number == 0,1002); + assert!(state_root == x"61125a3ab755b993d72accfea741f8537104db8e022098154f3a66d5c23e828d",1003); + } +} +module CheckpointScript { + use StarcoinFramework::Block; + + public (script) fun checkpoint(_account: signer){ + Block::checkpoint(); + } + + spec checkpoint { + pragma verify = false; + } + + public (script) fun latest_state_root(_account: signer){ + Block::latest_state_root(); + } + + spec latest_state_root { + pragma verify = false; + } + + public (script) fun update_state_root(_account: signer , header: vector){ + Block::update_state_root(header); + } + + spec update_state_root { + pragma verify = false; + } } } \ No newline at end of file diff --git a/sources/StdlibUpgradeScripts.move b/sources/StdlibUpgradeScripts.move index d6355d6c..e5f7ea5b 100644 --- a/sources/StdlibUpgradeScripts.move +++ b/sources/StdlibUpgradeScripts.move @@ -19,6 +19,7 @@ module StdlibUpgradeScripts { use StarcoinFramework::Config; use StarcoinFramework::GenesisSignerCapability; use StarcoinFramework::Account; + use StarcoinFramework::Block; spec module { pragma verify = false; @@ -99,5 +100,14 @@ module StdlibUpgradeScripts { Account::destroy_signer_cap(cap); }; } + + public(script) fun upgrade_from_v11_to_v12(sender: signer) { + do_upgrade_from_v11_to_v12(&sender); + } + public fun do_upgrade_from_v11_to_v12(sender: &signer) { + { + Block::checkpoints_init(sender); + }; + } } } \ No newline at end of file From c76f6da15123b18f3826e6b7a6cede38a6843d0b Mon Sep 17 00:00:00 2001 From: WGB5445 <919603023@qq.com> Date: Thu, 30 Jun 2022 14:21:07 +0800 Subject: [PATCH 08/14] add more unit test --- build/StarcoinFramework/BuildInfo.yaml | 2 +- .../bytecode_modules/Block.mv | Bin 2679 -> 3960 bytes .../StarcoinFramework/source_maps/Block.mvsm | Bin 23094 -> 43176 bytes .../source_maps/CheckpointScript.mvsm | Bin 709 -> 709 bytes integration-tests/block/block_checkpoints.exp | 2 +- sources/Block.move | 207 +++++++++++++++++- 6 files changed, 199 insertions(+), 12 deletions(-) diff --git a/build/StarcoinFramework/BuildInfo.yaml b/build/StarcoinFramework/BuildInfo.yaml index 681cb102..b4555bc4 100644 --- a/build/StarcoinFramework/BuildInfo.yaml +++ b/build/StarcoinFramework/BuildInfo.yaml @@ -264,7 +264,7 @@ compiled_package_info: ? address: "0x00000000000000000000000000000001" name: YieldFarmingV2 : StarcoinFramework - source_digest: 6E4E82FB95C91699541DD41AD95BAF87F1AED91FEB471C1C743285A7D726C9CB + source_digest: F1CA743DDC91B65E21EE51C6047E20CD1D18449D3AF9E901DA10A26DAFBCB8E6 build_flags: dev_mode: false test_mode: false diff --git a/build/StarcoinFramework/bytecode_modules/Block.mv b/build/StarcoinFramework/bytecode_modules/Block.mv index da07aa9c372d67ba6b4230ff63ed3a162d12812d..1bb9516c47eae9ae9be1f9965c04b8cfc4bccfea 100644 GIT binary patch literal 3960 zcma)9ZHOF68LqdgtGlPV=A$Pwvpf4W*{|$oH@iu8FS#*yUM`zk%psSP>~SE7O=q_+ zJKXNfFdx~ACn6{MN0fv6Bg%pP6AnR9xC2EHMDT|o_(zn8|3wt>^M~kD-7`J2Cc$fV ztDbtR>V2Pj>*=bVZ_WI{vlwF@u@WyWh^r6DdWSE`_xT6H`IG#e?fya+?1wr~Kg!ni zU$gHQvhU4RFo76nf>}&5n>oy78KzvgaTwE@v8>IknngC*wnL0Lj)jut@XzuF6*vkX z4p#*l!K3mB8*6&a8pat{a&k+jorKy^}>U&7pj|w z(f;f0R-@VTMzEW`9i7DEVy9|99W*(DK@Wa|*ZR$U6Ra@m=mw2uqgT8a^@9C=rvp|& z*zX;-I+Nq3yJj^(vwwUy>f}vFJB)`OVgbrHXoN?N&qV%F7{|d9dQs46wR*KjET@@N z+MU)uG7}^bjt49C`)w>Z3Pz49k62K2;O$-sGJa^CggEZqv5 z2S4H{7uN$98Y;?!CAd+<4)IJG*;(g+}u} za&i!aoqPRbv)Rp7GqT$K?xEA@2HnUZXo4Xy0u?dnef;v3QLtI&SoWc)Z&^47Y== zD_4E+iaN=T26rD|NAu&B{?(_>jJF5mYU8$6tm$NOa6guEVZ6V8d8?i~WvHKyvAt!7 z?RL~WPzmecxZkt7Ct=%qt#NdOQ+oU%;r?UL7Opw|%_H1r69D9=sFb2JDJl+-;+68= zD>v@keEG%O*RJgt$=`~?gQ&x}oD$QD&&XLZhvN+ABo}AJyy6S-NraPTF+N9^#4=7H zYf8+>b7EG+Hy-zH_?B&MF!M}k%a>aCdW~yRRA42CD#}_GMOk(=lhd)yTx;<&ubIch z0uE%y^0O=Gq*Cguq9{*gWuanakMdkuo~W}T)k*UluXAxtKIieeAo)BhiyIQfx?+Q< zv@9}GyIRO%Y#WOzJRzzcj>$MGI~^7GaaoaKCMrWzg7YM*m9r4_vb^G1ChF6uaLOa> z8LgOq#^H6T$;17UhDt$^Z#QJ392aofv`V<$Mon4baUQaM*?3m?q!>IN z`Fhk~b-TzmaQtH~pZFX+bB)`g!0V32&4Gn!p@g#2q)seiD|S-{+CqM@t5vyUW+|)g zYDYO(<$_#AohjILg?(Gg#5=VipYb>i?4HheW`tAnG9~Ugq((ZZXiJtbRK9sS`h=EB zDzPX&As@s6B?7w2MZizW0Cf_OWSBuFNgT+I37FVDtvrJeP$3|`0%W?bik9-@80y&m z)CxYk*z}v&^dt>te;-XlUhX`ShKjsyW{stxCYRGRkX%Vvt;ssX^C8pVW2k)N32Asq z-j4&0((tPMRGJ1ZKb_Is<06zT6Y#^O;g%7$Nkhg6YG&Pofbc>x2tq2mV2!YCOVcxnit^4zO#()`s zSp#MSDwe$ z?Aw%xLchTFf7f60T zK|c33NKK~9Dtc0$V5WSFpJqIvtE#F%{O2S;&tsBRkla+8hUBkE{+0|JkQDMEsF=g> z_ay&isHh8S6J(sSXDVA?QkM*;Ka>0$d6yDS|4a}#ZIY^vajMFn8XvLtJiLMz-Wm#I zltb(t1VTfBP%01_3WSCNp`k!%C=f~oLPLSjP#`oE2n_{7LxIpxAT$&R4Fy6&flw+C z8VIB^I6tOPKTaAQs9Nu@Cm$>XH)6XPS627VS1ev+EsyF}*p#E)ho_FqZG6LSCn delta 1382 zcmY+EJB%Df5QeMzH8a({kKUWv*`3?l=k2}r)^}jejEyC*kq`kEA|bLs2qHuTvOoxF z10Es)VNC$32@sGtFtGzHAtVwq1d$~|$hnZ}-DA&;M%~}^RMlVA)ibC4f6|jXy}zsi z0E>`{bSy9Zi0TxF`YZ9Ji0-P7Oni@;<^jD*U)$3CVSkNl->0`v25}5fGoX66Z}t`- z06a*57I3T$&GAw&09nM;<|VPsCUPnzm>ozEqFu|Q*>g1>_meu02MHjE83IIyvWXDS z*;ie_7MkcNmF#nzIkr1?Z3Oukhf1sr?v=XaHqG69H1`(}%;JCUh zo~=F=&s0?Qkw}Ll??yoM3J~@AY(zIX>f|Ee8@g8g6kEhx7wSiNlh!09v zKV6;1JG0UXq^L}qQEI~!r@}@^YF$LzDV?&BzE!=LxWEv_X z!IR7^@}x7)-ZYZTng;QEL6THUauIQ;xBDkXk?*>r`uXvyBX8A z@40DMn))rb6JUp}cLVG$nDzqgG3>izrhRri2ulaP?=}N$GV}uU*k~)jmLIr&fW9BP zL4X0T3d!GC?|wZUad*DJReLJbchF`?Gde8mjVQCn zHh?J`83(e5xS)Kk*><^pS3ku6Cz87kb*Md&KVWzlv^%Ulr+Lu6kNPJJc&07%&#W!1 xkiVe*{Y-oQpLT$y_CvIDq>jP;v(w#n9esCoM)=c1{txmEh~dlO-xU82{{=?Yb$I{) diff --git a/build/StarcoinFramework/source_maps/Block.mvsm b/build/StarcoinFramework/source_maps/Block.mvsm index 40e86ab53eed62ce2ad6a04f1820e24e859e23f6..5cd91c51446b0dd30a851720a09a41959ec6a202 100644 GIT binary patch literal 43176 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 VfA#-Px`u~)+PCT2wS8DN=YN{ODRKY+ literal 23094 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 A{{R30 diff --git a/build/StarcoinFramework/source_maps/CheckpointScript.mvsm b/build/StarcoinFramework/source_maps/CheckpointScript.mvsm index c2c79ed7cab870af7560161a10073b8a978cb1ab..97027a1df8efcd701ece8bd99d4e2dff8bab97be 100644 GIT binary patch literal 709 zcmZ2wyizP9xGR)>tzod}u}kcZ-vYLX%jX#eE)+k?dCgx?Jd%My9f%njPywTWb4F@% zc0qn-UP*9rQD#9212Y4|DgvgZ0!_*XVg^Qz_{8Mo{L;JvVoY0XN+cGUVK0JIaRM;| F0|3B7;XD8U literal 709 zcmZ46-gQAvp{t?x?s=(qeeq@qrI%~muB(fw&A9mKbE@VyH8TbVGazPUKn08f&Kar6 z*#-HTc_qQgMVSR949pA+YYCWE0yL=(h#43;;uDjT^Gowe2x+MYDsKmAVPGO`{w$!v zwLr{B&?O*M>p;d5R?272z#tFABsf|Ds9Xc2g&0R$0~Lk>F*89&gH(lqjAbIIbSF^R zDX>zaL;5sO`DGwx%ScU3Ni8B2G53H, index : u64, @@ -200,7 +200,8 @@ module Block { while(j <= i){ let op_checkpoint = Ring::borrow(&checkpoints.checkpoints, j); if( Option::is_some(op_checkpoint) && Option::is_some(&Option::borrow(op_checkpoint).state_root) ) { - return (Option::borrow(op_checkpoint).block_number, *&Option::borrow(op_checkpoint).block_hash) + let state_root = Option::borrow(&Option::borrow(op_checkpoint).state_root); + return (Option::borrow(op_checkpoint).block_number, *state_root) }; j = j + 1; }; @@ -209,7 +210,8 @@ module Block { while( j < i ){ let op_checkpoint = Ring::borrow(&checkpoints.checkpoints, j); if( Option::is_some(op_checkpoint) && Option::is_some(&Option::borrow(op_checkpoint).state_root) ) { - return (Option::borrow(op_checkpoint).block_number, *&Option::borrow(op_checkpoint).block_hash) + let state_root = Option::borrow(&Option::borrow(op_checkpoint).state_root); + return (Option::borrow(op_checkpoint).block_number, *state_root) }; j = j + 1; }; @@ -255,10 +257,16 @@ module Block { let j = 0; while(j <= i){ let op_checkpoint = Ring::borrow_mut(&mut checkpoints.checkpoints, j); - if( Option::is_some(op_checkpoint) && &Option::borrow(op_checkpoint).block_hash == &block_hash) { - Option::borrow_mut(op_checkpoint).block_number = number ; - *Option::borrow_mut(&mut Option::borrow_mut(op_checkpoint).state_root )= state_root; - break + + if( Option::is_some(op_checkpoint) && &Option::borrow(op_checkpoint).block_hash == &block_hash && Option::borrow_mut(op_checkpoint).block_number == number) { + + let op_state_root = &mut Option::borrow_mut(op_checkpoint).state_root; + if(Option::is_some(op_state_root)){ + Option::swap(op_state_root, state_root); + }else{ + Option::fill(op_state_root, state_root); + }; + return }; j = j + 1; }; @@ -268,8 +276,13 @@ module Block { let op_checkpoint = Ring::borrow_mut(&mut checkpoints.checkpoints, j); if( Option::is_some(op_checkpoint) && &Option::borrow(op_checkpoint).block_hash == &block_hash) { Option::borrow_mut(op_checkpoint).block_number = number ; - *Option::borrow_mut(&mut Option::borrow_mut(op_checkpoint).state_root )= state_root; - break + let op_state_root = &mut Option::borrow_mut(op_checkpoint).state_root; + if(Option::is_some(op_state_root)){ + Option::swap(op_state_root, state_root); + }else{ + Option::fill(op_state_root, state_root); + }; + return }; j = j + 1; }; @@ -312,6 +325,180 @@ module Block { assert!(number == 0,1002); assert!(state_root == x"61125a3ab755b993d72accfea741f8537104db8e022098154f3a66d5c23e828d",1003); } + + #[only_test] + fun update_state_root_test(checkpoints: &mut Checkpoints, header: vector){ + let prefix = b"STARCOIN::BlockHeader"; + let prefix = Hash::sha3_256(prefix); + + let (_parent_hash,new_offset) = BCS::deserialize_bytes(&header,0); + let (_timestamp,new_offset) = BCS::deserialize_u64(&header,new_offset); + let (number,new_offset) = BCS::deserialize_u64(&header,new_offset); + let (_author,new_offset) = BCS::deserialize_address(&header,new_offset); + let (_author_auth_key,new_offset) = BCS::deserialize_option_bytes_vector(&header,new_offset); + let (_txn_accumulator_root,new_offset) = BCS::deserialize_bytes(&header,new_offset); + let (_block_accumulator_root,new_offset) = BCS::deserialize_bytes(&header,new_offset); + let (state_root,new_offset) = BCS::deserialize_bytes(&header,new_offset); + let (_gas_used,new_offset) = BCS::deserialize_u64(&header,new_offset); + let (_difficultyfirst,new_offset) = BCS::deserialize_u128(&header,new_offset); + let (_difficultylast,new_offset) = BCS::deserialize_u128(&header,new_offset); + let (_body_hash,new_offset) = BCS::deserialize_bytes(&header,new_offset); + let (_chain_id,new_offset) = BCS::deserialize_u8(&header,new_offset); + let (_nonce,new_offset) = BCS::deserialize_u32(&header,new_offset); + let (_extra1,new_offset) = BCS::deserialize_u8(&header,new_offset); + let (_extra2,new_offset) = BCS::deserialize_u8(&header,new_offset); + let (_extra3,new_offset) = BCS::deserialize_u8(&header,new_offset); + let (_extra4,_new_offset) = BCS::deserialize_u8(&header,new_offset); + + Vector::append(&mut prefix,header); + let block_hash = Hash::sha3_256(prefix); + + let len = Ring::capacity(&checkpoints.checkpoints); + let i = checkpoints.index ; + + if( i < len - 1){ + let j = 0; + while(j <= i){ + let op_checkpoint = Ring::borrow_mut(&mut checkpoints.checkpoints, j); + + if( Option::is_some(op_checkpoint) && &Option::borrow(op_checkpoint).block_hash == &block_hash && Option::borrow_mut(op_checkpoint).block_number == number) { + + let op_state_root = &mut Option::borrow_mut(op_checkpoint).state_root; + if(Option::is_some(op_state_root)){ + Option::swap(op_state_root, state_root); + }else{ + Option::fill(op_state_root, state_root); + }; + return + }; + j = j + 1; + }; + }else{ + let j = i - ( len - 1); + while( j < i ){ + let op_checkpoint = Ring::borrow_mut(&mut checkpoints.checkpoints, j); + if( Option::is_some(op_checkpoint) && &Option::borrow(op_checkpoint).block_hash == &block_hash) { + Option::borrow_mut(op_checkpoint).block_number = number ; + let op_state_root = &mut Option::borrow_mut(op_checkpoint).state_root; + if(Option::is_some(op_state_root)){ + Option::swap(op_state_root, state_root); + }else{ + Option::fill(op_state_root, state_root); + }; + return + }; + j = j + 1; + }; + }; + + abort Errors::invalid_state(ERROR_NO_HAVE_CHECKPOINT) + } + + spec update_state_root_test { + pragma verify = false; + } + + #[test] + fun latest_state_root_test(){ + let header = x"20b82a2c11f2df62bf87c2933d0281e5fe47ea94d5f0049eec1485b682df29529abf17ac7d79010000000000000000000000000000000000000000000000000001002043609d52fdf8e4a253c62dfe127d33c77e1fb4afdefb306d46ec42e21b9103ae20414343554d554c41544f525f504c414345484f4c4445525f48415348000000002061125a3ab755b993d72accfea741f8537104db8e022098154f3a66d5c23e828d00000000000000000000000000000000000000000000000000000000000000000000000000b1ec37207564db97ee270a6c1f2f73fbf517dc0777a6119b7460b7eae2890d1ce504537b010000000000000000"; + + let checkpoints = Checkpoints { + checkpoints : Ring::create_with_capacity(3), + index : 0, + last_number : 0 + }; + + checkpoint_test_function(&mut checkpoints, 0, x"80848150abee7e9a3bfe9542a019eb0b8b01f124b63b011f9c338fdb935c417d"); + + update_state_root_test(&mut checkpoints, copy header); + + let (number , state_root ) = latest_state_root_test_function(&checkpoints); + let Checkpoints{ + checkpoints: ring, + index : index, + last_number: last_number + } = checkpoints; + assert!( index == 1 && last_number == 0 , 10020); + assert!( number == 0 && state_root == x"61125a3ab755b993d72accfea741f8537104db8e022098154f3a66d5c23e828d" , 10020); + Ring::destroy(ring); + } + + + + #[only_test] + fun latest_state_root_test_function(checkpoints: &Checkpoints):(u64,vector){ + let len = Ring::capacity(&checkpoints.checkpoints); + let i = checkpoints.index ; + + if( i < len - 1){ + let j = 0; + while(j <= i){ + let op_checkpoint = Ring::borrow(&checkpoints.checkpoints, j); + if( Option::is_some(op_checkpoint) && Option::is_some(&Option::borrow(op_checkpoint).state_root) ) { + let state_root = Option::borrow(&Option::borrow(op_checkpoint).state_root); + return (Option::borrow(op_checkpoint).block_number, *state_root) + }; + j = j + 1; + }; + }else{ + let j = i - ( len - 1); + while( j < i ){ + let op_checkpoint = Ring::borrow(&checkpoints.checkpoints, j); + if( Option::is_some(op_checkpoint) && Option::is_some(&Option::borrow(op_checkpoint).state_root) ) { + let state_root = Option::borrow(&Option::borrow(op_checkpoint).state_root); + return (Option::borrow(op_checkpoint).block_number, *state_root) + }; + j = j + 1; + }; + }; + + abort Errors::invalid_state(ERROR_NO_HAVE_CHECKPOINT) + } + + spec latest_state_root_test_function { + pragma verify = false; + } + + #[test] + fun checkpoint_test(){ + let checkpoints = Checkpoints { + checkpoints : Ring::create_with_capacity(3), + index : 0, + last_number : 0 + }; + + checkpoint_test_function(&mut checkpoints, 0, x"80848150abee7e9a3bfe9542a019eb0b8b01f124b63b011f9c338fdb935c417d"); + + let Checkpoints{ + checkpoints: ring, + index : index, + last_number: last_number + } = checkpoints; + assert!( index == 1 && last_number == 0 , 10020); + Ring::destroy(ring); + } + + #[only_test] + fun checkpoint_test_function(checkpoints: &mut Checkpoints, parent_block_number: u64, parent_block_hash:vector){ + assert!(checkpoints.last_number + BLOCK_INTERVAL_NUMBER <= parent_block_number || checkpoints.last_number == 0, Errors::invalid_argument(ERROR_INTERVAL_TOO_LITTLE)); + + checkpoints.index = checkpoints.index + 1; + checkpoints.last_number = parent_block_number; + let op_checkpoint = Ring::push(&mut checkpoints.checkpoints, Checkpoint { + block_number: parent_block_number, + block_hash: parent_block_hash, + state_root: Option::none>(), + } ); + if(Option::is_some(&op_checkpoint)){ + Option::destroy_some(op_checkpoint); + }else{ + Option::destroy_none(op_checkpoint); + } + } + + spec checkpoint_test_function { + pragma verify = false; + } } module CheckpointScript { use StarcoinFramework::Block; @@ -319,7 +506,7 @@ module CheckpointScript { public (script) fun checkpoint(_account: signer){ Block::checkpoint(); } - + spec checkpoint { pragma verify = false; } From 2c0cb302ed7ed1393b7f46cb59061bef11e2320e Mon Sep 17 00:00:00 2001 From: WGB5445 <919603023@qq.com> Date: Thu, 30 Jun 2022 18:06:33 +0800 Subject: [PATCH 09/14] Optimize loop --- build/StarcoinFramework/BuildInfo.yaml | 2 +- .../bytecode_modules/Block.mv | Bin 3960 -> 3551 bytes .../StarcoinFramework/source_maps/Block.mvsm | Bin 43176 -> 36335 bytes .../source_maps/CheckpointScript.mvsm | Bin 709 -> 709 bytes integration-tests/block/block_checkpoints.exp | 6 +- sources/Block.move | 172 +++++++----------- 6 files changed, 68 insertions(+), 112 deletions(-) diff --git a/build/StarcoinFramework/BuildInfo.yaml b/build/StarcoinFramework/BuildInfo.yaml index b4555bc4..0504e131 100644 --- a/build/StarcoinFramework/BuildInfo.yaml +++ b/build/StarcoinFramework/BuildInfo.yaml @@ -264,7 +264,7 @@ compiled_package_info: ? address: "0x00000000000000000000000000000001" name: YieldFarmingV2 : StarcoinFramework - source_digest: F1CA743DDC91B65E21EE51C6047E20CD1D18449D3AF9E901DA10A26DAFBCB8E6 + source_digest: F709AB264FF1ED824C618B56B4E6C228008FE4167D094B0C73D455296FA12964 build_flags: dev_mode: false test_mode: false diff --git a/build/StarcoinFramework/bytecode_modules/Block.mv b/build/StarcoinFramework/bytecode_modules/Block.mv index 1bb9516c47eae9ae9be1f9965c04b8cfc4bccfea..654804f80cae4a4ca8c8050a84bba481491d0241 100644 GIT binary patch delta 1391 zcmbW0U279T6o%)_4f*+!c8& zhEdJ1EKxJXbSer6nR4Pf))O5(W4cH&-R!5eBORZMAs(YOlXrZn0oO7b6bK(rs(?eB zP})_d#4RYd!09uodE$ajJkVAPY$y({8nH-X$%rKq%X&;|nfCQfsPDCP-H1Ag zStDkts6ir-4X>k{Ce-x0x@AO*B6CK}k!TyyCebmX<8=VCBgOoz8jycv7ZMF zK19;vY5-(tI(3zUK6Dvxnoc1%MRPOQx7^@2ZeY1V!VN4pu-w3M3&4Vd1RPj!V8MX} z2NoPyZeY2AzBJV!ybgzvZQzyYl5o6A$Y|VkB?^Sd;#<=bw*bF@ zWPc;J3HUG}Rx(^3#ay-kpT@*4gve6(j8Z9;5<7tJfiB2lWV?WG6J#;Ge-pbgIiG9& E0)?%00ssI2 delta 1745 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 literal 43176 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 VfA#-Px`u~)+PCT2wS8DN=YN{ODRKY+ diff --git a/build/StarcoinFramework/source_maps/CheckpointScript.mvsm b/build/StarcoinFramework/source_maps/CheckpointScript.mvsm index 97027a1df8efcd701ece8bd99d4e2dff8bab97be..999f5e496b2689e46b53001f2892339b7e1312bb 100644 GIT binary patch literal 709 zcmZP+EjWDkBwN?1Jl&HEjYK0%d6!x^wyJF5EnwNsAopZXoIe9Y9uPA!paMn#=Zw_k z?1KEvyprJLqRfI424Hk3G?12mnY#FJEDXB$-B1QLnASN8z`ao6wKup++AXNcC H%)kHuiACrp literal 709 zcmZ2wyizP9xGR)>tzod}u}kcZ-vYLX%jX#eE)+k?dCgx?Jd%My9f%njPywTWb4F@% zc0qn-UP*9rQD#9212Y4|DgvgZ0!_*XVg^Qz_{8Mo{L;JvVoY0XN+cGUVK0JIaRM;| F0|3B7;XD8U diff --git a/integration-tests/block/block_checkpoints.exp b/integration-tests/block/block_checkpoints.exp index 20be7787..2f1bf156 100644 --- a/integration-tests/block/block_checkpoints.exp +++ b/integration-tests/block/block_checkpoints.exp @@ -18,7 +18,7 @@ task 5 'run'. lines 22-30: task 6 'run'. lines 32-40: { - "gas_used": 35867, + "gas_used": 17745, "status": { "Keep": { "MoveAbort": [ @@ -52,7 +52,7 @@ task 13 'run'. lines 64-72: task 14 'run'. lines 74-83: { - "gas_used": 2003496, + "gas_used": 1985382, "status": { "Keep": { "MoveAbort": [ @@ -70,7 +70,7 @@ task 14 'run'. lines 74-83: task 15 'run'. lines 86-97: { - "gas_used": 111431, + "gas_used": 93391, "status": { "Keep": { "MoveAbort": [ diff --git a/sources/Block.move b/sources/Block.move index 75b7e180..b9f02b6a 100644 --- a/sources/Block.move +++ b/sources/Block.move @@ -62,7 +62,7 @@ module Block { const ERROR_NOT_BLOCK_HEADER : u64 = 19; const ERROR_INTERVAL_TOO_LITTLE: u64 = 20; - const CHECKPOINT_LENGTHR : u64 = 60; + const CHECKPOINT_LENGTH : u64 = 60; const BLOCK_HEADER_LENGTH : u64 = 247; const BLOCK_INTERVAL_NUMBER : u64 = 5; @@ -150,7 +150,7 @@ module Block { public fun checkpoints_init(account: &signer){ CoreAddresses::assert_genesis_address(account); - let checkpoints = Ring::create_with_capacity(CHECKPOINT_LENGTHR); + let checkpoints = Ring::create_with_capacity(CHECKPOINT_LENGTH); move_to( account, Checkpoints { @@ -193,28 +193,20 @@ module Block { public fun latest_state_root():(u64,vector) acquires Checkpoints{ let checkpoints = borrow_global(CoreAddresses::GENESIS_ADDRESS()); let len = Ring::capacity(&checkpoints.checkpoints); - let i = checkpoints.index ; - - if( i < len - 1){ - let j = 0; - while(j <= i){ - let op_checkpoint = Ring::borrow(&checkpoints.checkpoints, j); - if( Option::is_some(op_checkpoint) && Option::is_some(&Option::borrow(op_checkpoint).state_root) ) { - let state_root = Option::borrow(&Option::borrow(op_checkpoint).state_root); - return (Option::borrow(op_checkpoint).block_number, *state_root) - }; - j = j + 1; - }; + let j = if(checkpoints.index < len - 1){ + checkpoints.index }else{ - let j = i - ( len - 1); - while( j < i ){ - let op_checkpoint = Ring::borrow(&checkpoints.checkpoints, j); - if( Option::is_some(op_checkpoint) && Option::is_some(&Option::borrow(op_checkpoint).state_root) ) { - let state_root = Option::borrow(&Option::borrow(op_checkpoint).state_root); - return (Option::borrow(op_checkpoint).block_number, *state_root) - }; - j = j + 1; + len + }; + let i = checkpoints.index; + while( j > 0){ + let op_checkpoint = Ring::borrow(&checkpoints.checkpoints, i - 1 ); + if( Option::is_some(op_checkpoint) && Option::is_some(&Option::borrow(op_checkpoint).state_root) ) { + let state_root = Option::borrow(&Option::borrow(op_checkpoint).state_root); + return (Option::borrow(op_checkpoint).block_number, *state_root) }; + j = j - 1; + i = i - 1; }; abort Errors::invalid_state(ERROR_NO_HAVE_CHECKPOINT) @@ -251,41 +243,27 @@ module Block { let block_hash = Hash::sha3_256(prefix); let checkpoints = borrow_global_mut(CoreAddresses::GENESIS_ADDRESS()); let len = Ring::capacity(&checkpoints.checkpoints); - let i = checkpoints.index ; - - if( i < len - 1){ - let j = 0; - while(j <= i){ - let op_checkpoint = Ring::borrow_mut(&mut checkpoints.checkpoints, j); - - if( Option::is_some(op_checkpoint) && &Option::borrow(op_checkpoint).block_hash == &block_hash && Option::borrow_mut(op_checkpoint).block_number == number) { - - let op_state_root = &mut Option::borrow_mut(op_checkpoint).state_root; - if(Option::is_some(op_state_root)){ - Option::swap(op_state_root, state_root); - }else{ - Option::fill(op_state_root, state_root); - }; - return - }; - j = j + 1; - }; + let j = if(checkpoints.index < len - 1){ + checkpoints.index }else{ - let j = i - ( len - 1); - while( j < i ){ - let op_checkpoint = Ring::borrow_mut(&mut checkpoints.checkpoints, j); - if( Option::is_some(op_checkpoint) && &Option::borrow(op_checkpoint).block_hash == &block_hash) { - Option::borrow_mut(op_checkpoint).block_number = number ; - let op_state_root = &mut Option::borrow_mut(op_checkpoint).state_root; - if(Option::is_some(op_state_root)){ - Option::swap(op_state_root, state_root); - }else{ - Option::fill(op_state_root, state_root); - }; - return + len + }; + let i = checkpoints.index; + while( j > 0){ + let op_checkpoint = Ring::borrow_mut(&mut checkpoints.checkpoints, i - 1); + + if( Option::is_some(op_checkpoint) && &Option::borrow(op_checkpoint).block_hash == &block_hash && Option::borrow_mut(op_checkpoint).block_number == number) { + + let op_state_root = &mut Option::borrow_mut(op_checkpoint).state_root; + if(Option::is_some(op_state_root)){ + Option::swap(op_state_root, state_root); + }else{ + Option::fill(op_state_root, state_root); }; - j = j + 1; + return }; + j = j - 1; + i = i - 1; }; abort Errors::invalid_state(ERROR_NO_HAVE_CHECKPOINT) @@ -354,41 +332,27 @@ module Block { let block_hash = Hash::sha3_256(prefix); let len = Ring::capacity(&checkpoints.checkpoints); - let i = checkpoints.index ; - - if( i < len - 1){ - let j = 0; - while(j <= i){ - let op_checkpoint = Ring::borrow_mut(&mut checkpoints.checkpoints, j); - - if( Option::is_some(op_checkpoint) && &Option::borrow(op_checkpoint).block_hash == &block_hash && Option::borrow_mut(op_checkpoint).block_number == number) { - - let op_state_root = &mut Option::borrow_mut(op_checkpoint).state_root; - if(Option::is_some(op_state_root)){ - Option::swap(op_state_root, state_root); - }else{ - Option::fill(op_state_root, state_root); - }; - return - }; - j = j + 1; - }; + let j = if(checkpoints.index < len - 1){ + checkpoints.index }else{ - let j = i - ( len - 1); - while( j < i ){ - let op_checkpoint = Ring::borrow_mut(&mut checkpoints.checkpoints, j); - if( Option::is_some(op_checkpoint) && &Option::borrow(op_checkpoint).block_hash == &block_hash) { - Option::borrow_mut(op_checkpoint).block_number = number ; - let op_state_root = &mut Option::borrow_mut(op_checkpoint).state_root; - if(Option::is_some(op_state_root)){ - Option::swap(op_state_root, state_root); - }else{ - Option::fill(op_state_root, state_root); - }; - return + len + }; + let i = checkpoints.index; + while( j > 0){ + let op_checkpoint = Ring::borrow_mut(&mut checkpoints.checkpoints, i - 1); + + if( Option::is_some(op_checkpoint) && &Option::borrow(op_checkpoint).block_hash == &block_hash && Option::borrow_mut(op_checkpoint).block_number == number) { + + let op_state_root = &mut Option::borrow_mut(op_checkpoint).state_root; + if(Option::is_some(op_state_root)){ + Option::swap(op_state_root, state_root); + }else{ + Option::fill(op_state_root, state_root); }; - j = j + 1; + return }; + j = j - 1; + i = i - 1; }; abort Errors::invalid_state(ERROR_NO_HAVE_CHECKPOINT) @@ -399,7 +363,7 @@ module Block { } #[test] - fun latest_state_root_test(){ + fun test_latest_state_root(){ let header = x"20b82a2c11f2df62bf87c2933d0281e5fe47ea94d5f0049eec1485b682df29529abf17ac7d79010000000000000000000000000000000000000000000000000001002043609d52fdf8e4a253c62dfe127d33c77e1fb4afdefb306d46ec42e21b9103ae20414343554d554c41544f525f504c414345484f4c4445525f48415348000000002061125a3ab755b993d72accfea741f8537104db8e022098154f3a66d5c23e828d00000000000000000000000000000000000000000000000000000000000000000000000000b1ec37207564db97ee270a6c1f2f73fbf517dc0777a6119b7460b7eae2890d1ce504537b010000000000000000"; let checkpoints = Checkpoints { @@ -428,28 +392,20 @@ module Block { #[only_test] fun latest_state_root_test_function(checkpoints: &Checkpoints):(u64,vector){ let len = Ring::capacity(&checkpoints.checkpoints); - let i = checkpoints.index ; - - if( i < len - 1){ - let j = 0; - while(j <= i){ - let op_checkpoint = Ring::borrow(&checkpoints.checkpoints, j); - if( Option::is_some(op_checkpoint) && Option::is_some(&Option::borrow(op_checkpoint).state_root) ) { - let state_root = Option::borrow(&Option::borrow(op_checkpoint).state_root); - return (Option::borrow(op_checkpoint).block_number, *state_root) - }; - j = j + 1; - }; + let j = if(checkpoints.index < len - 1){ + checkpoints.index }else{ - let j = i - ( len - 1); - while( j < i ){ - let op_checkpoint = Ring::borrow(&checkpoints.checkpoints, j); - if( Option::is_some(op_checkpoint) && Option::is_some(&Option::borrow(op_checkpoint).state_root) ) { - let state_root = Option::borrow(&Option::borrow(op_checkpoint).state_root); - return (Option::borrow(op_checkpoint).block_number, *state_root) - }; - j = j + 1; + len + }; + let i = checkpoints.index; + while( j > 0){ + let op_checkpoint = Ring::borrow(&checkpoints.checkpoints, i - 1 ); + if( Option::is_some(op_checkpoint) && Option::is_some(&Option::borrow(op_checkpoint).state_root) ) { + let state_root = Option::borrow(&Option::borrow(op_checkpoint).state_root); + return (Option::borrow(op_checkpoint).block_number, *state_root) }; + j = j - 1; + i = i - 1; }; abort Errors::invalid_state(ERROR_NO_HAVE_CHECKPOINT) @@ -458,7 +414,7 @@ module Block { spec latest_state_root_test_function { pragma verify = false; } - + #[test] fun checkpoint_test(){ let checkpoints = Checkpoints { From 55a063f0845578afe1e417dc636f39b8c020472a Mon Sep 17 00:00:00 2001 From: WGB5445 <919603023@qq.com> Date: Thu, 30 Jun 2022 22:23:47 +0800 Subject: [PATCH 10/14] [WIP] fix typo remove readonly script --- build/StarcoinFramework/BuildInfo.yaml | 2 +- .../abis/Block/checkpoint.abi | Bin 48 -> 0 bytes .../bytecode_modules/CheckpointScript.mv | Bin 194 -> 163 bytes .../bytecode_modules/Genesis.mv | Bin 3378 -> 3414 bytes build/StarcoinFramework/docs/Block.md | 37 ------------------ build/StarcoinFramework/docs/Genesis.md | 6 +++ .../StarcoinFramework/source_maps/Block.mvsm | Bin 36335 -> 36335 bytes .../source_maps/CheckpointScript.mvsm | Bin 709 -> 528 bytes .../source_maps/Genesis.mvsm | Bin 27599 -> 27683 bytes sources/Block.move | 8 ---- sources/Genesis.move | 6 +++ 11 files changed, 13 insertions(+), 46 deletions(-) delete mode 100644 build/StarcoinFramework/abis/Block/checkpoint.abi diff --git a/build/StarcoinFramework/BuildInfo.yaml b/build/StarcoinFramework/BuildInfo.yaml index 0504e131..506a3979 100644 --- a/build/StarcoinFramework/BuildInfo.yaml +++ b/build/StarcoinFramework/BuildInfo.yaml @@ -264,7 +264,7 @@ compiled_package_info: ? address: "0x00000000000000000000000000000001" name: YieldFarmingV2 : StarcoinFramework - source_digest: F709AB264FF1ED824C618B56B4E6C228008FE4167D094B0C73D455296FA12964 + source_digest: 752B29E6892579DD076003FC4F9C32E3F26D69A9BF3D352ACDC01AEACB7B1051 build_flags: dev_mode: false test_mode: false diff --git a/build/StarcoinFramework/abis/Block/checkpoint.abi b/build/StarcoinFramework/abis/Block/checkpoint.abi deleted file mode 100644 index 97e9e5be2d6cc2f72699a737607a37a8d49e5d01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48 hcmZSNO3p}4&MwH$%qw9)1&jjDaH-(rqRax20s#1e3c>&Y diff --git a/build/StarcoinFramework/bytecode_modules/CheckpointScript.mv b/build/StarcoinFramework/bytecode_modules/CheckpointScript.mv index 39f4cfebae6e9c3340669cb355f22cb07822100c..14b994a85b1d4354c9a30bbaa6fda127c071fc7e 100644 GIT binary patch delta 78 zcmX@axR}vkq0DP;76t|eHbw>(W)=}v2|ji;YmP(#o(W)?YCB|dfoH;ys^o;F5#pfDo?6A&{ng9sKTMg~SE zMj*k=2ozwMXrRH(m7I~9oL!KgnO8C~!cv+^keP{*38;-lkcE+vi3!AH=4KRRWnusT D4C)MJ diff --git a/build/StarcoinFramework/bytecode_modules/Genesis.mv b/build/StarcoinFramework/bytecode_modules/Genesis.mv index ac1c22e95b8b91a0bc19a43757ad51eb37f52ba5..369bd822908edf84666f3a79a2886bb72ccf711c 100644 GIT binary patch delta 232 zcmdlabxlfdq0DP;76t|ePDTbBCL0sxf*DLK9n5m9%b3?QvtMP~&B-xAK!9z5KqDj1 zLc!LFdTHzqJd6yCqK*@1-?tRD1+qo#KmzuxK$a7uJcEF|8Y6?Kv$_N$i>M2a29R{s z)B=)j+Kh}WtnU0kQpRKQIz};WeK7+uLop*UV;z&t=NVV9N=v2W$CnnQ7bT{o#-|nK z=f;;A8pfC811Y1;b%7 delta 212 zcmca6wMj~Eq0DP;76t|ePDTbBCL0sxg2_xQ&CGJF3z^q5vtM9az{&A}Ux2MapplWM zQLu5MUK+bS4 - -## Function `checkpoint` - - - -

    public(script) fun checkpoint(_account: signer)
    -
    - - - -
    -Implementation - - -
    public (script) fun checkpoint(_account: signer){
    -    Block::checkpoint();
    -}
    -
    - - - -
    - -
    -Specification - - - -
    pragma verify = false;
    -
    - - - -
    - ## Function `latest_state_root` diff --git a/build/StarcoinFramework/docs/Genesis.md b/build/StarcoinFramework/docs/Genesis.md index 9a994b7a..8f7288a0 100644 --- a/build/StarcoinFramework/docs/Genesis.md +++ b/build/StarcoinFramework/docs/Genesis.md @@ -508,6 +508,12 @@ The module for init Genesis GenesisNFT::initialize(&genesis_account, merkle_root, 1639u64, image); }; StdlibUpgradeScripts::do_upgrade_from_v6_to_v7_with_language_version(&genesis_account, 4); + + //v11 -> v12 + { + + }; + StdlibUpgradeScripts::do_upgrade_from_v11_to_v12(&genesis_account); //Start time, Timestamp::is_genesis() will return false. this call should at the end of genesis init. Timestamp::set_time_has_started(&genesis_account); Account::release_genesis_signer(genesis_account); diff --git a/build/StarcoinFramework/source_maps/Block.mvsm b/build/StarcoinFramework/source_maps/Block.mvsm index 4e16bf331a1d2455519f0eecfcd01ff024e96637..468b0992c4e82bf48d441b29c7cc2da4eb5b4279 100644 GIT binary patch literal 36335 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 literal 36335 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 diff --git a/build/StarcoinFramework/source_maps/CheckpointScript.mvsm b/build/StarcoinFramework/source_maps/CheckpointScript.mvsm index 999f5e496b2689e46b53001f2892339b7e1312bb..db40437f507dad60dade00feec8e676de1c9d0af 100644 GIT binary patch literal 528 zcmXpz5Hlms`uv_Rku5B94$kJ5etP1N<(p_-ZLcfFyvh+D;`|vH@_?9;0TnO`IA^3L zXBXsW=9L5|7iAWdFfcJNm=Q2-4bY^$K+M3%5uccxoL`z(LP*O#pz>oNEyS3A6R7Yr z5Hk~W2}so!kg<#em4*i}Fk}ER0~67X&IBqi1Y)*~)Wnq3B0_$w0V-_**#LAnLFa4& bD%=6YgdIK;sA?w=GZ8csq-qxsGcW)E-UQ1l literal 709 zcmZP+EjWDkBwN?1Jl&HEjYK0%d6!x^wyJF5EnwNsAopZXoIe9Y9uPA!paMn#=Zw_k z?1KEvyprJLqRfI424Hk3G?12mnY#FJEDXB$-B1QLnASN8z`ao6wKup++AXNcC H%)kHuiACrp diff --git a/build/StarcoinFramework/source_maps/Genesis.mvsm b/build/StarcoinFramework/source_maps/Genesis.mvsm index f8f0f36147bf3e8a7650bc54a54e0ad7911182d1..a7b276075163aea2c321aa3039c76cc64e22404a 100644 GIT binary patch literal 27683 zcmbuHd303u`G;@Vl8^uaLfH2u8;fBLgnbD+vI>S}943=w$TA@_NeCbah!6w>6mVft zM5-bPs8mrbq9SOiOOeuw9IFJWP|+4jsfPBsfjNhtp5OV*z44sKzn;%~_dDNt=Ov}@ zWqiEv_}h=vtTQO?=FaTZQ#|Ew9s2z6jMC`muC*P!E_sMy7^5Hr?))z#bhtau?eqAI zYKBoNiX4eEjFVs_)b{z)b3C&hMeYKh$D5~ueh7ku* zey`t|7XmLsaIi zJ0R#_tpvkp4q>h=rzg+hk%!g|IR)wlwq%}MpWm6AuMTh|sWdZLnCHrII|`hBx5Mu& z$aKq_U^%HxX40MSb!9nb=XhP&4p%U@&vT>>LdsaW@3F;rEGt0nP4+r+YFo zJg&kVe~F{mlb7x-R>%Dv1!^Q3MuUnXx1SpBqg%V9(hW!^K=WUwZ=FTzxVXbql|EFM zYVHG%koD7$L2^Mw+Bwg9dKJm-(756Vaw$=<>pn-&=U^}C4H|Z6?pRf4rfk|x7aNojCMr2LgQR-dLj3Be&OsKk1xxU zmlhJ;cSA7p-vuejv`)@LFP7+*$GWEbG);8HRrl> zy#*z=u1yI~sLShzBSRIKLO2&1R$K-C=W#jAtykQwoDr2@NcK@^%AM}XEzEV~ z73R+7Y4>JSlnLq}c91^|G3IH=FYvgyohT7F32GO9PxR}GI1iik_>V+GJM+phpVd1r zg3mMG?J!>;oCbLzVyMs!8V2^7Thf_hJ`NdNQ*VJfh{0so+$U)FNdEfxS@cc8F6R#Ap3s5+6dn+o`#Q-U6<=`L0oW`DbF6Aj-VV zw{P^I_Vfm!@Gh*1?z}qY=bE=rKCA=CO@x}a78;HMR%AS#EHWG}r~D8v>TejUAmWZy ziaN|0Jq;rhss>U2xdDdpJk$v+FK%CTwT)LeqN5NK$XPqA@%;=V1FCy+otg5wT^VQ? zSD_xaGmmAl$Dfs6;4BX2{3WFr#t?|ebr)ott01peUa{3|YBN-2*{sgP#6E^G1tP8N z)Rknz_z8?He5FuZ$l@$7gAi$!VO77&FsexNeasq|RizoY&efzjhnn(q=JQy8g<8@qH?1TVP|~b} z)dcED^Aa_iVn#`GDpn@cm1ZHob^;j=LeQCDGdJUqb`ERVSt}Mx=8H1GoG15%N z8V(JmIRz^p8cA~z)^=zt%{^Ghpouh3VO@r%()T1oRwtk0meG{3^S3T>o$ntSQLm~Exmxw~QXhj!8&h&2h?OEVm6GIWsU z3arf#E6wMy4nmwX-^2PG;-&cw)(uFIW@r!2B_v8S2`d#kN^>&ST<9dt#aNF)XKC)h z`Ym*k=KEOZ;4W!i#xhu~B}ub3Rt$8N<}A*7Ys_xa?1wcLx=S+=YaH~D=4PxT&{LXo zus(ub(hRI=lciau7oRZDTbl7$y`YaYqp^}9MVg;;G`%tVO7m5$_n@CNKf@}A{?cs3 zqOutbkY)r{a~LSiLbe=-IY^qLu+m_#G-qIC!4PS7#qz*VY1Zw{JrBdA*%qrCq)M{~ z)*u)z%^_IhVT3d%Vx_}KX=Y#*!6<3oPrMV01GngyQ z1e$9pP$135Sbf1K%|=+J?U!aWRwiA`B57{G+yTYX^k6*;^Q0MQE|y61JoSEp`O+-M zs>Km4kmi2O+L#NaISgw$+%L^$STkUeG!J4Og~ifbgY_;vAk9DzdWkeycp430sWcm6 zCBiako@5_8Vm>HM2bK?(OS31IA0CqCNvtnng*10#or9Iq4D{Sfr5QyRx)rRFW*e;b z@US#5vyUAxS4-1_RRU|IIT33Zjfd_ ztfla%G|ysPhR3A&J=PW2D9z1SKfoqwW)9}v37e(a6KftkF3l(go?5{Z()@vXtuddJ z=4h-mcuJaySkqyPG?!zogRRnZW37j6(lo6NV1!8Z!|H}{3XFJ*6J6&BT?R`NT}^Ay z#sfQpS-r@O0$YPwX$13r9S-it+C>C6fR(|lXYgM#H+aWSojVYLz}{fiRg&Rh zeCw*zU{+%)^aOi@S;I)CRiy0pR6 z1_k?rS*=O;0b7GvqX^CdtAkm7GRvScgINd2pM=T}W}T%<(s4CtCoO8O&Njehb(f%-T)#or<`v!K_b+UVzFCW?iE~y$H^u&B3hJWRtv)nv_+)cZSBm*yU<@1ce?1J^H9n(?(*Mnaf0Q?SNB zxHRiyjfI-h%*I*(5z@RLYdJ(pb1K$DP)nM7vEGK-(maB79O_7O9o7kml4cp!HK;4i z>sVE42Q%{YN6f02^<~WgSa(CTG-qOEgC2P*!P)?N@0SOY>h?H$jg)rE)&QS=s54r}kJqpqJcweX|}UOLH1l z7W9_p9IPVfBh7(W#gHP+Em$u>UuiDE+5`Qh`7f-N(ZP&7oxn`M)FV%U)%QTTbtm=a z!XRm`#M%UdrRl@k40`0LJJ#bcRMxEDfcG&BlV%du3`mt`G1dYYF3mYu3t@ybPjNIW zFh@!=Jcd;OjFM(ktXLQ=&3LSyFh-imSfgO9G{<1g06p?_gX5lwdAF=tiuDAHmu5EB zlQ2P=zr*?%^vKimSf9WoS@UPCFuux7mgYIka7;b&)CQ{u+#_oyWA%oq((H-V3#Li4 z1=e36O`7RgewZ%JBCJxFA@D4aG%`zM_7LVr!*hO z`WR+Q^CH&I;F9KlvG^(x#BfwO=1p+Rn&+{)(d@{SWaB)sX|BcE0Xfp#iS;_iyp46sa^-%_tR zrXG0;bfK5anrYPYf*yIAi?tk9$eOWcJy`YXAFpR&+ z0+ssdf5UJ(XJG4x>mws*rh(1b1t;4r2Kzs|uVdpcfW5(mV{H2isNCSf&*l-Z4?)kT z>`rB#8*Ke-m^g-S)L?zkq!;@+0_^_USw5OwX3Lfbcv3jl(O`WZ=Oa>Qp)$Yx_Zh|4 z9H{&+|2b4y19pFQugVE*VxB}hf7NE!NP4$mduZSkdwv-jn19RU)*p_t@b{nY;|4E; z7&C4C52>u=Js>~RU$ zA3E8|r9TYzXMgVI?#lwJ<2x6~TmvhUhBNqB%LF?!l@APMI2bGqakeCo2o@)*I&fUw z!Q!0hfB4i7V{1VVeEpMK=O?f=Cwhb}oq}J4gPRkLvNd3`G9K)mZoaFJk|@q+EmR(5<9@gRLx;x9|OP0$OYvIZm%;CBF(@@L=|aP<3&&( zs!B8P@amC^D6Vx~s4i=E!|D!tO{ddgS68tn*Mu){NyDiiap^j>nn=dgNj;)`L(_);x&y zI_Qy$^H|@59=T}E>$5HBk&AIy6G4w$+>f;s^vK12tOKA&F3w_=fgZW2!dsy#1Tk`f zH3;;`#aygH&?6TQkLL$q&?6Unu-*baaxs&4(k##;7aOrQK`VJLy^nPaT1)dP)-`A& z%{DB>+L}mnGS(E(BNt1smO^`3b1&8_phqq)U|oS&S+g0RM$I8kn!~Y1LA*4VVXc4! zY3{~)84{&=8tYHcQJUpgA*>-fNpk|$JbQ@_t@=~zgR#`{t88d15pE>=W)R$(`@;`IBOsX7gwhAL#@?M5Y z^*WO%Fc$1}3ulm=3zh2@E}_CUb02K|{pmd(PATd$F>-HJ!U&flMI zPB00A{?j_VchGI1{#a?C+d%19 zC7|0t%dnmX-3EFQ>vy2rKqs)yfo=m`#0u%anUc>@1XfGXZJ>CpB+zZ36s(b;+dz}B zazM9%im+CJZUa4r^(^Q%&>pPgpxZ#7Vf_k#BCN`KhP%Ert&~2c>SoeZ%1G%sk zfo=n>#M%bB4fH(L+o0P($Fa&lw}Gx;)rbqG4HRWspxZ#5vHE~+0}aKR0J;q{9V-`f g8>kp-1?V==daRwG+d%vHJbD>Zw}DJ+9~j2}08_+J*Z=?k literal 27599 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 T4fG73M^9twHjrsO1BUUxV+RtY diff --git a/sources/Block.move b/sources/Block.move index b9f02b6a..0993f7c9 100644 --- a/sources/Block.move +++ b/sources/Block.move @@ -467,14 +467,6 @@ module CheckpointScript { pragma verify = false; } - public (script) fun latest_state_root(_account: signer){ - Block::latest_state_root(); - } - - spec latest_state_root { - pragma verify = false; - } - public (script) fun update_state_root(_account: signer , header: vector){ Block::update_state_root(header); } diff --git a/sources/Genesis.move b/sources/Genesis.move index faab286c..639db785 100644 --- a/sources/Genesis.move +++ b/sources/Genesis.move @@ -446,6 +446,12 @@ module Genesis { GenesisNFT::initialize(&genesis_account, merkle_root, 1639u64, image); }; StdlibUpgradeScripts::do_upgrade_from_v6_to_v7_with_language_version(&genesis_account, 4); + + //v11 -> v12 + { + + }; + StdlibUpgradeScripts::do_upgrade_from_v11_to_v12(&genesis_account); //Start time, Timestamp::is_genesis() will return false. this call should at the end of genesis init. Timestamp::set_time_has_started(&genesis_account); Account::release_genesis_signer(genesis_account); From ed3295ab2f89d905a02b205691b1585639ad662e Mon Sep 17 00:00:00 2001 From: WGB5445 <919603023@qq.com> Date: Fri, 1 Jul 2022 09:57:42 +0800 Subject: [PATCH 11/14] Fix borrow mut and functional abstraction --- build/StarcoinFramework/BuildInfo.yaml | 2 +- .../abis/Block/checkpoint.abi | Bin 0 -> 48 bytes .../abis/Block/latest_state_root.abi | Bin 55 -> 0 bytes .../bytecode_modules/Block.mv | Bin 3551 -> 2740 bytes .../bytecode_modules/CheckpointScript.mv | Bin 163 -> 150 bytes build/StarcoinFramework/docs/Block.md | 12 +- .../StarcoinFramework/source_maps/Block.mvsm | Bin 36335 -> 21910 bytes .../source_maps/CheckpointScript.mvsm | Bin 528 -> 528 bytes sources/Block.move | 180 +++++------------- 9 files changed, 56 insertions(+), 138 deletions(-) create mode 100644 build/StarcoinFramework/abis/Block/checkpoint.abi delete mode 100644 build/StarcoinFramework/abis/Block/latest_state_root.abi diff --git a/build/StarcoinFramework/BuildInfo.yaml b/build/StarcoinFramework/BuildInfo.yaml index 506a3979..df69c7ed 100644 --- a/build/StarcoinFramework/BuildInfo.yaml +++ b/build/StarcoinFramework/BuildInfo.yaml @@ -264,7 +264,7 @@ compiled_package_info: ? address: "0x00000000000000000000000000000001" name: YieldFarmingV2 : StarcoinFramework - source_digest: 752B29E6892579DD076003FC4F9C32E3F26D69A9BF3D352ACDC01AEACB7B1051 + source_digest: FD18BC03C6A3C4C02C77D3B8CB8A300CF2779F75ABA8EB4846D407B470377677 build_flags: dev_mode: false test_mode: false diff --git a/build/StarcoinFramework/abis/Block/checkpoint.abi b/build/StarcoinFramework/abis/Block/checkpoint.abi new file mode 100644 index 0000000000000000000000000000000000000000..97e9e5be2d6cc2f72699a737607a37a8d49e5d01 GIT binary patch literal 48 hcmZSNO3p}4&MwH$%qw9)1&jjDaH-(rqRax20s#1e3c>&Y literal 0 HcmV?d00001 diff --git a/build/StarcoinFramework/abis/Block/latest_state_root.abi b/build/StarcoinFramework/abis/Block/latest_state_root.abi deleted file mode 100644 index 6f2161b070a83c3e477c66f128a6ed395ef5323e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 55 ucmZP+%tKE&bc*>iy${5hG{K!r!+$DKkE$i2 zmt1RZw-^E9ld)$|HrBHeWj(7=>tV zUHO78>TYdVH!J0bM@RIib{jCG2^ToT1cPKCz#T(h5oF+Fn;8UxfTTWf0`3+1EpUM_ z@0`5#Wp|F3-5Tg`NBwNZ0_$*)4!@6~3l(M%gnztf$1{mb>! zdD?!uNa-OS)0PH+KBu6tWeTjC#0p6iVhI*-+bY-M?^zL8RqiM&u<+-C`;obYk~85- zzL$4;AVDH4vGls{;bK4$fd6hdO6CtCtV|^t!*gMIP*HXS8AT-}C%|re2V^CQ<3Lrz Z>QoYvOJG+Zt8zLqz^>h^9Cvrozz2sON_YSO delta 1092 zcmZ9Lzi%8>5XaxVAG>?+&D-5)Ztth>&UZflJfCe6j8=e9OaYY8fKpkJ6@($OQGAi2 zG)|Kg6bNUl2nh;)D2O735kdq7(GUp*Q0u4o^G?}+1Cdw8wpZ(74SECv2kJ-ca z=dJdqBK%$b9YkMY8r;S${h7`24}0I*8|}l5s|^GeF2@vuQIb+zK}T_nhkp%RLUcN5 z0TVAt$>c`o2Ao;)<;@WT7OTXj*4ZgrwY98n8@6dv)l}_lI6r6SZLtHVtb#D&MnMFc zi{g9e4mgyrU;+|-tT2cK7)d}mh!5F#jh1I@{X@vv;Fu=OJ4Jwe9Bi~NP+ z4gP+S@VAPa{93cI{o(oTk3ZSl*_~`n&hJmQKDe~IJ=xjYEmp-xGrbGvN^yTedF$fd z-t$ej#cR@c9Q`A{;Rl;e2EdM=I!dQdI9%ok8d6pbp{C`Wm{M7UOtnib_^+Gwkr^fi z1|XEqE>IDwCtfuT31nJQVwr)2YiUHzrXUC8G0(YpMZIo#k_%9049_L^Q%n`V1drdT zzvpnok!zmvJVZqqs#=|R*JnklvQnj~>RS0hP#z0H%aaL*VxZpDyhx*ZYphP|Ag`oB zt`XEm1;K#G)tiPFo6*a0$I$u%*II~ZjCOG^ybIIC_2}$D_W^{Vo5r=6o%p&AwjgG@ z<+?cQVU}QsBch?};hdM|+zifpn5XUq4+{i~9u^6faGhw0zFYRvvg>2pLz`gQ!!$K@ zAU?s zfC_TM#h0MIqe`BnVO5X%DAX;g2qVM~pnd~W14G3mz_A{$=34v&>JFH(STYpC zFQ!+0TX`Tu6Rq4o`j`GAxK})?(W)=}v2`+Xe6OJ$eo-`4lC?f+C5Hm0{F)}bRF#-u@ sW+1`Cz{E4rMuv+kIU_YWyC6R^Z(^o~0FxjS6C)E)4>LETATtvK04{F}9smFU delta 108 zcmbQnxR}vqq0DP;76t|eHbw>(W)=}v2|ji;YmP(#o#5fHh7C|OPpn4{t0nFTtg3L?| E0RBY|Y5)KL diff --git a/build/StarcoinFramework/docs/Block.md b/build/StarcoinFramework/docs/Block.md index f1ca38ca..31041c23 100644 --- a/build/StarcoinFramework/docs/Block.md +++ b/build/StarcoinFramework/docs/Block.md @@ -5,7 +5,7 @@ -- [Function `latest_state_root`](#0x1_CheckpointScript_latest_state_root) +- [Function `checkpoint`](#0x1_CheckpointScript_checkpoint) - [Function `update_state_root`](#0x1_CheckpointScript_update_state_root) @@ -14,13 +14,13 @@ - + -## Function `latest_state_root` +## Function `checkpoint` -
    public(script) fun latest_state_root(_account: signer)
    +
    public(script) fun checkpoint(_account: signer)
     
    @@ -29,8 +29,8 @@ Implementation -
    public (script) fun latest_state_root(_account: signer){
    -    Block::latest_state_root();
    +
    public (script) fun checkpoint(_account: signer){
    +    Block::checkpoint();
     }
     
    diff --git a/build/StarcoinFramework/source_maps/Block.mvsm b/build/StarcoinFramework/source_maps/Block.mvsm index 468b0992c4e82bf48d441b29c7cc2da4eb5b4279..2609a94efcaf6aa15267d7b08257cf42172959e4 100644 GIT binary patch literal 21910 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 NNr`D`N%0k|{{aAEV4eT~ literal 36335 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 diff --git a/build/StarcoinFramework/source_maps/CheckpointScript.mvsm b/build/StarcoinFramework/source_maps/CheckpointScript.mvsm index db40437f507dad60dade00feec8e676de1c9d0af..0fe23809f49d24c4136fe5d0bc0090bbde5f602b 100644 GIT binary patch literal 528 zcmdO~($(ox6yCO1e$S4VtZors926Bw>@7|U%sF#O{O^EyS4r2dI$W z9^_g=#)4D{05K6tbAZZfK}wm3c61$3c^eS3Wuzviq!tl!%tWBl=^z^zmwv1x0WlN7&;Y4A55x=%0DO_b?f?J) literal 528 zcmXpz5Hlms`uv_Rku5B94$kJ5etP1N<(p_-ZLcfFyvh+D;`|vH@_?9;0TnO`IA^3L zXBXsW=9L5|7iAWdFfcJNm=Q2-4bY^$K+M3%5uccxoL`z(LP*O#pz>oNEyS3A6R7Yr z5Hk~W2}so!kg<#em4*i}Fk}ER0~67X&IBqi1Y)*~)Wnq3B0_$w0V-_**#LAnLFa4& bD%=6YgdIK;sA?w=GZ8csq-qxsGcW)E-UQ1l diff --git a/sources/Block.move b/sources/Block.move index 0993f7c9..44b3bd5c 100644 --- a/sources/Block.move +++ b/sources/Block.move @@ -169,6 +169,15 @@ module Block { let parent_block_hash = get_parent_hash(); let checkpoints = borrow_global_mut(CoreAddresses::GENESIS_ADDRESS()); + checkpoint_base(checkpoints, parent_block_number, parent_block_hash); + + } + + spec checkpoint { + pragma verify = false; + } + + fun checkpoint_base(checkpoints: &mut Checkpoints, parent_block_number: u64, parent_block_hash:vector){ assert!(checkpoints.last_number + BLOCK_INTERVAL_NUMBER <= parent_block_number || checkpoints.last_number == 0, Errors::invalid_argument(ERROR_INTERVAL_TOO_LITTLE)); checkpoints.index = checkpoints.index + 1; @@ -183,15 +192,22 @@ module Block { }else{ Option::destroy_none(op_checkpoint); } - } - spec checkpoint { + spec checkpoint_base { pragma verify = false; } public fun latest_state_root():(u64,vector) acquires Checkpoints{ let checkpoints = borrow_global(CoreAddresses::GENESIS_ADDRESS()); + latest_state_root_base(checkpoints) + } + + spec latest_state_root { + pragma verify = false; + } + + fun latest_state_root_base(checkpoints: &Checkpoints):(u64,vector){ let len = Ring::capacity(&checkpoints.checkpoints); let j = if(checkpoints.index < len - 1){ checkpoints.index @@ -212,11 +228,20 @@ module Block { abort Errors::invalid_state(ERROR_NO_HAVE_CHECKPOINT) } - spec latest_state_root { + spec latest_state_root_base { pragma verify = false; } public fun update_state_root(header: vector)acquires Checkpoints { + let checkpoints = borrow_global_mut(CoreAddresses::GENESIS_ADDRESS()); + update_state_root_base(checkpoints, header); + } + + spec update_state_root { + pragma verify = false; + } + + fun update_state_root_base(checkpoints: &mut Checkpoints, header: vector){ let prefix = b"STARCOIN::BlockHeader"; let prefix = Hash::sha3_256(prefix); @@ -238,10 +263,10 @@ module Block { let (_extra2,new_offset) = BCS::deserialize_u8(&header,new_offset); let (_extra3,new_offset) = BCS::deserialize_u8(&header,new_offset); let (_extra4,_new_offset) = BCS::deserialize_u8(&header,new_offset); - + Vector::append(&mut prefix,header); let block_hash = Hash::sha3_256(prefix); - let checkpoints = borrow_global_mut(CoreAddresses::GENESIS_ADDRESS()); + let len = Ring::capacity(&checkpoints.checkpoints); let j = if(checkpoints.index < len - 1){ checkpoints.index @@ -252,7 +277,7 @@ module Block { while( j > 0){ let op_checkpoint = Ring::borrow_mut(&mut checkpoints.checkpoints, i - 1); - if( Option::is_some(op_checkpoint) && &Option::borrow(op_checkpoint).block_hash == &block_hash && Option::borrow_mut(op_checkpoint).block_number == number) { + if( Option::is_some(op_checkpoint) && &Option::borrow(op_checkpoint).block_hash == &block_hash && Option::borrow(op_checkpoint).block_number == number) { let op_state_root = &mut Option::borrow_mut(op_checkpoint).state_root; if(Option::is_some(op_state_root)){ @@ -269,12 +294,12 @@ module Block { abort Errors::invalid_state(ERROR_NO_HAVE_CHECKPOINT) } - spec update_state_root { + spec update_state_root_base { pragma verify = false; } #[test] - fun header_test(){ + fun test_header(){ let prefix = b"STARCOIN::BlockHeader"; let prefix = Hash::sha3_256(prefix); let header = x"20b82a2c11f2df62bf87c2933d0281e5fe47ea94d5f0049eec1485b682df29529abf17ac7d79010000000000000000000000000000000000000000000000000001002043609d52fdf8e4a253c62dfe127d33c77e1fb4afdefb306d46ec42e21b9103ae20414343554d554c41544f525f504c414345484f4c4445525f48415348000000002061125a3ab755b993d72accfea741f8537104db8e022098154f3a66d5c23e828d00000000000000000000000000000000000000000000000000000000000000000000000000b1ec37207564db97ee270a6c1f2f73fbf517dc0777a6119b7460b7eae2890d1ce504537b010000000000000000"; @@ -304,62 +329,23 @@ module Block { assert!(state_root == x"61125a3ab755b993d72accfea741f8537104db8e022098154f3a66d5c23e828d",1003); } - #[only_test] - fun update_state_root_test(checkpoints: &mut Checkpoints, header: vector){ - let prefix = b"STARCOIN::BlockHeader"; - let prefix = Hash::sha3_256(prefix); - - let (_parent_hash,new_offset) = BCS::deserialize_bytes(&header,0); - let (_timestamp,new_offset) = BCS::deserialize_u64(&header,new_offset); - let (number,new_offset) = BCS::deserialize_u64(&header,new_offset); - let (_author,new_offset) = BCS::deserialize_address(&header,new_offset); - let (_author_auth_key,new_offset) = BCS::deserialize_option_bytes_vector(&header,new_offset); - let (_txn_accumulator_root,new_offset) = BCS::deserialize_bytes(&header,new_offset); - let (_block_accumulator_root,new_offset) = BCS::deserialize_bytes(&header,new_offset); - let (state_root,new_offset) = BCS::deserialize_bytes(&header,new_offset); - let (_gas_used,new_offset) = BCS::deserialize_u64(&header,new_offset); - let (_difficultyfirst,new_offset) = BCS::deserialize_u128(&header,new_offset); - let (_difficultylast,new_offset) = BCS::deserialize_u128(&header,new_offset); - let (_body_hash,new_offset) = BCS::deserialize_bytes(&header,new_offset); - let (_chain_id,new_offset) = BCS::deserialize_u8(&header,new_offset); - let (_nonce,new_offset) = BCS::deserialize_u32(&header,new_offset); - let (_extra1,new_offset) = BCS::deserialize_u8(&header,new_offset); - let (_extra2,new_offset) = BCS::deserialize_u8(&header,new_offset); - let (_extra3,new_offset) = BCS::deserialize_u8(&header,new_offset); - let (_extra4,_new_offset) = BCS::deserialize_u8(&header,new_offset); - - Vector::append(&mut prefix,header); - let block_hash = Hash::sha3_256(prefix); + #[test] + fun test_checkpoint(){ + let checkpoints = Checkpoints { + checkpoints : Ring::create_with_capacity(3), + index : 0, + last_number : 0 + }; - let len = Ring::capacity(&checkpoints.checkpoints); - let j = if(checkpoints.index < len - 1){ - checkpoints.index - }else{ - len - }; - let i = checkpoints.index; - while( j > 0){ - let op_checkpoint = Ring::borrow_mut(&mut checkpoints.checkpoints, i - 1); - - if( Option::is_some(op_checkpoint) && &Option::borrow(op_checkpoint).block_hash == &block_hash && Option::borrow_mut(op_checkpoint).block_number == number) { - - let op_state_root = &mut Option::borrow_mut(op_checkpoint).state_root; - if(Option::is_some(op_state_root)){ - Option::swap(op_state_root, state_root); - }else{ - Option::fill(op_state_root, state_root); - }; - return - }; - j = j - 1; - i = i - 1; - }; - - abort Errors::invalid_state(ERROR_NO_HAVE_CHECKPOINT) - } + checkpoint_test_function(&mut checkpoints, 0, x"80848150abee7e9a3bfe9542a019eb0b8b01f124b63b011f9c338fdb935c417d"); - spec update_state_root_test { - pragma verify = false; + let Checkpoints{ + checkpoints: ring, + index : index, + last_number: last_number + } = checkpoints; + assert!( index == 1 && last_number == 0 , 10020); + Ring::destroy(ring); } #[test] @@ -376,7 +362,7 @@ module Block { update_state_root_test(&mut checkpoints, copy header); - let (number , state_root ) = latest_state_root_test_function(&checkpoints); + let (number , state_root ) = _latest_state_root(&checkpoints); let Checkpoints{ checkpoints: ring, index : index, @@ -387,74 +373,6 @@ module Block { Ring::destroy(ring); } - - - #[only_test] - fun latest_state_root_test_function(checkpoints: &Checkpoints):(u64,vector){ - let len = Ring::capacity(&checkpoints.checkpoints); - let j = if(checkpoints.index < len - 1){ - checkpoints.index - }else{ - len - }; - let i = checkpoints.index; - while( j > 0){ - let op_checkpoint = Ring::borrow(&checkpoints.checkpoints, i - 1 ); - if( Option::is_some(op_checkpoint) && Option::is_some(&Option::borrow(op_checkpoint).state_root) ) { - let state_root = Option::borrow(&Option::borrow(op_checkpoint).state_root); - return (Option::borrow(op_checkpoint).block_number, *state_root) - }; - j = j - 1; - i = i - 1; - }; - - abort Errors::invalid_state(ERROR_NO_HAVE_CHECKPOINT) - } - - spec latest_state_root_test_function { - pragma verify = false; - } - - #[test] - fun checkpoint_test(){ - let checkpoints = Checkpoints { - checkpoints : Ring::create_with_capacity(3), - index : 0, - last_number : 0 - }; - - checkpoint_test_function(&mut checkpoints, 0, x"80848150abee7e9a3bfe9542a019eb0b8b01f124b63b011f9c338fdb935c417d"); - - let Checkpoints{ - checkpoints: ring, - index : index, - last_number: last_number - } = checkpoints; - assert!( index == 1 && last_number == 0 , 10020); - Ring::destroy(ring); - } - - #[only_test] - fun checkpoint_test_function(checkpoints: &mut Checkpoints, parent_block_number: u64, parent_block_hash:vector){ - assert!(checkpoints.last_number + BLOCK_INTERVAL_NUMBER <= parent_block_number || checkpoints.last_number == 0, Errors::invalid_argument(ERROR_INTERVAL_TOO_LITTLE)); - - checkpoints.index = checkpoints.index + 1; - checkpoints.last_number = parent_block_number; - let op_checkpoint = Ring::push(&mut checkpoints.checkpoints, Checkpoint { - block_number: parent_block_number, - block_hash: parent_block_hash, - state_root: Option::none>(), - } ); - if(Option::is_some(&op_checkpoint)){ - Option::destroy_some(op_checkpoint); - }else{ - Option::destroy_none(op_checkpoint); - } - } - - spec checkpoint_test_function { - pragma verify = false; - } } module CheckpointScript { use StarcoinFramework::Block; From fdb0864c68fe4e5f8673dc1fb4240caf53cc292a Mon Sep 17 00:00:00 2001 From: WGB5445 <919603023@qq.com> Date: Fri, 1 Jul 2022 11:07:22 +0800 Subject: [PATCH 12/14] change base function name --- build/StarcoinFramework/BuildInfo.yaml | 2 +- .../bytecode_modules/Block.mv | Bin 2740 -> 2738 bytes .../StarcoinFramework/source_maps/Block.mvsm | Bin 21910 -> 21860 bytes .../source_maps/CheckpointScript.mvsm | Bin 528 -> 528 bytes integration-tests/block/block_checkpoints.exp | 10 ++-- sources/Block.move | 51 ++++++++++++------ 6 files changed, 41 insertions(+), 22 deletions(-) diff --git a/build/StarcoinFramework/BuildInfo.yaml b/build/StarcoinFramework/BuildInfo.yaml index df69c7ed..aad85957 100644 --- a/build/StarcoinFramework/BuildInfo.yaml +++ b/build/StarcoinFramework/BuildInfo.yaml @@ -264,7 +264,7 @@ compiled_package_info: ? address: "0x00000000000000000000000000000001" name: YieldFarmingV2 : StarcoinFramework - source_digest: FD18BC03C6A3C4C02C77D3B8CB8A300CF2779F75ABA8EB4846D407B470377677 + source_digest: BACCA33017D09E7C2C75819FCB88E3354BBB2001166D2D685317D7A24C61E70E build_flags: dev_mode: false test_mode: false diff --git a/build/StarcoinFramework/bytecode_modules/Block.mv b/build/StarcoinFramework/bytecode_modules/Block.mv index 4de213f11400f577daae7847528acf7fbab36842..cc2985e9212c058c66d940446fb722fe9c260ab9 100644 GIT binary patch delta 1235 zcmYL|&2L*p5Wr`4-+p*^pWoZW&rY1giQ^=8{FTrTcxef=Y9dsrLZX(qTBTT`Dl}DN zIB>}oE{N($NJw0`AU=eIP$dMSM{dB0BNq-mao}HI){T;V((G?$cjnFR&OFI}%s#Ex zzh&y5=y$2Vx2b$;$L0%{yT9CH9Y1?~>FNmrB#Z;35s^m{bArS?N`ML~fDAQ2wM4cW z(!K>lw5SnyTPctobO>s@Oj34}lw{9&l6^;^)L>qb999yt43mtUcF0NWY7O{8Z2|DY zNo^7EVyzB%skQ`oxwZ`WVr>QRC0Z!ut0BtXT9f?un(HL5v_kZ&EwZzhDMz+X*{WC6 z7J`12jL|jGK^a}|BFb2o<0MXFAJ4_}aV1W4MK>C&@mk!}>v}V8w>#|tSDJCd0HtOD z80m(gbSRJ`>Czb{gAkk-U*cBrH?HHbNZCR0Cc827H;ki|s4>VApe8j6pfoTw!FG>;!09i5urfB1GVoSV(LV=?6S ziywHW_>X^Fd=%{$UNnj;;=43??eO)((aq8L`oY2N!_lbtExKjRsLREq;-^=!$>kHF`gK`H_K?<)Zjgy>U@GX=KiLSM1WPQl4wa#D$V$mhsEth6Oye zmz=U;M^xO_{gbTCC{*_p20IOtK3$RAe z4A3N453uf+5#yo7+}I(dT|K>spGu?5y1wZT=_Wow@fikGsVG)WZJ&-@F}wceSkD~wteF!oy^ zf`PL~q1df+1@d$b2EeG@kxHK;&rH0hi1F0z)ErkoB)PX|; F{{w(+ickOm delta 1269 zcmZ9M&ub(_6vyAI>Z*4m!IRNC5Ow7nw-~a{i0H#0y6eYzH@BvBz znQ}<(G{s>?0k8%Y^QPy4Y(WmeZ|BL%PHf4p1Za3#f+FumRDDz)uL%g914!#-t%L2?b0#M{v#=l_}nx_jWBvSC&jw5H7rXi!X}Mdq?5 z`&4dXE_*C*p1Z)5QDCQhmQuL}jqbuso+~J@E{TbB93ZUeK+KDbPX5aEicI{+6-71~ zBWDxWS;18!n!!AEAYGOP=#uiZnFW$sPiD0N3uu6HPtlD|{ml5UZv{pwnKIrMo3w_p zOqF5cT4B zV3uIc!5kIMJD9h1v*2K7!7iDqqbh|K9V`;m9MlNv4(hg!nA^~p=JW>5U3#MXhe0oi z%$izTC*eOq@fkV{W0n0Aly^ztqUzL)C%(eac-rINp!k_oK)sgc^U`!xcRf}75sDvC hclBl(qxk8PY<4?r&QuzVF{D3>`)%Rma&qtx;a@}xm8bv! diff --git a/build/StarcoinFramework/source_maps/Block.mvsm b/build/StarcoinFramework/source_maps/Block.mvsm index 2609a94efcaf6aa15267d7b08257cf42172959e4..19a23ad9596b520402792dc6c20e17af5570cb05 100644 GIT binary patch literal 21860 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 NNr`D`N%0k|{{aAEV4eT~ diff --git a/build/StarcoinFramework/source_maps/CheckpointScript.mvsm b/build/StarcoinFramework/source_maps/CheckpointScript.mvsm index 0fe23809f49d24c4136fe5d0bc0090bbde5f602b..7be2eff64926935aa5443a035231a99d2fcf188d 100644 GIT binary patch literal 528 zcmezDHetR}kO;S>TejvJ&hO#gHjL|Z1Om2oFFm4vLQ#-$q6-7VLLg>jKn08f&Kar6 z*#-HTc_qQgMVSR93``6Rp9z?DA867`AZB3Xh)+yT&M(a?A*AIMQ28g27Glh2b!A|X z0AfahE&-{M1Y#nTmI9Tvfs`^4?dW!(@_ry@%ScU3Ni8De$5}w73qUq7FcS{L3qXa} YfS9l!w*ysO2Vy3Ip#f5L1Be+I0DaM;9RL6T literal 528 zcmdO~($(ox6yCO1e$S4VtZors926Bw>@7|U%sF#O{O^EyS4r2dI$W z9^_g=#)4D{05K6tbAZZfK}wm3c61$3c^eS3Wuzviq!tl!%tWBl=^z^zmwv1x0WlN7&;Y4A55x=%0DO_b?f?J) diff --git a/integration-tests/block/block_checkpoints.exp b/integration-tests/block/block_checkpoints.exp index 2f1bf156..473e89e3 100644 --- a/integration-tests/block/block_checkpoints.exp +++ b/integration-tests/block/block_checkpoints.exp @@ -18,7 +18,7 @@ task 5 'run'. lines 22-30: task 6 'run'. lines 32-40: { - "gas_used": 17745, + "gas_used": 20027, "status": { "Keep": { "MoveAbort": [ @@ -36,7 +36,7 @@ task 6 'run'. lines 32-40: task 7 'run'. lines 42-50: { - "gas_used": 82551, + "gas_used": 87834, "status": { "Keep": "Executed" } @@ -44,7 +44,7 @@ task 7 'run'. lines 42-50: task 13 'run'. lines 64-72: { - "gas_used": 89637, + "gas_used": 94920, "status": { "Keep": "Executed" } @@ -52,7 +52,7 @@ task 13 'run'. lines 64-72: task 14 'run'. lines 74-83: { - "gas_used": 1985382, + "gas_used": 1989291, "status": { "Keep": { "MoveAbort": [ @@ -70,7 +70,7 @@ task 14 'run'. lines 74-83: task 15 'run'. lines 86-97: { - "gas_used": 93391, + "gas_used": 95673, "status": { "Keep": { "MoveAbort": [ diff --git a/sources/Block.move b/sources/Block.move index 44b3bd5c..d1557a24 100644 --- a/sources/Block.move +++ b/sources/Block.move @@ -169,7 +169,7 @@ module Block { let parent_block_hash = get_parent_hash(); let checkpoints = borrow_global_mut(CoreAddresses::GENESIS_ADDRESS()); - checkpoint_base(checkpoints, parent_block_number, parent_block_hash); + base_checkpoint(checkpoints, parent_block_number, parent_block_hash); } @@ -177,7 +177,7 @@ module Block { pragma verify = false; } - fun checkpoint_base(checkpoints: &mut Checkpoints, parent_block_number: u64, parent_block_hash:vector){ + fun base_checkpoint(checkpoints: &mut Checkpoints, parent_block_number: u64, parent_block_hash:vector){ assert!(checkpoints.last_number + BLOCK_INTERVAL_NUMBER <= parent_block_number || checkpoints.last_number == 0, Errors::invalid_argument(ERROR_INTERVAL_TOO_LITTLE)); checkpoints.index = checkpoints.index + 1; @@ -194,20 +194,20 @@ module Block { } } - spec checkpoint_base { + spec base_checkpoint { pragma verify = false; } public fun latest_state_root():(u64,vector) acquires Checkpoints{ let checkpoints = borrow_global(CoreAddresses::GENESIS_ADDRESS()); - latest_state_root_base(checkpoints) + base_latest_state_root(checkpoints) } spec latest_state_root { pragma verify = false; } - fun latest_state_root_base(checkpoints: &Checkpoints):(u64,vector){ + fun base_latest_state_root(checkpoints: &Checkpoints):(u64,vector){ let len = Ring::capacity(&checkpoints.checkpoints); let j = if(checkpoints.index < len - 1){ checkpoints.index @@ -228,22 +228,21 @@ module Block { abort Errors::invalid_state(ERROR_NO_HAVE_CHECKPOINT) } - spec latest_state_root_base { + spec base_latest_state_root { pragma verify = false; } public fun update_state_root(header: vector)acquires Checkpoints { let checkpoints = borrow_global_mut(CoreAddresses::GENESIS_ADDRESS()); - update_state_root_base(checkpoints, header); + base_update_state_root(checkpoints, header); } spec update_state_root { pragma verify = false; } - fun update_state_root_base(checkpoints: &mut Checkpoints, header: vector){ - let prefix = b"STARCOIN::BlockHeader"; - let prefix = Hash::sha3_256(prefix); + fun base_update_state_root(checkpoints: &mut Checkpoints, header: vector){ + let prefix = Hash::sha3_256(b"STARCOIN::BlockHeader"); let (_parent_hash,new_offset) = BCS::deserialize_bytes(&header,0); let (_timestamp,new_offset) = BCS::deserialize_u64(&header,new_offset); @@ -300,8 +299,28 @@ module Block { #[test] fun test_header(){ - let prefix = b"STARCOIN::BlockHeader"; - let prefix = Hash::sha3_256(prefix); + // Block header Unit test + // Use Main Genesis BlockHeader in Rust + // BlockHeader { + // id: Some(HashValue(0x80848150abee7e9a3bfe9542a019eb0b8b01f124b63b011f9c338fdb935c417d)), + // parent_hash: HashValue(0xb82a2c11f2df62bf87c2933d0281e5fe47ea94d5f0049eec1485b682df29529a), + // timestamp: 1621311100863, + // number: 0, + // author: 0x00000000000000000000000000000001, + // author_auth_key: None, + // txn_accumulator_root: HashValue(0x43609d52fdf8e4a253c62dfe127d33c77e1fb4afdefb306d46ec42e21b9103ae), + // block_accumulator_root: HashValue(0x414343554d554c41544f525f504c414345484f4c4445525f4841534800000000), + // state_root: HashValue(0x61125a3ab755b993d72accfea741f8537104db8e022098154f3a66d5c23e828d), + // gas_used: 0, + // difficulty: 11660343, + // body_hash: HashValue(0x7564db97ee270a6c1f2f73fbf517dc0777a6119b7460b7eae2890d1ce504537b), + // chain_id: ChainId { id: 1 }, + // nonce: 0, + // extra: BlockHeaderExtra([0, 0, 0, 0]) + // } + // Blockheader BCS : 20b82a2c11f2df62bf87c2933d0281e5fe47ea94d5f0049eec1485b682df29529abf17ac7d79010000000000000000000000000000000000000000000000000001002043609d52fdf8e4a253c62dfe127d33c77e1fb4afdefb306d46ec42e21b9103ae20414343554d554c41544f525f504c414345484f4c4445525f48415348000000002061125a3ab755b993d72accfea741f8537104db8e022098154f3a66d5c23e828d00000000000000000000000000000000000000000000000000000000000000000000000000b1ec37207564db97ee270a6c1f2f73fbf517dc0777a6119b7460b7eae2890d1ce504537b010000000000000000 + + let prefix = Hash::sha3_256(b"STARCOIN::BlockHeader"); let header = x"20b82a2c11f2df62bf87c2933d0281e5fe47ea94d5f0049eec1485b682df29529abf17ac7d79010000000000000000000000000000000000000000000000000001002043609d52fdf8e4a253c62dfe127d33c77e1fb4afdefb306d46ec42e21b9103ae20414343554d554c41544f525f504c414345484f4c4445525f48415348000000002061125a3ab755b993d72accfea741f8537104db8e022098154f3a66d5c23e828d00000000000000000000000000000000000000000000000000000000000000000000000000b1ec37207564db97ee270a6c1f2f73fbf517dc0777a6119b7460b7eae2890d1ce504537b010000000000000000"; let (_parent_hash,new_offset) = BCS::deserialize_bytes(&header,0); let (_timestamp,new_offset) = BCS::deserialize_u64(&header,new_offset); @@ -337,7 +356,7 @@ module Block { last_number : 0 }; - checkpoint_test_function(&mut checkpoints, 0, x"80848150abee7e9a3bfe9542a019eb0b8b01f124b63b011f9c338fdb935c417d"); + base_checkpoint(&mut checkpoints, 0, x"80848150abee7e9a3bfe9542a019eb0b8b01f124b63b011f9c338fdb935c417d"); let Checkpoints{ checkpoints: ring, @@ -358,11 +377,11 @@ module Block { last_number : 0 }; - checkpoint_test_function(&mut checkpoints, 0, x"80848150abee7e9a3bfe9542a019eb0b8b01f124b63b011f9c338fdb935c417d"); + base_checkpoint(&mut checkpoints, 0, x"80848150abee7e9a3bfe9542a019eb0b8b01f124b63b011f9c338fdb935c417d"); - update_state_root_test(&mut checkpoints, copy header); + base_update_state_root(&mut checkpoints, copy header); - let (number , state_root ) = _latest_state_root(&checkpoints); + let (number , state_root ) = base_latest_state_root(&checkpoints); let Checkpoints{ checkpoints: ring, index : index, From 17016a041cb92dde0e56e7aceef8ecd37cf04d89 Mon Sep 17 00:00:00 2001 From: WGB5445 <919603023@qq.com> Date: Fri, 1 Jul 2022 16:15:36 +0800 Subject: [PATCH 13/14] fix prove --- build/StarcoinFramework/BuildInfo.yaml | 2 +- .../StarcoinFramework/source_maps/Block.mvsm | Bin 21860 -> 21860 bytes .../source_maps/CheckpointScript.mvsm | Bin 528 -> 528 bytes sources/Block.move | 2 +- 4 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build/StarcoinFramework/BuildInfo.yaml b/build/StarcoinFramework/BuildInfo.yaml index aad85957..f163ddb1 100644 --- a/build/StarcoinFramework/BuildInfo.yaml +++ b/build/StarcoinFramework/BuildInfo.yaml @@ -264,7 +264,7 @@ compiled_package_info: ? address: "0x00000000000000000000000000000001" name: YieldFarmingV2 : StarcoinFramework - source_digest: BACCA33017D09E7C2C75819FCB88E3354BBB2001166D2D685317D7A24C61E70E + source_digest: 66D7A64BAA23EBC8FB736D2333C487B5F9F1BFD5F5C4ACCADC3945826417D4D9 build_flags: dev_mode: false test_mode: false diff --git a/build/StarcoinFramework/source_maps/Block.mvsm b/build/StarcoinFramework/source_maps/Block.mvsm index 19a23ad9596b520402792dc6c20e17af5570cb05..5645bdd9bfe33707909716f30d0a45ce9e1f21ff 100644 GIT binary patch literal 21860 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 Z2E>H@xE-kKIuJ7v3=NQ~8$is!005m;&<_9r literal 528 zcmezDHetR}kO;S>TejvJ&hO#gHjL|Z1Om2oFFm4vLQ#-$q6-7VLLg>jKn08f&Kar6 z*#-HTc_qQgMVSR93``6Rp9z?DA867`AZB3Xh)+yT&M(a?A*AIMQ28g27Glh2b!A|X z0AfahE&-{M1Y#nTmI9Tvfs`^4?dW!(@_ry@%ScU3Ni8De$5}w73qUq7FcS{L3qXa} YfS9l!w*ysO2Vy3Ip#f5L1Be+I0DaM;9RL6T diff --git a/sources/Block.move b/sources/Block.move index d1557a24..6b4b7c34 100644 --- a/sources/Block.move +++ b/sources/Block.move @@ -293,7 +293,7 @@ module Block { abort Errors::invalid_state(ERROR_NO_HAVE_CHECKPOINT) } - spec update_state_root_base { + spec base_update_state_root { pragma verify = false; } From b143104f52a1ed706aa7908c71c8eaa9fe43378c Mon Sep 17 00:00:00 2001 From: WGB5445 <919603023@qq.com> Date: Mon, 4 Jul 2022 23:21:06 +0800 Subject: [PATCH 14/14] use skip function --- build/StarcoinFramework/BuildInfo.yaml | 2 +- .../bytecode_modules/Block.mv | Bin 2738 -> 2523 bytes .../StarcoinFramework/source_maps/Block.mvsm | Bin 21860 -> 17917 bytes .../source_maps/CheckpointScript.mvsm | Bin 528 -> 528 bytes integration-tests/block/block_checkpoints.exp | 2 +- sources/Block.move | 34 +++++++++--------- 6 files changed, 18 insertions(+), 20 deletions(-) diff --git a/build/StarcoinFramework/BuildInfo.yaml b/build/StarcoinFramework/BuildInfo.yaml index 8fc18ce5..a927d929 100644 --- a/build/StarcoinFramework/BuildInfo.yaml +++ b/build/StarcoinFramework/BuildInfo.yaml @@ -264,7 +264,7 @@ compiled_package_info: ? address: "0x00000000000000000000000000000001" name: YieldFarmingV2 : StarcoinFramework - source_digest: 2DB9E4E23CF578D737E6EF6F6DEBEC5F49402354E4FE141756BE9F3AF13765BC + source_digest: 9D5BEAD2A40807817B23BF8C474DA0D8ADC2A14B229B1CF06B74F8726614B3F9 build_flags: dev_mode: false test_mode: false diff --git a/build/StarcoinFramework/bytecode_modules/Block.mv b/build/StarcoinFramework/bytecode_modules/Block.mv index cc2985e9212c058c66d940446fb722fe9c260ab9..d5445c18af7bb9ed24da98445ff1466031b1261b 100644 GIT binary patch delta 835 zcmZ8fOHUL*5bmm;o}THho|%Th<+Z{-fJ7n(1sorUF`5|fdK3`$u#o_=c+i+^O!P`H z8xs>xCLZ+S0pi)8;MK&t7jOOoYZn3=dy@L9YU=x{s%H*|ehn^s9RFhjA%q2yV_ubu zKOxx1x;n(apg#p4!sxrn!XIYEe6LFoOc6m z(B&?T@~Av|-c7j4s1nuPbZw?4J6o`)GYKFKb}}pnQldG!jqmY+X+3G~tUP|c*JwpO z_u1lny3uGgcAIOP%@>Uoj;Z%zZDV7%(Q5f#u)VX_+}=9o`Tp{r($T6~$M!qW+MlB= z;T2AfFOf;W7(Yyw(fSc0a_o^GCFwjn1}%O)nYNKvnjw24lKsmuH70E|e{=rej@DKW`hf%2hx)OB>GlCVNjt;Qs+ zla57Z z9GT6J^4(D9sQbbw$B4<`{8X22#OeL8aP=$@MK&NV3XGYH7_wBazXvp3wW(RlY@SN+ Wr%@*4Hr%vx&)f-Sw6As!O!Xg{LSYO5 delta 1048 zcmZvbTWb?R6vyYB+1cI9Owx=^yG@fcO*U=X+={)q^%UP+cV8{YXFAf~^tK=WmD-+pe|><#WRPYs6$~<%4l)d8 zf-HmCAjjYw1!7SifO&Jn1z_%6p-A)j(9nD#Bpok;%kYw*jLY6AF#igP&Q&o6t}|ch z%tMeI8p_9q;|0IykHpL6v2y1ov=$p2Ku9G(qP@^@kOt>mBHc9oZ+MjNgPo6DE+yJz zN=HF-5aH->+!eTkZL`wcY;LSB-CBLnT)1(6tGU_Jt+ZyRd%M?5D=Qn#&CPtbwzj^t zx_0}}yl}U)3o@e@XBS9y2G)$leApvsG z4Csu73_+-?M4?IRl9ftkP>)y`q3lr$qXcCOWr8t1K{Q6baVw3RjILOy5M(W6DJe(L zmN}EvLsl9xIi0tVCuP{eFhRjWfuLxiXtDtDhJr|{2DRNUSrQ|m)AWRtOuKOO4nfG* zMe9J-DDKI$MumFdPzdC}@yoVZi9Z7I2_)-58JzkfrE9X*h>$-9@dPY-Ns;I;XfAdj zrn%z$DTo(G5ho?91?`BJ6mpcqUxC;M#X!{}-NSWV)*F$}-+|ZzRaX;H9K=UUixW`- zRSl@4lh&!tu10hq9@0jhYx>HZK5d4jgmJsF(Rdn6SV7Gclc>NjbZD~?Etx5GKKtYC zu*#Bd3duy5Fm~ys(Cb?IDfGz$aWiUNk{urq{kkSRU9c#5hSeFy$cyOGRtIGbptQS< dR~5Ob8Kzw+q)TO}Xy;Dsnp5>m*x8E}{{ngmg&hC@ diff --git a/build/StarcoinFramework/source_maps/Block.mvsm b/build/StarcoinFramework/source_maps/Block.mvsm index 5645bdd9bfe33707909716f30d0a45ce9e1f21ff..6d47b60658fc596184f6483dbc396b6b694e6f18 100644 GIT binary patch literal 17917 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 DNHw3M literal 21860 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 ZF(4-F$K^m($AOrMU}%6;od9A61^_y92ipJu literal 528 zcmdlxAtzMz*SbEH_rXh&)s~h#6OnN?Thw2pKe@T|;VI`M6I~b>76LIN11ew?aL!0g z&MwH$%qs~_F3Kz@VPIll*h|2)`#_Uk0x<(4M|@&(a(-!E2_Y@7fXY9Cv=C!Ht1AP8 z1Q0V4bO}h6BoGs!v=peU4WyKbXh*jLmG=WNTSjVPN@@`yKh6RwT>!Fyfthd^UH~e* Z2E>H@xE-kKIuJ7v3=NQ~8$is!005m;&<_9r diff --git a/integration-tests/block/block_checkpoints.exp b/integration-tests/block/block_checkpoints.exp index 473e89e3..88a46aa8 100644 --- a/integration-tests/block/block_checkpoints.exp +++ b/integration-tests/block/block_checkpoints.exp @@ -52,7 +52,7 @@ task 13 'run'. lines 64-72: task 14 'run'. lines 74-83: { - "gas_used": 1989291, + "gas_used": 553900, "status": { "Keep": { "MoveAbort": [ diff --git a/sources/Block.move b/sources/Block.move index 6b4b7c34..500dbedc 100644 --- a/sources/Block.move +++ b/sources/Block.move @@ -244,24 +244,22 @@ module Block { fun base_update_state_root(checkpoints: &mut Checkpoints, header: vector){ let prefix = Hash::sha3_256(b"STARCOIN::BlockHeader"); - let (_parent_hash,new_offset) = BCS::deserialize_bytes(&header,0); - let (_timestamp,new_offset) = BCS::deserialize_u64(&header,new_offset); + //parent_hash + let new_offset = BCS::skip_bytes(&header,0); + //timestamp + let new_offset = BCS::skip_u64(&header,new_offset); + //number let (number,new_offset) = BCS::deserialize_u64(&header,new_offset); - let (_author,new_offset) = BCS::deserialize_address(&header,new_offset); - let (_author_auth_key,new_offset) = BCS::deserialize_option_bytes_vector(&header,new_offset); - let (_txn_accumulator_root,new_offset) = BCS::deserialize_bytes(&header,new_offset); - let (_block_accumulator_root,new_offset) = BCS::deserialize_bytes(&header,new_offset); - let (state_root,new_offset) = BCS::deserialize_bytes(&header,new_offset); - let (_gas_used,new_offset) = BCS::deserialize_u64(&header,new_offset); - let (_difficultyfirst,new_offset) = BCS::deserialize_u128(&header,new_offset); - let (_difficultylast,new_offset) = BCS::deserialize_u128(&header,new_offset); - let (_body_hash,new_offset) = BCS::deserialize_bytes(&header,new_offset); - let (_chain_id,new_offset) = BCS::deserialize_u8(&header,new_offset); - let (_nonce,new_offset) = BCS::deserialize_u32(&header,new_offset); - let (_extra1,new_offset) = BCS::deserialize_u8(&header,new_offset); - let (_extra2,new_offset) = BCS::deserialize_u8(&header,new_offset); - let (_extra3,new_offset) = BCS::deserialize_u8(&header,new_offset); - let (_extra4,_new_offset) = BCS::deserialize_u8(&header,new_offset); + //author + new_offset = BCS::skip_address(&header,new_offset); + //author_auth_key + new_offset = BCS::skip_option_bytes(&header,new_offset); + //txn_accumulator_root + new_offset = BCS::skip_bytes(&header,new_offset); + //block_accumulator_root + new_offset = BCS::skip_bytes(&header,new_offset); + //state_root + let (state_root,_new_offset) = BCS::deserialize_bytes(&header,new_offset); Vector::append(&mut prefix,header); let block_hash = Hash::sha3_256(prefix); @@ -326,7 +324,7 @@ module Block { let (_timestamp,new_offset) = BCS::deserialize_u64(&header,new_offset); let (number,new_offset) = BCS::deserialize_u64(&header,new_offset); let (_author,new_offset) = BCS::deserialize_address(&header,new_offset); - let (_author_auth_key,new_offset) = BCS::deserialize_option_bytes_vector(&header,new_offset); + let (_author_auth_key,new_offset) = BCS::deserialize_option_bytes(&header,new_offset); let (_txn_accumulator_root,new_offset) = BCS::deserialize_bytes(&header,new_offset); let (_block_accumulator_root,new_offset) = BCS::deserialize_bytes(&header,new_offset); let (state_root,new_offset) = BCS::deserialize_bytes(&header,new_offset);