diff --git a/Makefile b/Makefile index adf7b0fbf6..f41067c091 100644 --- a/Makefile +++ b/Makefile @@ -44,7 +44,7 @@ ifndef RELEASE RELEASE=$(shell curl -sL https://api.github.com/repos/OLSF/libra/releases/latest | jq -r '.assets[].browser_download_url') endif -BINS= db-backup db-backup-verify db-restore libra-node miner ol txs stdlib +BINS= db-backup db-backup-verify db-restore diem-node miner ol txs stdlib @@ -79,10 +79,10 @@ uninstall: done bins: stdlib -# Build and install genesis tool, libra-node, and miner +# Build and install genesis tool, diem-node, and miner # NOTE: stdlib is built for cli bindings - cargo build -p libra-node -p miner -p backup-cli -p ol -p txs -p onboard --release + cargo build -p diem-node -p miner -p backup-cli -p ol -p txs -p onboard --release stdlib: cargo run --release -p diem-framework @@ -94,7 +94,7 @@ install: mv-bin bin-path mkdir ${USER_BIN_PATH} | true cp -f ${SOURCE}/target/release/miner ${USER_BIN_PATH}/miner - cp -f ${SOURCE}/target/release/libra-node ${USER_BIN_PATH}/libra-node + cp -f ${SOURCE}/target/release/diem-node ${USER_BIN_PATH}/diem-node cp -f ${SOURCE}/target/release/db-restore ${USER_BIN_PATH}/db-restore cp -f ${SOURCE}/target/release/db-backup ${USER_BIN_PATH}/db-backup cp -f ${SOURCE}/target/release/db-backup-verify ${USER_BIN_PATH}/db-backup-verify @@ -137,17 +137,17 @@ init-backend: curl -X POST -H "Authorization: token ${GITHUB_TOKEN}" https://api.github.com/orgs/${REPO_ORG}/repos -d '{"name":"${REPO_NAME}", "private": "true", "auto_init": "true"}' layout: - cargo run -p libra-genesis-tool --release -- set-layout \ + cargo run -p diem-genesis-tool --release -- set-layout \ --shared-backend 'backend=github;repository_owner=${REPO_ORG};repository=${REPO_NAME};token=${DATA_PATH}/github_token.txt;namespace=common' \ - --path ./ol/util/set_layout_${NODE_ENV}.toml + --path ./ol/devnet/set_layout_${NODE_ENV}.toml root: - cargo run -p libra-genesis-tool --release -- libra-root-key \ + cargo run -p diem-genesis-tool --release -- diem-root-key \ --validator-backend ${LOCAL} \ --shared-backend ${REMOTE} treasury: - cargo run -p libra-genesis-tool --release -- treasury-compliance-key \ + cargo run -p diem-genesis-tool --release -- treasury-compliance-key \ --validator-backend ${LOCAL} \ --shared-backend ${REMOTE} @@ -174,42 +174,42 @@ register: ACC=${ACC}-oper OWNER=${ACC} IP=${IP} make reg init-test: - echo ${MNEM} | head -c -1 | cargo run -p libra-genesis-tool -- init --path=${DATA_PATH} --namespace=${ACC} + echo ${MNEM} | head -c -1 | cargo run -p diem-genesis-tool -- init --path=${DATA_PATH} --namespace=${ACC} init: - cargo run -p libra-genesis-tool --release -- init --path=${DATA_PATH} --namespace=${ACC} + cargo run -p diem-genesis-tool --release -- init --path=${DATA_PATH} --namespace=${ACC} # OWNER does this # Submits proofs to shared storage add-proofs: - cargo run -p libra-genesis-tool --release -- mining \ + cargo run -p diem-genesis-tool --release -- mining \ --path-to-genesis-pow ${DATA_PATH}/blocks/block_0.json \ --shared-backend ${REMOTE} # OPER does this # Submits operator key to github, and creates local OPERATOR_ACCOUNT oper-key: - cargo run -p libra-genesis-tool --release -- operator-key \ + cargo run -p diem-genesis-tool --release -- operator-key \ --validator-backend ${LOCAL} \ --shared-backend ${REMOTE} # OWNER does this # Submits operator key to github, does *NOT* create the OWNER_ACCOUNT locally owner-key: - cargo run -p libra-genesis-tool --release -- owner-key \ + cargo run -p diem-genesis-tool --release -- owner-key \ --validator-backend ${LOCAL} \ --shared-backend ${REMOTE} # OWNER does this # Links to an operator on github, creates the OWNER_ACCOUNT locally assign: - cargo run -p libra-genesis-tool --release -- set-operator \ + cargo run -p diem-genesis-tool --release -- set-operator \ --operator-name ${OPER} \ --shared-backend ${REMOTE} # OPER does this # Submits signed validator registration transaction to github. reg: - cargo run -p libra-genesis-tool --release -- validator-config \ + cargo run -p diem-genesis-tool --release -- validator-config \ --owner-name ${OWNER} \ --chain-id ${CHAIN_ID} \ --validator-address "/ip4/${IP}/tcp/6180" \ @@ -220,25 +220,25 @@ reg: # Helpers to verify the local state. verify: - cargo run -p libra-genesis-tool --release -- verify \ + cargo run -p diem-genesis-tool --release -- verify \ --validator-backend ${LOCAL} # --genesis-path ${DATA_PATH}/genesis.blob verify-gen: - cargo run -p libra-genesis-tool --release -- verify \ + cargo run -p diem-genesis-tool --release -- verify \ --validator-backend ${LOCAL} \ --genesis-path ${DATA_PATH}/genesis.blob #### GENESIS #### # build-gen: -# cargo run -p libra-genesis-tool --release -- genesis \ +# cargo run -p diem-genesis-tool --release -- genesis \ # --chain-id ${CHAIN_ID} \ # --shared-backend ${REMOTE} \ # --path ${DATA_PATH}/genesis.blob genesis: - cargo run -p libra-genesis-tool --release -- files \ + cargo run -p diem-genesis-tool --release -- files \ --chain-id ${CHAIN_ID} \ --validator-backend ${LOCAL} \ --data-path ${DATA_PATH} \ @@ -250,15 +250,15 @@ genesis: #### NODE MANAGEMENT #### start: # run in foreground. Only for testing, use a daemon for net. - cargo run -p libra-node -- --config ${DATA_PATH}/validator.node.yaml + cargo run -p diem-node -- --config ${DATA_PATH}/validator.node.yaml # Start a fullnode instead of a validator node start-full: - cargo run -p libra-node -- --config ${DATA_PATH}/fullnode.node.yaml + cargo run -p diem-node -- --config ${DATA_PATH}/fullnode.node.yaml daemon: -# your node's custom libra-node.service lives in ~/.0L. Take the template from libra/util and edit for your needs. - cp -f ~/.0L/libra-node.service /lib/systemd/system/ +# your node's custom diem-node.service lives in ~/.0L. Take the template from libra/util and edit for your needs. + cp -f ~/.0L/diem-node.service /lib/systemd/system/ @if test -d ~/logs; then \ echo "WIPING SYSTEMD LOGS"; \ @@ -271,10 +271,10 @@ daemon: chmod 777 ~/logs/node.log systemctl daemon-reload - systemctl stop libra-node.service - systemctl start libra-node.service + systemctl stop diem-node.service + systemctl start diem-node.service sleep 2 - systemctl status libra-node.service & + systemctl status diem-node.service & tail -f ~/logs/node.log #### TEST SETUP #### @@ -381,7 +381,7 @@ wipe: srm ~/.bash_history stop: - service libra-node stop + service diem-node stop debug: make smoke-onboard <<< $$'${MNEM}' @@ -410,7 +410,7 @@ dev-wizard: # REQUIRES there is a genesis.blob in the fixtures/genesis/ you are testing MNEM='${MNEM}' cargo run -p onboard -- val --skip-mining --skip-fetch-genesis --chain-id 1 --github-org OLSF --repo dev-genesis --upstream-peer http://161.35.13.169:8080 -#### DEVNET INFRASTRUCTURE #### +#### DEVNET RESTART #### # usually do this on Alice, which has the dev-epoch-archive repo, and dev-genesis # Do the ceremony: and also save the genesis fixtures, needs to happen before fix. @@ -418,6 +418,9 @@ dev-register: clear fix register # Do a dev genesis on each node after EVERY NODE COMPLETED registration. dev-genesis: genesis dev-save-genesis fix-genesis +#### DEVNET INFRA #### +# To make reproducible devnet files. + # Save the files to mock infrastructure i.e. devnet github dev-infra: dev-backup-archive dev-commit @@ -446,17 +449,17 @@ sw: sw-build sw-start sw-init ## Build sw-stdlib: - cd ${SOURCE} && cargo run -p diem-framework + cd ${SOURCE} && cargo run -p diem-framework --release sw-build: - cargo build -p diem-node -p diem-swarm -p cli + cargo build -p diem-node -p diem-swarm -p cli --release ## Swarm sw-start: - cd ${SOURCE} && cargo run -p diem-swarm -- --diem-node target/debug/diem-node -c ${DATA_PATH}/swarm_temp -n 1 -s --cli-path ${SOURCE}/target/debug/cli + cd ${SOURCE} && cargo run --release -p diem-swarm -- --diem-node target/debug/diem-node -c ${DATA_PATH}/swarm_temp -n 1 -s --cli-path ${SOURCE}/target/debug/cli sw-init: - cd ${SOURCE} && cargo r -p ol -- --swarm-path ${DATA_PATH}/swarm_temp/ --swarm-persona alice init --source-path ~/libra + cd ${SOURCE} && cargo r --release -p ol -- --swarm-path ${DATA_PATH}/swarm_temp/ --swarm-persona alice init --source-path ~/libra sw-miner: cd ${SOURCE} && cargo r -p miner -- --swarm-path ${DATA_PATH}/swarm_temp --swarm-persona alice start diff --git a/language/diem-framework/modules/doc/AutoPay.md b/language/diem-framework/modules/doc/AutoPay.md index 59f4747de2..9f4dc271fb 100644 --- a/language/diem-framework/modules/doc/AutoPay.md +++ b/language/diem-framework/modules/doc/AutoPay.md @@ -528,7 +528,11 @@ Attempt to add instruction when too many already exist let payments = &mut borrow_global_mut<Data>(*account_addr).payments; let payments_len = Vector::length<Payment>(payments); let payments_idx = 0; +// print(&02220); + while (payments_idx < payments_len) { +// print(&02221); + let delete_payment = false; { let payment = Vector::borrow_mut<Payment>(payments, payments_idx); @@ -564,21 +568,37 @@ Attempt to add instruction when too many already exist // check payees are community wallets let list = Wallet::get_comm_list(); +// print(&02222); - // TODO: `amount` cannot be zero otherwise DiemAccount::deposit<Token: store>() aborts - if (Vector::contains<address>(&list, &payment.payee) && - amount != 0 && - amount <= account_bal && + // Payeee is a community wallet + if (!Vector::contains<address>(&list, &payment.payee)){ +// print(&0222201); + return + }; + + if (amount == 0){ +// print(&0222202); + return + }; + + if (amount > account_bal){ +// print(&0222203); + return + }; + + if (// transfers are enabled between accounts, need to consider transfer limits borrow_global<AccountLimitsEnable>(Signer::address_of(vm)).enabled) { +// print(&0222204); DiemAccount::vm_make_payment<GAS>( - *account_addr, payment.payee, amount, x"", x"", vm + *account_addr, payment.payee, amount, b"autopay - transfer limits", x"", vm ); } else { +// print(&0222205); DiemAccount::vm_make_payment_no_limit<GAS>( - *account_addr, payment.payee, amount, x"", x"", vm + *account_addr, payment.payee, amount, b"autopay - no limit", x"", vm ); }; - +// print(&02223); // update previous balance for next calculation payment.prev_bal = DiemAccount::balance<GAS>(*account_addr); @@ -593,6 +613,7 @@ Attempt to add instruction when too many already exist delete_payment = true; }; }; +// print(&02230); if (delete_payment == true) { Vector::remove<Payment>(payments, payments_idx); payments_len = payments_len - 1; @@ -601,6 +622,7 @@ Attempt to add instruction when too many already exist payments_idx = payments_idx + 1; }; }; +// print(&02240); account_idx = account_idx + 1; }; } diff --git a/language/diem-framework/modules/doc/DiemAccount.md b/language/diem-framework/modules/doc/DiemAccount.md index e296e081ab..bdd086131e 100644 --- a/language/diem-framework/modules/doc/DiemAccount.md +++ b/language/diem-framework/modules/doc/DiemAccount.md @@ -1044,13 +1044,15 @@ important to the semantics of the system.
public fun process_escrow<Token: store>(
     account: &signer
 ) acquires EscrowList, AutopayEscrow, Balance, AccountOperationsCapability {
+// print(&01000);
     Roles::assert_diem_root(account);
 
     let account_list = &borrow_global<EscrowList<Token>>(CoreAddresses::DIEM_ROOT_ADDRESS()).accounts;
     let account_len = Vector::length<EscrowSettings>(account_list);
     let account_idx = 0;
-
+// print(&010100);
     while (account_idx < account_len) {
+// print(&010110);
         let EscrowSettings {account: account_addr, share: percentage} = Vector::borrow<EscrowSettings>(account_list, account_idx);
 
         //get transfer limit room
@@ -1061,18 +1063,21 @@ important to the semantics of the system.
         };
 
         limit_room = FixedPoint32::multiply_u64(limit_room , FixedPoint32::create_from_rational(*percentage, 100));
-
+// print(&010120);
         let amount_sent: u64 = 0;
 
         let payment_list = &mut borrow_global_mut<AutopayEscrow<Token>>(*account_addr).list;
         let num_payments = FIFO::len<Escrow<Token>>(payment_list);
-
+// print(&010130);
         //pay out escrow until limit is reached
         while (limit_room > 0 && num_payments > 0) {
+// print(&010131);
             let Escrow<Token> {to_account, escrow} = FIFO::pop<Escrow<Token>>(payment_list);
             let recipient_coins = borrow_global_mut<Balance<Token>>(to_account);
             let payment_size = Diem::value<Token>(&escrow);
+// print(&010132);
             if (payment_size > limit_room) {
+// print(&010133);
                 let (coin1, coin2) = Diem::split<Token>(escrow, limit_room);
                 Diem::deposit<Token>(&mut recipient_coins.coin, coin2);
                 let new_escrow = Escrow {
@@ -1082,24 +1087,29 @@ important to the semantics of the system.
                 FIFO::push_LIFO<Escrow<Token>>(payment_list, new_escrow);
                 amount_sent = amount_sent + limit_room;
                 limit_room = 0;
+// print(&010134);
             } else {
+// print(&01015);
                 //This entire escrow is being paid out
                 Diem::deposit<Token>(&mut recipient_coins.coin, escrow);
                 limit_room = limit_room - payment_size;
                 amount_sent = amount_sent + payment_size;
                 num_payments = num_payments - 1;
+// print(&010136);
             }
         };
         //update account limits
         if (amount_sent > 0) {
+// print(&010140);
             _ = AccountLimits::update_withdrawal_limits<Token>(
                 amount_sent,
                 *account_addr,
                 &borrow_global<AccountOperationsCapability>(CoreAddresses::DIEM_ROOT_ADDRESS()).limits_cap
             );
+// print(&010141);
         };
 
-
+// print(&010150);
         account_idx = account_idx + 1;
     }
 
@@ -2605,6 +2615,7 @@ Return the withdraw capability to the account it originally came from
 
 ## Function `vm_make_payment_no_limit`
 
+This function bypasses transaction limits. vm_make_payment on the other hand considers payment limits.
 
 
 
public fun vm_make_payment_no_limit<Token: store>(payer: address, payee: address, amount: u64, metadata: vector<u8>, metadata_signature: vector<u8>, vm: &signer)
diff --git a/language/diem-framework/modules/doc/DiemBlock.md b/language/diem-framework/modules/doc/DiemBlock.md
index 8ce8f2bbc8..9925d924b1 100644
--- a/language/diem-framework/modules/doc/DiemBlock.md
+++ b/language/diem-framework/modules/doc/DiemBlock.md
@@ -251,11 +251,15 @@ The runtime always runs this before executing the transactions in a block.
     // increment stats
     Stats::process_set_votes(&vm, &previous_block_votes);
     Stats::inc_prop(&vm, *&proposer);
+
     if (AutoPay2::tick(&vm)){
+        // print(&1);
         //triggers autopay at beginning of each epoch
         //tick is reset at end of previous epoch
         DiemAccount::process_escrow<GAS>(&vm);
+        // print(&2);
         AutoPay2::process_autopay(&vm);
+        // print(&3);
     };
 
     let block_metadata_ref = borrow_global_mut<BlockMetadata>(CoreAddresses::DIEM_ROOT_ADDRESS());
diff --git a/language/diem-framework/releases/artifacts/current/docs/modules/AutoPay.md b/language/diem-framework/releases/artifacts/current/docs/modules/AutoPay.md
index 59f4747de2..9f4dc271fb 100644
--- a/language/diem-framework/releases/artifacts/current/docs/modules/AutoPay.md
+++ b/language/diem-framework/releases/artifacts/current/docs/modules/AutoPay.md
@@ -528,7 +528,11 @@ Attempt to add instruction when too many already exist
     let payments = &mut borrow_global_mut<Data>(*account_addr).payments;
     let payments_len = Vector::length<Payment>(payments);
     let payments_idx = 0;
+// print(&02220);
+
     while (payments_idx < payments_len) {
+// print(&02221);
+
       let delete_payment = false;
       {
         let payment = Vector::borrow_mut<Payment>(payments, payments_idx);
@@ -564,21 +568,37 @@ Attempt to add instruction when too many already exist
 
           // check payees are community wallets
           let list = Wallet::get_comm_list();
+// print(&02222);
 
-          // TODO: `amount` cannot be zero otherwise DiemAccount::deposit<Token: store>() aborts
-          if (Vector::contains<address>(&list, &payment.payee) &&
-              amount != 0 &&
-              amount <= account_bal &&
+          // Payeee is a community wallet
+          if (!Vector::contains<address>(&list, &payment.payee)){
+// print(&0222201);
+            return
+          };
+
+          if (amount == 0){
+// print(&0222202);
+            return
+          };
+
+          if (amount > account_bal){
+// print(&0222203);
+            return
+          };
+
+          if (// transfers are enabled between accounts, need to consider transfer limits
               borrow_global<AccountLimitsEnable>(Signer::address_of(vm)).enabled) {
+// print(&0222204);
               DiemAccount::vm_make_payment<GAS>(
-                *account_addr, payment.payee, amount, x"", x"", vm
+                *account_addr, payment.payee, amount, b"autopay - transfer limits", x"", vm
               );
           } else {
+// print(&0222205);
               DiemAccount::vm_make_payment_no_limit<GAS>(
-                *account_addr, payment.payee, amount, x"", x"", vm
+                *account_addr, payment.payee, amount, b"autopay - no limit", x"", vm
               );
           };
-
+// print(&02223);
           // update previous balance for next calculation
           payment.prev_bal = DiemAccount::balance<GAS>(*account_addr);
 
@@ -593,6 +613,7 @@ Attempt to add instruction when too many already exist
           delete_payment = true;
         };
       };
+// print(&02230);
       if (delete_payment == true) {
         Vector::remove<Payment>(payments, payments_idx);
         payments_len = payments_len - 1;
@@ -601,6 +622,7 @@ Attempt to add instruction when too many already exist
         payments_idx = payments_idx + 1;
       };
     };
+// print(&02240);
     account_idx = account_idx + 1;
   };
 }
diff --git a/language/diem-framework/releases/artifacts/current/docs/modules/DiemAccount.md b/language/diem-framework/releases/artifacts/current/docs/modules/DiemAccount.md
index e296e081ab..bdd086131e 100644
--- a/language/diem-framework/releases/artifacts/current/docs/modules/DiemAccount.md
+++ b/language/diem-framework/releases/artifacts/current/docs/modules/DiemAccount.md
@@ -1044,13 +1044,15 @@ important to the semantics of the system.
 
public fun process_escrow<Token: store>(
     account: &signer
 ) acquires EscrowList, AutopayEscrow, Balance, AccountOperationsCapability {
+// print(&01000);
     Roles::assert_diem_root(account);
 
     let account_list = &borrow_global<EscrowList<Token>>(CoreAddresses::DIEM_ROOT_ADDRESS()).accounts;
     let account_len = Vector::length<EscrowSettings>(account_list);
     let account_idx = 0;
-
+// print(&010100);
     while (account_idx < account_len) {
+// print(&010110);
         let EscrowSettings {account: account_addr, share: percentage} = Vector::borrow<EscrowSettings>(account_list, account_idx);
 
         //get transfer limit room
@@ -1061,18 +1063,21 @@ important to the semantics of the system.
         };
 
         limit_room = FixedPoint32::multiply_u64(limit_room , FixedPoint32::create_from_rational(*percentage, 100));
-
+// print(&010120);
         let amount_sent: u64 = 0;
 
         let payment_list = &mut borrow_global_mut<AutopayEscrow<Token>>(*account_addr).list;
         let num_payments = FIFO::len<Escrow<Token>>(payment_list);
-
+// print(&010130);
         //pay out escrow until limit is reached
         while (limit_room > 0 && num_payments > 0) {
+// print(&010131);
             let Escrow<Token> {to_account, escrow} = FIFO::pop<Escrow<Token>>(payment_list);
             let recipient_coins = borrow_global_mut<Balance<Token>>(to_account);
             let payment_size = Diem::value<Token>(&escrow);
+// print(&010132);
             if (payment_size > limit_room) {
+// print(&010133);
                 let (coin1, coin2) = Diem::split<Token>(escrow, limit_room);
                 Diem::deposit<Token>(&mut recipient_coins.coin, coin2);
                 let new_escrow = Escrow {
@@ -1082,24 +1087,29 @@ important to the semantics of the system.
                 FIFO::push_LIFO<Escrow<Token>>(payment_list, new_escrow);
                 amount_sent = amount_sent + limit_room;
                 limit_room = 0;
+// print(&010134);
             } else {
+// print(&01015);
                 //This entire escrow is being paid out
                 Diem::deposit<Token>(&mut recipient_coins.coin, escrow);
                 limit_room = limit_room - payment_size;
                 amount_sent = amount_sent + payment_size;
                 num_payments = num_payments - 1;
+// print(&010136);
             }
         };
         //update account limits
         if (amount_sent > 0) {
+// print(&010140);
             _ = AccountLimits::update_withdrawal_limits<Token>(
                 amount_sent,
                 *account_addr,
                 &borrow_global<AccountOperationsCapability>(CoreAddresses::DIEM_ROOT_ADDRESS()).limits_cap
             );
+// print(&010141);
         };
 
-
+// print(&010150);
         account_idx = account_idx + 1;
     }
 
@@ -2605,6 +2615,7 @@ Return the withdraw capability to the account it originally came from
 
 ## Function `vm_make_payment_no_limit`
 
+This function bypasses transaction limits. vm_make_payment on the other hand considers payment limits.
 
 
 
public fun vm_make_payment_no_limit<Token: store>(payer: address, payee: address, amount: u64, metadata: vector<u8>, metadata_signature: vector<u8>, vm: &signer)
diff --git a/language/diem-framework/releases/artifacts/current/docs/modules/DiemBlock.md b/language/diem-framework/releases/artifacts/current/docs/modules/DiemBlock.md
index 8ce8f2bbc8..9925d924b1 100644
--- a/language/diem-framework/releases/artifacts/current/docs/modules/DiemBlock.md
+++ b/language/diem-framework/releases/artifacts/current/docs/modules/DiemBlock.md
@@ -251,11 +251,15 @@ The runtime always runs this before executing the transactions in a block.
     // increment stats
     Stats::process_set_votes(&vm, &previous_block_votes);
     Stats::inc_prop(&vm, *&proposer);
+
     if (AutoPay2::tick(&vm)){
+        // print(&1);
         //triggers autopay at beginning of each epoch
         //tick is reset at end of previous epoch
         DiemAccount::process_escrow<GAS>(&vm);
+        // print(&2);
         AutoPay2::process_autopay(&vm);
+        // print(&3);
     };
 
     let block_metadata_ref = borrow_global_mut<BlockMetadata>(CoreAddresses::DIEM_ROOT_ADDRESS());
diff --git a/language/diem-framework/releases/artifacts/current/modules/052_AutoPay2.mv b/language/diem-framework/releases/artifacts/current/modules/052_AutoPay2.mv
index 606114cac3..a1a24b66f2 100644
Binary files a/language/diem-framework/releases/artifacts/current/modules/052_AutoPay2.mv and b/language/diem-framework/releases/artifacts/current/modules/052_AutoPay2.mv differ
diff --git a/language/diem-framework/staged/stdlib.mv b/language/diem-framework/staged/stdlib.mv
index 924484da27..97f47d9e1e 100644
Binary files a/language/diem-framework/staged/stdlib.mv and b/language/diem-framework/staged/stdlib.mv differ
diff --git a/language/tools/vm-genesis/src/lib.rs b/language/tools/vm-genesis/src/lib.rs
index 5f7dcba739..4be43d76c7 100644
--- a/language/tools/vm-genesis/src/lib.rs
+++ b/language/tools/vm-genesis/src/lib.rs
@@ -367,6 +367,7 @@ fn exec_function(
     ty_args: Vec,
     args: Vec>,
 ) {
+    dbg!(&module_name);
     session
         .execute_function(
             &ModuleId::new(
diff --git a/ol/devnet/genesis/previous/genesis.blob b/ol/devnet/genesis/previous/genesis.blob
new file mode 100644
index 0000000000..ca4477749d
Binary files /dev/null and b/ol/devnet/genesis/previous/genesis.blob differ
diff --git a/ol/devnet/genesis/previous/genesis_waypoint b/ol/devnet/genesis/previous/genesis_waypoint
new file mode 100644
index 0000000000..2bf760ec9c
--- /dev/null
+++ b/ol/devnet/genesis/previous/genesis_waypoint
@@ -0,0 +1 @@
+0:3ec45a0cb6ed8c05f7783908139e1853bb116dd79e54a53069e37de848dcde27
diff --git a/ol/fixtures/configs/alice.toml b/ol/fixtures/configs/alice.toml
index 1a8f73efdc..31577833e7 100644
--- a/ol/fixtures/configs/alice.toml
+++ b/ol/fixtures/configs/alice.toml
@@ -8,7 +8,7 @@ db_path = "/root/.0L/db"
 [profile]
 account = "4C613C2F4B1E67CA8D98A542EE3F59F5"
 auth_key = "87515d94a244235a1433d7117bc0cb154c613c2f4b1e67ca8d98a542ee3f59f5"
-ip = "161.35.13.169"
+ip = "64.225.2.108"
 statement = "Protests rage across the nation"
 
 default_node = "http://localhost:8080/"
diff --git a/ol/fixtures/configs/bob.toml b/ol/fixtures/configs/bob.toml
index 9ee57dc9f9..5071d63a00 100644
--- a/ol/fixtures/configs/bob.toml
+++ b/ol/fixtures/configs/bob.toml
@@ -8,7 +8,7 @@ db_path = "/root/.0L/db"
 [profile]
 account = "88E74DFED34420F2AD8032148280A84B"
 auth_key = "74ea911c261e07ba0198baf4d9ac852e88e74dfed34420f2ad8032148280a84b"
-ip = "167.71.84.248"
+ip = "167.71.191.162"
 statement = "Protests rage across the nation"
 
 default_node = "http://localhost:8080/"
diff --git a/ol/fixtures/configs/carol.toml b/ol/fixtures/configs/carol.toml
index 4826b2aa98..f2698bc54f 100644
--- a/ol/fixtures/configs/carol.toml
+++ b/ol/fixtures/configs/carol.toml
@@ -8,7 +8,7 @@ db_path = "/root/.0L/db"
 [profile]
 account = "E660402D586AD220ED9BEFF47D662D54"
 auth_key = "926945e56bc68675380bb3a4bbcc3a31e660402d586ad220ed9beff47d662d54"
-ip = "104.131.56.224"
+ip = "167.172.17.27"
 statement = "Protests rage across the nation"
 default_node = "http://localhost:8080/"
 upstream_nodes = ["http://localhost:8080/"]