Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rollback in dev mode is not working #1805

Open
davidyuk opened this issue Jun 11, 2024 · 0 comments
Open

Rollback in dev mode is not working #1805

davidyuk opened this issue Jun 11, 2024 · 0 comments
Assignees
Labels
enhancement New feature or request

Comments

@davidyuk
Copy link
Member

davidyuk commented Jun 11, 2024

It was mentioned in other issues, but I think better to have a separate one.

I'm running mdw in dev mode locally. I've sent 100ae an account, then called http://localhost:3313/rollback?height=0. I expect the balance to be zero, but http://localhost:3013/v3/accounts/ak_8eAGBq1jP4dLsmnmgnSzRBxSh5SU1AVsgbCwSQcXZVwwB6c1t still returns 100ae.

I think this feature can be implemented in a hacky way, usually dev mode chains are not very long. So maybe middleware can drop its database and sync with the node again if /rollback is called?

Configuration I'm using
docker-compose.yml

services:
  middleware:
    image: davidyuk/temp:mdw-dev-mode  # https://github.com/aeternity/ae_mdw/issues/1758
    ports: [4000:4000, 4001:4001, 3013:3013, 3313:3313]
    volumes:
      - ./aeternity.yaml:/home/aeternity/aeternity.yaml
    stop_grace_period: 0s

aeternity.yaml

system:
  dev_mode: true
  plugins:
    - name: aeplugin_dev_mode

dev_mode:
  auto_emit_microblocks: true

chain:
  persist: false
  hard_forks:
    "1": 0
    "6": 1
  genesis_accounts:
    ak_21A27UVVt3hDkBE5J7rhhqnH5YNb4Y1dqo4PnSybrH85pnWo7E: 1000000000000000000000000

fork_management:
  network_id: ae_dev

mining:
  beneficiary: ak_21A27UVVt3hDkBE5J7rhhqnH5YNb4Y1dqo4PnSybrH85pnWo7E

reproduction.mjs

import { execSync } from 'child_process';
import { Node, AeSdk, MemoryAccount } from '@aeternity/aepp-sdk';  // 13.3.2

try {
  execSync(
    'docker compose exec middleware ./bin/ae_mdw rpc ":aeplugin_dev_mode_app.start_unlink()"',
    { stdio : 'pipe' },
  );
} catch (error) {
  if (!error.message.includes('{:error, {:already_started')) throw error;
}

const aeSdk = new AeSdk({
  nodes: [{ name: 'testnet', instance: new Node('http://localhost:3013') }],
  accounts: [
    new MemoryAccount('9ebd7beda0c79af72a42ece3821a56eff16359b6df376cf049aee995565f022f840c974b97164776454ba119d84edc4d6058a8dec92b6edc578ab2d30b4c4200'),
  ],
});

const account = new MemoryAccount('212c8db7c62f9048c6f40d0ed41b1f31dc8e344610a822c14498012e649a4d3711595f29929814cb3d0885104a4090252355b0518998d865e24d8afb15359ba5');
await aeSdk.spend(200e18, account.address);
console.log('account.address', account.address);

await (async function rollbackToFirstBlock() {
  const { status } = await fetch('http://localhost:3313/rollback?height=0');
  if (status !== 200) throw new Error(`Unexpected status code: ${status}`);
})();

The complete version in https://github.com/aeternity/aepp-base

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants