diff --git a/.github/ts-tasks/package-lock.json b/.github/ts-tasks/package-lock.json new file mode 100644 index 0000000000000..7054cd863991e --- /dev/null +++ b/.github/ts-tasks/package-lock.json @@ -0,0 +1,555 @@ +{ + "name": "@aptos/ts-tasks", + "version": "0.0.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@aptos/ts-tasks", + "version": "0.0.1", + "license": "Apache-2.0", + "dependencies": { + "@actions/core": "^1.9.1", + "@actions/exec": "^1.1.1", + "@actions/github": "^5.0.3", + "@actions/glob": "^0.3.0", + "find-git-root": "^1.0.4" + }, + "devDependencies": { + "@types/node": "^16.10.5", + "ts-node": "^10.8.0", + "typescript": "^4.4.4" + } + }, + "node_modules/@actions/core": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.11.1.tgz", + "integrity": "sha512-hXJCSrkwfA46Vd9Z3q4cpEpHB1rL5NG04+/rbqW9d3+CSvtB1tYe8UTpAlixa1vj0m/ULglfEK2UKxMGxCxv5A==", + "license": "MIT", + "dependencies": { + "@actions/exec": "^1.1.1", + "@actions/http-client": "^2.0.1" + } + }, + "node_modules/@actions/exec": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@actions/exec/-/exec-1.1.1.tgz", + "integrity": "sha512-+sCcHHbVdk93a0XT19ECtO/gIXoxvdsgQLzb2fE2/5sIZmWQuluYyjPQtrtTHdU1YzTZ7bAPN4sITq2xi1679w==", + "license": "MIT", + "dependencies": { + "@actions/io": "^1.0.1" + } + }, + "node_modules/@actions/github": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@actions/github/-/github-5.1.1.tgz", + "integrity": "sha512-Nk59rMDoJaV+mHCOJPXuvB1zIbomlKS0dmSIqPGxd0enAXBnOfn4VWF+CGtRCwXZG9Epa54tZA7VIRlJDS8A6g==", + "license": "MIT", + "dependencies": { + "@actions/http-client": "^2.0.1", + "@octokit/core": "^3.6.0", + "@octokit/plugin-paginate-rest": "^2.17.0", + "@octokit/plugin-rest-endpoint-methods": "^5.13.0" + } + }, + "node_modules/@actions/glob": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@actions/glob/-/glob-0.3.0.tgz", + "integrity": "sha512-tJP1ZhF87fd6LBnaXWlahkyvdgvsLl7WnreW1EZaC8JWjpMXmzqWzQVe/IEYslrkT9ymibVrKyJN4UMD7uQM2w==", + "license": "MIT", + "dependencies": { + "@actions/core": "^1.2.6", + "minimatch": "^3.0.4" + } + }, + "node_modules/@actions/http-client": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.2.3.tgz", + "integrity": "sha512-mx8hyJi/hjFvbPokCg4uRd4ZX78t+YyRPtnKWwIl+RzNaVuFpQHfmlGVfsKEJN8LwTCvL+DfVgAM04XaHkm6bA==", + "license": "MIT", + "dependencies": { + "tunnel": "^0.0.6", + "undici": "^5.25.4" + } + }, + "node_modules/@actions/io": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@actions/io/-/io-1.1.3.tgz", + "integrity": "sha512-wi9JjgKLYS7U/z8PPbco+PvTb/nRWjeoFlJ1Qer83k/3C5PHQi28hiVdeE2kHXmIL99mQFawx8qt/JPjZilJ8Q==", + "license": "MIT" + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@fastify/busboy": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", + "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@octokit/auth-token": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz", + "integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==", + "license": "MIT", + "dependencies": { + "@octokit/types": "^6.0.3" + } + }, + "node_modules/@octokit/core": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.6.0.tgz", + "integrity": "sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==", + "license": "MIT", + "dependencies": { + "@octokit/auth-token": "^2.4.4", + "@octokit/graphql": "^4.5.8", + "@octokit/request": "^5.6.3", + "@octokit/request-error": "^2.0.5", + "@octokit/types": "^6.0.3", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" + } + }, + "node_modules/@octokit/endpoint": { + "version": "6.0.12", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz", + "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==", + "license": "MIT", + "dependencies": { + "@octokit/types": "^6.0.3", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + } + }, + "node_modules/@octokit/graphql": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.8.0.tgz", + "integrity": "sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==", + "license": "MIT", + "dependencies": { + "@octokit/request": "^5.6.0", + "@octokit/types": "^6.0.3", + "universal-user-agent": "^6.0.0" + } + }, + "node_modules/@octokit/openapi-types": { + "version": "12.11.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", + "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==", + "license": "MIT" + }, + "node_modules/@octokit/plugin-paginate-rest": { + "version": "2.21.3", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.21.3.tgz", + "integrity": "sha512-aCZTEf0y2h3OLbrgKkrfFdjRL6eSOo8komneVQJnYecAxIej7Bafor2xhuDJOIFau4pk0i/P28/XgtbyPF0ZHw==", + "license": "MIT", + "dependencies": { + "@octokit/types": "^6.40.0" + }, + "peerDependencies": { + "@octokit/core": ">=2" + } + }, + "node_modules/@octokit/plugin-rest-endpoint-methods": { + "version": "5.16.2", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.16.2.tgz", + "integrity": "sha512-8QFz29Fg5jDuTPXVtey05BLm7OB+M8fnvE64RNegzX7U+5NUXcOcnpTIK0YfSHBg8gYd0oxIq3IZTe9SfPZiRw==", + "license": "MIT", + "dependencies": { + "@octokit/types": "^6.39.0", + "deprecation": "^2.3.1" + }, + "peerDependencies": { + "@octokit/core": ">=3" + } + }, + "node_modules/@octokit/request": { + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.3.tgz", + "integrity": "sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==", + "license": "MIT", + "dependencies": { + "@octokit/endpoint": "^6.0.1", + "@octokit/request-error": "^2.1.0", + "@octokit/types": "^6.16.1", + "is-plain-object": "^5.0.0", + "node-fetch": "^2.6.7", + "universal-user-agent": "^6.0.0" + } + }, + "node_modules/@octokit/request-error": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz", + "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==", + "license": "MIT", + "dependencies": { + "@octokit/types": "^6.0.3", + "deprecation": "^2.0.0", + "once": "^1.4.0" + } + }, + "node_modules/@octokit/types": { + "version": "6.41.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", + "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^12.11.0" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "16.18.119", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.119.tgz", + "integrity": "sha512-ia7V9a2FnhUFfetng4/sRPBMTwHZUkPFY736rb1cg9AgG7MZdR97q7/nLR9om+sq5f1la9C857E0l/nrI0RiFQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/acorn": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true, + "license": "MIT" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/before-after-hook": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", + "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==", + "license": "Apache-2.0" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/deprecation": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", + "license": "ISC" + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/find-git-root": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/find-git-root/-/find-git-root-1.0.4.tgz", + "integrity": "sha512-468fmirKKgcrqfZfPn0xIpwZUUsZQcYXfx0RC2/jX39GPz83TwutQNZZhDrI6HqjO8cRejxQVaUY8GQdXopFfA==", + "license": "MIT" + }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true, + "license": "ISC" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "license": "MIT", + "engines": { + "node": ">=0.6.11 <=0.7.0 || >=0.7.3" + } + }, + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/undici": { + "version": "5.28.4", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz", + "integrity": "sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==", + "license": "MIT", + "dependencies": { + "@fastify/busboy": "^2.0.0" + }, + "engines": { + "node": ">=14.0" + } + }, + "node_modules/universal-user-agent": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz", + "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==", + "license": "ISC" + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true, + "license": "MIT" + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + } + } +} diff --git a/.github/workflows/adhoc-forge.yaml b/.github/workflows/adhoc-forge.yaml deleted file mode 100644 index 3a3b0bd184000..0000000000000 --- a/.github/workflows/adhoc-forge.yaml +++ /dev/null @@ -1,68 +0,0 @@ -name: "Ad-hoc Forge Run" -on: - workflow_dispatch: - inputs: - GIT_SHA: - required: true - type: string - description: The git SHA1 to checkout and test - IMAGE_TAG: - required: false - type: string - description: The docker image tag to test. If not specified, falls back on GIT_SHA - FORGE_IMAGE_TAG: - required: false - type: string - description: The docker image tag to use for forge runner. If not specified, falls back on GIT_SHA - FORGE_RUNNER_DURATION_SECS: - required: false - type: string - default: "480" - description: Duration of the forge test run - FORGE_TEST_SUITE: - required: false - type: string - default: land_blocking - description: Test suite to run - FORGE_CLUSTER_NAME: - required: false - type: string - description: The Forge k8s cluster to be used for test - -permissions: - contents: read - id-token: write #required for GCP Workload Identity federation which we use to login into Google Artifact Registry - issues: write - pull-requests: write - -jobs: - determine-forge-run-metadata: - runs-on: ubuntu-latest - steps: - - name: collect metadata - run: | - echo "GIT_SHA: ${{ inputs.GIT_SHA }}" - echo "IMAGE_TAG: ${{ inputs.IMAGE_TAG }}" - echo "FORGE_IMAGE_TAG: ${{ inputs.FORGE_IMAGE_TAG }}" - echo "FORGE_RUNNER_DURATION_SECS: ${{ inputs.FORGE_RUNNER_DURATION_SECS }}" - echo "FORGE_TEST_SUITE: ${{ inputs.FORGE_TEST_SUITE }}" - echo "FORGE_CLUSTER_NAME: ${{ inputs.FORGE_CLUSTER_NAME }}" - outputs: - gitSha: ${{ inputs.GIT_SHA }} - imageTag: ${{ inputs.IMAGE_TAG }} - forgeImageTag: ${{ inputs.FORGE_IMAGE_TAG }} - forgeRunnerDurationSecs: ${{ inputs.FORGE_RUNNER_DURATION_SECS }} - forgeTestSuite: ${{ inputs.FORGE_TEST_SUITE }} - forgeClusterName: ${{ inputs.FORGE_CLUSTER_NAME }} - - adhoc-forge-test: - uses: aptos-labs/aptos-core/.github/workflows/workflow-run-forge.yaml@main - needs: [determine-forge-run-metadata] - secrets: inherit - with: - GIT_SHA: ${{ needs.determine-forge-run-metadata.outputs.gitSha }} - IMAGE_TAG: ${{ needs.determine-forge-run-metadata.outputs.imageTag }} - FORGE_IMAGE_TAG: ${{ needs.determine-forge-run-metadata.outputs.forgeImageTag }} - FORGE_TEST_SUITE: ${{ needs.determine-forge-run-metadata.outputs.forgeTestSuite }} - FORGE_RUNNER_DURATION_SECS: ${{ fromJSON(needs.determine-forge-run-metadata.outputs.forgeRunnerDurationSecs) }} # fromJSON converts to integer - FORGE_CLUSTER_NAME: ${{ needs.determine-forge-run-metadata.outputs.forgeClusterName }} diff --git a/.github/workflows/aptos-node-release.yaml b/.github/workflows/aptos-node-release.yaml deleted file mode 100644 index b665ace3f1c68..0000000000000 --- a/.github/workflows/aptos-node-release.yaml +++ /dev/null @@ -1,42 +0,0 @@ -name: "Release aptos-node" -on: - workflow_dispatch: - inputs: - release_tag: - type: string - required: true - description: "The release tag to create. E.g. `aptos-node-v0.2.3`:" - branch: - type: string - required: true - description: "The branch to cut the release from" - release_title: - type: string - required: false - description: 'Name of the release, e.g. "Aptos Node Release v1.2.3":' - -jobs: - release-aptos-node: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - with: - ref: ${{ inputs.branch }} - - - uses: actions/setup-python@v4 - - - name: Bump aptos-node version - uses: aptos-labs/aptos-core/.github/actions/release-aptos-node@main - with: - release_tag: ${{ inputs.release_tag }} - aptos_node_cargo_toml: aptos-node/Cargo.toml - - - name: Create Pull Request - uses: peter-evans/create-pull-request@a4f52f8033a6168103c2538976c07b467e8163bc # pin@v6.0.1 - with: - add-paths: aptos-node - title: "[aptos-node] update release version" - body: Automated release bump for ${{ inputs.release_tag }}. Change the PR base accordingly - commit-message: "[aptos-node] update release version" - branch: auto-release-${{ inputs.release_tag }} - delete-branch: true diff --git a/.github/workflows/cargo-metadata-upload.yaml b/.github/workflows/cargo-metadata-upload.yaml deleted file mode 100644 index f6654df475540..0000000000000 --- a/.github/workflows/cargo-metadata-upload.yaml +++ /dev/null @@ -1,26 +0,0 @@ -name: Target Determinator Cargo Metadata Uploader -on: - push: - branches: - - "main" - pull_request: - paths: - - ".github/workflows/cargo-metadata-upload.yaml" -permissions: - contents: read - id-token: write -jobs: - cargo-metadata: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: dsherret/rust-toolchain-file@v1 - - id: auth - uses: "google-github-actions/auth@v2" - with: - workload_identity_provider: ${{ secrets.GCP_WORKLOAD_IDENTITY_PROVIDER }} - service_account: ${{ secrets.GCP_SERVICE_ACCOUNT_EMAIL }} - - uses: "google-github-actions/setup-gcloud@v2" - - shell: bash - run: | - cargo metadata --all-features | gsutil cp - gs://aptos-core-cargo-metadata-public/metadata-${{ github.sha }}.json diff --git a/.github/workflows/check-minimum-revision.yaml b/.github/workflows/check-minimum-revision.yaml deleted file mode 100644 index a8ff5b694a043..0000000000000 --- a/.github/workflows/check-minimum-revision.yaml +++ /dev/null @@ -1,51 +0,0 @@ -name: "Check Minimum Revision" - -on: - workflow_call: - inputs: - GIT_SHA: - required: true - type: string - workflow_dispatch: - inputs: - GIT_SHA: - required: true - type: string - -env: - GIT_SHA: ${{ inputs.GIT_SHA }} - MINIMUM_REVISION: ${{ secrets.MINIMUM_REVISION }} - -jobs: - check-minimum-revision: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - with: - ref: ${{ env.GIT_SHA }} - fetch-depth: 1000 - - name: Check merge base is new enough - id: check-merge-base - run: | - set -ex - - if [ -z "$MINIMUM_REVISION" ]; then - echo "Skipping check" - exit 0 - fi - - git fetch origin main - - set +e - git merge-base \ - --is-ancestor "$MINIMUM_REVISION" "${{ env.GIT_SHA }}" - FAILED=$? - set -e - - echo "FAIL_MERGE_BASE=${FAILED}" >> $GITHUB_OUTPUT - MERGE_BASE="$(git merge-base origin/main ${{ env.GIT_SHA }})" - - if [[ $FAILED == 1 ]]; then - echo "Your merge base $MERGE_BASE is too old" | tee fail-merge-base.txt - echo "Please rebase on or past $MINIMUM_REVISION" | tee -a fail-merge-base.txt - fi diff --git a/.github/workflows/check-protos.yaml b/.github/workflows/check-protos.yaml deleted file mode 100644 index acb4a5016a654..0000000000000 --- a/.github/workflows/check-protos.yaml +++ /dev/null @@ -1,74 +0,0 @@ -# This workflow exists to make sure that we know when the protos and the generated code -# are out of sync. In this workflow we generate code from the protos and make sure it -# matches what is checked in. - -# To make this much faster we don't use our own rust setup script. There is no need -# right now because the packages we're installing work fine with the latest version -# of Rust, at least at the time of writing. Famous last words of course, it's possible -# that the preinstalled version of the toolchain will break this at some point, but -# that probably won't happen for quite a while. - -name: "Check Protos" -on: - pull_request: - types: [labeled, opened, synchronize, reopened, auto_merge_enabled] - push: - branches: - - main - -# Cancel redundant builds. -concurrency: - # For push and workflow_dispatch events we use `github.sha` in the concurrency group and don't really cancel each other out/limit concurrency. - # For pull_request events newer jobs cancel earlier jobs to save on CI etc. - group: ${{ github.workflow }}-${{ github.event_name }}-${{ (github.event_name == 'push' || github.event_name == 'workflow_dispatch') && github.sha || github.head_ref || github.ref }} - cancel-in-progress: true - -jobs: - check: - runs-on: ubuntu-latest - if: | # Only run on each PR once an appropriate event occurs - ( - github.event_name == 'workflow_dispatch' || - github.event_name == 'push' || - contains(github.event.pull_request.labels.*.name, 'CICD:run-e2e-tests') || - github.event.pull_request.auto_merge != null - ) - steps: - - uses: actions/checkout@v3 - - # Install buf, which we use to generate code from the protos for Rust and TS. - - name: Install buf - uses: bufbuild/buf-setup-action@v1.24.0 - with: - version: 1.28.1 - - - uses: pre-commit/action@v3.0.0 - - # Install protoc itself. - - name: Install Protoc - uses: arduino/setup-protoc@v2 - with: - version: "25.x" - - # Set up pnpm. - - uses: pnpm/action-setup@v2 - with: - version: 8.6.2 - - # Set up Poetry. - - name: Install Python deps for generating code from protos - uses: ./.github/actions/python-setup - with: - pyproject_directory: ./protos/python - - # Install the Rust, TS, and Python codegen deps. - - name: Install deps for generating code from protos - run: cd protos && ./scripts/install_deps.sh - - # Finally, generate code based on the protos. - - name: Generate code - run: cd protos && ./scripts/build_protos.sh - - # Confirm that nothing has changed. - - name: Confirm that nothing has changed - run: git diff --exit-code diff --git a/.github/workflows/check-sdk-examples.yaml b/.github/workflows/check-sdk-examples.yaml deleted file mode 100644 index 6e3c5221f9984..0000000000000 --- a/.github/workflows/check-sdk-examples.yaml +++ /dev/null @@ -1,46 +0,0 @@ -name: "Check SDK examples" -on: - pull_request: - types: [labeled, opened, synchronize, reopened, auto_merge_enabled] - push: - branches: - - devnet - -jobs: - # Run the TS SDK examples. Note: There are small windows where these examples - # might be able to fail. For example, if we released a new devnet and SDK with - # an incompatible change, but haven't updated the examples to use the new SDK. - # That's why this is a separate job, because there are times when it could fail, - # whereas there is no reason why the test-sdk-confirm-client-generated-publish - # job should fail. These could also fail because we run them against devnet, - # whereas we run the test-sdk-confirm-client-generated-publish against a node - # built from the same commit and run as part of that CI job. - run-examples: - if: contains(github.event.pull_request.labels.*.name, 'CICD:non-required-tests') - runs-on: ubuntu-latest - env: - APTOS_NODE_URL: https://fullnode.devnet.aptoslabs.com - APTOS_FAUCET_URL: https://faucet.devnet.aptoslabs.com - FAUCET_AUTH_TOKEN: ${{ secrets.DEVNET_TAP_AUTH_TOKEN }} - steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 - with: - node-version-file: .node-version - - uses: pnpm/action-setup@v2 - - # Run example code in typescript. - - uses: nick-fields/retry@7f8f3d9f0f62fe5925341be21c2e8314fd4f7c7c # pin@v2 - name: ts-example-test - with: - max_attempts: 5 - timeout_minutes: 20 - command: cd ./ecosystem/typescript/sdk/examples/typescript && pnpm install && pnpm test - - # Run example code in javascript. - - uses: nick-fields/retry@7f8f3d9f0f62fe5925341be21c2e8314fd4f7c7c # pin@v2 - name: js-example-test - with: - max_attempts: 5 - timeout_minutes: 20 - command: cd ./ecosystem/typescript/sdk/examples/javascript && pnpm install && pnpm test diff --git a/.github/workflows/cli-e2e-tests.yaml b/.github/workflows/cli-e2e-tests.yaml deleted file mode 100644 index 70a1415ba9708..0000000000000 --- a/.github/workflows/cli-e2e-tests.yaml +++ /dev/null @@ -1,87 +0,0 @@ -name: "Run Aptos CLI E2E tests" -on: - # This is called from within the docker-build-test.yaml workflow since we depend - # on the build of the image of the CLI we're testing having been built before this - # workflow runs. You can see in the invocation of the test suite that we pass in - # the image repo we just built and pushed the tools image to and the git SHA1 of - # the commit / PR that triggered this workflow. - workflow_call: - inputs: - GIT_SHA: - required: true - type: string - description: Use this to override the git SHA1, branch name (e.g. devnet) or tag - SKIP_JOB: - required: false - default: false - type: boolean - description: Set to true to skip this job. Useful for PRs that don't require this workflow. - -# TODO: should we migrate this to a composite action, so that we can skip it -# at the call site, and don't need to wrap each step in an if statement? -jobs: - # Run the Aptos CLI examples. We run the CLI on this commit / PR against a - # local testnet using the devnet, testnet, and mainnet branches. This way - # we ensure that the Aptos CLI works with all 3 prod networks, at least - # based on the tests in the test suite. - run-cli-tests: - runs-on: runs-on,cpu=64,family=c7,hdd=500,image=aptos-ubuntu-x64,run-id=${{ github.run_id }} - permissions: - contents: read - id-token: write - steps: - - uses: actions/checkout@v3 - if: ${{ !inputs.SKIP_JOB }} - with: - ref: ${{ inputs.GIT_SHA }} - - - uses: aptos-labs/aptos-core/.github/actions/docker-setup@main - if: ${{ !inputs.SKIP_JOB }} - with: - GCP_WORKLOAD_IDENTITY_PROVIDER: ${{ secrets.GCP_WORKLOAD_IDENTITY_PROVIDER }} - GCP_SERVICE_ACCOUNT_EMAIL: ${{ secrets.GCP_SERVICE_ACCOUNT_EMAIL }} - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - AWS_DOCKER_ARTIFACT_REPO: ${{ secrets.AWS_DOCKER_ARTIFACT_REPO }} - GIT_CREDENTIALS: ${{ secrets.GIT_CREDENTIALS }} - - - uses: ./.github/actions/python-setup - if: ${{ !inputs.SKIP_JOB }} - with: - pyproject_directory: crates/aptos/e2e - - # Run CLI tests against local testnet built from devnet branch. - - uses: nick-fields/retry@7f8f3d9f0f62fe5925341be21c2e8314fd4f7c7c # pin@v2 - if: ${{ !inputs.SKIP_JOB }} - name: devnet-tests - with: - max_attempts: 5 - timeout_minutes: 20 - command: cd ./crates/aptos/e2e && poetry run python main.py -d --base-network devnet --image-repo-with-project ${{ vars.GCP_DOCKER_ARTIFACT_REPO }} --test-cli-tag ${{ inputs.GIT_SHA }} --working-directory ${{ runner.temp }}/aptos-e2e-tests-devnet - - # Run CLI tests against local testnet built from testnet branch. - - uses: nick-fields/retry@7f8f3d9f0f62fe5925341be21c2e8314fd4f7c7c # pin@v2 - if: ${{ !inputs.SKIP_JOB }} - name: testnet-tests - with: - max_attempts: 5 - timeout_minutes: 20 - command: cd ./crates/aptos/e2e && poetry run python main.py -d --base-network testnet --image-repo-with-project ${{ vars.GCP_DOCKER_ARTIFACT_REPO }} --test-cli-tag ${{ inputs.GIT_SHA }} --working-directory ${{ runner.temp }}/aptos-e2e-tests-testnet - - # Run CLI tests against local testnet built from mainnet branch. - - uses: nick-fields/retry@7f8f3d9f0f62fe5925341be21c2e8314fd4f7c7c # pin@v2 - if: ${{ !inputs.SKIP_JOB }} - name: mainnet-tests - with: - max_attempts: 5 - timeout_minutes: 20 - command: cd ./crates/aptos/e2e && poetry run python main.py -d --base-network mainnet --image-repo-with-project ${{ vars.GCP_DOCKER_ARTIFACT_REPO }} --test-cli-tag ${{ inputs.GIT_SHA }} --working-directory ${{ runner.temp }}/aptos-e2e-tests-mainnet - - - name: Print local testnet logs on failure - if: ${{ !inputs.SKIP_JOB && failure() }} - working-directory: docker/compose/validator-testnet - run: docker logs aptos-tools-devnet && docker logs aptos-tools-testnet && docker logs aptos-tools-mainnet - - # Print out whether the job was skipped. - - run: echo "Skipping CLI E2E tests!" - if: ${{ inputs.SKIP_JOB }} diff --git a/.github/workflows/cli-external-deps.yaml b/.github/workflows/cli-external-deps.yaml deleted file mode 100644 index edb70583557aa..0000000000000 --- a/.github/workflows/cli-external-deps.yaml +++ /dev/null @@ -1,20 +0,0 @@ -name: "Check banned CLI dynamic deps" -on: - pull_request: - types: [labeled, opened, synchronize, reopened, auto_merge_enabled] - push: - branches: - - main - workflow_dispatch: - -jobs: - check-dynamic-deps: - runs-on: macos-latest - steps: - - uses: actions/checkout@v3 - if: ${{ !inputs.SKIP_JOB }} - with: - ref: ${{ inputs.GIT_SHA }} - - # This will exit with failure if any of the banned dynamic deps are found. - - run: ./crates/aptos/scripts/check_dynamic_deps.sh diff --git a/.github/workflows/close-stale-issues.yaml b/.github/workflows/close-stale-issues.yaml deleted file mode 100644 index 28ace31ba5d61..0000000000000 --- a/.github/workflows/close-stale-issues.yaml +++ /dev/null @@ -1,24 +0,0 @@ -name: "Close stale issues and PRs" -on: - schedule: - - cron: "30 1 * * *" - workflow_dispatch: - -permissions: - # contents: write # only for delete-branch option - issues: write - pull-requests: write - -jobs: - stale: - runs-on: ubuntu-latest - steps: - - uses: actions/stale@v6 - with: - days-before-stale: 45 - days-before-close: 15 - operations-per-run: 500 - stale-issue-message: "This issue is stale because it has been open 45 days with no activity. Remove the `stale` label or comment - otherwise this will be closed in 15 days." - stale-pr-message: "This issue is stale because it has been open 45 days with no activity. Remove the `stale` label, comment or push a commit - otherwise this will be closed in 15 days." - exempt-issue-labels: stale-exempt - exempt-pr-labels: stale-exempt diff --git a/.github/workflows/codeql-analysis.yaml b/.github/workflows/codeql-analysis.yaml deleted file mode 100644 index 7591c4c3577d6..0000000000000 --- a/.github/workflows/codeql-analysis.yaml +++ /dev/null @@ -1,49 +0,0 @@ -name: "CodeQL" - -on: - # Allow triggering manually - workflow_dispatch: - -jobs: - analyze: - name: Analyze - runs-on: ubuntu-latest - permissions: - actions: read - contents: read - security-events: write - - strategy: - fail-fast: false - matrix: - language: [ "javascript", "python", "ruby" ] - - steps: - - name: Checkout repository - uses: actions/checkout@v3 - - # Initializes the CodeQL tools for scanning. - - name: Initialize CodeQL - uses: github/codeql-action/init@807578363a7869ca324a79039e6db9c843e0e100 # pin@v2 - with: - languages: ${{ matrix.language }} - # If you wish to specify custom queries, you can do so here or in a config file. - # By default, queries listed here will override any specified in a config file. - # Prefix the list here with "+" to use these queries and those in the config file. - # Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs - # queries: security-extended,security-and-quality - - # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). - # If this step fails, then you should remove it and run the build manually (see below) - - name: Autobuild - uses: github/codeql-action/autobuild@807578363a7869ca324a79039e6db9c843e0e100 # pin@v2 - - # â„šī¸ Command-line programs to run using the OS shell. - # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun - # If the Autobuild fails above, remove it and uncomment the following three lines. - # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance. - # - run: | - # echo "Run, Build Application using script" - # ./location_of_script_within_repo/buildscript.sh - - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@807578363a7869ca324a79039e6db9c843e0e100 # pin@v2 diff --git a/.github/workflows/copy-images-to-dockerhub-nightly.yaml b/.github/workflows/copy-images-to-dockerhub-nightly.yaml deleted file mode 100644 index a38aad9e0d11b..0000000000000 --- a/.github/workflows/copy-images-to-dockerhub-nightly.yaml +++ /dev/null @@ -1,27 +0,0 @@ -name: Copy images to dockerhub nightly -on: - schedule: - # 9am PST (16:00 UTC). - - cron: "0 16 * * *" - -permissions: - contents: read - id-token: write #required for GCP Workload Identity federation - actions: write #required for workflow cancellation via check-aptos-core - -jobs: - check-repo: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - uses: aptos-labs/aptos-core/.github/actions/check-aptos-core@main - with: - cancel-workflow: ${{ github.event_name == 'schedule' }} # Cancel the workflow if it is scheduled on a fork - - copy-images-to-dockerhub: - needs: check-repo - if: github.repository == 'aptos-labs/aptos-core' - uses: ./.github/workflows/copy-images-to-dockerhub.yaml - with: - image_tag_prefix: nightly - secrets: inherit diff --git a/.github/workflows/copy-images-to-dockerhub-release.yaml b/.github/workflows/copy-images-to-dockerhub-release.yaml deleted file mode 100644 index b6a5a59592241..0000000000000 --- a/.github/workflows/copy-images-to-dockerhub-release.yaml +++ /dev/null @@ -1,29 +0,0 @@ -name: Copy images to dockerhub on release -on: - push: - branches: - # aptos-node network-specific release branches - - devnet - - testnet - - mainnet - # preview branches - - preview - - preview-networking - # aptos-indexer-grpc network-specific release branches - - aptos-indexer-grpc-devnet - - aptos-indexer-grpc-testnet - - aptos-indexer-grpc-mainnet - tags: - - aptos-node-v* - - aptos-indexer-grpc-v* - -permissions: - contents: read - id-token: write #required for GCP Workload Identity federation - -jobs: - copy-images-to-docker-hub: - uses: ./.github/workflows/copy-images-to-dockerhub.yaml - with: - image_tag_prefix: ${{ github.ref_name }} - secrets: inherit diff --git a/.github/workflows/copy-images-to-dockerhub.yaml b/.github/workflows/copy-images-to-dockerhub.yaml deleted file mode 100644 index b2c11a156c6e1..0000000000000 --- a/.github/workflows/copy-images-to-dockerhub.yaml +++ /dev/null @@ -1,64 +0,0 @@ -name: Release Images -on: - workflow_call: - inputs: - image_tag_prefix: - required: true - type: string - description: a prefix to use for image tags. E.g. `devnet`. It results in an image tag like `:devnet_` - GIT_SHA: - required: false - type: string - description: the git sha to use for the image tag. If not provided, the git sha of the triggering branch will be used - workflow_dispatch: - inputs: - image_tag_prefix: - required: true - type: string - default: adhoc - description: a prefix to use for image tags. E.g. `devnet`. It results in an image tag like `:devnet_` - GIT_SHA: - required: false - type: string - description: the git sha to use for the image tag. If not provided, the git sha of the triggering branch will be used - -permissions: - contents: read - id-token: write #required for GCP Workload Identity federation - -jobs: - copy-images: - # Run on a machine with more local storage for large docker images - runs-on: medium-perf-docker-with-local-ssd - steps: - - uses: actions/checkout@v4 - - - uses: aptos-labs/aptos-core/.github/actions/docker-setup@main - with: - GCP_WORKLOAD_IDENTITY_PROVIDER: ${{ secrets.GCP_WORKLOAD_IDENTITY_PROVIDER }} - GCP_SERVICE_ACCOUNT_EMAIL: ${{ secrets.GCP_SERVICE_ACCOUNT_EMAIL }} - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - AWS_DOCKER_ARTIFACT_REPO: ${{ secrets.AWS_DOCKER_ARTIFACT_REPO }} - GIT_CREDENTIALS: ${{ secrets.GIT_CREDENTIALS }} - - - name: Login to Docker Hub - uses: docker/login-action@v2 - with: - username: ${{ secrets.ENV_DOCKERHUB_USERNAME }} - password: ${{ secrets.ENV_DOCKERHUB_PASSWORD }} - - - uses: actions/setup-node@v3 - with: - node-version-file: .node-version - - - uses: pnpm/action-setup@v2 - - - name: Release Images - env: - FORCE_COLOR: 3 # Force color output as per https://github.com/google/zx#using-github-actions - GIT_SHA: ${{ inputs.GIT_SHA || github.sha }} # If GIT_SHA is not provided, use the sha of the triggering branch - AWS_ACCOUNT_ID: ${{ secrets.AWS_ECR_ACCOUNT_NUM }} - GCP_DOCKER_ARTIFACT_REPO: ${{ vars.GCP_DOCKER_ARTIFACT_REPO }} - IMAGE_TAG_PREFIX: ${{ inputs.image_tag_prefix }} - run: ./docker/release-images.mjs --wait-for-image-seconds=3600 diff --git a/.github/workflows/coverage-move-only.yaml b/.github/workflows/coverage-move-only.yaml deleted file mode 100644 index e0b35b9671762..0000000000000 --- a/.github/workflows/coverage-move-only.yaml +++ /dev/null @@ -1,70 +0,0 @@ -name: "Test Coverage For Move" -on: - # Trigger if any of the conditions - # Any changes to the directory `third_party/move/` - push: - branches: - - 'main' - paths: - - 'third_party/move/**' - - 'aptos-move/e2e-move-tests/**' - - 'aptos-move/framework/**' - - '.github/workflows/coverage-move-only.yaml' - pull_request: - paths: - - 'third_party/move/**' - - 'aptos-move/e2e-move-tests/**' - - 'aptos-move/framework/**' - - '.github/workflows/coverage-move-only.yaml' - -env: - CARGO_INCREMENTAL: "0" - CARGO_TERM_COLOR: always - -# cancel redundant builds -concurrency: - # cancel redundant builds on PRs (only on PR, not on branches) - group: ${{ github.workflow }}-${{ (github.event_name == 'pull_request' && github.ref) || github.sha }} - cancel-in-progress: true - -jobs: - rust-move-unit-coverage: - timeout-minutes: 60 - runs-on: runs-on,cpu=64,family=c7,hdd=500,image=aptos-ubuntu-x64,run-id=${{ github.run_id }} - steps: - - uses: actions/checkout@v3 - - uses: aptos-labs/aptos-core/.github/actions/rust-setup@main - - name: prepare move lang prover tooling. - shell: bash - run: | - echo 'Z3_EXE='/home/runner/bin/z3 | tee -a $GITHUB_ENV - echo 'CVC5_EXE='/home/runner/bin/cvc5 | tee -a $GITHUB_ENV - echo 'DOTNET_ROOT='/home/runner/.dotnet/ | tee -a $GITHUB_ENV - echo 'BOOGIE_EXE='/home/runner/.dotnet/tools/boogie | tee -a $GITHUB_ENV - echo 'MVP_TEST_ON_CI'='1' | tee -a $GITHUB_ENV - echo "/home/runner/bin" | tee -a $GITHUB_PATH - echo "/home/runner/.dotnet" | tee -a $GITHUB_PATH - echo "/home/runner/.dotnet/tools" | tee -a $GITHUB_PATH - - run: rustup component add llvm-tools-preview - - uses: taiki-e/install-action@4fedbddde88aab767a45a011661f832d68202716 # pin@v2.33.28 - with: - tool: nextest,cargo-llvm-cov - - run: docker run --detach -p 5432:5432 cimg/postgres:14.2 - - run: cargo llvm-cov nextest --lcov --output-path lcov_unit.info --ignore-run-fail -p aptos-framework -p "move*" - env: - INDEXER_DATABASE_URL: postgresql://postgres@localhost/postgres - - uses: actions/upload-artifact@v3 - with: - name: lcov_unit - path: lcov_unit.info - - uses: actions/download-artifact@v3 - with: - name: lcov_unit - - name: Upload coverage to Codecov - continue-on-error: true # Don't fail if the codecov upload fails - uses: codecov/codecov-action@d9f34f8cd5cb3b3eb79b3e4b5dae3a16df499a70 # pin@v3 - env: - CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} - with: - files: lcov_unit.info - fail_ci_if_error: true diff --git a/.github/workflows/coverage.yaml b/.github/workflows/coverage.yaml deleted file mode 100644 index c599f3ef023dd..0000000000000 --- a/.github/workflows/coverage.yaml +++ /dev/null @@ -1,109 +0,0 @@ -name: "Test_Coverage" -on: - # Trigger if any of the conditions - # 1. Daily at 12am UTC from the main branch, or - # 2. PR with a specific label (see below) - schedule: - - cron: "0 0 * * *" - pull_request: - types: [labeled] - workflow_dispatch: - workflow_call: - -env: - CARGO_INCREMENTAL: "0" - CARGO_TERM_COLOR: always - -# cancel redundant builds -concurrency: - # cancel redundant builds on PRs (only on PR, not on branches) - group: ${{ github.workflow }}-${{ (github.event_name == 'pull_request' && github.ref) || github.sha }} - cancel-in-progress: true - -jobs: - rust-unit-coverage: - if: | - contains(github.event.pull_request.labels.*.name, 'CICD:run-coverage') || - (github.event_name == 'schedule' && github.ref_name == 'main') - # Note the tests run slowly due to instrutmentation. It takes CI 10 hrs - timeout-minutes: 720 - runs-on: runs-on,cpu=64,family=c7,hdd=500,image=aptos-ubuntu-x64,run-id=${{ github.run_id }} - steps: - - uses: actions/checkout@v3 - with: - fetch-depth: 0 # get all the history because cargo xtest --change-since origin/main requires it. - - uses: aptos-labs/aptos-core/.github/actions/rust-setup@main - - run: rustup component add llvm-tools-preview - - uses: taiki-e/install-action@4fedbddde88aab767a45a011661f832d68202716 # pin@v2.33.28 - with: - tool: nextest,cargo-llvm-cov - - run: docker run --detach -p 5432:5432 cimg/postgres:14.2 - - run: cargo llvm-cov nextest --lcov --output-path lcov_unit.info -vv --ignore-run-fail --workspace --exclude smoke-test --exclude aptos-testcases - env: - INDEXER_DATABASE_URL: postgresql://postgres@localhost/postgres - RUST_MIN_STACK: 33554432 # 32 MB of stack - MVP_TEST_ON_CI: true - SOLC_EXE: /home/runner/bin/solc - Z3_EXE: /home/runner/bin/z3 - CVC5_EXE: /home/runner/bin/cvc5 - DOTNET_ROOT: /home/runner/.dotnet - BOOGIE_EXE: /home/runner/.dotnet/tools/boogie - - uses: actions/upload-artifact@v3 - with: - name: lcov_unit - path: lcov_unit.info - - rust-smoke-coverage: - if: | - contains(github.event.pull_request.labels.*.name, 'CICD:run-coverage') || - (github.event_name == 'schedule' && github.ref_name == 'main') - timeout-minutes: 720 # incremented from 240 due to execution time limit hit in cron - runs-on: runs-on,cpu=64,family=c7,hdd=500,image=aptos-ubuntu-x64,run-id=${{ github.run_id }} - steps: - - uses: actions/checkout@v3 - with: - fetch-depth: 0 # get all the history because cargo xtest --change-since origin/main requires it. - - uses: aptos-labs/aptos-core/.github/actions/rust-setup@main - - run: rustup component add llvm-tools-preview - - uses: taiki-e/install-action@4fedbddde88aab767a45a011661f832d68202716 # pin@v2.33.28 - with: - tool: nextest,cargo-llvm-cov - - run: docker run --detach -p 5432:5432 cimg/postgres:14.2 - - run: cargo build --locked --package=aptos-node --features=failpoints,indexer --release && LLVM_PROFDATA_FLAGS="--failure-mode=all" LOCAL_SWARM_NODE_RELEASE=1 cargo llvm-cov nextest --lcov --output-path lcov_smoke.info -vv --ignore-run-fail --profile smoke-test -p smoke-test - env: - INDEXER_DATABASE_URL: postgresql://postgres@localhost/postgres - RUST_MIN_STACK: 33554432 - MVP_TEST_ON_CI: true - SOLC_EXE: /home/runner/bin/solc - Z3_EXE: /home/runner/bin/z3 - CVC5_EXE: /home/runner/bin/cvc5 - DOTNET_ROOT: /home/runner/.dotnet - BOOGIE_EXE: /home/runner/.dotnet/tools/boogie - - uses: actions/upload-artifact@v3 - with: - name: lcov_smoke - path: lcov_smoke.info - - upload-to-codecov: - if: | - contains(github.event.pull_request.labels.*.name, 'CICD:run-coverage') || - (github.event_name == 'schedule' && github.ref_name == 'main') - && !cancelled() - needs: [ rust-unit-coverage, rust-smoke-coverage ] - runs-on: ubuntu-latest - continue-on-error: true # Don't fail if the codecov upload fails - env: - CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} - steps: - - uses: actions/checkout@v3 - - uses: actions/download-artifact@v3 - with: - name: lcov_unit - - uses: actions/download-artifact@v3 - with: - name: lcov_smoke - - name: Upload coverage to Codecov - uses: codecov/codecov-action@d9f34f8cd5cb3b3eb79b3e4b5dae3a16df499a70 # pin@v3 - with: - files: lcov_unit.info,lcov_smoke.info - fail_ci_if_error: true diff --git a/.github/workflows/cut-release-branch.yaml b/.github/workflows/cut-release-branch.yaml deleted file mode 100644 index 46021d7b780f9..0000000000000 --- a/.github/workflows/cut-release-branch.yaml +++ /dev/null @@ -1,50 +0,0 @@ -name: "Cut Release Branch" -on: - workflow_dispatch: - inputs: - NEW_VERSION: - required: true - type: string - description: The branch version to cut i.e. 1.4 - GIT_HASH: - required: true - type: string - description: The git hash to use for the base of the new branch - BRANCH_PREFIX: - required: false - type: string - default: aptos-release-v - description: The prefix to use for the branch name - BRANCH_SUFFIX: - required: false - type: string - default: - description: The suffix to use for the branch name if any - -permissions: - contents: read - id-token: write - issues: write - pull-requests: write - -jobs: - cut-release-branch: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - with: - token: ${{ secrets.CUT_RELEASE_BRANCH_CREDENTIALS }} - fetch-depth: 0 - - name: Cut Release Branch - run: | - set -ex - - BRANCH_NAME="${{ inputs.BRANCH_PREFIX }}${{ inputs.NEW_VERSION }}${{ inputs.BRANCH_SUFFIX }}" - git branch - - git checkout ${{ inputs.GIT_HASH }} - git checkout -b "$BRANCH_NAME" - - perl -i -pe 's/version\s*=\s*"[^"]*"/version = "${{ inputs.NEW_VERSION }}.0"/g' aptos-node/Cargo.toml - - git push origin "$BRANCH_NAME" diff --git a/.github/workflows/docker-build-rosetta.yaml b/.github/workflows/docker-build-rosetta.yaml deleted file mode 100644 index 6139c8d8ed194..0000000000000 --- a/.github/workflows/docker-build-rosetta.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Continuously build Rosetta -name: Docker Build Rosetta - -on: - schedule: - - cron: "0 9 * * 1" # once a week - pull_request: - paths: - - ".github/workflows/docker-build-rosetta.yaml" - # build on changes to dockerfile and build script - - "docker/rosetta/docker-build-rosetta.sh" - - "docker/rosetta/rosetta.Dockerfile" - -permissions: - contents: read - id-token: write #required for GCP Workload Identity federation - -jobs: - build: - runs-on: runs-on,cpu=64,family=c7,hdd=500,image=aptos-ubuntu-x64,run-id=${{ github.run_id }} - steps: - - uses: actions/checkout@v3 - - - uses: aptos-labs/aptos-core/.github/actions/buildx-setup@main - - - name: Build rosetta - run: GIT_REF=main docker/rosetta/docker-build-rosetta.sh diff --git a/.github/workflows/docker-build-test.yaml b/.github/workflows/docker-build-test.yaml deleted file mode 100644 index bed1625f8697e..0000000000000 --- a/.github/workflows/docker-build-test.yaml +++ /dev/null @@ -1,391 +0,0 @@ -## IMPORTANT NOTE TO EDITORS OF THIS FILE ## - -## Note that when you create a PR the jobs in this file are triggered off the -## `pull_request_target` event instead of `pull_request` event. This is because -## the `pull_request` event makes secrets only available to PRs from branches, -## not from forks, and some of these jobs require secrets. So with `pull_request_target` -## we're making secrets available to fork-based PRs too. Using `pull_request_target" -## has a side effect, which is that the workflow execution will be driven by the -## state of the .yaml on the `main` (=target) branch, even if you edited -## the .yaml in your PR. So when you for example add a new job here, you -## won't see that job appear in the PR itself. It will only become effective once -## you merge the PR to main. Therefore, if you want to add a new job here and want -## to test it's functionality prior to a merge to main, you have to to _temporarily_ -## change the trigger event from `pull_request_target` to `pull_request`. - -## Additionally, because `pull_request_target` gets secrets injected for forked PRs -## we use `https://github.com/sushichop/action-repository-permission` to ensure these -## jobs are only executed when a repo member with "write" permission has triggered -## the workflow (directly through a push or indirectly by applying a label or enabling -## auto_merge). - -name: "Build+Test Docker Images" -on: # build on main branch OR when a PR is labeled with `CICD:build-images` - # Allow us to run this specific workflow without a PR - workflow_dispatch: - pull_request_target: - types: [labeled, opened, synchronize, reopened, auto_merge_enabled] - push: - branches: - - main - # release branches - - devnet - - testnet - - mainnet - - aptos-node-v* - - aptos-release-v* - # experimental branches - - performance_benchmark - - preview - - preview-networking - # grpc release branches - - aptos-indexer-grpc-devnet - - aptos-indexer-grpc-testnet - - aptos-indexer-grpc-mainnet - - aptos-indexer-grpc-v* - -# cancel redundant builds -concurrency: - # for push and workflow_dispatch events we use `github.sha` in the concurrency group and don't really cancel each other out/limit concurrency - # for pull_request events newer jobs cancel earlier jobs to save on CI etc. - group: ${{ github.workflow }}-${{ github.event_name }}-${{ (github.event_name == 'push' || github.event_name == 'workflow_dispatch') && github.sha || github.head_ref || github.ref }} - cancel-in-progress: true - -env: - AWS_ECR_ACCOUNT_NUM: ${{ secrets.ENV_ECR_AWS_ACCOUNT_NUM }} - # In case of pull_request events by default github actions merges main into the PR branch and then runs the tests etc - # on the prospective merge result instead of only on the tip of the PR. - # For more info also see https://github.com/actions/checkout#checkout-pull-request-head-commit-instead-of-merge-commit - GIT_SHA: ${{ github.event.pull_request.head.sha || github.sha }} - - # TARGET_CACHE_ID is used as part of the docker tag / cache key inside our bake.hcl docker bake files. - # The goal here is to have a branch or PR-local cache such that consecutive pushes to a shared branch or a specific PR can - # reuse layers from a previous docker build/commit. - # We use `pr-` as cache-id for PRs and simply otherwise. - TARGET_CACHE_ID: ${{ github.event.number && format('pr-{0}', github.event.number) || github.ref_name }} - - # On PRs, only build and push to GCP - # On push, build and push to all remote registries - TARGET_REGISTRY: ${{ github.event_name == 'pull_request_target' && 'remote' || 'remote-all' }} - -permissions: - contents: read - id-token: write #required for GCP Workload Identity federation which we use to login into Google Artifact Registry - issues: write - pull-requests: write - -# Note on the job-level `if` conditions: -# This workflow is designed such that: -# 1. Run ALL jobs when a 'push', 'workflow_dispatch' triggered the workflow or on 'pull_request's which have set auto_merge=true or have the label "CICD:run-e2e-tests". -# 2. Run ONLY the docker image building jobs on PRs with the "CICD:build[-]-images" label. -# 3. Run ONLY the forge-e2e-test job on PRs with the "CICD:run-forge-e2e-perf" label. -# 4. Run NOTHING when neither 1. or 2. or 3. conditions are satisfied. -jobs: - permission-check: - if: | - github.event_name == 'push' || - github.event_name == 'workflow_dispatch' || - contains(join(github.event.pull_request.labels.*.name, ','), 'CICD:build-') || - contains(join(github.event.pull_request.labels.*.name, ','), 'CICD:run-') || - github.event.pull_request.auto_merge != null || - contains(github.event.pull_request.body, '#e2e') - runs-on: ubuntu-latest - steps: - - name: Check repository permission for user which triggered workflow - uses: sushichop/action-repository-permission@13d208f5ae7a6a3fc0e5a7c2502c214983f0241c - with: - required-permission: write - comment-not-permitted: Sorry, you don't have permission to trigger this workflow. - - # Because the docker build happens in a reusable workflow, have a separate job that collects the right metadata - # for the subsequent docker builds. Reusable workflows do not currently have the "env" context: https://github.com/orgs/community/discussions/26671 - determine-docker-build-metadata: - needs: [permission-check] - runs-on: ubuntu-latest - steps: - - name: collect metadata - run: | - echo "GIT_SHA: ${GIT_SHA}" - echo "TARGET_CACHE_ID: ${TARGET_CACHE_ID}" - echo "TARGET_REGISTRY: ${TARGET_REGISTRY}" - outputs: - gitSha: ${{ env.GIT_SHA }} - targetCacheId: ${{ env.TARGET_CACHE_ID }} - targetRegistry: ${{ env.TARGET_REGISTRY }} - - # This job determines which files were changed - file_change_determinator: - needs: [permission-check] - runs-on: ubuntu-latest - outputs: - only_docs_changed: ${{ steps.determine_file_changes.outputs.only_docs_changed }} - steps: - - uses: actions/checkout@v3 - - name: Run the file change determinator - id: determine_file_changes - uses: ./.github/actions/file-change-determinator - - # This job determines which tests to run - test-target-determinator: - needs: [permission-check] - runs-on: ubuntu-latest - outputs: - run_framework_upgrade_test: ${{ steps.determine_test_targets.outputs.run_framework_upgrade_test }} - steps: - - uses: actions/checkout@v3 - - name: Run the test target determinator - id: determine_test_targets - uses: ./.github/actions/test-target-determinator - - # This is a PR required job. - rust-images: - needs: [permission-check, determine-docker-build-metadata] - uses: aptos-labs/aptos-core/.github/workflows/workflow-run-docker-rust-build.yaml@main - secrets: inherit - with: - GIT_SHA: ${{ needs.determine-docker-build-metadata.outputs.gitSha }} - TARGET_CACHE_ID: ${{ needs.determine-docker-build-metadata.outputs.targetCacheId }} - PROFILE: release - BUILD_ADDL_TESTING_IMAGES: true - TARGET_REGISTRY: ${{ needs.determine-docker-build-metadata.outputs.targetRegistry }} - - rust-images-failpoints: - needs: [permission-check, determine-docker-build-metadata] - uses: aptos-labs/aptos-core/.github/workflows/workflow-run-docker-rust-build.yaml@main - if: | - github.event_name == 'push' || - github.event_name == 'workflow_dispatch' || - contains(github.event.pull_request.labels.*.name, 'CICD:build-failpoints-images') - secrets: inherit - with: - GIT_SHA: ${{ needs.determine-docker-build-metadata.outputs.gitSha }} - TARGET_CACHE_ID: ${{ needs.determine-docker-build-metadata.outputs.targetCacheId }} - PROFILE: release - FEATURES: failpoints - BUILD_ADDL_TESTING_IMAGES: true - TARGET_REGISTRY: ${{ needs.determine-docker-build-metadata.outputs.targetRegistry }} - - rust-images-performance: - needs: [permission-check, determine-docker-build-metadata] - uses: aptos-labs/aptos-core/.github/workflows/workflow-run-docker-rust-build.yaml@main - if: | - github.event_name == 'push' || - github.event_name == 'workflow_dispatch' || - contains(github.event.pull_request.labels.*.name, 'CICD:build-performance-images') - secrets: inherit - with: - GIT_SHA: ${{ needs.determine-docker-build-metadata.outputs.gitSha }} - TARGET_CACHE_ID: ${{ needs.determine-docker-build-metadata.outputs.targetCacheId }} - PROFILE: performance - BUILD_ADDL_TESTING_IMAGES: true - TARGET_REGISTRY: ${{ needs.determine-docker-build-metadata.outputs.targetRegistry }} - - rust-images-consensus-only-perf-test: - needs: [permission-check, determine-docker-build-metadata] - if: | - contains(github.event.pull_request.labels.*.name, 'CICD:build-consensus-only-image') || - contains(github.event.pull_request.labels.*.name, 'CICD:run-consensus-only-perf-test') - uses: aptos-labs/aptos-core/.github/workflows/workflow-run-docker-rust-build.yaml@main - secrets: inherit - with: - GIT_SHA: ${{ needs.determine-docker-build-metadata.outputs.gitSha }} - TARGET_CACHE_ID: ${{ needs.determine-docker-build-metadata.outputs.targetCacheId }} - PROFILE: release - FEATURES: consensus-only-perf-test - BUILD_ADDL_TESTING_IMAGES: true - TARGET_REGISTRY: ${{ needs.determine-docker-build-metadata.outputs.targetRegistry }} - - # This is a PR required job. - node-api-compatibility-tests: - needs: [permission-check, rust-images, determine-docker-build-metadata, file_change_determinator] # runs with the default release docker build variant "rust-images" - if: | - ( - github.event_name == 'push' || - github.event_name == 'workflow_dispatch' || - contains(github.event.pull_request.labels.*.name, 'CICD:run-e2e-tests') || - github.event.pull_request.auto_merge != null) || - contains(github.event.pull_request.body, '#e2e' - ) - uses: ./.github/workflows/node-api-compatibility-tests.yaml - secrets: inherit - with: - GIT_SHA: ${{ needs.determine-docker-build-metadata.outputs.gitSha }} - SKIP_JOB: ${{ needs.file_change_determinator.outputs.only_docs_changed == 'true' }} - - # This is a PR required job. - cli-e2e-tests: - needs: [permission-check, rust-images, determine-docker-build-metadata, file_change_determinator] # runs with the default release docker build variant "rust-images" - if: | - ( - github.event_name == 'push' || - github.event_name == 'workflow_dispatch' || - contains(github.event.pull_request.labels.*.name, 'CICD:run-e2e-tests') || - github.event.pull_request.auto_merge != null) || - contains(github.event.pull_request.body, '#e2e' - ) - uses: aptos-labs/aptos-core/.github/workflows/cli-e2e-tests.yaml@main - secrets: inherit - with: - GIT_SHA: ${{ needs.determine-docker-build-metadata.outputs.gitSha }} - SKIP_JOB: ${{ needs.file_change_determinator.outputs.only_docs_changed == 'true' }} - - faucet-tests-main: - needs: [permission-check, rust-images, determine-docker-build-metadata, file_change_determinator] # runs with the default release docker build variant "rust-images" - if: | - ( - github.event_name == 'push' || - github.event_name == 'workflow_dispatch' || - contains(github.event.pull_request.labels.*.name, 'CICD:run-e2e-tests') || - github.event.pull_request.auto_merge != null) || - contains(github.event.pull_request.body, '#e2e' - ) - uses: ./.github/workflows/faucet-tests-main.yaml - secrets: inherit - with: - GIT_SHA: ${{ needs.determine-docker-build-metadata.outputs.gitSha }} - SKIP_JOB: ${{ needs.file_change_determinator.outputs.only_docs_changed == 'true' }} - - indexer-grpc-e2e-tests: - needs: [permission-check, rust-images, determine-docker-build-metadata] # runs with the default release docker build variant "rust-images" - if: | - github.event_name == 'workflow_dispatch' || - contains(github.event.pull_request.labels.*.name, 'CICD:run-e2e-tests') || - contains(github.event.pull_request.body, '#e2e') - uses: aptos-labs/aptos-core/.github/workflows/docker-indexer-grpc-test.yaml@main - secrets: inherit - with: - GIT_SHA: ${{ needs.determine-docker-build-metadata.outputs.gitSha }} - - # This is a PR required job. - forge-e2e-test: - needs: - - permission-check - - determine-docker-build-metadata - - rust-images - - rust-images-failpoints - - rust-images-performance - - rust-images-consensus-only-perf-test - - file_change_determinator - if: | - !failure() && !cancelled() && needs.permission-check.result == 'success' && ( - (github.event_name == 'push' && github.ref_name != 'main') || - github.event_name == 'workflow_dispatch' || - contains(github.event.pull_request.labels.*.name, 'CICD:run-e2e-tests') || - contains(github.event.pull_request.labels.*.name, 'CICD:run-forge-e2e-perf') || - github.event.pull_request.auto_merge != null || - contains(github.event.pull_request.body, '#e2e') - ) - uses: aptos-labs/aptos-core/.github/workflows/workflow-run-forge.yaml@main - secrets: inherit - with: - GIT_SHA: ${{ needs.determine-docker-build-metadata.outputs.gitSha }} - FORGE_TEST_SUITE: realistic_env_max_load - IMAGE_TAG: ${{ needs.determine-docker-build-metadata.outputs.gitSha }} - FORGE_RUNNER_DURATION_SECS: 480 - COMMENT_HEADER: forge-e2e - # Use the cache ID as the Forge namespace so we can limit Forge test concurrency on k8s, since Forge - # test lifecycle is separate from that of GHA. This protects us from the case where many Forge tests are triggered - # by this GHA. If there is a Forge namespace collision, Forge will pre-empt the existing test running in the namespace. - FORGE_NAMESPACE: forge-e2e-${{ needs.determine-docker-build-metadata.outputs.targetCacheId }} - SKIP_JOB: ${{ needs.file_change_determinator.outputs.only_docs_changed == 'true' }} - - # Run e2e compat test against testnet branch. This is a PR required job. - forge-compat-test: - needs: - - permission-check - - determine-docker-build-metadata - - rust-images - - rust-images-failpoints - - rust-images-performance - - rust-images-consensus-only-perf-test - - file_change_determinator - if: | - !failure() && !cancelled() && needs.permission-check.result == 'success' && ( - (github.event_name == 'push' && github.ref_name != 'main') || - github.event_name == 'workflow_dispatch' || - contains(github.event.pull_request.labels.*.name, 'CICD:run-e2e-tests') || - github.event.pull_request.auto_merge != null || - contains(github.event.pull_request.body, '#e2e') - ) - uses: aptos-labs/aptos-core/.github/workflows/workflow-run-forge.yaml@main - secrets: inherit - with: - GIT_SHA: ${{ needs.determine-docker-build-metadata.outputs.gitSha }} - FORGE_TEST_SUITE: compat - IMAGE_TAG: 1c2ee7082d6eff8c811ee25d6f5a7d00860a75d5 #aptos-node-v1.16.0 - FORGE_RUNNER_DURATION_SECS: 300 - COMMENT_HEADER: forge-compat - FORGE_NAMESPACE: forge-compat-${{ needs.determine-docker-build-metadata.outputs.targetCacheId }} - SKIP_JOB: ${{ needs.file_change_determinator.outputs.only_docs_changed == 'true' }} - - # Run forge framework upgradability test. This is a PR required job. - forge-framework-upgrade-test: - needs: - - permission-check - - determine-docker-build-metadata - - rust-images - - rust-images-failpoints - - rust-images-performance - - rust-images-consensus-only-perf-test - - test-target-determinator - if: | - !failure() && !cancelled() && needs.permission-check.result == 'success' && ( - (github.event_name == 'push' && github.ref_name != 'main') || - github.event_name == 'workflow_dispatch' || - contains(github.event.pull_request.labels.*.name, 'CICD:run-framework-upgrade-test') || - github.event.pull_request.auto_merge != null - ) - uses: aptos-labs/aptos-core/.github/workflows/workflow-run-forge.yaml@main - secrets: inherit - with: - GIT_SHA: ${{ needs.determine-docker-build-metadata.outputs.gitSha }} - FORGE_TEST_SUITE: framework_upgrade - IMAGE_TAG: 1c2ee7082d6eff8c811ee25d6f5a7d00860a75d5 #aptos-node-v1.16.0 - FORGE_RUNNER_DURATION_SECS: 3600 - COMMENT_HEADER: forge-framework-upgrade - FORGE_NAMESPACE: forge-framework-upgrade-${{ needs.determine-docker-build-metadata.outputs.targetCacheId }} - SKIP_JOB: ${{ !contains(github.event.pull_request.labels.*.name, 'CICD:run-framework-upgrade-test') && (needs.test-target-determinator.outputs.run_framework_upgrade_test == 'false') }} - - forge-consensus-only-perf-test: - needs: - - permission-check - - determine-docker-build-metadata - - rust-images - - rust-images-failpoints - - rust-images-performance - - rust-images-consensus-only-perf-test - if: | - !failure() && !cancelled() && needs.permission-check.result == 'success' && - contains(github.event.pull_request.labels.*.name, 'CICD:run-consensus-only-perf-test') - uses: aptos-labs/aptos-core/.github/workflows/workflow-run-forge.yaml@main - secrets: inherit - with: - GIT_SHA: ${{ needs.determine-docker-build-metadata.outputs.gitSha }} - FORGE_TEST_SUITE: consensus_only_realistic_env_max_tps - IMAGE_TAG: consensus_only_perf_test_${{ needs.determine-docker-build-metadata.outputs.gitSha }} - FORGE_RUNNER_DURATION_SECS: 300 - COMMENT_HEADER: consensus-only-realistic-env-max-tps - FORGE_NAMESPACE: forge-consensus-only-realistic-env-max-tps-${{ needs.determine-docker-build-metadata.outputs.targetCacheId }} - - # Run forge multiregion test. This test uses the multiregion forge cluster that deploys pods in three GCP regions. - forge-multiregion-test: - needs: - - permission-check - - determine-docker-build-metadata - - rust-images - - rust-images-failpoints - - rust-images-performance - - rust-images-consensus-only-perf-test - if: | - !failure() && !cancelled() && needs.permission-check.result == 'success' && - contains(github.event.pull_request.labels.*.name, 'CICD:run-multiregion-test') - uses: aptos-labs/aptos-core/.github/workflows/workflow-run-forge.yaml@main - secrets: inherit - with: - GIT_SHA: ${{ needs.determine-docker-build-metadata.outputs.gitSha }} - FORGE_TEST_SUITE: multiregion_benchmark_test - IMAGE_TAG: ${{ needs.determine-docker-build-metadata.outputs.gitSha }} - FORGE_RUNNER_DURATION_SECS: 300 - COMMENT_HEADER: forge-multiregion-test - FORGE_NAMESPACE: forge-multiregion-test-${{ needs.determine-docker-build-metadata.outputs.targetCacheId }} - FORGE_CLUSTER_NAME: forge-multiregion diff --git a/.github/workflows/docker-indexer-grpc-test.yaml b/.github/workflows/docker-indexer-grpc-test.yaml deleted file mode 100644 index dc78a9dc7697e..0000000000000 --- a/.github/workflows/docker-indexer-grpc-test.yaml +++ /dev/null @@ -1,54 +0,0 @@ -name: "Docker Indexer gRPC test" -on: - pull_request: - paths: - - "docker/compose/indexer-grpc/*.yaml" - workflow_call: - inputs: - GIT_SHA: - required: true - type: string - description: Use this to override the git SHA1, branch name (e.g. devnet) or tag to pull docker images with - -jobs: - test-indexer-grpc-docker-compose: - runs-on: ubuntu-latest - permissions: - contents: read - id-token: write - env: - VALIDATOR_IMAGE_REPO: ${{ vars.GCP_DOCKER_ARTIFACT_REPO }}/validator - FAUCET_IMAGE_REPO: ${{ vars.GCP_DOCKER_ARTIFACT_REPO }}/faucet - INDEXER_GRPC_IMAGE_REPO: ${{ vars.GCP_DOCKER_ARTIFACT_REPO }}/indexer-grpc - IMAGE_TAG: ${{ inputs.GIT_SHA || 'devnet' }} # hardcode to a known good build when not running on workflow_call - - steps: - - uses: actions/checkout@v3 - with: - ref: ${{ inputs.GIT_SHA || github.event.pull_request.head.sha || github.sha }} - - - uses: aptos-labs/aptos-core/.github/actions/docker-setup@main - with: - GCP_WORKLOAD_IDENTITY_PROVIDER: ${{ secrets.GCP_WORKLOAD_IDENTITY_PROVIDER }} - GCP_SERVICE_ACCOUNT_EMAIL: ${{ secrets.GCP_SERVICE_ACCOUNT_EMAIL }} - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - AWS_DOCKER_ARTIFACT_REPO: ${{ secrets.AWS_DOCKER_ARTIFACT_REPO }} - GIT_CREDENTIALS: ${{ secrets.GIT_CREDENTIALS }} - - - name: Install grpcurl - uses: aptos-labs/aptos-core/.github/actions/install-grpcurl@main - - - name: Set up and verify indexer GRPC local docker - shell: bash - run: ./testsuite/indexer_grpc_local.py --verbose start - - - name: Print docker-compose validator-testnet logs on failure - if: ${{ failure() }} - working-directory: docker/compose/validator-testnet - run: docker-compose logs - - - name: Print docker-compose indexer-grpc logs on failure - if: ${{ failure() }} - working-directory: docker/compose/indexer-grpc - run: docker-compose logs diff --git a/.github/workflows/docker-update-images.yaml b/.github/workflows/docker-update-images.yaml deleted file mode 100644 index 1e93f2cf4c029..0000000000000 --- a/.github/workflows/docker-update-images.yaml +++ /dev/null @@ -1,46 +0,0 @@ -name: Docker Update Images - -permissions: - pull-requests: write - contents: write - -on: - workflow_dispatch: - - schedule: - - cron: "0 9 * * 1" # once a week - - pull_request: - paths: - - scripts/update_docker_images.py - - .github/workflows/docker-update-images.yaml - -jobs: - update: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - - - name: Login to Docker Hub - uses: docker/login-action@v2 - with: - username: ${{ secrets.ENV_DOCKERHUB_USERNAME }} - password: ${{ secrets.ENV_DOCKERHUB_PASSWORD }} - - - name: Check and pin updates (if any) - id: check_update - run: python3 scripts/update_docker_images.py - - - name: Create Pull Request - if: ${{ steps.check_update.outputs.NEED_UPDATE == 'True' }} - uses: peter-evans/create-pull-request@a4f52f8033a6168103c2538976c07b467e8163bc # pin@v6.0.1 - with: - commit-message: "Update Docker images" - title: "Update Docker images" - body: "Update Docker images. Generated by the Docker Update Images workflow." - base: main - branch: "docker-update-images" - delete-branch: true - labels: | - CICD:run-e2e-tests diff --git a/.github/workflows/execution-performance.yaml b/.github/workflows/execution-performance.yaml deleted file mode 100644 index 37064dfba35ca..0000000000000 --- a/.github/workflows/execution-performance.yaml +++ /dev/null @@ -1,28 +0,0 @@ -name: "execution-performance" -on: - workflow_dispatch: - pull_request: - types: [labeled, opened, synchronize, reopened, auto_merge_enabled] - schedule: - - cron: "0 */4 * * *" # This runs every four hours - -jobs: - execution-performance: - if: | # Only run on each PR once an appropriate event occurs - ( - github.event_name == 'workflow_dispatch' || - github.event_name == 'schedule' || - contains(github.event.pull_request.labels.*.name, 'CICD:run-e2e-tests') || - contains(github.event.pull_request.labels.*.name, 'CICD:run-execution-performance-test') || - contains(github.event.pull_request.labels.*.name, 'CICD:run-execution-performance-full-test') || - github.event.pull_request.auto_merge != null - ) - uses: ./.github/workflows/workflow-run-execution-performance.yaml - secrets: inherit - with: - GIT_SHA: ${{ github.event.pull_request.head.sha || github.sha }} - RUNNER_NAME: executor-benchmark-runner - # Run all tests only on the scheduled cadence, or explicitly requested - IS_FULL_RUN: ${{ github.event_name == 'schedule' || contains(github.event.pull_request.labels.*.name, 'CICD:run-execution-performance-full-test') }} - # Ignore target determination if on the scheduled cadence, or explicitly requested - IGNORE_TARGET_DETERMINATION: ${{ github.event_name == 'schedule' || contains(github.event.pull_request.labels.*.name, 'CICD:run-execution-performance-test') || contains(github.event.pull_request.labels.*.name, 'CICD:run-execution-performance-full-test') }} diff --git a/.github/workflows/faucet-tests-main.yaml b/.github/workflows/faucet-tests-main.yaml deleted file mode 100644 index 0ca51a2f84708..0000000000000 --- a/.github/workflows/faucet-tests-main.yaml +++ /dev/null @@ -1,74 +0,0 @@ -## IMPORTANT NOTE TO EDITORS OF THIS FILE ## - -## If you are trying to change how this CI works, you MUST go read the important -## note at the top of docker-build-test.yaml. In short, to test this, you must temporarily -## change docker-build-test to use the pull_request trigger instead of pull_request_target. - -## Make sure to add the CICD:CICD:build-images and CICD:run-e2e-tests labels to test -## this within an in-review PR. - -## If the above approach is too slow (since you have to wait for the rust images -## to build), you can cut the iteration time dramatically by changing the envs -## - Replace env.IMAGE_TAG for a known image tag -## - env.GIT_SHA will resolve to that of your PR branch - -# These tests ensure that changes to the node don't break compatibility with the faucet. -# -# For tests that prevent changes to the faucet breaking compatibility with the production -# networks, see faucet-tests-prod. -# -# This test uses the node image built from the previous step, hence the workflow_call -# trigger. - -name: "Faucet Integration Tests: Main" -on: - # This is called from within the docker-build-test.yaml workflow since we depend - # on the images having been built before this workflow runs. - workflow_call: - inputs: - GIT_SHA: - required: true - type: string - description: Use this to override the git SHA1, branch name (e.g. devnet) or tag to release the SDK from - SKIP_JOB: - required: false - default: false - type: boolean - description: Set to true to skip this job. Useful for PRs that don't require this workflow. - -env: - # This is the docker image tag that will be used for the SDK release. - # It is also used to pull the docker images for the CI. - IMAGE_TAG: ${{ inputs.GIT_SHA }} - GIT_SHA: ${{ inputs.GIT_SHA || github.event.pull_request.head.sha || github.sha }} # default to PR branch sha when not running on workflow_call - -jobs: - # These tests ensure that the faucet works with a node built from main. If we only - # upgrade devnet if this job is green and we always update the faucet image alongside - # the image for the faucet private fullnode, the faucet and fullnode should always - # be compatible in production. - run-tests-main: - if: contains(github.event.pull_request.labels.*.name, 'CICD:non-required-tests') - runs-on: runs-on,cpu=64,family=c7,hdd=500,image=aptos-ubuntu-x64,run-id=${{ github.run_id }} - steps: - - uses: actions/checkout@v3 - if: ${{ !inputs.SKIP_JOB }} - with: - ref: ${{ env.GIT_SHA }} - - - uses: aptos-labs/aptos-core/.github/actions/docker-setup@main - if: ${{ !inputs.SKIP_JOB }} - with: - GCP_WORKLOAD_IDENTITY_PROVIDER: ${{ secrets.GCP_WORKLOAD_IDENTITY_PROVIDER }} - GCP_SERVICE_ACCOUNT_EMAIL: ${{ secrets.GCP_SERVICE_ACCOUNT_EMAIL }} - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - AWS_DOCKER_ARTIFACT_REPO: ${{ secrets.AWS_DOCKER_ARTIFACT_REPO }} - GIT_CREDENTIALS: ${{ secrets.GIT_CREDENTIALS }} - - - uses: ./.github/actions/run-faucet-tests - if: ${{ !inputs.SKIP_JOB }} - with: - NETWORK: custom - IMAGE_TAG: ${{ env.IMAGE_TAG }} - GCP_DOCKER_ARTIFACT_REPO: ${{ vars.GCP_DOCKER_ARTIFACT_REPO }} diff --git a/.github/workflows/faucet-tests-prod.yaml b/.github/workflows/faucet-tests-prod.yaml deleted file mode 100644 index 940ef883a1e20..0000000000000 --- a/.github/workflows/faucet-tests-prod.yaml +++ /dev/null @@ -1,77 +0,0 @@ -# These tests ensure that changes to the faucet itself or its code dependencies don't -# cause the faucet to stop working with the production (devnet and testnet) networks. -# -# For tests that prevent the node from breaking compatibility with the faucet, see -# faucet-tests-main. -# -# These tests use node images built from devnet / testnet so we don't need to use -# workflow_call to wait for the image build to finish. - -name: "Faucet Integration Tests: Prod" -on: - pull_request_target: - types: [labeled, opened, synchronize, reopened, auto_merge_enabled] - push: - branches: - - main - -permissions: - contents: read - id-token: write # Required for GCP Workload Identity federation which we use to login into Google Artifact Registry - -jobs: - # Note on the job-level `if` conditions: - # This workflow is designed such that we run subsequent jobs only when a 'push' - # triggered the workflow or on 'pull_request's which have set auto_merge=true - # or have the label "CICD:run-e2e-tests". - permission-check: - runs-on: ubuntu-latest - steps: - - name: Check repository permission for user which triggered workflow - uses: sushichop/action-repository-permission@13d208f5ae7a6a3fc0e5a7c2502c214983f0241c - with: - required-permission: write - comment-not-permitted: Sorry, you don't have permission to trigger this workflow. - - # These tests ensure that the faucet works with the nodes running on devnet. - run-tests-devnet: - if: contains(github.event.pull_request.labels.*.name, 'CICD:non-required-tests') - needs: [permission-check] - runs-on: runs-on,cpu=64,family=c7,hdd=500,image=aptos-ubuntu-x64,run-id=${{ github.run_id }} - steps: - - uses: actions/checkout@v3 - - uses: aptos-labs/aptos-core/.github/actions/docker-setup@main - with: - GCP_WORKLOAD_IDENTITY_PROVIDER: ${{ secrets.GCP_WORKLOAD_IDENTITY_PROVIDER }} - GCP_SERVICE_ACCOUNT_EMAIL: ${{ secrets.GCP_SERVICE_ACCOUNT_EMAIL }} - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - AWS_DOCKER_ARTIFACT_REPO: ${{ secrets.AWS_DOCKER_ARTIFACT_REPO }} - GIT_CREDENTIALS: ${{ secrets.GIT_CREDENTIALS }} - - uses: ./.github/actions/run-faucet-tests - with: - NETWORK: devnet - GCP_DOCKER_ARTIFACT_REPO: ${{ vars.GCP_DOCKER_ARTIFACT_REPO }} - - # These tests ensure that the faucet works with the nodes running on testnet. - run-tests-testnet: - if: contains(github.event.pull_request.labels.*.name, 'CICD:non-required-tests') - needs: [permission-check] - runs-on: runs-on,cpu=64,family=c7,hdd=500,image=aptos-ubuntu-x64,run-id=${{ github.run_id }} - permissions: - contents: read - id-token: write - steps: - - uses: actions/checkout@v3 - - uses: aptos-labs/aptos-core/.github/actions/docker-setup@main - with: - GCP_WORKLOAD_IDENTITY_PROVIDER: ${{ secrets.GCP_WORKLOAD_IDENTITY_PROVIDER }} - GCP_SERVICE_ACCOUNT_EMAIL: ${{ secrets.GCP_SERVICE_ACCOUNT_EMAIL }} - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - AWS_DOCKER_ARTIFACT_REPO: ${{ secrets.AWS_DOCKER_ARTIFACT_REPO }} - GIT_CREDENTIALS: ${{ secrets.GIT_CREDENTIALS }} - - uses: ./.github/actions/run-faucet-tests - with: - NETWORK: testnet - GCP_DOCKER_ARTIFACT_REPO: ${{ vars.GCP_DOCKER_ARTIFACT_REPO }} diff --git a/.github/workflows/find-packages-with-undeclared-feature-dependencies.yaml b/.github/workflows/find-packages-with-undeclared-feature-dependencies.yaml deleted file mode 100644 index 45dfe907189b5..0000000000000 --- a/.github/workflows/find-packages-with-undeclared-feature-dependencies.yaml +++ /dev/null @@ -1,11 +0,0 @@ -name: "Find Packages with undeclared feature dependencies" -on: - workflow_dispatch: - -jobs: - find-packages-with-undeclared-feature-dependencies: - runs-on: runs-on,cpu=64,family=c7,hdd=500,image=aptos-ubuntu-x64,run-id=${{ github.run_id }} - steps: - - uses: actions/checkout@v3 - - uses: aptos-labs/aptos-core/.github/actions/rust-setup@main - - run: scripts/find-packages-with-undeclared-feature-dependencies.sh diff --git a/.github/workflows/forge-pfn.yaml b/.github/workflows/forge-pfn.yaml deleted file mode 100644 index 7db14dd04ab1d..0000000000000 --- a/.github/workflows/forge-pfn.yaml +++ /dev/null @@ -1,170 +0,0 @@ -# Continuously run PFN forge tests against the latest main branch -name: Continuous Forge Tests - Public Fullnodes - -permissions: - issues: write - pull-requests: write - contents: read - id-token: write - actions: write # Required for workflow cancellation via check-aptos-core - -on: - # Allow triggering manually - workflow_dispatch: - inputs: - IMAGE_TAG: - required: false - type: string - description: The docker image tag to test. This may be a git SHA1, or a tag like "_". If not specified, Forge will find the latest build based on the git history (starting from GIT_SHA input) - GIT_SHA: - required: false - type: string - description: The git SHA1 to checkout. This affects the Forge test runner that is used. If not specified, the latest main will be used - pull_request: - paths: - - ".github/workflows/forge-pfn.yaml" - -env: - AWS_ACCOUNT_NUM: ${{ secrets.ENV_ECR_AWS_ACCOUNT_NUM }} - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - IMAGE_TAG: ${{ inputs.IMAGE_TAG }} # This is only used for workflow_dispatch, otherwise defaults to empty - AWS_REGION: us-west-2 - -jobs: - # This job determines the image tag and branch to test, and passes them to the other jobs. - # NOTE: this may be better as a separate workflow as the logic is quite complex but generalizable. - determine-test-metadata: - runs-on: ubuntu-latest - outputs: - IMAGE_TAG: ${{ steps.get-docker-image-tag.outputs.IMAGE_TAG }} - BRANCH: ${{ steps.determine-test-branch.outputs.BRANCH }} - steps: - - uses: actions/checkout@v3 - - - name: Determine branch based on cadence - id: determine-test-branch - run: | - if [[ "${{ github.event_name }}" == "schedule" ]]; then - echo "Unknown schedule: ${{ github.event.schedule }}" - exit 1 - elif [[ "${{ github.event_name }}" == "push" ]]; then - echo "Branch: ${{ github.ref_name }}" - echo "BRANCH=${{ github.ref_name }}" >> $GITHUB_OUTPUT - else - echo "Using GIT_SHA" - # on workflow_dispatch, this will simply use the inputs.GIT_SHA given (or the default) - # on pull_request, this will default to null and the following "checkout" step will use the PR's base branch - echo "BRANCH=${{ inputs.GIT_SHA }}" >> $GITHUB_OUTPUT - fi - - - uses: aptos-labs/aptos-core/.github/actions/check-aptos-core@main - with: - cancel-workflow: ${{ github.event_name == 'schedule' }} # Cancel the workflow if it is scheduled on a fork - - # actions/get-latest-docker-image-tag requires docker utilities and having authenticated to internal docker image registries - - uses: aptos-labs/aptos-core/.github/actions/docker-setup@main - id: docker-setup - with: - GCP_WORKLOAD_IDENTITY_PROVIDER: ${{ secrets.GCP_WORKLOAD_IDENTITY_PROVIDER }} - GCP_SERVICE_ACCOUNT_EMAIL: ${{ secrets.GCP_SERVICE_ACCOUNT_EMAIL }} - EXPORT_GCP_PROJECT_VARIABLES: "false" - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - AWS_DOCKER_ARTIFACT_REPO: ${{ secrets.AWS_DOCKER_ARTIFACT_REPO }} - GIT_CREDENTIALS: ${{ secrets.GIT_CREDENTIALS }} - - - uses: aptos-labs/aptos-core/.github/actions/get-latest-docker-image-tag@main - id: get-docker-image-tag - with: - branch: ${{ steps.determine-test-branch.outputs.BRANCH }} - variants: "failpoints performance" - - - name: Write summary - run: | - IMAGE_TAG=${{ steps.get-docker-image-tag.outputs.IMAGE_TAG }} - BRANCH=${{ steps.determine-test-branch.outputs.BRANCH }} - if [ -n "${BRANCH}" ]; then - echo "BRANCH: [${BRANCH}](https://github.com/${{ github.repository }}/tree/${BRANCH})" >> $GITHUB_STEP_SUMMARY - fi - echo "IMAGE_TAG: [${IMAGE_TAG}](https://github.com/${{ github.repository }}/commit/${IMAGE_TAG})" >> $GITHUB_STEP_SUMMARY - - ### Public fullnode tests - - # Measures PFN latencies with a constant TPS - run-forge-pfn-const-tps: - if: ${{ github.event_name != 'pull_request' }} - needs: determine-test-metadata - uses: aptos-labs/aptos-core/.github/workflows/workflow-run-forge.yaml@main - secrets: inherit - with: - IMAGE_TAG: ${{ needs.determine-test-metadata.outputs.IMAGE_TAG }} - FORGE_NAMESPACE: forge-pfn-const-tps-${{ needs.determine-test-metadata.outputs.IMAGE_TAG }} - FORGE_RUNNER_DURATION_SECS: 1800 # Run for 30 minutes - FORGE_TEST_SUITE: pfn_const_tps - POST_TO_SLACK: true - - # Measures PFN latencies with a constant TPS (with network chaos) - run-forge-pfn-const-tps-network-chaos: - if: ${{ github.event_name != 'pull_request' && always() }} - needs: [determine-test-metadata, run-forge-pfn-const-tps] # Only run after the previous job completes - uses: aptos-labs/aptos-core/.github/workflows/workflow-run-forge.yaml@main - secrets: inherit - with: - IMAGE_TAG: ${{ needs.determine-test-metadata.outputs.IMAGE_TAG }} - FORGE_NAMESPACE: forge-pfn-const-tps-with-network-chaos-${{ needs.determine-test-metadata.outputs.IMAGE_TAG }} - FORGE_RUNNER_DURATION_SECS: 1800 # Run for 30 minutes - FORGE_TEST_SUITE: pfn_const_tps_with_network_chaos - POST_TO_SLACK: true - - # Measures PFN latencies with a constant TPS (with a realistic environment) - run-forge-pfn-const-tps-realistic-env: - if: ${{ github.event_name != 'pull_request' && always() }} - needs: [determine-test-metadata, run-forge-pfn-const-tps-network-chaos] # Only run after the previous job completes - uses: aptos-labs/aptos-core/.github/workflows/workflow-run-forge.yaml@main - secrets: inherit - with: - IMAGE_TAG: ${{ needs.determine-test-metadata.outputs.IMAGE_TAG }} - FORGE_NAMESPACE: forge-pfn-const-tps-with-realistic-env-${{ needs.determine-test-metadata.outputs.IMAGE_TAG }} - FORGE_RUNNER_DURATION_SECS: 1800 # Run for 30 minutes - FORGE_TEST_SUITE: pfn_const_tps_with_realistic_env - POST_TO_SLACK: true - - # Measures max PFN throughput and latencies under load - run-forge-pfn-performance: - if: ${{ github.event_name != 'pull_request' && always() }} - needs: [determine-test-metadata, run-forge-pfn-const-tps-realistic-env] # Only run after the previous job completes - uses: aptos-labs/aptos-core/.github/workflows/workflow-run-forge.yaml@main - secrets: inherit - with: - IMAGE_TAG: ${{ needs.determine-test-metadata.outputs.IMAGE_TAG }} - FORGE_NAMESPACE: forge-pfn-performance-${{ needs.determine-test-metadata.outputs.IMAGE_TAG }} - FORGE_RUNNER_DURATION_SECS: 1800 # Run for 30 minutes - FORGE_TEST_SUITE: pfn_performance - POST_TO_SLACK: true - - # Measures max PFN throughput and latencies under load (with network chaos) - run-forge-pfn-performance-network-chaos: - if: ${{ github.event_name != 'pull_request' && always() }} - needs: [determine-test-metadata, run-forge-pfn-performance] # Only run after the previous job completes - uses: aptos-labs/aptos-core/.github/workflows/workflow-run-forge.yaml@main - secrets: inherit - with: - IMAGE_TAG: ${{ needs.determine-test-metadata.outputs.IMAGE_TAG }} - FORGE_NAMESPACE: forge-pfn-performance-with-network-chaos-${{ needs.determine-test-metadata.outputs.IMAGE_TAG }} - FORGE_RUNNER_DURATION_SECS: 1800 # Run for 30 minutes - FORGE_TEST_SUITE: pfn_performance_with_network_chaos - POST_TO_SLACK: true - - # Measures max PFN throughput and latencies under load (with a realistic environment) - run-forge-pfn-performance-realistic-env: - if: ${{ github.event_name != 'pull_request' && always() }} - needs: [determine-test-metadata, run-forge-pfn-performance-network-chaos] # Only run after the previous job completes - uses: aptos-labs/aptos-core/.github/workflows/workflow-run-forge.yaml@main - secrets: inherit - with: - IMAGE_TAG: ${{ needs.determine-test-metadata.outputs.IMAGE_TAG }} - FORGE_NAMESPACE: forge-pfn-performance-with-realistic-env-${{ needs.determine-test-metadata.outputs.IMAGE_TAG }} - FORGE_RUNNER_DURATION_SECS: 1800 # Run for 30 minutes - FORGE_TEST_SUITE: pfn_performance_with_realistic_env - POST_TO_SLACK: true diff --git a/.github/workflows/forge-stable.yaml b/.github/workflows/forge-stable.yaml deleted file mode 100644 index 2315e959a68d7..0000000000000 --- a/.github/workflows/forge-stable.yaml +++ /dev/null @@ -1,303 +0,0 @@ -# Continuously run stable forge tests against the latest main branch. -name: Continuous Forge Tests - Stable - -permissions: - issues: write - pull-requests: write - contents: read - id-token: write - actions: write #required for workflow cancellation via check-aptos-core - -concurrency: - group: forge-stable-${{ github.ref_name }} - cancel-in-progress: true - -on: - # Allow triggering manually - workflow_dispatch: - inputs: - IMAGE_TAG: - required: false - type: string - description: The docker image tag to test. This may be a git SHA1, or a tag like "_". If not specified, Forge will find the latest build based on the git history (starting from GIT_SHA input) - GIT_SHA: - required: false - type: string - description: The git SHA1 to checkout. This affects the Forge test runner that is used. If not specified, the latest main will be used - # NOTE: to support testing different branches on different schedules, you need to specify the cron schedule in the 'determine-test-branch' step as well below - # Reference: https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#schedule - schedule: - - cron: "0 22 * * 0,2,4" # The main branch cadence. This runs every Sun,Tues,Thurs - pull_request: - paths: - - ".github/workflows/forge-stable.yaml" - - "testsuite/find_latest_image.py" - -env: - AWS_ACCOUNT_NUM: ${{ secrets.ENV_ECR_AWS_ACCOUNT_NUM }} - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - IMAGE_TAG: ${{ inputs.IMAGE_TAG }} # this is only used for workflow_dispatch, otherwise defaults to empty - AWS_REGION: us-west-2 - -jobs: - # This job determines the image tag and branch to test, and passes them to the other jobs - # NOTE: this may be better as a separate workflow as the logic is quite complex but generalizable - determine-test-metadata: - runs-on: ubuntu-latest - outputs: - IMAGE_TAG: ${{ steps.get-docker-image-tag.outputs.IMAGE_TAG }} - BRANCH: ${{ steps.determine-test-branch.outputs.BRANCH }} - BRANCH_HASH: ${{ steps.hash-branch.outputs.BRANCH_HASH }} - steps: - - uses: actions/checkout@v3 - - - name: Determine branch based on cadence - id: determine-test-branch - # NOTE: the schedule cron MUST match the one in the 'on.schedule.cron' section above - run: | - if [[ "${{ github.event_name }}" == "schedule" ]]; then - if [[ "${{ github.event.schedule }}" == "0 22 * * 0,2,4" ]]; then - echo "Branch: main" - echo "BRANCH=main" >> $GITHUB_OUTPUT - else - echo "Unknown schedule: ${{ github.event.schedule }}" - exit 1 - fi - elif [[ "${{ github.event_name }}" == "push" ]]; then - echo "Branch: ${{ github.ref_name }}" - echo "BRANCH=${{ github.ref_name }}" >> $GITHUB_OUTPUT - else - echo "Using GIT_SHA" - # on workflow_dispatch, this will simply use the inputs.GIT_SHA given (or the default) - # on pull_request, this will default to null and the following "checkout" step will use the PR's base branch - echo "BRANCH=${{ inputs.GIT_SHA }}" >> $GITHUB_OUTPUT - fi - - # Use the branch hash instead of the full branch name to stay under kubernetes namespace length limit - - name: Hash the branch - id: hash-branch - run: | - # If BRANCH is empty, default to "main" - if [ -z "${{ steps.determine-test-branch.outputs.BRANCH }}" ]; then - BRANCH="main" - else - BRANCH="${{ steps.determine-test-branch.outputs.BRANCH }}" - fi - - # Hashing the branch name - echo "BRANCH_HASH=$(echo -n "$BRANCH" | sha256sum | cut -c1-10)" >> $GITHUB_OUTPUT - - - uses: aptos-labs/aptos-core/.github/actions/check-aptos-core@main - with: - cancel-workflow: ${{ github.event_name == 'schedule' }} # Cancel the workflow if it is scheduled on a fork - - # actions/get-latest-docker-image-tag requires docker utilities and having authenticated to internal docker image registries - - uses: aptos-labs/aptos-core/.github/actions/docker-setup@main - id: docker-setup - with: - GCP_WORKLOAD_IDENTITY_PROVIDER: ${{ secrets.GCP_WORKLOAD_IDENTITY_PROVIDER }} - GCP_SERVICE_ACCOUNT_EMAIL: ${{ secrets.GCP_SERVICE_ACCOUNT_EMAIL }} - EXPORT_GCP_PROJECT_VARIABLES: "false" - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - AWS_DOCKER_ARTIFACT_REPO: ${{ secrets.AWS_DOCKER_ARTIFACT_REPO }} - GIT_CREDENTIALS: ${{ secrets.GIT_CREDENTIALS }} - - - uses: aptos-labs/aptos-core/.github/actions/get-latest-docker-image-tag@main - id: get-docker-image-tag - with: - branch: ${{ steps.determine-test-branch.outputs.BRANCH }} - variants: "failpoints performance" - - - name: Write summary - run: | - IMAGE_TAG=${{ steps.get-docker-image-tag.outputs.IMAGE_TAG }} - BRANCH=${{ steps.determine-test-branch.outputs.BRANCH }} - if [ -n "${BRANCH}" ]; then - echo "BRANCH: [${BRANCH}](https://github.com/${{ github.repository }}/tree/${BRANCH})" >> $GITHUB_STEP_SUMMARY - fi - echo "IMAGE_TAG: [${IMAGE_TAG}](https://github.com/${{ github.repository }}/commit/${IMAGE_TAG})" >> $GITHUB_STEP_SUMMARY - - ### Real-world-network tests. - # Run forge framework upgradability test. This is a PR required job. - run-forge-framework-upgrade-test: - if: ${{ github.event_name != 'pull_request' }} - needs: - - determine-test-metadata - uses: aptos-labs/aptos-core/.github/workflows/workflow-run-forge.yaml@main - secrets: inherit - with: - IMAGE_TAG: 1c2ee7082d6eff8c811ee25d6f5a7d00860a75d5 #aptos-node-v1.16.0 - FORGE_NAMESPACE: forge-framework-upgrade-${{ needs.determine-test-metadata.outputs.BRANCH_HASH }} - FORGE_RUNNER_DURATION_SECS: 7200 # Run for 2 hours - FORGE_TEST_SUITE: framework_upgrade - POST_TO_SLACK: true - - run-forge-realistic-env-max-load-long: - if: ${{ github.event_name != 'pull_request' && always() }} - needs: [determine-test-metadata, run-forge-framework-upgrade-test] # Only run after the previous job completes - uses: aptos-labs/aptos-core/.github/workflows/workflow-run-forge.yaml@main - secrets: inherit - with: - IMAGE_TAG: ${{ needs.determine-test-metadata.outputs.IMAGE_TAG }} - FORGE_NAMESPACE: forge-realistic-env-max-load-long-${{ needs.determine-test-metadata.outputs.BRANCH_HASH }} - FORGE_RUNNER_DURATION_SECS: 7200 # Run for 2 hours - FORGE_TEST_SUITE: realistic_env_max_load_large - POST_TO_SLACK: true - - run-forge-realistic-env-load-sweep: - if: ${{ github.event_name != 'pull_request' && always() }} - needs: [determine-test-metadata, run-forge-realistic-env-max-load-long] # Only run after the previous job completes - uses: aptos-labs/aptos-core/.github/workflows/workflow-run-forge.yaml@main - secrets: inherit - with: - IMAGE_TAG: ${{ needs.determine-test-metadata.outputs.IMAGE_TAG }} - FORGE_NAMESPACE: forge-realistic-env-load-sweep-${{ needs.determine-test-metadata.outputs.BRANCH_HASH }} - FORGE_RUNNER_DURATION_SECS: 1500 # Run for 25 minutes (5 tests, each for 300 seconds) - FORGE_TEST_SUITE: realistic_env_load_sweep - POST_TO_SLACK: true - - run-forge-realistic-env-workload-sweep: - if: ${{ github.event_name != 'pull_request' && always() }} - needs: [determine-test-metadata, run-forge-realistic-env-load-sweep] # Only run after the previous job completes - uses: aptos-labs/aptos-core/.github/workflows/workflow-run-forge.yaml@main - secrets: inherit - with: - IMAGE_TAG: ${{ needs.determine-test-metadata.outputs.IMAGE_TAG }} - FORGE_NAMESPACE: forge-realistic-env-workload-sweep-${{ needs.determine-test-metadata.outputs.BRANCH_HASH }} - FORGE_RUNNER_DURATION_SECS: 1600 # Run for 26 minutes (4 tests, each for 400 seconds) - FORGE_TEST_SUITE: realistic_env_workload_sweep - POST_TO_SLACK: true - - run-forge-realistic-env-graceful-overload: - if: ${{ github.event_name != 'pull_request' && always() }} - needs: [determine-test-metadata, run-forge-realistic-env-workload-sweep] # Only run after the previous job completes - uses: aptos-labs/aptos-core/.github/workflows/workflow-run-forge.yaml@main - secrets: inherit - with: - IMAGE_TAG: ${{ needs.determine-test-metadata.outputs.IMAGE_TAG }} - FORGE_NAMESPACE: forge-realistic-env-graceful-overload-${{ needs.determine-test-metadata.outputs.BRANCH_HASH }} - FORGE_RUNNER_DURATION_SECS: 1200 # Run for 20 minutes - FORGE_TEST_SUITE: realistic_env_graceful_overload - POST_TO_SLACK: true - - run-forge-realistic-network-tuned-for-throughput: - if: ${{ github.event_name != 'pull_request' && always() }} - needs: [determine-test-metadata, run-forge-realistic-env-graceful-overload] # Only run after the previous job completes - uses: aptos-labs/aptos-core/.github/workflows/workflow-run-forge.yaml@main - secrets: inherit - with: - IMAGE_TAG: ${{ needs.determine-test-metadata.outputs.IMAGE_TAG }} - FORGE_NAMESPACE: forge-realistic-network-tuned-for-throughput-${{ needs.determine-test-metadata.outputs.BRANCH_HASH }} - FORGE_RUNNER_DURATION_SECS: 900 # Run for 15 minutes - FORGE_TEST_SUITE: realistic_network_tuned_for_throughput - FORGE_ENABLE_PERFORMANCE: true - POST_TO_SLACK: true - - ### Forge Correctness/Componenet/Stress tests - - run-forge-consensus-stress-test: - if: ${{ github.event_name != 'pull_request' && always() }} - needs: [determine-test-metadata, run-forge-realistic-network-tuned-for-throughput] # Only run after the previous job completes - uses: aptos-labs/aptos-core/.github/workflows/workflow-run-forge.yaml@main - secrets: inherit - with: - IMAGE_TAG: ${{ needs.determine-test-metadata.outputs.IMAGE_TAG }} - FORGE_NAMESPACE: forge-consensus-stress-test-${{ needs.determine-test-metadata.outputs.BRANCH_HASH }} - FORGE_RUNNER_DURATION_SECS: 2400 # Run for 40 minutes - FORGE_TEST_SUITE: consensus_stress_test - POST_TO_SLACK: true - - run-forge-workload-mix-test: - if: ${{ github.event_name != 'pull_request' && always() }} - needs: [determine-test-metadata, run-forge-consensus-stress-test] # Only run after the previous job completes - uses: aptos-labs/aptos-core/.github/workflows/workflow-run-forge.yaml@main - secrets: inherit - with: - IMAGE_TAG: ${{ needs.determine-test-metadata.outputs.IMAGE_TAG }} - FORGE_NAMESPACE: forge-workload-mix-test-${{ needs.determine-test-metadata.outputs.BRANCH_HASH }} - FORGE_RUNNER_DURATION_SECS: 900 # Run for 15 minutes - FORGE_TEST_SUITE: workload_mix - POST_TO_SLACK: true - - run-forge-single-vfn-perf: - if: ${{ github.event_name != 'pull_request' && always() }} - needs: [determine-test-metadata, run-forge-workload-mix-test] # Only run after the previous job completes - uses: aptos-labs/aptos-core/.github/workflows/workflow-run-forge.yaml@main - secrets: inherit - with: - IMAGE_TAG: ${{ needs.determine-test-metadata.outputs.IMAGE_TAG }} - FORGE_NAMESPACE: forge-continuous-e2e-single-vfn-${{ needs.determine-test-metadata.outputs.BRANCH_HASH }} - FORGE_RUNNER_DURATION_SECS: 480 # Run for 8 minutes - FORGE_TEST_SUITE: single_vfn_perf - POST_TO_SLACK: true - - run-forge-fullnode-reboot-stress-test: - if: ${{ github.event_name != 'pull_request' && always() }} - needs: [determine-test-metadata, run-forge-single-vfn-perf] # Only run after the previous job completes - uses: aptos-labs/aptos-core/.github/workflows/workflow-run-forge.yaml@main - secrets: inherit - with: - IMAGE_TAG: ${{ needs.determine-test-metadata.outputs.IMAGE_TAG }} - FORGE_NAMESPACE: forge-fullnode-reboot-stress-${{ needs.determine-test-metadata.outputs.BRANCH_HASH }} - FORGE_RUNNER_DURATION_SECS: 1800 # Run for 30 minutes - FORGE_TEST_SUITE: fullnode_reboot_stress_test - POST_TO_SLACK: true - - ### Compatibility Forge tests - - run-forge-compat: - if: ${{ github.event_name != 'pull_request' && always() }} - needs: [determine-test-metadata, run-forge-fullnode-reboot-stress-test] # Only run after the previous job completes - uses: aptos-labs/aptos-core/.github/workflows/workflow-run-forge.yaml@main - secrets: inherit - with: - FORGE_NAMESPACE: forge-compat-${{ needs.determine-test-metadata.outputs.BRANCH_HASH }} - FORGE_RUNNER_DURATION_SECS: 300 # Run for 5 minutes - # This will upgrade from testnet branch to the latest main - FORGE_TEST_SUITE: compat - IMAGE_TAG: 1c2ee7082d6eff8c811ee25d6f5a7d00860a75d5 #aptos-node-v1.16.0 - GIT_SHA: ${{ needs.determine-test-metadata.outputs.IMAGE_TAG }} # this is the git ref to checkout - POST_TO_SLACK: true - - ### Changing working quorum Forge tests - - run-forge-changing-working-quorum-test: - if: ${{ github.event_name != 'pull_request' && always() }} - needs: [determine-test-metadata, run-forge-compat] # Only run after the previous job completes - uses: aptos-labs/aptos-core/.github/workflows/workflow-run-forge.yaml@main - secrets: inherit - with: - IMAGE_TAG: ${{ needs.determine-test-metadata.outputs.IMAGE_TAG }} - FORGE_NAMESPACE: forge-changing-working-quorum-test-${{ needs.determine-test-metadata.outputs.BRANCH_HASH }} - FORGE_RUNNER_DURATION_SECS: 1200 # Run for 20 minutes - FORGE_TEST_SUITE: changing_working_quorum_test - POST_TO_SLACK: true - FORGE_ENABLE_FAILPOINTS: true - - run-forge-changing-working-quorum-test-high-load: - if: ${{ github.event_name != 'pull_request' && always() }} - needs: [determine-test-metadata, run-forge-changing-working-quorum-test] # Only run after the previous job completes - uses: aptos-labs/aptos-core/.github/workflows/workflow-run-forge.yaml@main - secrets: inherit - with: - IMAGE_TAG: ${{ needs.determine-test-metadata.outputs.IMAGE_TAG }} - FORGE_NAMESPACE: forge-changing-working-quorum-test-high-load-${{ needs.determine-test-metadata.outputs.BRANCH_HASH }} - FORGE_RUNNER_DURATION_SECS: 900 # Run for 15 minutes - FORGE_TEST_SUITE: changing_working_quorum_test_high_load - POST_TO_SLACK: true - FORGE_ENABLE_FAILPOINTS: true - - # Measures PFN latencies with a constant TPS (with a realistic environment) - run-forge-pfn-const-tps-realistic-env: - if: ${{ github.event_name != 'pull_request' && always() }} - needs: [determine-test-metadata, run-forge-changing-working-quorum-test-high-load] # Only run after the previous job completes - uses: aptos-labs/aptos-core/.github/workflows/workflow-run-forge.yaml@main - secrets: inherit - with: - IMAGE_TAG: ${{ needs.determine-test-metadata.outputs.IMAGE_TAG }} - FORGE_NAMESPACE: forge-pfn-const-tps-with-realistic-env-${{ needs.determine-test-metadata.outputs.BRANCH_HASH }} - FORGE_RUNNER_DURATION_SECS: 900 # Run for 15 minutes - FORGE_TEST_SUITE: pfn_const_tps_with_realistic_env - POST_TO_SLACK: true diff --git a/.github/workflows/forge-state-sync.yaml b/.github/workflows/forge-state-sync.yaml deleted file mode 100644 index c9b6e2afc72b5..0000000000000 --- a/.github/workflows/forge-state-sync.yaml +++ /dev/null @@ -1,142 +0,0 @@ -# Continuously run state sync forge tests against the latest main branch -name: Continuous Forge Tests - State Sync - -permissions: - issues: write - pull-requests: write - contents: read - id-token: write - actions: write # Required for workflow cancellation via check-aptos-core - -on: - # Allow triggering manually - workflow_dispatch: - inputs: - IMAGE_TAG: - required: false - type: string - description: The docker image tag to test. This may be a git SHA1, or a tag like "_". If not specified, Forge will find the latest build based on the git history (starting from GIT_SHA input) - GIT_SHA: - required: false - type: string - description: The git SHA1 to checkout. This affects the Forge test runner that is used. If not specified, the latest main will be used - pull_request: - paths: - - ".github/workflows/forge-state-sync.yaml" - -env: - AWS_ACCOUNT_NUM: ${{ secrets.ENV_ECR_AWS_ACCOUNT_NUM }} - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - IMAGE_TAG: ${{ inputs.IMAGE_TAG }} # This is only used for workflow_dispatch, otherwise defaults to empty - AWS_REGION: us-west-2 - -jobs: - # This job determines the image tag and branch to test, and passes them to the other jobs. - # NOTE: this may be better as a separate workflow as the logic is quite complex but generalizable. - determine-test-metadata: - runs-on: ubuntu-latest - outputs: - IMAGE_TAG: ${{ steps.get-docker-image-tag.outputs.IMAGE_TAG }} - BRANCH: ${{ steps.determine-test-branch.outputs.BRANCH }} - steps: - - name: Determine branch based on cadence - id: determine-test-branch - run: | - if [[ "${{ github.event_name }}" == "schedule" ]]; then - echo "Unknown schedule: ${{ github.event.schedule }}" - exit 1 - elif [[ "${{ github.event_name }}" == "push" ]]; then - echo "Branch: ${{ github.ref_name }}" - echo "BRANCH=${{ github.ref_name }}" >> $GITHUB_OUTPUT - else - echo "Using GIT_SHA" - # on workflow_dispatch, this will simply use the inputs.GIT_SHA given (or the default) - # on pull_request, this will default to null and the following "checkout" step will use the PR's base branch - echo "BRANCH=${{ inputs.GIT_SHA }}" >> $GITHUB_OUTPUT - fi - - - uses: aptos-labs/aptos-core/.github/actions/check-aptos-core@main - with: - cancel-workflow: ${{ github.event_name == 'schedule' }} # Cancel the workflow if it is scheduled on a fork - - # actions/get-latest-docker-image-tag requires docker utilities and having authenticated to internal docker image registries - - uses: aptos-labs/aptos-core/.github/actions/docker-setup@main - id: docker-setup - with: - GCP_WORKLOAD_IDENTITY_PROVIDER: ${{ secrets.GCP_WORKLOAD_IDENTITY_PROVIDER }} - GCP_SERVICE_ACCOUNT_EMAIL: ${{ secrets.GCP_SERVICE_ACCOUNT_EMAIL }} - EXPORT_GCP_PROJECT_VARIABLES: "false" - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - AWS_DOCKER_ARTIFACT_REPO: ${{ secrets.AWS_DOCKER_ARTIFACT_REPO }} - GIT_CREDENTIALS: ${{ secrets.GIT_CREDENTIALS }} - - - uses: aptos-labs/aptos-core/.github/actions/get-latest-docker-image-tag@main - id: get-docker-image-tag - with: - branch: ${{ steps.determine-test-branch.outputs.BRANCH }} - variants: "failpoints performance" - - - name: Write summary - run: | - IMAGE_TAG=${{ steps.get-docker-image-tag.outputs.IMAGE_TAG }} - BRANCH=${{ steps.determine-test-branch.outputs.BRANCH }} - if [ -n "${BRANCH}" ]; then - echo "BRANCH: [${BRANCH}](https://github.com/${{ github.repository }}/tree/${BRANCH})" >> $GITHUB_STEP_SUMMARY - fi - echo "IMAGE_TAG: [${IMAGE_TAG}](https://github.com/${{ github.repository }}/commit/${IMAGE_TAG})" >> $GITHUB_STEP_SUMMARY - - ### State sync tests - - # Measures state sync performance for validators (output syncing) - run-forge-state-sync-perf-validator-test: - if: ${{ github.event_name != 'pull_request' }} - needs: determine-test-metadata - uses: aptos-labs/aptos-core/.github/workflows/workflow-run-forge.yaml@main - secrets: inherit - with: - IMAGE_TAG: ${{ needs.determine-test-metadata.outputs.IMAGE_TAG }} - FORGE_NAMESPACE: forge-state-sync-perf-validator-${{ needs.determine-test-metadata.outputs.IMAGE_TAG }} - FORGE_RUNNER_DURATION_SECS: 1800 # Run for 30 minutes - FORGE_TEST_SUITE: state_sync_perf_validators - POST_TO_SLACK: true - - # Measures state sync performance for validator fullnodes (execution syncing) - run-forge-state-sync-perf-fullnode-execute-test: - if: ${{ github.event_name != 'pull_request' && always() }} - needs: [determine-test-metadata, run-forge-state-sync-perf-validator-test] # Only run after the previous job completes - uses: aptos-labs/aptos-core/.github/workflows/workflow-run-forge.yaml@main - secrets: inherit - with: - IMAGE_TAG: ${{ needs.determine-test-metadata.outputs.IMAGE_TAG }} - FORGE_NAMESPACE: forge-state-sync-perf-fullnode-execute-${{ needs.determine-test-metadata.outputs.IMAGE_TAG }} - FORGE_RUNNER_DURATION_SECS: 1800 # Run for 30 minutes - FORGE_TEST_SUITE: state_sync_perf_fullnodes_execute_transactions - POST_TO_SLACK: true - - # Measures state sync performance for validator fullnodes (fast syncing) - run-forge-state-sync-perf-fullnode-fast-sync-test: - if: ${{ github.event_name != 'pull_request' && always() }} - needs: [determine-test-metadata, run-forge-state-sync-perf-fullnode-execute-test] # Only run after the previous job completes - uses: aptos-labs/aptos-core/.github/workflows/workflow-run-forge.yaml@main - secrets: inherit - with: - IMAGE_TAG: ${{ needs.determine-test-metadata.outputs.IMAGE_TAG }} - FORGE_NAMESPACE: forge-state-sync-perf-fullnode-fast-sync-${{ needs.determine-test-metadata.outputs.IMAGE_TAG }} - FORGE_RUNNER_DURATION_SECS: 1800 # Run for 30 minutes - FORGE_TEST_SUITE: state_sync_perf_fullnodes_fast_sync - POST_TO_SLACK: true - - # Measures state sync performance for validator fullnodes (output syncing) - run-forge-state-sync-perf-fullnode-apply-test: - if: ${{ github.event_name != 'pull_request' && always() }} - needs: [determine-test-metadata, run-forge-state-sync-perf-fullnode-fast-sync-test] # Only run after the previous job completes - uses: aptos-labs/aptos-core/.github/workflows/workflow-run-forge.yaml@main - secrets: inherit - with: - IMAGE_TAG: ${{ needs.determine-test-metadata.outputs.IMAGE_TAG }} - FORGE_NAMESPACE: forge-state-sync-perf-fullnode-apply-${{ needs.determine-test-metadata.outputs.IMAGE_TAG }} - FORGE_RUNNER_DURATION_SECS: 1800 # Run for 30 minutes - FORGE_TEST_SUITE: state_sync_perf_fullnodes_apply_outputs - POST_TO_SLACK: true diff --git a/.github/workflows/forge-unstable.yaml b/.github/workflows/forge-unstable.yaml deleted file mode 100644 index bfc926007220e..0000000000000 --- a/.github/workflows/forge-unstable.yaml +++ /dev/null @@ -1,173 +0,0 @@ -# Continuously run unstable forge tests against the latest main branch, to promote to stable. -name: Continuous Forge Tests - Unstable - -permissions: - issues: write - pull-requests: write - contents: read - id-token: write - actions: write #required for workflow cancellation via check-aptos-core - -on: - # Allow triggering manually - workflow_dispatch: - inputs: - IMAGE_TAG: - required: false - type: string - description: The docker image tag to test. This may be a git SHA1, or a tag like "_". If not specified, Forge will find the latest build based on the git history (starting from GIT_SHA input) - GIT_SHA: - required: false - type: string - description: The git SHA1 to checkout. This affects the Forge test runner that is used. If not specified, the latest main will be used - pull_request: - paths: - - ".github/workflows/forge-unstable.yaml" - -env: - AWS_ACCOUNT_NUM: ${{ secrets.ENV_ECR_AWS_ACCOUNT_NUM }} - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - AWS_REGION: us-west-2 - IMAGE_TAG: ${{ inputs.IMAGE_TAG }} # this is only used for workflow_dispatch, otherwise defaults to empty - -jobs: - # This job determines the image tag and branch to test, and passes them to the other jobs - # NOTE: this may be better as a separate workflow as the logic is quite complex but generalizable - determine-test-metadata: - runs-on: ubuntu-latest - outputs: - IMAGE_TAG: ${{ steps.get-docker-image-tag.outputs.IMAGE_TAG }} - BRANCH: ${{ steps.determine-test-branch.outputs.BRANCH }} - steps: - - uses: actions/checkout@v3 - - - name: Determine branch based on cadence - id: determine-test-branch - run: | - if [[ "${{ github.event_name }}" == "schedule" ]]; then - echo "Unknown schedule: ${{ github.event.schedule }}" - exit 1 - else - echo "Using GIT_SHA" - # on workflow_dispatch, this will simply use the inputs.GIT_SHA given (or the default) - # on pull_request, this will default to null and the following "checkout" step will use the PR's base branch - echo "BRANCH=${{ inputs.GIT_SHA }}" >> $GITHUB_OUTPUT - fi - - - uses: aptos-labs/aptos-core/.github/actions/check-aptos-core@main - with: - cancel-workflow: ${{ github.event_name == 'schedule' }} # Cancel the workflow if it is scheduled on a fork - - # actions/get-latest-docker-image-tag requires docker utilities and having authenticated to internal docker image registries - - uses: aptos-labs/aptos-core/.github/actions/docker-setup@main - id: docker-setup - with: - GCP_WORKLOAD_IDENTITY_PROVIDER: ${{ secrets.GCP_WORKLOAD_IDENTITY_PROVIDER }} - GCP_SERVICE_ACCOUNT_EMAIL: ${{ secrets.GCP_SERVICE_ACCOUNT_EMAIL }} - EXPORT_GCP_PROJECT_VARIABLES: "false" - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - AWS_DOCKER_ARTIFACT_REPO: ${{ secrets.AWS_DOCKER_ARTIFACT_REPO }} - GIT_CREDENTIALS: ${{ secrets.GIT_CREDENTIALS }} - - - uses: aptos-labs/aptos-core/.github/actions/get-latest-docker-image-tag@main - id: get-docker-image-tag - with: - branch: ${{ steps.determine-test-branch.outputs.BRANCH }} - variants: "failpoints performance" - - - name: Write summary - run: | - IMAGE_TAG=${{ steps.get-docker-image-tag.outputs.IMAGE_TAG }} - BRANCH=${{ steps.determine-test-branch.outputs.BRANCH }} - if [ -n "${BRANCH}" ]; then - echo "BRANCH: [${BRANCH}](https://github.com/${{ github.repository }}/tree/${BRANCH})" >> $GITHUB_STEP_SUMMARY - fi - echo "IMAGE_TAG: [${IMAGE_TAG}](https://github.com/${{ github.repository }}/commit/${IMAGE_TAG})" >> $GITHUB_STEP_SUMMARY - - forge-continuous: - if: ${{ github.event_name != 'pull_request' }} - needs: determine-test-metadata - uses: aptos-labs/aptos-core/.github/workflows/workflow-run-forge.yaml@main - secrets: inherit - with: - IMAGE_TAG: ${{ needs.determine-test-metadata.outputs.IMAGE_TAG }} - # GCP cluster - FORGE_CLUSTER_NAME: aptos-forge-1 - COMMENT_HEADER: forge-continuous - # This test suite is configured using the forge.py config test command - FORGE_TEST_SUITE: continuous - - run-forge-state-sync-slow-processing-catching-up-test: - if: ${{ github.event_name != 'pull_request' && always() }} - needs: [ determine-test-metadata, forge-continuous ] # Only run after the previous job completes - uses: aptos-labs/aptos-core/.github/workflows/workflow-run-forge.yaml@main - secrets: inherit - with: - IMAGE_TAG: ${{ needs.determine-test-metadata.outputs.IMAGE_TAG }} - # GCP cluster - FORGE_CLUSTER_NAME: aptos-forge-1 - FORGE_NAMESPACE: forge-state-sync-slow-processing-catching-up-test-${{ needs.determine-test-metadata.outputs.IMAGE_TAG }} - FORGE_RUNNER_DURATION_SECS: 900 # Run for 15 minutes - FORGE_TEST_SUITE: state_sync_slow_processing_catching_up - POST_TO_SLACK: true - FORGE_ENABLE_FAILPOINTS: true - - run-forge-twin-validator-test: - if: ${{ github.event_name != 'pull_request' && always() }} - needs: [ determine-test-metadata, run-forge-state-sync-slow-processing-catching-up-test ] # Only run after the previous job completes - uses: aptos-labs/aptos-core/.github/workflows/workflow-run-forge.yaml@main - secrets: inherit - with: - IMAGE_TAG: ${{ needs.determine-test-metadata.outputs.IMAGE_TAG }} - # GCP cluster - FORGE_CLUSTER_NAME: aptos-forge-1 - FORGE_NAMESPACE: forge-twin-validator-${{ needs.determine-test-metadata.outputs.IMAGE_TAG }} - FORGE_RUNNER_DURATION_SECS: 900 # Run for 15 minutes - FORGE_TEST_SUITE: twin_validator_test - POST_TO_SLACK: true - - run-forge-state-sync-failures-catching-up-test: - if: ${{ github.event_name != 'pull_request' && always() }} - needs: [ determine-test-metadata, run-forge-twin-validator-test ] # Only run after the previous job completes - uses: aptos-labs/aptos-core/.github/workflows/workflow-run-forge.yaml@main - secrets: inherit - with: - IMAGE_TAG: ${{ needs.determine-test-metadata.outputs.IMAGE_TAG }} - FORGE_NAMESPACE: forge-state-sync-failures-catching-up-test-${{ needs.determine-test-metadata.outputs.IMAGE_TAG }} - # GCP cluster - FORGE_CLUSTER_NAME: aptos-forge-1 - FORGE_RUNNER_DURATION_SECS: 900 # Run for 15 minutes - FORGE_TEST_SUITE: state_sync_failures_catching_up - FORGE_ENABLE_FAILPOINTS: true - POST_TO_SLACK: ${{ needs.determine-test-metadata.outputs.BRANCH == 'main' }} # only post to slack on main branch - - run-forge-validator-reboot-stress-test: - if: ${{ github.event_name != 'pull_request' && always() }} - needs: [ determine-test-metadata, run-forge-state-sync-failures-catching-up-test ] # Only run after the previous job completes - uses: aptos-labs/aptos-core/.github/workflows/workflow-run-forge.yaml@main - secrets: inherit - with: - IMAGE_TAG: ${{ needs.determine-test-metadata.outputs.IMAGE_TAG }} - # GCP cluster - FORGE_CLUSTER_NAME: aptos-forge-1 - FORGE_NAMESPACE: forge-validator-reboot-stress-${{ needs.determine-test-metadata.outputs.IMAGE_TAG }} - FORGE_RUNNER_DURATION_SECS: 2400 # Run for 40 minutes - FORGE_TEST_SUITE: validator_reboot_stress_test - POST_TO_SLACK: true - - run-forge-haproxy: - if: ${{ github.event_name != 'pull_request' && always() }} - needs: [ determine-test-metadata, run-forge-validator-reboot-stress-test ] # Only run after the previous job completes - uses: aptos-labs/aptos-core/.github/workflows/workflow-run-forge.yaml@main - secrets: inherit - with: - IMAGE_TAG: ${{ needs.determine-test-metadata.outputs.IMAGE_TAG }} - # GCP cluster - FORGE_CLUSTER_NAME: aptos-forge-1 - FORGE_NAMESPACE: forge-haproxy-${{ needs.determine-test-metadata.outputs.BRANCH_HASH }} - FORGE_RUNNER_DURATION_SECS: 600 # Run for 10 minutes - FORGE_ENABLE_HAPROXY: true - FORGE_TEST_SUITE: realistic_env_max_load - POST_TO_SLACK: true diff --git a/.github/workflows/fullnode-execute-devnet-main.yaml b/.github/workflows/fullnode-execute-devnet-main.yaml deleted file mode 100644 index b800d1f6f1074..0000000000000 --- a/.github/workflows/fullnode-execute-devnet-main.yaml +++ /dev/null @@ -1,34 +0,0 @@ -# This workflow runs a public fullnode using the `main` branch, -# connects the public fullnode to `devnet` and synchronizes the -# node using execution syncing to verify that nothing has been broken. - -name: "fullnode-execute-devnet-main" -on: - workflow_dispatch: - schedule: - - cron: "0 1 * * *" # Once a day, at 01:00 (UTC) - -permissions: - contents: read - id-token: write - actions: write #required for workflow cancellation via check-aptos-core - -jobs: - check-repo: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - uses: aptos-labs/aptos-core/.github/actions/check-aptos-core@main - with: - cancel-workflow: ${{ github.event_name == 'schedule' }} # Cancel the workflow if it is scheduled on a fork - - fullnode-execute-devnet-main: - needs: check-repo - uses: ./.github/workflows/run-fullnode-sync.yaml - secrets: inherit - with: - TEST_NAME: fullnode-execute-devnet-main - GIT_REF: main - NETWORK: devnet - BOOTSTRAPPING_MODE: ExecuteTransactionsFromGenesis - CONTINUOUS_SYNCING_MODE: ExecuteTransactions diff --git a/.github/workflows/fullnode-execute-devnet-stable.yaml b/.github/workflows/fullnode-execute-devnet-stable.yaml deleted file mode 100644 index e0d013b119335..0000000000000 --- a/.github/workflows/fullnode-execute-devnet-stable.yaml +++ /dev/null @@ -1,34 +0,0 @@ -# This workflow runs a public fullnode using the `devnet` branch, -# connects the public fullnode to `devnet` and synchronizes the -# node using execution syncing to verify that nothing has been broken. - -name: "fullnode-execute-devnet-stable" -on: - workflow_dispatch: - schedule: - - cron: "30 1 */3 * *" # Once every three days, at 01:30 (UTC) - -permissions: - contents: read - id-token: write - actions: write #required for workflow cancellation via check-aptos-core - -jobs: - check-repo: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - uses: aptos-labs/aptos-core/.github/actions/check-aptos-core@main - with: - cancel-workflow: ${{ github.event_name == 'schedule' }} # Cancel the workflow if it is scheduled on a fork - - fullnode-execute-devnet-stable: - needs: check-repo - uses: ./.github/workflows/run-fullnode-sync.yaml - secrets: inherit - with: - TEST_NAME: fullnode-execute-devnet-stable - GIT_REF: devnet - NETWORK: devnet - BOOTSTRAPPING_MODE: ExecuteTransactionsFromGenesis - CONTINUOUS_SYNCING_MODE: ExecuteTransactions diff --git a/.github/workflows/fullnode-fast-mainnet-main.yaml b/.github/workflows/fullnode-fast-mainnet-main.yaml deleted file mode 100644 index 2fe43beb8017a..0000000000000 --- a/.github/workflows/fullnode-fast-mainnet-main.yaml +++ /dev/null @@ -1,34 +0,0 @@ -# This workflow runs a public fullnode using the `main` branch, -# connects the public fullnode to `mainnet` and synchronizes the -# node using fast syncing to verify that nothing has been broken. - -name: "fullnode-fast-mainnet-main" -on: - workflow_dispatch: - schedule: - - cron: "0 2 * * *" # Once a day, at 02:00 (UTC) - -permissions: - contents: read - id-token: write - actions: write #required for workflow cancellation via check-aptos-core - -jobs: - check-repo: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - uses: aptos-labs/aptos-core/.github/actions/check-aptos-core@main - with: - cancel-workflow: ${{ github.event_name == 'schedule' }} # Cancel the workflow if it is scheduled on a fork - - fullnode-fast-mainnet-main: - needs: check-repo - uses: ./.github/workflows/run-fullnode-sync.yaml - secrets: inherit - with: - TEST_NAME: fullnode-fast-mainnet-main - GIT_REF: main - NETWORK: mainnet - BOOTSTRAPPING_MODE: DownloadLatestStates - CONTINUOUS_SYNCING_MODE: ExecuteTransactions diff --git a/.github/workflows/fullnode-fast-mainnet-stable.yaml b/.github/workflows/fullnode-fast-mainnet-stable.yaml deleted file mode 100644 index 53afaa9d55439..0000000000000 --- a/.github/workflows/fullnode-fast-mainnet-stable.yaml +++ /dev/null @@ -1,34 +0,0 @@ -# This workflow runs a public fullnode using the `mainnet` branch, -# connects the public fullnode to `mainnet` and synchronizes the -# node using fast syncing to verify that nothing has been broken. - -name: "fullnode-fast-mainnet-stable" -on: - workflow_dispatch: - schedule: - - cron: "30 2 */3 * *" # Once every three days, at 02:30 (UTC) - -permissions: - contents: read - id-token: write - actions: write #required for workflow cancellation via check-aptos-core - -jobs: - check-repo: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - uses: aptos-labs/aptos-core/.github/actions/check-aptos-core@main - with: - cancel-workflow: ${{ github.event_name == 'schedule' }} # Cancel the workflow if it is scheduled on a fork - - fullnode-fast-mainnet-stable: - needs: check-repo - uses: ./.github/workflows/run-fullnode-sync.yaml - secrets: inherit - with: - TEST_NAME: fullnode-fast-mainnet-stable - GIT_REF: mainnet - NETWORK: mainnet - BOOTSTRAPPING_MODE: DownloadLatestStates - CONTINUOUS_SYNCING_MODE: ExecuteTransactions diff --git a/.github/workflows/fullnode-fast-testnet-main.yaml b/.github/workflows/fullnode-fast-testnet-main.yaml deleted file mode 100644 index 56dbeefa84afd..0000000000000 --- a/.github/workflows/fullnode-fast-testnet-main.yaml +++ /dev/null @@ -1,34 +0,0 @@ -# This workflow runs a public fullnode using the `main` branch, -# connects the public fullnode to `testnet` and synchronizes the -# node using fast syncing to verify that nothing has been broken. - -name: "fullnode-fast-testnet-main" -on: - workflow_dispatch: - schedule: - - cron: "0 3 * * *" # Once a day, at 03:00 (UTC) - -permissions: - contents: read - id-token: write - actions: write #required for workflow cancellation via check-aptos-core - -jobs: - check-repo: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - uses: aptos-labs/aptos-core/.github/actions/check-aptos-core@main - with: - cancel-workflow: ${{ github.event_name == 'schedule' }} # Cancel the workflow if it is scheduled on a fork - - fullnode-fast-testnet-main: - needs: check-repo - uses: ./.github/workflows/run-fullnode-sync.yaml - secrets: inherit - with: - TEST_NAME: fullnode-fast-testnet-main - GIT_REF: main - NETWORK: testnet - BOOTSTRAPPING_MODE: DownloadLatestStates - CONTINUOUS_SYNCING_MODE: ExecuteTransactions diff --git a/.github/workflows/fullnode-fast-testnet-stable.yaml b/.github/workflows/fullnode-fast-testnet-stable.yaml deleted file mode 100644 index 924ef153d5b10..0000000000000 --- a/.github/workflows/fullnode-fast-testnet-stable.yaml +++ /dev/null @@ -1,34 +0,0 @@ -# This workflow runs a public fullnode using the `testnet` branch, -# connects the public fullnode to `testnet` and synchronizes the -# node using fast syncing to verify that nothing has been broken. - -name: "fullnode-fast-testnet-stable" -on: - workflow_dispatch: - schedule: - - cron: "30 3 */3 * *" # Once every three days, at 03:30 (UTC) - -permissions: - contents: read - id-token: write - actions: write #required for workflow cancellation via check-aptos-core - -jobs: - check-repo: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - uses: aptos-labs/aptos-core/.github/actions/check-aptos-core@main - with: - cancel-workflow: ${{ github.event_name == 'schedule' }} # Cancel the workflow if it is scheduled on a fork - - fullnode-fast-testnet-stable: - needs: check-repo - uses: ./.github/workflows/run-fullnode-sync.yaml - secrets: inherit - with: - TEST_NAME: fullnode-fast-testnet-stable - GIT_REF: testnet - NETWORK: testnet - BOOTSTRAPPING_MODE: DownloadLatestStates - CONTINUOUS_SYNCING_MODE: ExecuteTransactions diff --git a/.github/workflows/fullnode-intelligent-devnet-main.yaml b/.github/workflows/fullnode-intelligent-devnet-main.yaml deleted file mode 100644 index 465ce361276d9..0000000000000 --- a/.github/workflows/fullnode-intelligent-devnet-main.yaml +++ /dev/null @@ -1,35 +0,0 @@ -# This workflow runs a public fullnode using the `main` branch, -# connects the public fullnode to `devnet` and synchronizes the -# node using execution or output syncing to verify that nothing -# has been broken. - -name: "fullnode-intelligent-devnet-main" -on: - workflow_dispatch: - schedule: - - cron: "* 4 */3 * *" # Once every three days, at 04:00 (UTC) - -permissions: - contents: read - id-token: write - actions: write #required for workflow cancellation via check-aptos-core - -jobs: - check-repo: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - uses: aptos-labs/aptos-core/.github/actions/check-aptos-core@main - with: - cancel-workflow: ${{ github.event_name == 'schedule' }} # Cancel the workflow if it is scheduled on a fork - - fullnode-intelligent-devnet-main: - needs: check-repo - uses: ./.github/workflows/run-fullnode-sync.yaml - secrets: inherit - with: - TEST_NAME: fullnode-intelligent-devnet-main - GIT_REF: main - NETWORK: devnet - BOOTSTRAPPING_MODE: ExecuteOrApplyFromGenesis - CONTINUOUS_SYNCING_MODE: ExecuteTransactionsOrApplyOutputs diff --git a/.github/workflows/fullnode-intelligent-mainnet-main.yaml b/.github/workflows/fullnode-intelligent-mainnet-main.yaml deleted file mode 100644 index 4475d6dc60a7d..0000000000000 --- a/.github/workflows/fullnode-intelligent-mainnet-main.yaml +++ /dev/null @@ -1,35 +0,0 @@ -# This workflow runs a public fullnode using the `main` branch, -# connects the public fullnode to `mainnet` and synchronizes the -# node using execution or output syncing to verify that nothing -# has been broken. - -name: "fullnode-intelligent-mainnet-main" -on: - workflow_dispatch: - schedule: - - cron: "30 4 */3 * *" # Once every three days, at 04:30 (UTC) - -permissions: - contents: read - id-token: write - actions: write #required for workflow cancellation via check-aptos-core - -jobs: - check-repo: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - uses: aptos-labs/aptos-core/.github/actions/check-aptos-core@main - with: - cancel-workflow: ${{ github.event_name == 'schedule' }} # Cancel the workflow if it is scheduled on a fork - - fullnode-intelligent-mainnet-main: - needs: check-repo - uses: ./.github/workflows/run-fullnode-sync.yaml - secrets: inherit - with: - TEST_NAME: fullnode-intelligent-mainnet-main - GIT_REF: main - NETWORK: mainnet - BOOTSTRAPPING_MODE: DownloadLatestStates - CONTINUOUS_SYNCING_MODE: ExecuteTransactionsOrApplyOutputs diff --git a/.github/workflows/fullnode-intelligent-mainnet-stable.yaml b/.github/workflows/fullnode-intelligent-mainnet-stable.yaml deleted file mode 100644 index 34a16ed2833d5..0000000000000 --- a/.github/workflows/fullnode-intelligent-mainnet-stable.yaml +++ /dev/null @@ -1,35 +0,0 @@ -# This workflow runs a public fullnode using the `mainnet` branch, -# connects the public fullnode to `mainnet` and synchronizes the -# node using execution or output syncing to verify that nothing -# has been broken. - -name: "fullnode-intelligent-mainnet-stable" -on: - workflow_dispatch: - schedule: - - cron: "0 5 * * *" # Once a day, at 05:00 (UTC) - -permissions: - contents: read - id-token: write - actions: write #required for workflow cancellation via check-aptos-core - -jobs: - check-repo: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - uses: aptos-labs/aptos-core/.github/actions/check-aptos-core@main - with: - cancel-workflow: ${{ github.event_name == 'schedule' }} # Cancel the workflow if it is scheduled on a fork - - fullnode-intelligent-mainnet-stable: - needs: check-repo - uses: ./.github/workflows/run-fullnode-sync.yaml - secrets: inherit - with: - TEST_NAME: fullnode-intelligent-mainnet-stable - GIT_REF: mainnet - NETWORK: mainnet - BOOTSTRAPPING_MODE: DownloadLatestStates - CONTINUOUS_SYNCING_MODE: ExecuteTransactionsOrApplyOutputs diff --git a/.github/workflows/fullnode-intelligent-testnet-main.yaml b/.github/workflows/fullnode-intelligent-testnet-main.yaml deleted file mode 100644 index 407bec2f47a3f..0000000000000 --- a/.github/workflows/fullnode-intelligent-testnet-main.yaml +++ /dev/null @@ -1,35 +0,0 @@ -# This workflow runs a public fullnode using the `main` branch, -# connects the public fullnode to `testnet` and synchronizes the -# node using execution or output syncing to verify that nothing -# has been broken. - -name: "fullnode-intelligent-testnet-main" -on: - workflow_dispatch: - schedule: - - cron: "30 5 */3 * *" # Once every three days, at 05:30 (UTC) - -permissions: - contents: read - id-token: write - actions: write #required for workflow cancellation via check-aptos-core - -jobs: - check-repo: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - uses: aptos-labs/aptos-core/.github/actions/check-aptos-core@main - with: - cancel-workflow: ${{ github.event_name == 'schedule' }} # Cancel the workflow if it is scheduled on a fork - - fullnode-intelligent-testnet-main: - needs: check-repo - uses: ./.github/workflows/run-fullnode-sync.yaml - secrets: inherit - with: - TEST_NAME: fullnode-intelligent-testnet-main - GIT_REF: main - NETWORK: testnet - BOOTSTRAPPING_MODE: DownloadLatestStates - CONTINUOUS_SYNCING_MODE: ExecuteTransactionsOrApplyOutputs diff --git a/.github/workflows/fuzzer-test.yaml b/.github/workflows/fuzzer-test.yaml deleted file mode 100644 index c8e94ef8a52ee..0000000000000 --- a/.github/workflows/fuzzer-test.yaml +++ /dev/null @@ -1,26 +0,0 @@ -name: "Fuzzers test" - -on: - pull_request: - types: [labeled, opened, synchronize, reopened, auto_merge_enabled] - push: - branches: - - main - workflow_dispatch: - -jobs: - test-fuzzers: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Install Dependencies - shell: bash - run: | - scripts/dev_setup.sh -b - - - name: Test Fuzzers - shell: bash - run: | - cd testsuite/fuzzer && ./fuzz.sh test \ No newline at end of file diff --git a/.github/workflows/indexer-grpc-in-memory-cache-benchmark.yaml b/.github/workflows/indexer-grpc-in-memory-cache-benchmark.yaml deleted file mode 100644 index c3548c30b085c..0000000000000 --- a/.github/workflows/indexer-grpc-in-memory-cache-benchmark.yaml +++ /dev/null @@ -1,22 +0,0 @@ -name: Indexer gRPC in-memory cache benchmark -on: - workflow_dispatch: - schedule: - - cron: "0 0 * * *" - -jobs: - run-indexer-grpc-in-memory-cache-benchmark: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - name: Install grpcurl - run: curl -sSL "https://github.com/fullstorydev/grpcurl/releases/download/v1.8.7/grpcurl_1.8.7_linux_x86_64.tar.gz" | sudo tar -xz -C /usr/local/bin - - name: Rust setup - uses: aptos-labs/aptos-core/.github/actions/rust-setup@main - with: - GIT_CREDENTIALS: ${{ secrets.GIT_CREDENTIALS }} - - name: build and run the benchmark - run: | - set -ex - cargo build --release --bin aptos-indexer-grpc-in-memory-cache-benchmark - ./target/release/indexer-grpc-in-memory-cache-benchmark \ No newline at end of file diff --git a/.github/workflows/indexer-grpc-integration-tests.yaml b/.github/workflows/indexer-grpc-integration-tests.yaml deleted file mode 100644 index 4a1c2aa93b181..0000000000000 --- a/.github/workflows/indexer-grpc-integration-tests.yaml +++ /dev/null @@ -1,84 +0,0 @@ -name: "Indexer gRPC Integration Tests" -on: - pull_request_target: - types: [labeled, opened, synchronize, reopened, auto_merge_enabled] - push: - branches: - - main - -permissions: - contents: read - id-token: write # Required for GCP Workload Identity federation which we use to login into Google Artifact Registry - -# cancel redundant builds -concurrency: - # for push events we use `github.sha` in the concurrency group and don't really cancel each other out/limit concurrency - # for pull_request events newer jobs cancel earlier jobs to save on CI etc. - group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.event_name == 'push' && github.sha || github.head_ref || github.ref }} - cancel-in-progress: true - -jobs: - permission-check: - runs-on: ubuntu-latest - steps: - - name: Check repository permission for user which triggered workflow - uses: sushichop/action-repository-permission@13d208f5ae7a6a3fc0e5a7c2502c214983f0241c - with: - required-permission: write - comment-not-permitted: Sorry, you don't have permission to trigger this workflow. - - run-tests-local-testnet: - if: contains(github.event.pull_request.labels.*.name, 'CICD:non-required-tests') - needs: [permission-check] - runs-on: runs-on,cpu=64,family=c7,hdd=500,image=aptos-ubuntu-x64,run-id=${{ github.run_id }} - env: - # spin up the local testnet using the latest devnet image - VALIDATOR_IMAGE_REPO: ${{ vars.GCP_DOCKER_ARTIFACT_REPO }}/validator - FAUCET_IMAGE_REPO: ${{ vars.GCP_DOCKER_ARTIFACT_REPO }}/faucet - INDEXER_GRPC_IMAGE_REPO: ${{ vars.GCP_DOCKER_ARTIFACT_REPO }}/indexer-grpc - IMAGE_TAG: devnet - - steps: - - uses: actions/checkout@v3 - - - name: Install grpcurl - run: curl -sSL "https://github.com/fullstorydev/grpcurl/releases/download/v1.8.7/grpcurl_1.8.7_linux_x86_64.tar.gz" | sudo tar -xz -C /usr/local/bin - - - name: Set up Rust - uses: aptos-labs/aptos-core/.github/actions/rust-setup@main - with: - GIT_CREDENTIALS: ${{ secrets.GIT_CREDENTIALS }} - - - uses: aptos-labs/aptos-core/.github/actions/docker-setup@main - with: - GCP_WORKLOAD_IDENTITY_PROVIDER: ${{ secrets.GCP_WORKLOAD_IDENTITY_PROVIDER }} - GCP_SERVICE_ACCOUNT_EMAIL: ${{ secrets.GCP_SERVICE_ACCOUNT_EMAIL }} - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - AWS_DOCKER_ARTIFACT_REPO: ${{ secrets.AWS_DOCKER_ARTIFACT_REPO }} - GIT_CREDENTIALS: ${{ secrets.GIT_CREDENTIALS }} - - - uses: ./.github/actions/python-setup - with: - pyproject_directory: ./testsuite - - - name: Run indexer gRPC dependencies locally (devnet) - shell: bash - working-directory: ./testsuite - run: poetry run python indexer_grpc_local.py --verbose start --no-indexer-grpc - - - name: Run indexer gRPC integration tests - shell: bash - run: cargo nextest run --features integration-tests --package aptos-indexer-grpc-integration-tests - - - name: Print docker-compose indexer-grpc deps logs on failure - if: ${{ failure() }} - working-directory: docker/compose/indexer-grpc - run: docker-compose logs - - - name: Print docker-compose validator-testnet logs on failure - if: ${{ failure() }} - working-directory: docker/compose/validator-testnet - run: docker-compose logs - -# validator-testnet-validator-1 diff --git a/.github/workflows/keyless-circuit-daily-test.yaml b/.github/workflows/keyless-circuit-daily-test.yaml deleted file mode 100644 index 8fecb6df2c516..0000000000000 --- a/.github/workflows/keyless-circuit-daily-test.yaml +++ /dev/null @@ -1,32 +0,0 @@ -name: "Keyless Circuit Daily Test" -on: - # Allow us to manually run this specific workflow without a PR - workflow_dispatch: - schedule: - - cron: "12 12 * * *" # at 12:12 UTC every day - pull_request: - paths: - - ".github/workflows/keyless-circuit-daily-test.yaml" - - "keyless/circuit/**" -env: - CARGO_INCREMENTAL: "0" - CARGO_TERM_COLOR: always - -# cancel redundant builds -concurrency: - # cancel redundant builds on PRs (only on PR, not on branches) - group: ${{ github.workflow }}-${{ (github.event_name == 'pull_request' && github.ref) || github.sha }} - cancel-in-progress: true - -jobs: - run-all-circuit-tests: - runs-on: runs-on,cpu=64,family=c7,hdd=500,image=aptos-ubuntu-x64,run-id=${{ github.run_id }} - timeout-minutes: 30 - steps: - - uses: actions/checkout@v3 - with: - fetch-depth: 0 # get all the history because cargo xtest --change-since origin/main requires it. - - uses: ./.github/actions/rust-setup - - run: | - . keyless/circuit/tools/install-deps.sh - cargo test -p aptos-keyless-circuit -- --nocapture diff --git a/.github/workflows/links.yml b/.github/workflows/links.yml deleted file mode 100644 index a556b8731c4cc..0000000000000 --- a/.github/workflows/links.yml +++ /dev/null @@ -1,35 +0,0 @@ -## Implementation of: https://github.com/marketplace/actions/lychee-broken-link-checker - -name: Aptos GitHub Links Checker - -on: - repository_dispatch: - workflow_dispatch: - schedule: - - cron: "00 18 * * *" - -permissions: - # contents: write # only for delete-branch option - issues: write - pull-requests: write - -jobs: - linkChecker: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - - name: Link Checker - id: lychee - uses: lycheeverse/lychee-action@v1.5.4 - env: - GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} - - - name: Create Issue From File - if: env.lychee_exit_code != 0 - uses: peter-evans/create-issue-from-file@v4 - with: - title: Link Checker Report - content-filepath: ./lychee/out.md - labels: report, automated issue - assignees: clay-aptos \ No newline at end of file diff --git a/.github/workflows/lint-test.yaml b/.github/workflows/lint-test.yaml deleted file mode 100644 index 17ab25e7326d2..0000000000000 --- a/.github/workflows/lint-test.yaml +++ /dev/null @@ -1,205 +0,0 @@ -name: "Lint+Test" -on: - pull_request: - types: [labeled, opened, synchronize, reopened, auto_merge_enabled] - push: - branches: - - main - - devnet - - testnet - - mainnet - - aptos-node-v* - - aptos-release-v* - workflow_dispatch: - -env: - HAS_BUILDPULSE_SECRETS: ${{ secrets.BUILDPULSE_ACCESS_KEY_ID != '' && secrets.BUILDPULSE_SECRET_ACCESS_KEY != '' }} - HAS_DATADOG_SECRETS: ${{ secrets.DD_API_KEY != '' }} - CARGO_INCREMENTAL: "0" - CARGO_TERM_COLOR: always - -# cancel redundant builds -concurrency: - # cancel redundant builds on PRs (only on PR, not on branches) - group: ${{ github.workflow }}-${{ (github.event_name == 'pull_request' && github.ref) || github.sha }} - cancel-in-progress: true - -jobs: - # This job determines which files were changed - file_change_determinator: - runs-on: ubuntu-latest - outputs: - only_docs_changed: ${{ steps.determine_file_changes.outputs.only_docs_changed }} - steps: - - uses: actions/checkout@v4 - - name: Run the file change determinator - id: determine_file_changes - uses: ./.github/actions/file-change-determinator - - # Run all general lints (i.e., non-rust and docs lints). This is a PR required job. - general-lints: - needs: file_change_determinator - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - if: needs.file_change_determinator.outputs.only_docs_changed != 'true' - with: - fetch-depth: 0 # get all the history because python-lint-tests requires it. - - name: Run general lints - uses: ./.github/actions/general-lints - if: needs.file_change_determinator.outputs.only_docs_changed != 'true' - with: - GIT_CREDENTIALS: ${{ secrets.GIT_CREDENTIALS }} - - run: echo "Skipping general lints! Unrelated changes detected." - if: needs.file_change_determinator.outputs.only_docs_changed == 'true' - - # Run the crypto hasher domain separation checks - rust-cryptohasher-domain-separation-check: - needs: file_change_determinator - runs-on: runs-on,cpu=64,family=c7,hdd=500,image=aptos-ubuntu-x64,run-id=${{ github.run_id }} - if: contains(github.event.pull_request.labels.*.name, 'CICD:non-required-tests') - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-python@v4 - - uses: aptos-labs/aptos-core/.github/actions/rust-setup@main - with: - GIT_CREDENTIALS: ${{ secrets.GIT_CREDENTIALS }} - - run: python3 scripts/check-cryptohasher-symbols.py - - # Run all rust lints. This is a PR required job. - rust-lints: - needs: file_change_determinator - runs-on: runs-on,cpu=64,family=c7,hdd=500,image=aptos-ubuntu-x64,run-id=${{ github.run_id }} - steps: - - uses: actions/checkout@v4 - if: needs.file_change_determinator.outputs.only_docs_changed != 'true' - with: - fetch-depth: 0 # get all the history because cargo xtest --change-since origin/main requires it. - - name: Run rust lints - uses: ./.github/actions/rust-lints - if: needs.file_change_determinator.outputs.only_docs_changed != 'true' - with: - GIT_CREDENTIALS: ${{ secrets.GIT_CREDENTIALS }} - - run: echo "Skipping rust lints! Unrelated changes detected." - if: needs.file_change_determinator.outputs.only_docs_changed == 'true' - - # Run all rust smoke tests. This is a PR required job. - rust-smoke-tests: - needs: file_change_determinator - if: | # Only run on each PR once an appropriate event occurs - ( - github.event_name == 'workflow_dispatch' || - github.event_name == 'push' || - contains(github.event.pull_request.labels.*.name, 'CICD:run-e2e-tests') || - github.event.pull_request.auto_merge != null) || - contains(github.event.pull_request.body, '#e2e' - ) - runs-on: runs-on,cpu=64,family=c7,hdd=500,image=aptos-ubuntu-x64,run-id=${{ github.run_id }} - steps: - - uses: actions/checkout@v4 - if: needs.file_change_determinator.outputs.only_docs_changed != 'true' - - name: Run rust smoke tests - uses: ./.github/actions/rust-smoke-tests - if: needs.file_change_determinator.outputs.only_docs_changed != 'true' - with: - GIT_CREDENTIALS: ${{ secrets.GIT_CREDENTIALS }} - - run: echo "Skipping rust smoke tests! Unrelated changes detected." - if: needs.file_change_determinator.outputs.only_docs_changed == 'true' - - # Run only the targeted rust unit tests. This is a PR required job. - rust-targeted-unit-tests: - needs: file_change_determinator - runs-on: runs-on,cpu=64,family=c7,hdd=500,image=aptos-ubuntu-x64,run-id=${{ github.run_id }} - steps: - - uses: actions/checkout@v4 - with: - ref: ${{ github.event.pull_request.head.sha }} - fetch-depth: 0 # Fetch all git history for accurate target determination - - name: Run targeted rust unit tests - uses: ./.github/actions/rust-targeted-unit-tests - with: - GIT_CREDENTIALS: ${{ secrets.GIT_CREDENTIALS }} - - # Run all rust unit tests. This is not a PR required job. - rust-unit-tests: - if: | # Only run when an appropriate event occurs - ( - github.event_name == 'workflow_dispatch' || - github.event_name == 'push' || - contains(github.event.pull_request.labels.*.name, 'CICD:run-all-unit-tests') - ) - runs-on: runs-on,cpu=64,family=c7,hdd=500,image=aptos-ubuntu-x64,run-id=${{ github.run_id }} - steps: - - uses: actions/checkout@v4 - - name: Run rust unit tests - uses: ./.github/actions/rust-unit-tests - with: - GIT_CREDENTIALS: ${{ secrets.GIT_CREDENTIALS }} - BUILDKITE_ANALYTICS_TOKEN: ${{ secrets.BUILDKITE_ANALYTICS_TOKEN }} - - # Run the cached packages build. This is a PR required job. - rust-build-cached-packages: - needs: file_change_determinator - if: | # Only run on each PR once an appropriate event occurs - ( - github.event_name == 'workflow_dispatch' || - github.event_name == 'push' || - contains(github.event.pull_request.labels.*.name, 'CICD:run-e2e-tests') || - github.event.pull_request.auto_merge != null - ) - runs-on: runs-on,cpu=64,family=c7,hdd=500,image=aptos-ubuntu-x64,run-id=${{ github.run_id }} - steps: - - uses: actions/checkout@v4 - if: needs.file_change_determinator.outputs.only_docs_changed != 'true' - - uses: aptos-labs/aptos-core/.github/actions/rust-setup@main - with: - GIT_CREDENTIALS: ${{ secrets.GIT_CREDENTIALS }} - - name: Run aptos cached packages build test - if: needs.file_change_determinator.outputs.only_docs_changed != 'true' - run: scripts/cargo_build_aptos_cached_packages.sh --check - - run: echo "Skipping cached packages test! Unrelated changes detected." - if: needs.file_change_determinator.outputs.only_docs_changed == 'true' - - # Run the consensus only unit tests - rust-consensus-only-unit-test: - runs-on: runs-on,cpu=64,family=c7,hdd=500,image=aptos-ubuntu-x64,run-id=${{ github.run_id }} - if: contains(github.event.pull_request.labels.*.name, 'CICD:build-consensus-only-image') - steps: - - uses: actions/checkout@v4 - - uses: aptos-labs/aptos-core/.github/actions/rust-setup@main - with: - GIT_CREDENTIALS: ${{ secrets.GIT_CREDENTIALS }} - - uses: taiki-e/install-action@v1.5.6 - with: - tool: nextest - - run: cargo nextest run --locked --workspace --exclude smoke-test --exclude aptos-testcases --exclude aptos-api --exclude aptos-executor-benchmark --exclude aptos-backup-cli --retries 3 --no-fail-fast -F consensus-only-perf-test - env: - RUST_MIN_STACK: 4297152 - - # Run the consensus only smoke test - rust-consensus-only-smoke-test: - runs-on: runs-on,cpu=64,family=c7,hdd=500,image=aptos-ubuntu-x64,run-id=${{ github.run_id }} - if: contains(github.event.pull_request.labels.*.name, 'CICD:build-consensus-only-image') - steps: - - uses: actions/checkout@v4 - - uses: aptos-labs/aptos-core/.github/actions/rust-setup@main - with: - GIT_CREDENTIALS: ${{ secrets.GIT_CREDENTIALS }} - - uses: taiki-e/install-action@v1.5.6 - with: - tool: nextest - # prebuild aptos-node binary, so that tests don't start before node is built. - # also prebuild aptos-node binary as a separate step to avoid feature unification issues - - run: cargo build --locked --package=aptos-node -F consensus-only-perf-test --release && LOCAL_SWARM_NODE_RELEASE=1 CONSENSUS_ONLY_PERF_TEST=1 cargo nextest run --release --package smoke-test -E "test(test_consensus_only_with_txn_emitter)" --run-ignored all - - # We always try to create the artifact, but it only creates on flaky or failed smoke tests -- when the directories are empty. - - name: Upload smoke test logs for failed and flaky tests - uses: actions/upload-artifact@v3 - if: ${{ failure() || success() }} - with: - name: failed-consensus-only-smoke-test-logs - # Retain all smoke test data except for the db (which may be large). - path: | - /tmp/.tmp* - !/tmp/.tmp*/**/db/ - retention-days: 14 diff --git a/.github/workflows/module-verify.yaml b/.github/workflows/module-verify.yaml deleted file mode 100644 index 17b99be413f9d..0000000000000 --- a/.github/workflows/module-verify.yaml +++ /dev/null @@ -1,69 +0,0 @@ -# This defines a workflow to verify all modules that have been published on chain with the latest aptos node software. -# In order to trigger it go to the Actions Tab of the Repo, click "module-verify" and then "Run Workflow". -# -# On PR, a single test case will run. On workflow_dispatch, you may specify the CHAIN_NAME to verify. - -name: "module-verify" -on: - # Allow triggering manually - workflow_dispatch: - inputs: - GIT_SHA: - required: false - type: string - description: The git SHA1 to test. If not specified, it will use the latest commit on main. - CHAIN_NAME: - required: false - type: choice - options: [testnet, mainnet, all] - default: all - description: The chain name to test. If not specified, it will test both testnet and mainnet. - pull_request: - paths: - - ".github/workflows/module-verify.yaml" - -# cancel redundant builds -concurrency: - # cancel redundant builds on PRs (only on PR, not on branches) - group: ${{ github.workflow }}-${{ (github.event_name == 'pull_request' && github.ref) || github.sha }} - cancel-in-progress: true - -jobs: - verify-modules-testnet: - if: ${{ github.event_name == 'workflow_dispatch' && (inputs.CHAIN_NAME == 'testnet' || inputs.CHAIN_NAME == 'all') }} - uses: aptos-labs/aptos-core/.github/workflows/workflow-run-module-verify.yaml@main - secrets: inherit - with: - GIT_SHA: ${{ inputs.GIT_SHA }} - BUCKET: aptos-testnet-backup-2223d95b - SUB_DIR: e1 - BACKUP_CONFIG_TEMPLATE_PATH: terraform/helm/fullnode/files/backup/s3-public.yaml - # workflow config - RUNS_ON: high-perf-docker-with-local-ssd - TIMEOUT_MINUTES: 20 - - verify-modules-mainnet: - if: ${{ github.event_name == 'workflow_dispatch' && (inputs.CHAIN_NAME == 'mainnet' || inputs.CHAIN_NAME == 'all') }} - uses: aptos-labs/aptos-core/.github/workflows/workflow-run-module-verify.yaml@main - secrets: inherit - with: - GIT_SHA: ${{ inputs.GIT_SHA }} - BUCKET: aptos-mainnet-backup-backup-831a69a8 - SUB_DIR: e1 - BACKUP_CONFIG_TEMPLATE_PATH: terraform/helm/fullnode/files/backup/s3-public.yaml - # workflow config - RUNS_ON: high-perf-docker-with-local-ssd - TIMEOUT_MINUTES: 20 - - test-verify-modules: - if: ${{ github.event_name == 'pull_request' }} - uses: aptos-labs/aptos-core/.github/workflows/workflow-run-module-verify.yaml@main - secrets: inherit - with: - GIT_SHA: ${{ github.event.pull_request.head.sha }} - BUCKET: aptos-testnet-backup-2223d95b - SUB_DIR: e1 - BACKUP_CONFIG_TEMPLATE_PATH: terraform/helm/fullnode/files/backup/s3-public.yaml - # workflow config - RUNS_ON: "high-perf-docker-with-local-ssd" - TIMEOUT_MINUTES: 20 diff --git a/.github/workflows/move-test-compiler-v2.yaml b/.github/workflows/move-test-compiler-v2.yaml deleted file mode 100644 index 449892ab72f59..0000000000000 --- a/.github/workflows/move-test-compiler-v2.yaml +++ /dev/null @@ -1,35 +0,0 @@ -name: "Aptos Move Test for Compiler V2" -on: - workflow_dispatch: - push: - branches: - - 'main' - paths: - - 'aptos-move/e2e-move-tests/**' - - 'aptos-move/framework/**' - - 'third_party/move/**' - - '.github/workflows/move-test-compiler-v2.yaml' - - '.github/actions/move-tests-compiler-v2/**' - pull_request: - types: [labeled, opened, synchronize, reopened, auto_merge_enabled] - -env: - CARGO_INCREMENTAL: "0" - CARGO_TERM_COLOR: always - -# cancel redundant builds -concurrency: - # cancel redundant builds on PRs (only on PR, not on branches) - group: ${{ github.workflow }}-${{ (github.event_name == 'pull_request' && github.ref) || github.sha }} - cancel-in-progress: true - -jobs: - # Run Aptos Move Compiler v2 tests. This is a PR required job. - rust-move-tests: - runs-on: runs-on,cpu=64,family=c7,hdd=500,image=aptos-ubuntu-x64,run-id=${{ github.run_id }} - steps: - - uses: actions/checkout@v3 - - name: Run Aptos Move tests with compiler V2 - uses: ./.github/actions/move-tests-compiler-v2 - with: - GIT_CREDENTIALS: ${{ secrets.GIT_CREDENTIALS }} diff --git a/.github/workflows/node-api-compatibility-tests.yaml b/.github/workflows/node-api-compatibility-tests.yaml deleted file mode 100644 index 8feef3eff7533..0000000000000 --- a/.github/workflows/node-api-compatibility-tests.yaml +++ /dev/null @@ -1,128 +0,0 @@ -## IMPORTANT NOTE TO EDITORS OF THIS FILE ## - -## If you are trying to change how this CI works, you MUST go read the important -## note at the top of docker-build-test.yaml. In short, to test this, you must temporarily -## change docker-build-test to use the pull_request trigger instead of pull_request_target. - -## Make sure to add the CICD:CICD:build-images and CICD:run-e2e-tests labels to test -## this within an in-review PR. - -## If the above approach is too slow (since you have to wait for the rust images -## to build), you can cut the iteration time dramatically by changing the envs -## - Replace env.IMAGE_TAG for a known image tag -## - env.GIT_SHA will resolve to that of your PR branch - -# These tests ensure that the Node API, the OpenAPI spec that is generated from it, -# and the TS SDK inner client that is generated from that, all match up. -name: "Node API Compatibility Tests" -on: - # This is called from within the docker-build-test.yaml workflow since we depend - # on the images having been built before this workflow runs. - workflow_call: - inputs: - GIT_SHA: - required: true - type: string - description: Use this to override the git SHA1, branch name (e.g. devnet) or tag to release the SDK from - SKIP_JOB: - required: false - default: false - type: boolean - description: Set to true to skip this job. Useful for PRs that don't require this workflow. - -env: - # This is the docker image tag that will be used for the SDK release. - # It is also used to pull the docker images for the CI. - IMAGE_TAG: ${{ inputs.GIT_SHA || 'devnet' }} # default to "devnet" tag when not running on workflow_call - GIT_SHA: ${{ inputs.GIT_SHA || github.event.pull_request.head.sha || github.sha }} # default to PR branch sha when not running on workflow_call - -# TODO: should we migrate this to a composite action, so that we can skip it -# at the call site, and don't need to wrap each step in an if statement? -jobs: - # Confirm that the generated client within the TS SDK has been re-generated - # if there are any changes that would affect it within the PR / commit. If - # everything is checked in, run tests, build the SDK, and upload it to npmjs. - node-api-compatibility-tests: - runs-on: runs-on,cpu=64,family=c7,hdd=500,image=aptos-ubuntu-x64,run-id=${{ github.run_id }} - permissions: - contents: read - id-token: write - steps: - - uses: actions/checkout@v3 - if: ${{ !inputs.SKIP_JOB }} - with: - ref: ${{ env.GIT_SHA }} - - - uses: aptos-labs/aptos-core/.github/actions/docker-setup@main - if: ${{ !inputs.SKIP_JOB }} - with: - GCP_WORKLOAD_IDENTITY_PROVIDER: ${{ secrets.GCP_WORKLOAD_IDENTITY_PROVIDER }} - GCP_SERVICE_ACCOUNT_EMAIL: ${{ secrets.GCP_SERVICE_ACCOUNT_EMAIL }} - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - AWS_DOCKER_ARTIFACT_REPO: ${{ secrets.AWS_DOCKER_ARTIFACT_REPO }} - GIT_CREDENTIALS: ${{ secrets.GIT_CREDENTIALS }} - - - uses: actions/setup-node@v3 - if: ${{ !inputs.SKIP_JOB }} - with: - node-version-file: .node-version - registry-url: "https://registry.npmjs.org" - - # Self hosted runners don't have pnpm preinstalled. - # https://github.com/actions/setup-node/issues/182 - - uses: pnpm/action-setup@v2 - if: ${{ !inputs.SKIP_JOB }} - - # When using high-perf-docker, the CI is actually run with two containers - # in a k8s pod, one for docker commands run in the CI steps (docker), and - # one for everything else (runner). These containers share some volume - # mounts, ${{ runner.temp }} is one of them. Writing the specs here ensures - # the docker run step writes to a same place that the runner can read from. - - run: mkdir -p ${{ runner.temp }}/specs - if: ${{ !inputs.SKIP_JOB }} - - # Build the API specs. - - uses: nick-fields/retry@7f8f3d9f0f62fe5925341be21c2e8314fd4f7c7c # pin@v2 - if: ${{ !inputs.SKIP_JOB }} - name: generate-yaml-spec - with: - max_attempts: 3 - timeout_minutes: 20 - command: docker run --rm --mount=type=bind,source=${{ runner.temp }}/specs,target=/specs ${{ vars.GCP_DOCKER_ARTIFACT_REPO }}/tools:${IMAGE_TAG} aptos-openapi-spec-generator -f yaml -o /specs/spec.yaml - - - uses: nick-fields/retry@7f8f3d9f0f62fe5925341be21c2e8314fd4f7c7c # pin@v2 - if: ${{ !inputs.SKIP_JOB }} - name: generate-json-spec - with: - max_attempts: 3 - timeout_minutes: 20 - command: docker run --rm --mount=type=bind,source=${{ runner.temp }}/specs,target=/specs ${{ vars.GCP_DOCKER_ARTIFACT_REPO }}/tools:${IMAGE_TAG} aptos-openapi-spec-generator -f json -o /specs/spec.json - - # Confirm that the specs we built here are the same as those checked in. - - run: | - echo "If this step fails, run the following commands locally to fix it:" - echo "cargo run -p aptos-openapi-spec-generator -- -f yaml -o api/doc/spec.yaml" - echo "cargo run -p aptos-openapi-spec-generator -- -f json -o api/doc/spec.json" - git diff --no-index --ignore-space-at-eol --ignore-blank-lines ${{ runner.temp }}/specs/spec.yaml api/doc/spec.yaml - git diff --no-index --ignore-space-at-eol --ignore-blank-lines ${{ runner.temp }}/specs/spec.json api/doc/spec.json - if: ${{ !inputs.SKIP_JOB }} - - # Run package install. If install fails, it probably means the lockfile - # was not included in the commit. - - run: cd ./ecosystem/typescript/sdk && pnpm install --frozen-lockfile - if: ${{ !inputs.SKIP_JOB }} - - # Ensure any changes to the generated client were checked in. - - run: cd ./ecosystem/typescript/sdk && pnpm generate-client -o /tmp/generated_client - if: ${{ !inputs.SKIP_JOB }} - - - run: - echo "If this step fails, run the following command locally to fix it:" - echo "cd ecosystem/typescript/sdk && pnpm generate-client" - git diff --no-index --ignore-space-at-eol --ignore-blank-lines ./ecosystem/typescript/sdk/src/generated/ /tmp/generated_client/ - if: ${{ !inputs.SKIP_JOB }} - - # Print out whether the job was skipped. - - run: echo "Skipping node API compatibility tests!" - if: ${{ inputs.SKIP_JOB }} diff --git a/.github/workflows/prover-daily-test.yaml b/.github/workflows/prover-daily-test.yaml deleted file mode 100644 index 5ed59ec538937..0000000000000 --- a/.github/workflows/prover-daily-test.yaml +++ /dev/null @@ -1,35 +0,0 @@ -name: "Prover Daily Test" -on: - # Allow us to manually run this specific workflow without a PR - workflow_dispatch: - # Until enabled on all PRs, run twice a week - schedule: - - cron: "14 14 */3 * *" - pull_request: - paths: - - ".github/workflows/prover-daily-test.yaml" - - ".github/actions/move-prover-setup/**" - -env: - CARGO_INCREMENTAL: "0" - CARGO_TERM_COLOR: always - -# cancel redundant builds -concurrency: - # cancel redundant builds on PRs (only on PR, not on branches) - group: ${{ github.workflow }}-${{ (github.event_name == 'pull_request' && github.ref) || github.sha }} - cancel-in-progress: true - -jobs: - prover-inconsistency-test: - runs-on: runs-on,cpu=64,family=c7,hdd=500,image=aptos-ubuntu-x64,run-id=${{ github.run_id }} - timeout-minutes: ${{ github.event_name == 'pull_request' && 10 || 480}} - steps: - - uses: actions/checkout@v3 - with: - fetch-depth: 0 # get all the history because cargo xtest --change-since origin/main requires it. - - uses: ./.github/actions/move-prover-setup - - run: MVP_TEST_DISALLOW_TIMEOUT_OVERWRITE=1 MVP_TEST_VC_TIMEOUT=1200 cargo test -p aptos-move-examples --release -- --include-ignored prover - - run: MVP_TEST_DISALLOW_TIMEOUT_OVERWRITE=1 MVP_TEST_VC_TIMEOUT=7200 cargo test -p aptos-framework --release -- --include-ignored prover - - run: MVP_TEST_DISALLOW_TIMEOUT_OVERWRITE=1 MVP_TEST_VC_TIMEOUT=1200 MVP_TEST_INCONSISTENCY=1 cargo test -p aptos-move-examples --release -- --include-ignored prover - - run: MVP_TEST_DISALLOW_TIMEOUT_OVERWRITE=1 MVP_TEST_VC_TIMEOUT=7200 MVP_TEST_INCONSISTENCY=1 cargo test -p aptos-framework --release -- --include-ignored prover diff --git a/.github/workflows/prune-old-workflow-runs.yaml b/.github/workflows/prune-old-workflow-runs.yaml deleted file mode 100644 index 65271424432e2..0000000000000 --- a/.github/workflows/prune-old-workflow-runs.yaml +++ /dev/null @@ -1,28 +0,0 @@ -# This workflow runs periodically to delete obsolete workflow runs of workflows that don't exist anymore in the repo. -# This is the keep the Workflow list on the left here https://github.com/aptos-labs/aptos-core/actions tidy. -# The only way to remove a workflow from that list is to delete _all_ runs of a workflow. -name: Prune old workflow runs -on: - workflow_dispatch: - schedule: - # every day at 3am PST - - cron: "0 10 * * *" - -permissions: - actions: write - -jobs: - prune: - if: github.repository == 'aptos-labs/aptos-core' - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 - with: - node-version-file: .node-version - - uses: pnpm/action-setup@v2 - - - run: pnpm i && pnpm pruneGithubWorkflowRuns - env: - GITHUB_TOKEN: ${{ github.token }} - working-directory: .github/ts-tasks diff --git a/.github/workflows/replay-verify.yaml b/.github/workflows/replay-verify.yaml deleted file mode 100644 index d0e91d30a3723..0000000000000 --- a/.github/workflows/replay-verify.yaml +++ /dev/null @@ -1,99 +0,0 @@ -# This defines a workflow to replay transactions on the given chain with the latest aptos node software. -# In order to trigger it go to the Actions Tab of the Repo, click "replay-verify" and then "Run Workflow". -# -# On PR, a single test case will run. On workflow_dispatch, you may specify the CHAIN_NAME to verify. - -name: "replay-verify" -on: - # Allow triggering manually - workflow_dispatch: - inputs: - GIT_SHA: - required: false - type: string - description: The git SHA1 to test. If not specified, it will use the latest commit on main. - CHAIN_NAME: - required: false - type: choice - options: [testnet, mainnet, all] - default: all - description: The chain name to test. If not specified, it will test both testnet and mainnet. - pull_request: - paths: - - ".github/workflows/replay-verify.yaml" - - "testsuite/replay_verify.py" - schedule: - - cron: "0 22 * * 0,2,4" # The main branch cadence. This runs every Sun,Tues,Thurs - -# cancel redundant builds -concurrency: - # cancel redundant builds on PRs (only on PR, not on branches) - group: ${{ github.workflow }}-${{ (github.event_name == 'pull_request' && github.ref) || github.sha }} - cancel-in-progress: true - -jobs: - determine-test-metadata: - runs-on: ubuntu-latest - steps: - # checkout the repo first, so check-aptos-core can use it and cancel the workflow if necessary - - uses: actions/checkout@v3 - - uses: ./.github/actions/check-aptos-core - with: - cancel-workflow: ${{ github.event_name == 'schedule' }} # Cancel the workflow if it is scheduled on a fork - - replay-testnet: - if: | - github.event_name == 'schedule' || - github.event_name == 'push' || - github.event_name == 'workflow_dispatch' && (inputs.CHAIN_NAME == 'testnet' || inputs.CHAIN_NAME == 'all') - needs: determine-test-metadata - uses: ./.github/workflows/workflow-run-replay-verify.yaml - secrets: inherit - with: - GIT_SHA: ${{ inputs.GIT_SHA }} - # replay-verify config - BUCKET: aptos-testnet-backup-b7b1ad7a - SUB_DIR: e1 - HISTORY_START: 250000000 # TODO: We need an exhaustive list of txns_to_skip before we can set this to 0. - TXNS_TO_SKIP: 46874937 151020059 409163615 409163669 409163708 409163774 409163845 409163955 409164059 409164191 414625832 761241943 761247376 761483628 761492625 761494608 761500902 761500975 761504816 761508349 761508397 761508969 761509180 761515997 761531553 761531645 761553168 761553288 761659735 761660965 761661629 761662335 761662951 761664420 761666676 761666846 761667070 761667337 761669444 761670483 761671140 761671243 761671650 761672111 761672821 761674579 761674907 761675526 761709313 761709478 761709835 761846021 761846029 761846031 761846038 761846039 761846040 761846041 761846042 761846043 761846044 761846045 761846046 761846047 761846048 761846049 761846050 761846051 761846052 761846053 761846054 761846055 761846056 761846057 761846058 761846059 761846060 761846061 761846062 761846063 761846064 761846065 761846066 761846067 761846068 761846069 761846070 761846071 761846072 761846073 761846074 761846075 761846076 761846077 761846078 761846079 761846080 761846081 761846082 761846083 761846084 761846085 761846086 761846087 761846088 761846089 761846090 761846091 761846092 761846093 761846094 761846095 761846096 761846097 761846098 761846099 761846100 761846101 761846102 761846103 761846104 761846105 761846106 761846107 761846108 761846109 761846110 761846111 761846112 761846113 761846114 761846115 761846137 761846138 761846139 761846140 761846141 761846142 761846143 761846144 761846145 761846146 761846147 761846148 761846149 761846150 761846151 761846152 761846153 761846154 761846155 761846156 761846157 761846158 761846159 761846160 761846161 761846162 761846163 761846164 761846165 761846166 761846167 761846168 761846169 761846170 761846171 761846172 761846173 761846174 761846175 761846176 761846177 761846178 761846179 761846180 761846181 761846182 761846183 761846184 761846185 761846186 761846187 761846188 761846189 761846190 761846191 761846192 761846193 761846194 761846195 761846196 761846197 761846198 761846199 761846200 761846201 761846202 761846203 761846204 761846205 761846206 761846207 761846208 761846209 761846210 761846211 761846212 761846213 761846214 761846215 761846216 761846217 761846218 761846219 761846220 761846223 761846224 761846225 761846226 761846227 761846228 761846229 761846230 761846231 761846232 761846233 761846234 761846235 761846236 761846237 761846238 761846239 761846240 761846241 761846242 761846243 761846244 761846245 761846246 761846247 761846248 761846249 761846250 761846251 761846252 761846253 761846254 761846255 761846256 761846257 761846258 761846259 761846260 761846261 761846262 761846263 761846264 761846265 761846266 761846267 761846268 761846269 761846270 761846271 761846272 761846273 761846274 761846275 761846276 761846277 761846278 761846279 761846280 761846281 761846282 761846283 761846284 761846285 761846286 761846287 761846288 761846289 761846290 761846291 761846292 761846293 761846294 761846295 761846296 761846297 761846298 761846299 761846300 761846301 761846302 761846303 761846304 761846305 761846306 761846307 761846308 761846309 761846310 761846311 761846312 761846313 761846314 761846315 761846316 761846317 761846318 761846319 761846320 761846321 761846322 761846323 761846324 761846325 761846326 761846327 761846328 761846329 761846330 761846331 761846332 761846333 761846334 761846335 761846336 761846337 761846338 761846339 761846340 761846341 761846342 761846343 761846344 761846345 761846346 761846347 761846348 761846349 761846350 761846351 761846352 761846353 761846354 761846355 761846356 761846357 761846358 761846359 761846360 761846361 761846362 761846363 761846364 761846365 761846366 761846367 761846368 761846369 761846370 761846371 761846372 761846373 761846374 761846375 761846376 761846377 761846378 761846379 761846380 761846381 761846382 761846383 761846384 761846385 761846386 761846387 761846388 761846389 761846390 761846391 761846392 761846393 761846394 761846395 761846396 761846397 761846398 761846399 761846400 761846401 761846402 761846403 761846404 761846405 761846406 761846407 761846408 761846409 761846410 761846411 761846412 761846413 761846414 761846415 761846416 761846417 761846418 761846419 761846420 761846421 761846422 761846423 761846424 761846425 761846426 761846427 761846428 761846429 761846430 761846431 761846432 761846433 761846434 761846435 761846436 761846437 761846438 761846439 761846440 761846441 761846442 761846443 761846444 761846445 761846446 761846447 761846448 761846449 761846450 761846451 761846452 761846453 761846454 761846455 761846456 761846457 761846458 761846459 761846460 761846461 761846462 761846463 761846464 761846465 761846466 761846467 761846468 761846469 761846470 761846471 761846472 761846473 761846474 761846475 761846476 761846477 761846478 761846479 761846480 761846481 761846482 761846483 761846484 761846485 761846486 761846487 761846488 761846489 761846490 761846491 761846492 761846493 761846494 761846495 761846496 761846497 761846498 761846499 761846500 761846501 761846502 761846503 761846504 761846505 761846506 761846507 761846508 761846509 761846510 761846511 761846512 761846513 761846514 761846515 761846516 761846517 761846518 761846519 761846520 761846521 761846522 761846523 761846524 761846525 761846526 761846527 761846528 761846529 761846530 761846538 761846539 761846540 761846541 761846542 761846543 761846544 761846545 761846546 761846547 761846548 761846549 761846550 761846551 761846552 761846553 761846554 761846555 761846556 761846557 761846558 761846559 761846560 761846561 761846562 761846563 761846564 761846565 761846566 761846567 761846568 761846569 761846570 761846571 761846572 761846573 761846574 761846575 761846576 761846577 761846578 761846579 761846580 761846581 761846582 761846583 761846584 761846585 761846586 761846587 761846588 761846589 761846590 761846591 761846592 761846593 761846594 761846595 761846596 761846597 761846598 761846599 761846600 761846601 761846602 761846603 761846604 761846605 761846606 761846607 761846608 761846609 761846610 761846611 761846612 761846613 761846614 761846615 761846616 761846617 761846618 761846619 761846620 761846621 761846622 761846623 761846624 761846625 761846626 761846627 761846628 761846629 761846630 761846631 761846632 761846633 761846634 761846635 761846636 761846637 761846638 761846639 761846640 761846641 761846642 761846643 761846644 761846645 761846646 761846647 761846648 761846649 761846650 761846651 761846652 761846653 761846654 761846655 761846656 761846657 761888898 761888908 761888909 761888910 761888911 761888912 761888913 761888914 761888915 761888916 761888917 761888918 761888919 761888920 761888921 761888922 761888923 761888924 761888925 761888926 761888927 761888928 761888929 761888930 761888931 761888932 761888940 761888941 761888943 761888944 761888945 761888946 761888947 761888948 761888949 761888950 761888951 761888952 761888953 761888954 761888955 761888956 761888957 761888958 761888959 761888960 761888961 761888962 761888963 761888964 761888965 761888966 761888967 761888968 761888969 761888970 761888971 761888972 761888973 761888974 761888975 761888976 761888977 761888978 761888979 761888980 761888981 761888982 761888983 761888984 761888985 761888986 761888987 761888988 761888993 761888994 761888995 761888996 761888997 761888998 761888999 761889000 761889001 761889002 761889003 761889004 761889005 761889006 761889007 761889008 761889009 761889010 761889011 761889012 761889013 761889014 761889015 761889016 761889017 761889018 761889019 761889020 761889021 761889022 761889023 761889024 761889025 761889026 761889027 761889028 761889029 761889030 761889031 761889032 761889033 761889034 761889035 761889036 761889037 761889038 761889039 761889040 761889041 761889042 761889043 761889046 761889047 761889048 761889049 761889050 761889051 761889052 761889053 761889054 761889055 761889056 761889057 761889058 761889059 761889060 761889061 761889062 761889063 761889064 761889065 761889066 761889067 761889068 761889069 761889070 761889071 761889072 761889073 761889074 761889075 761889076 761889077 761889078 761889079 761889080 761889081 761889082 761889083 761889084 761889085 761889086 761889087 761889088 761889089 761889090 761889091 761889092 761889093 761889094 761889095 761889096 761889097 761889098 761889099 761889100 761889101 761889102 761889103 761889104 761889105 761889106 761889107 761889108 761889109 761889110 761889111 761889112 761889113 761889114 761889115 761889116 761889117 761889118 761889119 761889120 761889121 761889122 761889123 761889124 761889125 761889126 761889127 761889128 761889129 761889130 761889131 761889132 761889133 761889134 761889135 761889136 761889137 761889138 761889139 761889140 761889141 761889142 761889143 761889146 761889147 761889148 761889149 761889150 761889151 761889152 761889153 761889154 761889155 761889156 761889157 761889158 761889159 761889160 761889161 761889162 761889163 761889164 761889165 761889166 761889167 761889168 761889169 761889170 761889171 761889172 761889173 761889174 761889175 761889176 761889177 761889178 761889179 761889180 761889181 761889182 761889183 761889184 761889185 761889186 761889187 761889188 761889189 761889190 761889191 761889192 761889193 761889194 761889195 761889196 761889197 761889198 761889199 761889200 761889201 761889202 761889203 761889204 761889205 761889206 761889207 761889208 761889209 761889210 761889211 761889212 761889213 761889214 761889215 761889216 761889217 761889218 761889219 761889220 761889221 761889222 761889223 761889224 761889225 761889226 761889227 761889228 761889229 761889230 761889231 761889232 761889233 761889234 761889235 761889236 761889237 761889238 761889239 761889240 761889241 761889242 761889243 761889244 761889245 761889246 761889247 761889248 761889249 761889250 761889251 761889252 761889253 761889254 761889255 761889256 761889257 761889258 761889259 761889260 761889261 761889262 761889263 761889264 761889265 761889266 761889267 761889268 761889269 761889270 761889271 761889272 761889273 761889274 761889275 761889276 761889277 761889278 761889279 761889280 761889281 761889282 761889283 761889284 761889285 761889286 761889287 761889288 761889289 761889290 761889291 761889292 761889293 761889294 761889295 761889296 761889297 761889298 761889299 761889300 761889301 761889302 761889303 761889304 761889305 761889306 761889307 761889308 761889309 761889310 761889311 761889312 761889313 761889314 761889315 761889316 761889317 761889318 761889319 761889320 761889321 761889322 761889323 761889324 761889325 761889326 761889327 761889328 761889329 761889330 761889331 761889332 761889333 761889334 761889335 761889336 761889337 761889338 761889339 761889340 761889341 761889342 761889343 761889344 761889345 761889372 761889373 761889374 761889375 761889376 761889377 761889379 761889380 761889381 761889391 761889392 761889393 761889394 761889395 761889396 761889397 761889398 761889399 761889400 761889401 761889402 761889403 761889404 761889405 761889406 761889407 761889408 761889409 761889410 761889411 761889412 761889413 761889414 761889415 761889417 761889418 761889419 761889420 761889421 761889422 761889423 761889424 761889425 761889426 761889427 761889428 761889429 761889430 761889431 761889432 761889433 761889434 761889435 761889436 761889437 761889438 761889439 761889440 761889441 761889442 761889443 761889444 761889445 761889446 761889447 761889448 761889449 761889450 761889451 761889452 761889453 761889454 761889455 761889456 761889457 761889458 761889459 761889460 761889461 761889462 761889463 761889464 761889465 761889466 761889467 761889468 761889469 761889470 761889471 761889472 761889473 761889474 761889475 761889476 761889477 761889478 761889479 761889480 761889481 761889482 761889483 761889484 761889485 761889486 761889487 761889488 761889489 761889490 761889491 761889492 761889493 761889494 761889495 761889496 761889497 761889498 761889499 761889500 761889501 761889502 761889503 761889504 761889505 761889506 761889507 761889508 761889509 761889510 761889511 761889512 761889513 761889514 761889515 761889516 761889517 761889518 761889519 761889520 761889521 761889522 761889523 761889524 761889525 761889526 761889527 761889528 761889529 761889530 761889531 761889532 761889533 761889534 761889535 761889536 761889537 761889538 761889539 761889540 761889541 761889542 761889543 761889544 761889545 761889546 761889547 761889548 761889549 761889550 761889551 761889552 761889553 761889554 761889555 761889556 761889557 761889558 761889559 761889560 761889561 761889562 761889563 761889564 761889565 761889566 761889567 761889568 761889569 761889570 761889571 761889572 761889573 761889574 761889575 761889576 761889577 761889578 761889579 761889580 761889581 761889582 761889583 761889584 761889585 761889586 761889587 761889588 761889589 761889590 761889591 761889592 761889593 761889594 761889595 761889596 761889597 761889598 761889599 761889600 761889601 761889602 761889603 761889604 761889605 761889606 761889607 761889608 761889609 761889610 761889611 761889612 761889613 761889614 761889615 761889616 761889617 761889618 761889619 761889620 761889621 761889622 761889623 761889624 761889625 761889626 761889627 761889628 761889629 761889630 761889631 761889632 761889633 761889634 761889635 761889636 761889637 761889638 761889639 761889640 761889641 761889642 761889643 761889644 761889645 761889646 761889647 761889648 761889649 761889650 761889651 761889652 761889653 761889654 761889655 761889656 761889657 761889658 761889659 761889660 761889661 761889662 761889663 761889664 761889665 761889666 761889667 761889668 761889669 761889670 761889671 761889672 761889673 761889674 761889675 761889676 761889677 761889678 761889679 761889680 761889681 761889682 761889683 761889684 761889685 761889686 761889687 761889688 761889689 761889690 761889691 761889692 761889693 761889694 761889695 761889696 761889697 761889698 761889699 761889700 761889701 761889702 761889703 761889704 761889705 761889706 761889707 761889708 761889709 761889710 761889711 761889712 761889713 761889714 761889715 761889716 761889717 761889718 761889719 761889720 761889721 761889722 761889723 761889724 761889725 761889726 761889727 761889728 761889729 761889730 761889731 761889732 761889733 761889734 761889735 761889736 761889737 761889738 761889739 761889740 761889741 761889742 761889743 761889744 761889745 761889746 761889747 761889748 761889749 761889750 761889751 761889752 761889753 761889754 761889755 761889756 761889757 761889758 761889759 761889760 761889761 761889762 761889763 761889764 761889765 761889766 761889767 761889768 761889769 761889770 761889771 761889772 761889773 761889774 761889775 761889776 761889777 761889778 761889779 761889780 761889781 761889782 761889783 761889784 761889785 761889786 761889787 761889788 761889789 761889790 761889791 761889792 761889793 761889794 761889795 761889796 761889797 761889798 761889799 761889800 761889801 761889802 761889803 761889804 761889805 761889806 761889807 761889808 761889809 761889810 761889811 761889812 761889813 761889814 761889815 761889816 761889817 761889818 761889819 761889820 761889821 761889822 761889823 761889824 761889825 761889826 761889827 761889828 761889829 761889830 761889831 761889832 761889833 761889834 761889835 761889836 761889837 761889838 761889839 761889840 761889841 761889842 761889843 761889844 761889845 761889846 761889847 761889848 761889849 761889850 761889851 761889852 761889853 761889854 761889855 761889856 761889857 761889858 761889859 761889860 761889861 761889862 761889863 761889864 761889865 761889866 761889867 761889868 761889869 761889870 761889871 761889872 761889873 761889874 761889875 761889876 761889877 761889878 761889879 761889880 761889881 761889882 761889883 761889884 761889885 761889886 761889887 761889888 761889889 761889890 761889891 761889892 761889893 761889894 761889895 761889896 761889897 761889898 761889899 761889900 761889901 761889902 761889903 761889904 761889905 761889906 761889907 761889908 761889909 761889910 761889911 761889912 761889913 761889914 761889915 761889916 761889917 761889918 761889919 761889920 761889921 761889922 761889923 761889924 761889925 761889926 761889927 761889928 761889929 761889930 761889931 761889932 761889933 761889934 761889935 761889936 761889937 761889938 761889939 761889940 761889941 761889942 761889943 761889944 761889945 761889946 761889947 761889948 761889949 761889950 761889951 761889952 761889953 761889954 761889955 761889956 761889957 761889958 761889959 761889960 761889961 761889962 761889963 761889964 761889965 761889966 761889967 761889968 761889969 761889970 761889971 761889972 761889973 761889974 761889975 761889976 761889977 761889978 761889979 761889980 761889981 761889982 761889983 761889984 761889985 761889986 761889987 761889988 761889989 761889990 761889991 761889992 761889993 761889994 761889995 761889996 761889997 761889998 761889999 761890000 761890001 761890002 761890003 761890004 761890005 761890006 761890007 761890008 761890009 761890010 761890011 761890012 761890013 761890014 761890015 761890016 761890017 761890018 761890019 761890020 761890021 761890022 761890023 761890024 761890025 761890026 761890027 761890028 761890029 761890030 761890031 761890032 761890033 761890034 761890035 761890036 761890037 761890038 761890039 761890040 761890041 761890042 761890043 761890044 761890045 761890046 761890047 761890048 761890049 761890050 761890051 761890052 761890053 761890054 761890055 761890056 761890057 761890058 761890059 761890060 761890061 761890062 761890063 761890064 761890065 761890066 761890067 761890068 761890069 761890070 761890071 761890072 761890073 761890074 761890075 761890076 761890077 761890078 761890079 761890080 761890081 761890082 761890083 761890084 761890085 761890086 761890087 761890088 761890089 761890090 761890091 761890092 761890093 761890094 761890095 761890096 761890097 761890098 761890099 761890100 761890101 761890102 761890103 761890104 761890105 761890106 761890107 761890108 761890109 761890110 761890111 761890112 761890113 761890114 761890115 761890116 761890117 761890118 761890119 761890120 761890121 761890122 761890123 761890124 761890125 761890126 761890127 761890128 761890129 761890130 761890131 761890132 761890133 761890134 761890137 761890140 761890141 761890142 761890145 761890146 761890148 761890149 761890150 761890151 761890152 761890153 761890154 761890155 761890156 761890157 761890158 761890159 761890160 761890161 761890162 761890163 761890164 761890165 761890166 761890167 761890168 761890169 761890170 761890171 761890172 761890173 761890174 761890175 761890176 761890177 761890178 761890179 761890180 761890181 761890182 761890183 761890184 761890185 761890186 761890187 761890188 761890189 761890190 761890191 761890192 761890193 761890194 761890195 761890196 761890197 761890198 761890199 761890200 761890201 761890202 761890203 761890204 761890205 761890206 761890207 761890208 761890209 761890210 761890211 761890212 761890213 761890214 761890215 761890216 761890217 761890218 761890219 761890220 761890221 761890222 761890223 761890224 761890225 761890226 761890227 761890228 761890229 761890230 761890231 761890232 761890233 761890234 761890235 761890236 761890237 761890238 761890239 761890240 761890241 761890242 761890243 761890244 761890245 761890246 761890247 761890248 761890249 761890250 761890251 761890252 761890253 761890254 761890255 761890256 761890257 761890258 761890259 761890260 761890261 761890262 761890263 761890264 761890265 761890266 761890267 761890268 761890269 761890270 761890271 761890272 761890273 761890274 761890275 761890276 761890277 761890278 761890279 761890280 761890281 761890282 761890283 761890284 761890285 761890286 761890287 761890288 761890289 761890290 761890291 761890292 761890293 761890294 761890295 761890296 761890297 761890298 761890299 761890300 761890301 761890302 761890303 761890304 761890305 761890306 761890307 761890308 761890309 761890310 761890313 761890314 761890315 761890317 761890318 761890319 761890320 761890321 761890322 761890323 761890324 761890325 761890326 761890327 761890328 761890329 761890330 761890331 761890332 761890333 761890334 761890335 761890336 761890337 761890338 761890339 761890340 761890341 761890342 761890343 761890344 761890345 761890346 761890347 761890348 761890349 761890350 761890351 761890352 761890353 761890354 761890355 761890356 761890357 761890358 761890359 761890360 761890361 761890362 761890363 761890364 761890365 761890366 761890367 761890368 761890369 761890370 761890371 761890372 761890373 761890374 761890375 761890376 761890377 761890378 761890379 761890380 761890381 761890382 761890383 761890384 761890385 761890386 761890387 761890388 761890389 761890390 761890391 761890392 761890393 761890394 761890395 761890396 761890397 761890398 761890399 761890400 761890401 761890402 761890403 761890404 761890405 761890406 761890407 761890408 761890409 761890410 761890411 761890412 761890413 761890414 761890415 761890416 761890417 761890418 761890419 761890420 761890421 761890422 761890423 761890424 761890425 761890426 761890427 761890428 761890429 761890430 761890431 761890432 761890433 761890434 761890435 761890436 761890437 761890438 761890439 761890440 761890441 761890442 761890443 761890444 761890445 761890446 761890447 761890448 761890449 761890450 761890451 761890452 761890453 761890454 761890455 761890456 761890457 761890458 761890459 761890460 761890461 761890462 761890463 761890464 761890465 761890466 761890467 761890468 761890469 761890470 761890471 761890472 761890473 761890474 761890475 761890476 761890477 761890478 761890479 761890480 761890481 761890482 761890483 761890484 761890485 761890486 761890487 761890488 761890489 761890490 761890491 761890492 761890493 761890494 761890495 761890496 761890497 761890498 761890499 761890500 761890501 761890502 761890503 761890504 761890505 761890506 761890507 761890508 761890509 761890510 761890511 761890512 761890513 761890514 761890515 761890516 761890517 761890518 761890519 761890520 761890521 761890522 761890523 761890524 761890525 761890526 761890527 761890528 761890529 761890530 761890531 761890532 761890533 761890534 761890535 761890536 761890537 761890538 761890539 761890540 761890541 761890542 761890543 761890544 761890545 761890546 761890547 761890548 761890549 761890550 761890551 761890552 761890553 761890554 761890555 761890556 761890557 761890558 761890559 761890560 761890561 761890562 761890563 761890564 761890565 761890566 761890567 761890568 761890569 761943777 761959265 762339040 762340585 762368931 762417190 762417238 762417259 762417640 762417968 762417969 762418255 762419031 762419045 762419057 762419144 762419290 762419770 762419908 762419961 762419968 762419976 762419999 762420000 762420045 762420264 762420282 762420297 762420337 762420397 762420400 762420508 762420526 762420537 762420645 762420753 762420779 762420817 762420963 762421011 762421020 762421217 762421412 762755085 762755086 762755087 762755088 762755089 762755090 762755091 762755092 762755093 762755094 762755095 762755103 762755104 762755105 762755106 762755107 762755108 762755109 762755110 762755111 762755112 762755113 762755114 762755115 762755116 762755117 762755118 762755119 762755120 762755121 762755122 762755123 762755124 762755125 762755126 762755127 762755128 762755129 762755130 762755131 762755132 762755133 762755134 762755135 762755136 762755137 762755138 762755139 762755140 762755141 762755142 762755143 762755144 762755145 762755146 762755147 762755148 762755149 762755150 762755151 762755152 762755153 762755154 762755155 762755156 762755157 762755158 762755159 762755160 762755161 762755162 762755170 762755171 762755172 762755173 762755174 762755175 762755176 762755177 762755178 762755179 762755180 762755181 762755182 762755183 762755184 762755185 762755186 762755187 762755188 762755189 762755190 762755191 762755192 762755193 762755194 762755195 762755196 762755197 762755198 762755199 762755200 762755201 762755202 762755203 762755204 762755205 762755206 762755207 762755208 762755209 762755210 762755211 762755212 762755213 762755214 762755215 762755216 762755217 762755218 762755219 762755220 762755221 762755222 762755223 762755224 762755225 762755226 762755227 762755228 762755229 762755230 762755231 762755232 762755233 762755234 762755235 762755236 762755237 762755238 762755239 762755240 762755241 762755242 762755243 762755244 762755245 762755246 762755247 762755248 762755249 762755250 762755251 762755252 762755253 762755254 762755255 762755256 762755257 762755258 762755259 762755260 762755261 762755262 762755263 762755264 762755265 762755266 762755267 762755268 762755269 762755270 762755271 762755272 762755273 762755274 762755275 762755276 762755277 762755278 762755279 762755280 762755281 762755282 762755283 762755284 762755285 762755286 762755287 762755293 762755294 762755295 762755296 762755297 762755298 762755299 762755300 762755301 762755302 762755303 762755304 762755305 762755306 762755307 762755308 762755309 762755310 762755311 762755312 762755313 762755314 762755315 762755316 762755317 762755318 762755319 762755320 762755321 762755322 762755323 762755324 762755325 762755326 762755327 762755328 762755329 762755330 762755331 762755332 762755333 762755334 762755335 762755336 762755337 762755338 762755339 762755340 762755341 762755342 762755343 762755344 762755345 762755346 762755347 762755348 762755349 762755350 762755351 762755352 762755353 762755354 762755355 762755356 762755357 762755358 762755359 762755360 762755361 762755362 762755363 762755364 762755365 762755366 762755367 762755368 762755369 762755370 762755371 762755372 762755373 762755374 762755375 762755376 762755377 762755378 762755379 762755380 762755381 762755382 762755383 762755384 762755385 762755386 762755387 762755388 762755389 762755390 762755391 762755392 762755393 762755394 762755395 762755396 762755397 762755398 762755399 762755400 762755401 762755402 762755403 762755404 762755405 762755406 762755407 762755408 762755409 762755410 762755411 762755412 762755413 762755414 762755415 762755416 762755417 762755418 762755419 762755420 762755421 762755422 762755423 762755424 762755425 762755426 762755427 762755428 762755429 762755430 762755431 762755432 762755433 762755434 762755435 762755436 762755437 762755438 762755439 762755440 762755441 762755442 762755443 762755444 762755445 762755446 762755447 762755448 762755449 762755450 762755451 762755452 762755453 762755454 762755455 762755456 762755457 762755458 762755459 762755460 762755461 762755462 762755463 762755464 762755465 762755466 762755467 762755468 762755469 762755470 762755471 762755472 762755473 762755474 762755475 762755476 762755477 762755478 762755479 762755480 762755481 762755482 762755483 762755484 762755485 762755486 762755487 762755488 762755489 762755490 762755491 762755492 762755493 762755494 762755495 762755496 762755497 762755498 762755499 762755500 762755501 762755502 762755503 762755504 762755505 762755506 762755507 762755508 762755509 762755510 762755511 762755512 762755513 762755514 762755515 762755516 762755517 762755518 762755519 762755520 762755521 762755522 762755523 762755524 762755525 762755526 762755527 762755528 762755529 762755530 762755531 762755532 762755533 762755534 762755535 762755536 762755537 762755538 762755539 762755540 762755541 762755542 762755543 762755544 762755545 762755546 762755547 762755548 762755549 762755550 762755551 762755552 762755553 762755554 762755555 762755556 762755557 762755558 762755559 762755560 762755561 762755562 762755563 762755564 762755565 762755566 762755567 762755568 762755569 762755570 762755571 762755572 762755573 762755574 762755575 762755576 762755577 762755578 762755579 762755580 762755581 762755582 762755583 762755584 762755585 762755586 762755587 762755588 762755589 762755590 762755591 762755592 762755593 762755594 762755595 762755596 762755597 762755598 762755599 762755600 762755601 762755602 762755603 762758490 762758499 762758500 762758501 762758504 762758505 762758506 762758507 762758508 762758509 762758510 762758511 762758512 762758513 762758514 762758515 762758516 762758517 762758518 762758519 762758520 762758521 762758522 762758523 762758524 762758525 762758526 762758527 762758528 762758529 762758530 762758531 762758532 762758533 762758534 762758535 762758536 762758537 762758538 762758539 762758540 762758541 762758542 762758543 762758544 762758545 762758546 762758547 762758548 762758549 762758550 762758551 762758552 762758553 762758554 762758555 762758556 762758557 762758558 762758559 762758560 762758561 762758562 762758563 762758564 762758565 762758566 762758567 762758568 762758569 762758570 762758571 762758572 762758573 762758574 762758575 762758576 762758577 762758578 762758579 762758580 762758581 762758582 762758583 762758584 762758585 762758586 762758587 762758588 762758589 762758590 762758591 762758596 762758597 762758598 762758599 762758600 762758601 762758602 762758603 762758604 762758605 762758606 762758607 762758608 762758609 762758610 762758611 762758612 762758613 762758614 762758615 762758616 762758617 762758618 762758619 762758620 762758621 762758622 762758623 762758624 762758625 762758626 762758627 762758628 762758629 762758630 762758631 762758632 762758633 762758634 762758635 762758636 762758637 762758638 762758639 762758640 762758641 762758642 762758643 762758644 762758645 762758646 762758647 762758648 762758649 762758650 762758651 762758652 762758653 762758654 762758655 762758656 762758657 762758658 762758659 762758660 762758661 762758662 762758663 762758664 762758665 762758666 762758669 762758670 762758671 762758672 762758673 762758675 762758676 762758677 762758678 762758679 762758680 762758681 762758682 762758683 762758684 762758685 762758686 762758687 762758688 762758689 762758690 762758691 762758692 762758693 762758694 762758695 762758696 762758697 762758698 762758699 762758700 762758701 762758702 762758703 762758704 762758705 762758706 762758707 762758708 762758709 762758710 762758711 762758712 762758713 762758714 762758715 762758716 762758717 762758718 762758719 762758720 762758721 762758722 762758723 762758724 762758725 762758726 762758727 762758728 762758729 762758730 762758731 762758732 762758733 762758734 762758735 762758736 762758737 762758738 762758739 762758740 762758741 762758742 762758743 762758744 762758745 762758746 762758747 762758748 762758749 762758750 762758751 762758752 762758753 762758754 762758755 762758756 762758757 762758758 762758759 762758760 762758761 762758762 762758763 762758764 762758765 762758766 762758767 762758768 762758769 762758770 762758771 762758772 762758773 762758774 762758775 762758776 762758777 762758778 762758779 762758780 762758781 762758782 762758783 762758784 762758785 762758786 762758787 762758788 762758789 762758790 762758791 762758792 762758793 762758794 762758795 762758796 762758797 762758798 762758799 762758800 762758801 762758802 762758803 762758804 762758805 762758806 762758807 762758808 762758809 762758810 762758811 762758812 762758813 762758814 762758815 762758816 762758817 762758818 762758819 762758820 762758821 762758822 762758823 762758824 762758825 762758826 762758827 762758828 762758829 762758830 762758831 762758832 762758833 762758834 762758835 762758836 762758837 762758838 762758839 762758840 762758841 762758842 762758843 762758844 762758845 762758846 762758847 762758848 762758849 762758850 762758851 762758852 762758853 762758854 762758855 762758856 762758857 762758858 762758859 762758860 762758861 762758862 762758863 762758864 762758865 762758866 762758867 762758868 762758869 762758870 762758871 762758872 762758873 762758874 762758875 762758876 762758877 762758878 762758879 762758880 762758881 762758882 762758883 762758884 762758885 762758886 762758887 762758888 762758889 762758890 762758891 762758892 762758893 762758894 762758895 762758896 762758897 762758898 762758899 762758900 762758901 762758902 762758903 762758904 762758905 762758906 762758907 762758908 762758909 762758910 762758911 762758912 762758913 762758914 762758915 762758916 762758917 762758918 762758919 762758920 762758921 762758922 762758923 762758924 762758925 762758926 762758927 762758928 762758929 762758930 762758931 762758932 762758933 762758934 762758935 762758936 762758937 762758938 762758939 762758940 762758941 762758942 762758943 762758944 762758945 762758946 762758947 762758948 762758949 762758950 762758951 762758952 762758953 762758954 762758955 762758956 762758957 762758958 762758959 762758960 762758961 762758962 762758963 762758964 762758965 762758966 762758967 762758968 762758969 762758970 762758971 762758972 762758973 762758974 762758975 762758976 762758977 762758978 762758979 762758980 762758981 762758982 762758983 762758984 762758985 762758986 762758987 762758988 762758989 762758990 762758991 762758992 762758993 762758994 762758995 762758996 762758997 762758998 762758999 762759000 762759001 762759002 762759003 762759004 762759005 762759006 762814859 762814862 762814863 762814865 762814866 762814867 762814868 762814869 762814870 762814871 762814872 762814873 762814874 762814875 762814876 762814877 762814878 762814879 762814880 762814881 762814882 762814883 762814884 762814885 762814886 762814887 762814888 762814889 762814890 762814891 762814892 762814893 762814894 762814895 762814896 762814897 762814898 762814899 762814900 762814901 762814902 762814903 762814904 762814905 762814906 762814907 762814908 762814909 762814910 762814911 762814912 762814913 762814914 762814915 762814916 762814917 762814918 762814919 762814920 762814921 762814922 762814923 762814924 762814925 762814926 762814927 762814928 762814929 762814930 762814931 762814932 762814933 762814934 762814935 762814936 762814937 762814938 762814943 762814944 762814945 762814946 762814947 762814948 762814949 762814950 762814951 762814952 762814953 762814954 762814955 762814956 762814957 762814958 762814959 762814960 762814961 762814962 762814963 762814964 762814965 762814966 762814967 762814968 762814969 762814970 762814971 762814972 762814973 762814974 762814975 762814976 762814977 762814978 762814979 762814980 762814981 762814982 762814983 762814984 762814985 762814986 762814987 762814988 762814989 762814990 762814991 762814992 762814993 762814994 762814995 762814996 762814997 762814998 762814999 762815000 762815001 762815002 762815003 762815004 762815005 762815006 762815007 762815008 762815009 762815010 762815011 762815012 762815013 762815014 762815015 762815016 762815017 762815018 762815019 762815020 762815021 762815022 762815023 762815024 762815025 762815026 762815027 762815028 762815029 762815030 762815031 762815032 762815033 762815034 762815035 762815036 762815037 762815038 762815039 762815040 762815041 762815042 762815043 762815044 762815045 762815046 762815047 762815048 762815049 762815050 762815051 762815052 762815053 762815054 762815055 762815056 762815057 762815058 762815059 762815060 762815061 762815062 762815063 762815064 762815065 762815066 762815067 762815068 762815069 762815070 762815071 762815072 762815073 762815074 762815075 762815076 762815077 762815078 762815079 762815080 762815081 762815082 762815083 762815084 762815085 762815086 762815087 762815088 762815089 762815090 762815091 762815092 762815093 762815094 762815095 762815096 762815097 762815098 762815099 762815100 762815101 762815102 762815103 762815104 762815105 762815106 762815107 762815108 762815109 762815110 762815111 762815112 762815113 762815114 762815115 762815116 762815117 762815118 762815119 762815120 762815121 762815122 762815123 762815124 762815125 762815126 762815127 762815128 762815129 762815130 762815131 762815132 762815133 762815134 762815135 762815136 762815137 762815138 762815139 762815140 762815141 762815142 762815143 762815144 762815145 762815146 762815147 762815148 762815149 762815150 762815151 762815152 762815153 762815154 762815155 762815156 762815157 762815158 762815159 762815160 762815161 762815162 762815163 762815164 762815165 762815166 762815167 762815168 762815169 762815170 762815171 762815172 762815173 762815174 762815175 762815176 762815177 762815178 762815183 762815184 762815185 762815186 762815187 762815188 762815189 762815190 762815191 762815192 762815193 762815194 762815195 762815196 762815197 762815198 762815199 762815200 762815201 762815202 762815203 762815204 762815205 762815206 762815207 762815208 762815209 762815210 762815211 762815212 762815213 762815214 762815215 762815216 762815217 762815218 762815219 762815220 762815221 762815222 762815223 762815224 762815225 762815226 762815227 762815228 762815229 762815230 762815231 762815232 762815233 762815234 762815235 762815236 762815237 762815238 762815239 762815240 762815241 762815242 762815243 762815244 762815245 762815246 762815247 762815248 762815249 762815250 762815251 762815252 762815253 762815254 762815255 762815256 762815257 762815258 762815259 762815260 762815261 762815262 762815263 762815264 762815265 762815266 762815267 762815268 762815269 762815270 762815271 762815272 762815273 762815274 762815275 762815276 762815277 762815278 762815279 762815280 762815281 762815282 762815283 762815284 762815285 762815286 762815287 762815288 762815289 762815290 762815291 762815292 762815293 762815294 762815295 762815296 762815297 762815298 762815299 762815300 762815301 762815302 762815303 762815304 762815305 762815306 762815307 762815308 762815309 762815310 762815311 762815312 762815313 762815314 762815315 762815316 762815317 762815318 762815319 762815320 762815321 762815322 762815323 762815324 762815325 762815326 762815327 762815328 762815329 762815330 762815331 762815332 762815333 762815334 762815335 762815336 762815337 762815338 762815339 762815340 762815341 762815342 762815343 762815344 762815345 762815346 762815347 762815348 762815349 762815350 762815351 762815352 762815353 762815354 762815355 762815356 762815357 762815358 762815359 762815360 762815361 762815362 762815363 762815364 762815365 762815366 762815367 762815368 762815369 762817220 762817229 762817230 762817231 762817233 762817234 762817235 762817236 762817237 762817238 762817239 762817240 762817241 762817242 762817243 762817244 762817245 762817246 762817247 762817248 762817249 762817250 762817251 762817252 762817253 762817254 762817255 762817256 762817257 762817258 762817259 762817260 762817261 762817262 762817263 762817264 762817265 762817266 762817267 762817268 762817269 762817270 762817271 762817272 762817273 762817274 762817275 762817276 762817277 762817278 762817279 762817280 762817281 762817282 762817283 762817284 762817285 762817286 762817287 762817288 762817289 762817290 762817291 762817292 762817293 762817294 762817295 762817296 762817297 762817298 762817299 762817300 762817301 762817302 762817303 762817304 762817309 762817310 762817311 762817312 762817313 762817314 762817315 762817316 762817317 762817318 762817319 762817320 762817321 762817322 762817323 762817324 762817325 762817326 762817327 762817328 762817329 762817330 762817331 762817332 762817333 762817334 762817335 762817336 762817337 762817338 762817339 762817340 762817341 762817342 762817343 762817344 762817345 762817346 762817347 762817348 762817349 762817350 762817351 762817352 762817353 762817354 762817355 762817356 762817357 762817358 762817359 762817360 762817361 762817362 762817363 762817364 762817365 762817366 762817367 762817368 762817369 762817370 762817371 762817372 762817373 762817374 762817375 762817376 762817377 762817378 762817379 762817380 762817381 762817382 762817383 762817384 762817385 762817386 762817387 762817388 762817389 762817390 762817391 762817392 762817393 762817394 762817395 762817396 762817397 762817398 762817399 762817400 762817405 762817406 762817407 762817408 762817409 762817410 762817411 762817412 762817413 762817414 762817415 762817416 762817417 762817418 762817419 762817420 762817421 762817422 762817423 762817424 762817425 762817426 762817427 762817428 762817429 762817430 762817431 762817432 762817433 762817434 762817435 762817436 762817437 762817438 762817439 762817440 762817441 762817442 762817443 762817444 762817445 762817446 762817447 762817448 762817449 762817450 762817451 762817452 762817453 762817454 762817455 762817456 762817457 762817458 762817459 762817460 762817461 762817462 762817463 762817464 762817465 762817466 762817467 762817468 762817469 762817470 762817471 762817472 762817473 762817474 762817475 762817476 762817477 762817478 762817479 762817480 762817481 762817482 762817483 762817484 762817485 762817486 762817487 762817488 762817489 762817490 762817491 762817492 762817493 762817494 762817495 762817496 762817497 762817498 762817499 762817500 762817501 762817502 762817503 762817504 762817505 762817506 762817507 762817508 762817509 762817510 762817511 762817512 762817513 762817514 762817515 762817516 762817517 762817518 762817519 762817520 762817521 762817522 762817523 762817524 762817525 762817526 762817527 762817528 762817529 762817530 762817531 762817532 762817533 762817534 762817535 762817536 762817537 762817538 762817539 762817540 762817541 762817542 762817543 762817544 762817545 762817546 762817547 762817548 762817549 762817550 762817551 762817552 762817553 762817554 762817555 762817556 762817557 762817558 762817559 762817560 762817561 762817562 762817563 762817564 762817565 762817566 762817567 762817568 762817569 762817570 762817571 762817572 762817573 762817574 762817575 762817576 762817577 762817578 762817579 762817580 762817581 762817582 762817583 762817584 762817585 762817586 762817587 762817588 762817589 762817590 762817591 762817592 762817593 762817594 762817595 762817596 762817597 762817598 762817599 762817600 762817601 762817602 762817603 762817604 762817605 762817606 762817607 762817608 762817609 762817610 762817611 762817612 762817613 762817614 762817615 762817616 762817617 762817618 762817619 762817620 762817621 762817622 762817623 762817624 762817625 762817626 762817627 762817628 762817629 762817630 762817631 762817632 762817633 762817634 762817635 762817636 762817637 762817638 762817639 762817640 762817641 762817642 762817643 762817644 762817645 762817646 762817647 762817648 762817649 762817650 762817651 762817652 762817653 762817654 762817655 762817656 762817657 762817658 762817659 762817660 762817661 762817662 762817663 762817664 762817665 762817666 762817667 762817668 762817669 762817670 762817671 762817672 762817673 762817674 762817675 762817676 762817677 762817678 762817679 762817680 762817681 762817682 762817683 762817684 762817685 762817686 762817687 762817688 762817689 762817690 762817691 762817692 762817693 762817694 762817695 762817696 762817697 762817698 762817699 762817700 762817701 762817702 762817703 762817704 762817705 762817706 762817707 762817708 762817709 762817710 762817711 762817712 762817713 762817714 762817715 762817716 762817717 762817718 762817719 762817720 762817721 762817722 762817723 762817724 762817725 762817726 762817727 762817728 762817729 762817730 762817731 762817732 762817733 762817734 762817735 762817736 762828406 762828412 762828413 762828414 762828415 762828416 762828417 762828418 762828419 762828420 762828421 762828422 762828423 762828424 762828425 762828426 762828427 762828428 762828429 762828430 762828431 762828432 762828433 762828434 762828435 762828436 762828437 762828438 762828439 762828440 762828441 762828442 762828443 762828444 762828445 762828446 762828447 762828448 762828449 762828450 762828451 762828452 762828453 762828454 762828455 762828456 762828457 762828458 762828459 762828460 762828461 762828462 762828463 762828464 762828465 762828466 762828467 762828468 762828469 762828470 762828471 762828472 762828473 762828474 762828475 762828476 762828477 762828478 762828479 762828480 762828481 762828482 762828483 762828484 762828485 762828486 762828493 762828494 762828495 762828496 762828497 762828498 762828499 762828500 762828501 762828502 762828503 762828504 762828505 762828506 762828507 762828508 762828509 762828510 762828511 762828512 762828513 762828514 762828515 762828516 762828517 762828518 762828519 762828520 762828521 762828522 762828523 762828524 762828525 762828526 762828527 762828528 762828529 762828530 762828531 762828532 762828533 762828534 762828535 762828536 762828537 762828538 762828539 762828540 762828541 762828542 762828543 762828544 762828545 762828546 762828547 762828548 762828549 762828550 762828551 762828552 762828553 762828554 762828555 762828556 762828557 762828558 762828559 762828560 762828561 762828562 762828563 762828564 762828565 762828566 762828567 762828568 762828569 762828570 762828571 762828572 762828573 762828574 762828575 762828576 762828577 762828578 762828579 762828580 762828581 762828582 762828583 762828584 762828585 762828586 762828587 762828588 762828589 762828590 762828591 762828592 762828593 762828594 762828595 762828596 762828597 762828598 762828599 762828600 762828601 762828602 762828603 762828604 762828605 762828606 762828607 762828608 762828609 762828610 762828611 762828612 762828613 762828614 762828615 762828616 762828617 762828618 762828619 762828620 762828621 762828622 762828623 762828624 762828625 762828626 762828627 762828628 762828629 762828630 762828631 762828632 762828633 762828634 762828635 762828636 762828637 762828638 762828639 762828640 762828641 762828642 762828643 762828644 762828645 762828646 762828647 762828648 762828649 762828650 762828651 762828652 762828653 762828654 762828655 762828656 762828657 762828658 762828659 762828660 762828661 762828662 762828663 762828664 762828665 762828666 762828667 762828668 762828669 762828670 762828671 762828672 762828673 762828674 762828675 762828676 762828677 762828678 762828679 762828680 762828681 762828682 762828683 762828684 762828685 762828686 762828687 762828688 762828689 762828690 762828691 762828692 762828693 762828694 762828695 762828696 762828697 762828698 762828699 762828700 762828701 762828702 762828703 762828704 762828705 762828708 762828709 762828710 762828712 762828713 762828714 762828715 762828716 762828717 762828718 762828719 762828720 762828721 762828722 762828723 762828724 762828725 762828726 762828727 762828728 762828729 762828730 762828731 762828732 762828733 762828734 762828735 762828736 762828737 762828738 762828739 762828740 762828741 762828742 762828743 762828744 762828745 762828746 762828747 762828748 762828749 762828750 762828751 762828752 762828753 762828754 762828755 762828756 762828757 762828758 762828759 762828760 762828761 762828762 762828763 762828764 762828765 762828766 762828767 762828768 762828769 762828770 762828771 762828772 762828773 762828774 762828775 762828776 762828777 762828778 762828779 762828780 762828781 762828782 762828783 762828784 762828785 762828786 762828787 762828788 762828789 762828790 762828791 762828792 762828793 762828794 762828795 762828796 762828797 762828798 762828799 762828800 762828801 762828802 762828803 762828804 762828805 762828806 762828807 762828808 762828809 762828810 762828811 762828812 762828813 762828814 762828815 762828816 762828817 762828818 762828819 762828820 762828821 762828822 762828823 762828824 762828825 762828826 762828827 762828828 762828829 762828830 762828831 762828832 762828833 762828834 762828835 762828836 762828837 762828838 762828839 762828840 762828841 762828842 762828843 762828844 762828845 762828846 762828847 762828848 762828849 762828850 762828851 762828852 762828853 762828854 762828855 762828856 762828857 762828858 762828859 762828860 762828861 762828862 762828863 762828864 762828865 762828866 762828867 762828868 762828869 762828870 762828871 762828872 762828873 762828874 762828875 762828876 762828877 762828878 762828879 762828880 762828881 762828882 762828883 762828884 762828885 762828886 762828887 762828888 762828889 762828890 762828891 762828892 762828893 762828894 762828895 762828896 762828897 762828898 762828899 762828900 762828901 762828902 762828903 762828904 762828905 762828906 762828907 762828908 762828909 762828910 762828911 762828912 762828913 762828914 762828915 762828916 762828917 762828918 762828919 762829159 762829164 762829165 762829166 762829167 762829168 762829169 762829170 762829171 762829172 762829173 762829174 762829175 762829176 762829177 762829178 762829184 762829185 762829186 762829187 762829189 762829190 762829191 762829192 762829193 762829194 762829195 762829196 762829197 762829198 762829199 762829200 762829201 762829202 762829203 762829204 762829205 762829206 762829207 762829208 762829209 762829210 762829211 762829212 762829213 762829214 762829215 762829216 762829217 762829218 762829219 762829220 762829221 762829222 762829223 762829224 762829225 762829226 762829227 762829228 762829229 762829230 762829231 762829232 762829233 762829234 762829235 762829236 762829237 762829238 762829239 762829240 762829241 762829242 762829243 762829244 762829245 762829246 762829247 762829248 762829249 762829250 762829251 762829252 762829253 762829254 762829255 762829256 762829257 762829258 762829259 762829260 762829261 762829262 762829263 762829264 762829265 762829266 762829267 762829268 762829269 762829270 762829271 762829272 762829273 762829274 762829275 762829276 762829277 762829278 762829279 762829280 762829281 762829282 762829283 762829284 762829285 762829286 762829287 762829288 762829289 762829290 762829291 762829292 762829293 762829294 762829295 762829296 762829297 762829298 762829299 762829300 762829301 762829302 762829303 762829304 762829305 762829306 762829307 762829308 762829309 762829310 762829311 762829312 762829313 762829314 762829315 762829316 762829317 762829318 762829319 762829320 762829321 762829322 762829323 762829324 762829325 762829326 762829327 762829328 762829329 762829330 762829331 762829332 762829333 762829334 762829335 762829336 762829337 762829338 762829339 762829340 762829341 762829342 762829343 762829344 762829345 762829346 762829347 762829352 762829353 762829354 762829355 762829356 762829357 762829358 762829359 762829360 762829361 762829362 762829363 762829364 762829365 762829366 762829367 762829368 762829369 762829370 762829371 762829372 762829373 762829374 762829375 762829376 762829377 762829378 762829379 762829380 762829381 762829382 762829383 762829384 762829385 762829386 762829387 762829388 762829389 762829390 762829391 762829392 762829393 762829394 762829395 762829396 762829397 762829398 762829399 762829400 762829401 762829402 762829403 762829404 762829405 762829406 762829407 762829408 762829409 762829410 762829411 762829412 762829413 762829414 762829415 762829416 762829417 762829418 762829419 762829420 762829421 762829422 762829423 762829424 762829425 762829426 762829427 762829428 762829429 762829430 762829431 762829432 762829433 762829434 762829435 762829436 762829437 762829438 762829439 762829440 762829441 762829442 762829443 762829444 762829445 762829446 762829447 762829448 762829449 762829450 762829451 762829452 762829453 762829454 762829455 762829456 762829457 762829458 762829459 762829460 762829461 762829462 762829463 762829464 762829465 762829466 762829467 762829468 762829469 762829470 762829471 762829472 762829473 762829474 762829475 762829476 762829477 762829478 762829479 762829480 762829481 762829482 762829483 762829484 762829485 762829486 762829487 762829488 762829489 762829490 762829491 762829492 762829493 762829494 762829495 762829496 762829497 762829498 762829499 762829500 762829501 762829502 762829503 762829504 762829505 762829506 762829507 762829508 762829509 762829510 762829511 762829512 762829513 762829514 762829515 762829516 762829517 762829518 762829519 762829520 762829521 762829522 762829523 762829524 762829525 762829526 762829527 762829528 762829529 762829530 762829531 762829532 762829533 762829534 762829535 762829536 762829537 762829538 762829539 762829540 762829541 762829542 762829543 762829544 762829545 762829546 762829547 762829548 762829549 762829550 762829551 762829552 762829553 762829554 762829555 762829556 762829557 762829558 762829559 762829560 762829561 762829562 762829563 762829564 762829565 762829566 762829567 762829568 762829569 762829570 762829571 762829572 762829573 762829574 762829575 762829576 762829577 762829578 762829579 762829580 762829581 762829582 762829583 762829584 762829585 762829586 762829587 762829588 762829593 762829594 762829595 762829596 762829597 762829598 762829599 762829600 762829601 762829602 762829603 762829604 762829605 762829606 762829607 762829608 762829609 762829610 762829611 762829612 762829613 762829614 762829615 762829616 762829617 762829618 762829619 762829620 762829621 762829622 762829623 762829624 762829625 762829626 762829627 762829628 762829629 762829630 762829631 762829632 762829633 762829634 762829635 762829636 762829637 762829638 762829639 762829640 762829641 762829642 762829643 762829644 762829645 762829646 762829647 762829648 762829649 762829650 762829651 762829652 762829653 762829654 762829655 762829656 762829657 762829658 762829659 762829660 762829661 762829662 762829663 762829664 762829665 762829666 762829667 762829668 762829669 762829670 762829671 762829672 762829673 762829674 762829675 762829676 762831055 762831060 762831061 762831062 762831063 762831064 762831065 762831066 762831067 762831068 762831069 762831070 762831071 762831072 762831073 762831074 762831075 762831076 762831077 762831078 762831079 762831080 762831081 762831082 762831083 762831084 762831085 762831086 762831087 762831088 762831089 762831090 762831091 762831092 762831093 762831094 762831095 762831096 762831097 762831105 762831106 762831107 762831108 762831109 762831110 762831111 762831112 762831113 762831114 762831115 762831116 762831117 762831118 762831119 762831120 762831121 762831122 762831123 762831124 762831125 762831126 762831127 762831128 762831129 762831130 762831131 762831132 762831133 762831134 762831135 762831136 762831137 762831138 762831139 762831140 762831141 762831142 762831143 762831144 762831145 762831146 762831147 762831148 762831149 762831150 762831151 762831152 762831153 762831154 762831155 762831156 762831157 762831158 762831159 762831160 762831161 762831162 762831163 762831164 762831165 762831166 762831167 762831168 762831169 762831170 762831171 762831172 762831173 762831174 762831175 762831176 762831177 762831178 762831179 762831180 762831189 762831190 762831191 762831192 762831193 762831195 762831196 762831197 762831198 762831199 762831200 762831201 762831202 762831203 762831204 762831205 762831206 762831207 762831208 762831209 762831210 762831211 762831212 762831213 762831214 762831215 762831216 762831217 762831218 762831219 762831220 762831221 762831222 762831223 762831224 762831225 762831226 762831227 762831228 762831229 762831230 762831231 762831232 762831233 762831234 762831235 762831236 762831237 762831238 762831239 762831240 762831241 762831242 762831243 762831244 762831245 762831246 762831247 762831248 762831249 762831250 762831251 762831252 762831253 762831254 762831255 762831256 762831257 762831258 762831259 762831260 762831261 762831262 762831263 762831264 762831265 762831266 762831267 762831268 762831269 762831270 762831271 762831272 762831273 762831274 762831275 762831276 762831277 762831278 762831279 762831280 762831281 762831282 762831283 762831284 762831285 762831286 762831287 762831288 762831289 762831290 762831291 762831292 762831293 762831294 762831295 762831296 762831297 762831298 762831299 762831300 762831301 762831302 762831303 762831304 762831305 762831306 762831307 762831308 762831309 762831310 762831311 762831312 762831313 762831314 762831315 762831316 762831317 762831318 762831319 762831320 762831321 762831322 762831323 762831324 762831325 762831326 762831327 762831328 762831329 762831330 762831331 762831332 762831333 762831334 762831335 762831336 762831337 762831338 762831339 762831340 762831341 762831342 762831343 762831344 762831345 762831346 762831347 762831348 762831349 762831350 762831351 762831352 762831353 762831354 762831355 762831356 762831357 762831358 762831359 762831362 762831363 762831364 762831365 762831367 762831368 762831369 762831370 762831371 762831372 762831373 762831374 762831375 762831376 762831377 762831378 762831379 762831380 762831381 762831382 762831383 762831384 762831385 762831386 762831387 762831388 762831389 762831390 762831391 762831392 762831393 762831394 762831395 762831396 762831397 762831398 762831399 762831400 762831401 762831402 762831403 762831404 762831405 762831406 762831407 762831408 762831409 762831410 762831411 762831412 762831413 762831414 762831415 762831416 762831417 762831418 762831419 762831420 762831421 762831422 762831423 762831424 762831425 762831426 762831427 762831428 762831429 762831430 762831431 762831432 762831433 762831434 762831435 762831436 762831437 762831438 762831439 762831440 762831441 762831442 762831443 762831444 762831445 762831446 762831447 762831448 762831449 762831450 762831451 762831452 762831453 762831454 762831455 762831456 762831457 762831458 762831459 762831460 762831461 762831462 762831463 762831464 762831465 762831466 762831467 762831468 762831469 762831470 762831471 762831472 762831473 762831474 762831475 762831476 762831477 762831478 762831479 762831480 762831481 762831482 762831483 762831484 762831485 762831486 762831487 762831488 762831489 762831490 762831491 762831492 762831493 762831494 762831495 762831496 762831497 762831498 762831499 762831500 762831501 762831502 762831503 762831504 762831505 762831506 762831507 762831508 762831509 762831510 762831511 762831512 762831513 762831514 762831515 762831516 762831517 762831518 762831519 762831520 762831521 762831522 762831523 762831524 762831525 762831526 762831527 762831528 762831529 762831530 762831531 762831532 762831533 762831534 762831535 762831536 762831537 762831538 762831539 762831540 762831541 762831542 762831543 762831544 762831545 762831546 762831547 762831548 762831549 762831550 762831551 762831552 762831553 762831554 762831555 762831556 762831557 762831558 762831559 762831560 762831561 762831562 762831563 762831564 762831565 762831566 762831567 762831568 762831569 762831570 762831571 762831572 762831573 762831574 762831575 762831576 762831577 762831578 762831579 762831580 762831581 762831582 762831583 762831584 762831585 762831586 762831587 762831588 762831589 762831590 762831591 762831592 762831593 762831594 762831595 762831596 762831597 762831598 762831599 762831600 762831601 762831602 762831603 762831604 762831605 762831606 762831607 762831608 762831609 762831610 762831611 762831612 762831613 762831614 762831615 762831616 762831617 762831618 762831619 762831620 762831621 762831622 762831623 762831624 762831625 762831626 762831627 762831628 762831629 762831630 762831631 762831632 762831633 762831634 762831635 762831636 762831637 762831638 762831639 762831640 762831641 762831642 762831643 762831644 762831645 762831646 762831647 762831648 762831649 762831650 762831651 762831652 762831653 762831654 762831655 762831656 762831657 762831658 762831659 762831660 762831661 762831662 762831663 762831664 762831665 762831666 762831667 762831668 762831669 762831670 762831671 762831672 762831673 762831674 762831675 762831676 762831677 762831678 762831679 762831680 762831681 762831682 762831683 762831684 762831685 762831686 762831687 762831688 762831689 762831690 762831691 762831692 762831693 762831694 762831695 762831696 762831697 762831698 762831699 762831700 762831701 762831702 762831703 762831704 762831705 762831706 762831707 762831708 762831709 762831710 762831711 762831712 762831713 762831714 762831715 762831716 762831717 762831718 762831719 762831720 762831721 762831722 762831723 762831724 762831725 762831726 762831727 762831728 762831729 762831730 762831731 762831732 762831733 762831734 762831735 762831736 762831737 762831738 762831739 762831740 762831741 762831742 762831743 762831744 762831745 762831746 762831747 762831752 762831753 762831754 762831755 762831756 762831757 762831758 762831759 762831760 762831779 762831780 762831781 762831782 762831784 762831785 762831786 762831787 762831788 762831789 762831790 762831791 762831792 762831793 762831794 762831795 762831796 762831797 762831798 762831799 762831800 762831801 762831802 762831803 762831804 762831805 762831806 762831807 762831808 762831809 762831810 762831811 762831812 762831813 762831814 762831815 762831816 762831817 762831818 762831819 762831820 762831821 762831822 762831823 762831824 762831825 762831826 762831827 762831828 762831829 762831830 762831831 762831832 762831833 762831834 762831835 762831836 762831837 762831838 762831839 762831840 762831841 762831842 762831843 762831844 762831845 762831846 762831847 762831848 762831849 762831850 762831851 762831852 762831853 762831854 762831855 762831856 762831857 762831858 762831859 762831860 762831861 762831862 762831863 762831864 762831865 762831866 762831867 762831868 762831869 762831870 762831871 762831872 762831873 762831874 762831875 762831876 762831877 762831878 762831879 762831880 762831881 762831882 762831883 762831884 762831885 762831886 762831887 762831888 762831889 762831890 762831891 762831892 762831893 762831894 762831895 762831896 762831897 762831898 762831899 762831900 762831901 762831902 762831903 762831904 762831905 762831906 762831907 762831908 762831909 762831910 762831911 762831912 762831913 762831914 762831915 762831916 762831917 762831918 762831919 762831920 762831921 762831922 762831923 762831924 762831925 762831926 762831927 762831928 762831929 762831930 762831931 762831932 762831933 762831934 762831935 762831936 762831937 762831938 762831941 762831943 762831944 762831945 762831946 762831947 762831948 762831949 762831950 762831951 762831952 762831953 762831954 762831955 762831956 762831957 762831958 762831959 762831960 762831961 762831962 762831963 762831964 762831965 762831966 762831967 762831968 762831969 762831970 762831971 762831972 762831973 762831974 762831975 762831976 762831977 762831978 762831979 762831980 762831981 762831982 762831983 762831984 762831985 762831986 762831987 762831988 762831989 762831990 762831991 762831992 762831993 762831994 762831995 762831996 762831997 762831998 762831999 762832000 762832001 762832002 762832003 762832004 762832005 762832006 762832007 762832008 762832009 762832010 762832011 762832012 762832013 762832014 762832015 762832016 762832017 762832018 762832019 762832020 762832021 762832022 762832023 762832024 762832025 762832026 762832027 762832028 762832029 762832030 762832031 762832032 762832033 762832034 762832035 762832036 762832037 762832038 762832039 762832040 762832041 762832042 762832043 762832044 762832045 762832046 762832047 762832048 762832049 762832050 762832051 762832052 762832053 762832054 762832055 762832056 762832057 762832058 762832059 762832060 762832061 762832062 762832063 762832064 762832065 762832066 762832067 762832068 762832069 762832070 762832071 762832072 762832073 762832074 762832075 762832076 762832077 762832078 762832079 762832080 762832081 762832082 762832083 762832084 762832085 762832086 762832087 762832088 762832089 762832090 762832091 762832092 762832093 762832094 762832095 762832096 762832097 762832098 762832099 762832100 762832101 762832102 762832103 762844335 762844348 762844349 762844350 762844351 762844352 762844353 762844354 762844355 762844356 762844357 762844358 762844359 762844360 762844368 762844369 762844370 762844371 762844372 762844373 762844374 762844375 762844376 762844377 762844378 762844379 762844380 762844381 762844382 762844383 762844384 762844385 762844386 762844387 762844388 762844389 762844390 762844391 762844394 762844395 762844396 762844397 762844398 762844399 762844400 762844401 762844402 762844403 762844404 762844405 762844406 762844407 762844408 762844409 762844410 762844411 762844412 762844413 762844414 762844415 762844416 762844417 762844418 762844419 762844420 762844421 762844422 762844423 762844424 762844425 762844426 762844427 762844428 762844429 762844430 762844431 762844432 762844433 762844434 762844435 762844436 762844437 762844438 762844439 762844440 762844441 762844442 762844443 762844444 762844445 762844446 762844447 762844448 762844449 762844450 762844451 762844452 762844453 762844454 762844455 762844456 762844457 762844458 762844459 762844460 762844461 762844462 762844463 762844464 762844465 762844466 762844467 762844468 762844469 762844470 762844471 762844472 762844473 762844474 762844479 762844480 762844481 762844482 762844483 762844484 762844485 762844486 762844487 762844488 762844489 762844490 762844491 762844492 762844493 762844494 762844495 762844496 762844497 762844498 762844499 762844500 762844501 762844502 762844503 762844504 762844505 762844506 762844507 762844508 762844509 762844510 762844511 762844512 762844513 762844514 762844515 762844516 762844517 762844518 762844519 762844520 762844521 762844522 762844523 762844524 762844525 762844526 762844527 762844528 762844529 762844530 762844531 762844532 762844533 762844534 762844535 762844536 762844537 762844538 762844539 762844540 762844541 762844542 762844543 762844544 762844545 762844546 762844547 762844548 762844549 762844550 762844551 762844552 762844553 762844554 762844555 762844556 762844557 762844558 762844559 762844560 762844561 762844562 762844563 762844564 762844565 762844566 762844567 762844568 762844569 762844570 762844571 762844572 762844573 762844574 762844575 762844576 762844577 762844578 762844579 762844580 762844581 762844582 762844583 762844584 762844585 762844586 762844587 762844588 762844589 762844590 762844591 762844592 762844593 762844594 762844595 762844596 762844597 762844598 762844599 762844600 762844601 762844602 762844603 762844604 762844605 762844606 762844607 762844608 762844609 762844610 762844611 762844612 762844613 762844614 762844615 762844616 762844617 762844618 762844619 762844620 762844621 762844622 762844623 762844624 762844625 762844626 762844627 762844628 762844629 762844630 762844631 762844632 762844633 762844634 762844635 762844636 762844637 762844638 762844639 762844640 762844641 762844642 762844643 762844644 762844645 762844646 762844647 762844648 762844649 762844650 762844651 762844652 762844653 762844654 762844655 762844656 762844657 762844658 762844659 762844660 762844661 762844662 762844663 762844664 762844665 762844666 762844667 762844668 762844669 762844670 762844671 762844672 762844673 762844674 762844675 762844676 762844677 762844678 762844679 762844680 762844681 762844682 762844683 762844684 762844685 762844686 762844687 762844688 762844689 762844690 762844691 762844692 762844693 762844694 762844695 762844696 762844697 762844698 762844699 762844700 762844701 762844702 762844703 762844704 762844705 762844706 762844707 762844708 762844709 762844710 762844711 762844712 762844713 762844714 762844715 762844716 762844717 762844718 762844719 762844720 762844721 762844722 762844723 762844724 762844725 762844726 762844727 762844728 762844729 762844730 762844731 762844732 762844733 762844734 762844735 762844736 762844774 762844775 762844776 762844777 762844778 762844779 762844780 762844781 762844782 762844783 762844784 762844785 762844786 762844787 762844792 762844793 762844795 762844796 762844797 762844798 762844799 762844800 762844801 762844802 762844803 762844804 762844805 762844806 762844807 762844808 762844809 762844810 762844811 762844812 762844813 762844814 762844815 762844816 762844817 762844818 762844819 762844820 762844821 762844822 762844823 762844824 762844825 762844826 762844827 762844828 762844829 762844830 762844831 762844832 762844833 762844834 762844835 762844836 762844837 762844838 762844839 762844840 762844841 762844842 762844843 762844844 762844851 762844852 762844853 762844854 762844855 762844856 762844857 762844858 762844859 762844860 762844861 762844862 762844863 762844864 762844865 762844866 762844867 762844868 762844869 762844870 762844871 762844872 762844873 762844874 762844875 762844876 762844877 762844878 762844879 762844880 762844881 762844882 762844883 762844884 762844885 762844886 762844887 762844888 762844889 762844890 762844891 762844892 762844893 762844894 762844895 762844896 762844897 762844898 762844899 762844900 762844901 762844902 762844903 762844904 762844905 762844906 762844907 762844908 762844909 762844910 762844911 762844912 762844913 762844914 762844915 762844916 762844917 762844918 762844919 762844920 762844921 762844922 762844923 762844924 762844925 762844926 762844927 762844928 762844929 762844930 762844931 762844932 762844933 762844934 762844935 762844936 762844937 762844938 762844939 762844940 762844941 762844942 762844943 762844944 762844945 762844946 762844947 762844948 762844949 762844950 762844951 762844952 762844953 762844954 762844955 762844956 762844957 762844958 762844959 762844960 762844961 762844962 762844963 762844964 762844965 762844966 762844967 762844968 762844969 762844970 762844971 762844972 762844973 762844974 762844975 762844976 762844977 762844978 762844979 762844980 762844981 762844982 762844983 762844984 762844987 762844989 762844990 762844991 762844992 762844993 762844994 762844995 762844996 762844997 762844998 762844999 762845000 762845001 762845002 762845003 762845004 762845005 762845006 762845007 762845008 762845009 762845010 762845011 762845012 762845013 762845014 762845015 762845016 762845017 762845018 762845019 762845020 762845021 762845022 762845023 762845024 762845025 762845026 762845027 762845028 762845029 762845030 762845031 762845032 762845033 762845034 762845035 762845036 762845037 762845038 762845039 762845044 762845045 762845047 762845048 762845049 762845050 762845051 762845052 762845053 762845054 762845055 762845056 762845057 762845058 762845059 762845060 762845061 762845062 762845063 762845064 762845065 762845066 762845067 762845068 762845069 762845070 762845071 762845072 762845073 762845074 762845075 762845076 762845077 762845078 762845079 762845080 762845081 762845082 762845083 762845084 762845085 762845086 762845087 762845088 762845089 762845090 762845091 762845092 762845093 762845094 762845095 762845096 762845097 762845098 762845099 762845100 762845101 762845102 762845103 762845104 762845105 762845106 762845107 762845108 762845109 762845110 762845111 762845112 762845113 762845114 762845115 762845116 762845117 762845118 762845119 762845120 762845121 762845122 762845123 762845124 762845125 762845126 762845127 762845128 762845129 762845130 762845131 762845132 762845133 762845134 762845135 762845136 762845137 762845138 762845139 762845140 762845141 762845142 762845143 762845144 762845145 762845146 762845147 762845148 762845149 762845150 762845151 762845152 762845153 762845154 762845155 762845156 762845157 762845158 762845159 762845160 762845161 762845162 762845163 762845164 762845165 762845166 762845167 762845168 762845169 762845170 762845171 762845172 762845173 762845174 762845175 762845176 762845177 762845178 762845179 762845180 762845181 762845182 762845183 762845184 762845185 762845186 762845187 762845188 762845189 762845190 762845191 762845192 762845193 762845194 762845195 762845196 762845197 762845198 762845199 762845200 762845201 762845202 762845203 762845204 762845205 762845206 762845207 762845208 762845209 762845210 762845211 762845212 762845213 762845214 762845215 762845216 762845217 762845218 762845219 762845220 762845221 762845222 762845223 762845224 762845225 762845226 762845227 762845228 762845229 762845230 762845231 762845232 762845233 762845234 762845235 762845236 762845237 762845238 762845239 762845240 762845241 762845242 762845243 762845244 762845245 762845246 762845247 762845248 762845249 762845250 762845251 762845252 762845253 762845254 762845255 762845256 762845257 762845258 762845259 762845260 762845261 762845262 762845263 762845264 762845265 762845266 762845267 762845268 762845269 762845270 762845271 762845272 762845273 762845274 762845275 762845276 762845277 762845278 762845279 762845280 762845281 762845282 762845283 762845287 762845288 762845289 762845290 762845291 762845292 762845293 762845294 762845295 762845296 762845297 762845298 762845299 762845300 762845301 762845302 762845303 762845304 762845305 762845306 762845307 762845308 762845309 762845310 762845311 762845312 762845313 762845314 762845315 762845316 762845317 762845318 762845319 762845320 762845321 762845322 762845323 762845324 762845325 762845326 762845327 762845328 762845329 762845330 762845331 762845332 762845333 762845334 762845335 762845336 762845337 762845338 762845339 762845340 762845341 762845342 762845343 762845344 762845345 762845346 762845347 762845348 762845349 762845350 762845351 762845352 762845353 762845354 762845355 762845356 762845357 762845358 762845359 762845360 762845361 762845362 762845363 762845364 762845365 762845366 762845367 762845368 762845369 762845370 762845371 762845372 762845373 762845374 762845375 762845376 762845377 762845378 762845379 762845380 762845381 762845382 762845383 762845384 762845385 762845386 762845387 762845388 762845389 762845390 762845391 762845392 762845393 762845394 762845395 762845396 762845397 762845398 762845399 762845400 762845401 762845402 762845403 762845404 762845405 762845406 762845407 762845408 762845409 762845410 762845411 762845412 762845413 762845414 762845415 762845416 762845417 762845418 762848830 762848837 762848838 762848839 762848842 762848843 762848844 762848846 762848847 762848848 762848849 762848850 762848851 762848852 762848853 762848854 762848855 762848856 762848857 762848858 762848859 762848860 762848861 762848862 762848863 762848864 762848865 762848866 762848867 762848868 762848869 762848870 762848871 762848872 762848873 762848874 762848875 762848876 762848877 762848878 762848879 762848880 762848881 762848882 762848883 762848884 762848885 762848886 762848887 762848888 762848889 762848890 762848891 762848892 762848893 762848894 762848895 762848906 762848907 762848908 762848909 762848910 762848911 762848912 762848913 762848914 762848924 762848925 762848926 762848927 762848928 762848929 762848930 762848931 762848932 762848933 762848934 762848935 762848936 762848937 762848938 762848939 762848940 762848941 762848942 762848943 762848944 762848945 762848946 762848947 762848948 762848949 762848950 762848951 762848952 762848953 762848954 762848955 762848956 762848957 762848958 762848959 762848960 762848961 762848962 762848963 762848964 762848965 762848966 762848967 762848968 762848969 762848970 762848971 762848972 762848973 762848974 762848975 762848976 762848977 762848978 762848979 762848980 762848981 762848982 762848983 762848984 762848985 762848986 762848987 762848988 762848989 762848990 762848991 762848992 762848993 762848994 762848995 762848996 762848997 762848998 762848999 762849000 762849001 762849002 762849003 762849004 762849005 762849006 762849007 762849008 762849009 762849010 762849011 762849012 762849013 762849014 762849015 762849016 762849017 762849018 762849019 762849020 762849021 762849022 762849023 762849024 762849025 762849026 762849027 762849028 762849029 762849030 762849031 762849032 762849033 762849034 762849035 762849036 762849037 762849038 762849039 762849040 762849041 762849042 762849043 762849044 762849045 762849046 762849047 762849048 762849049 762849050 762849051 762849052 762849053 762849054 762849055 762849056 762849057 762849058 762849059 762849060 762849061 762849062 762849063 762849064 762849065 762849066 762849067 762849068 762849069 762849070 762849071 762849072 762849073 762849074 762849075 762849076 762849077 762849078 762849079 762849080 762849081 762849082 762849083 762849084 762849085 762849086 762849087 762849088 762849089 762849090 762849091 762849092 762849093 762849094 762849095 762849096 762849097 762849098 762849099 762849100 762849101 762849102 762849103 762849104 762849105 762849106 762849107 762849108 762849109 762849110 762849111 762849112 762849113 762849114 762849115 762849116 762849117 762849118 762849119 762849120 762849121 762849122 762849123 762849124 762849125 762849126 762849127 762849128 762849129 762849130 762849131 762849132 762849133 762849134 762849135 762849136 762849137 762849138 762849139 762849140 762849141 762849142 762849143 762849144 762849145 762849146 762849147 762849148 762849149 762849150 762849151 762849152 762849153 762849154 762849155 762849156 762849157 762849158 762849159 762849160 762849161 762849162 762849163 762849164 762849165 762849166 762849167 762849168 762849169 762849170 762849171 762849172 762849173 762849174 762849175 762849176 762849177 762849178 762849179 762849180 762849181 762849182 762849183 762849184 762849185 762849186 762849187 762849188 762849189 762849190 762849191 762849192 762849193 762849194 762849195 762849196 762849197 762849198 762849199 762849200 762849201 762849202 762849203 762849204 762849205 762849206 762849207 762849208 762849209 762849210 762849211 762849212 762849213 762849214 762849215 762849216 762849217 762849218 762849219 762849220 762849221 762849222 762849223 762849224 762849225 762849226 762849227 762849228 762849229 762849230 762849231 762849232 762849233 762849234 762849235 762849236 762849237 762849238 762849239 762849240 762849241 762849242 762849243 762849244 762849245 762849246 762849247 762849248 762849249 762849250 762849251 762849252 762849253 762849254 762849255 762849256 762849257 762849258 762849259 762849260 762849261 762849262 762849263 762849264 762849265 762849266 762849267 762849268 762849269 762849270 762849271 762849272 762849273 762849274 762849275 762849276 762849277 762849278 762849279 762849280 762849281 762849282 762849283 762849284 762849285 762849286 762849287 762849288 762849289 762849290 762849291 762849292 762849293 762849294 762849295 762849296 762849297 762849298 762849299 762849300 762849301 762849302 762849303 762849304 762849305 762849306 762849307 762849308 762849309 762849310 762849311 762849312 762849313 762849314 762849315 762849316 762849317 762849318 762849319 762849320 762849321 762849322 762849323 762849324 762849325 762849326 762849327 762849328 762849329 762849330 762849331 762849332 762849333 762849334 762849335 762849336 762849337 762849338 762849339 762849340 762849341 762849342 762849343 762849344 762849345 762849346 762849347 762849348 762849349 762849350 762849351 762849352 762849353 762849354 762849355 762849356 762849357 762849358 762849359 762849360 762849361 762849362 762849363 762849364 762849365 762849366 762849367 762849368 762849369 762849370 762849371 762849372 762849373 762849374 762849375 762849376 762849377 762849378 762849379 762849380 762849381 762849382 762849383 762849384 762849385 762849386 762849387 762849388 762849389 762849390 762849391 762849392 762849393 762849394 762849395 762849396 762849397 762849398 762849399 762849400 762849401 762849402 762849403 762849404 762849405 762849406 762849407 762849408 762849409 762849410 762849411 762849412 762849413 762849414 762849415 762849416 762849417 762849418 762849419 762849420 762849421 762849422 762849423 762849424 762849425 762849426 762849427 762849428 762849429 762849430 762849431 762849432 762849433 762849434 762849435 762849436 762849437 762849438 762849439 762849440 762849441 762849442 762849443 762849444 762849445 762849446 762849447 762849448 762849449 762849450 762849451 762849452 762849453 762849454 762849455 762849456 762849457 762849458 762849459 762849460 762849461 762849462 762849463 762849464 762849465 762849466 762849467 762849468 762849469 762849470 762849471 762849472 762849473 762849474 762849475 762849476 762849477 762849478 762849479 762849480 762849481 762849482 762849483 762849484 762849485 762849486 762849487 762849488 762849489 762849490 762849491 762849492 762849493 762849494 762849495 762849496 762849497 762849498 762849499 762849500 762849501 762849502 762849503 762849504 762849505 762849506 762849507 762849508 762849509 762849510 762849511 762849512 762849513 762849514 762849515 762849516 762849517 762849518 762849519 762849520 762849521 762849522 762849523 762849524 762849525 762849526 762849527 762849528 762849529 762849530 762849531 762849532 762849533 762849534 762849535 762849536 762849537 762849538 762849539 762849540 762849541 762849542 762849543 762849544 762849545 762849546 762849547 762849548 762849549 762849550 762849551 762849552 762849553 762849554 762849555 762849556 762849557 762849558 762849559 762849560 762849561 762849562 762849563 762849564 762849565 762849566 762849567 762849568 762849569 762849570 762849571 762849572 762849573 762849574 762849575 762849576 762849577 762849578 762849579 762849580 762849581 762849582 762849583 762849584 762849585 762849586 762849587 762849588 762849589 762849590 762849591 762849592 762849593 762849594 762849595 762849596 762849597 762849598 762849599 762849600 762849601 762849602 762849603 762849604 762849605 762849606 762849607 762849608 762849609 762849610 762849611 762849612 762849613 762849614 762849615 762849616 762849617 762849618 762849619 762849620 762849621 762849622 762849623 762849624 762849625 762849626 762849627 762849628 762849629 762849630 762849631 762849632 762849633 762849634 762849635 762849636 762849637 762849638 762849639 762849640 762849641 762849642 762849643 762849644 762849645 762849646 762849647 762849648 762849649 762849650 762849651 762849652 762849653 762849654 762849655 762849656 762849657 762849658 762849659 762849660 762849661 762849662 762849663 762849664 762849665 762849666 762849667 762849668 762849669 762849670 762849671 762849672 762849673 762849674 762849675 762849676 762849677 762849678 762849679 762849680 762849681 762849682 762849683 762849684 762849685 762849686 762849687 762849688 762849689 762849690 762849691 762849692 762849693 762849694 762849695 762849696 762849697 762849698 762849699 762849700 762849701 762849702 762849703 762849704 762849705 762849706 762849707 762849708 762849709 762849710 762849711 762849712 762849713 762849714 762849715 762849716 762849717 762849718 762849719 762849720 762849721 762849722 762849723 762849724 762849725 762849726 762849727 762849728 762849729 762849730 762849731 762849732 762849733 762849734 762849735 762849736 762849737 762849738 762849739 762849740 762849741 762849742 762849743 762849744 762849745 762849746 762849747 762849748 762849749 762849750 762849751 762849752 762849753 762849754 762849755 762849756 762849757 762849758 762849759 762849760 762849761 762849762 762849763 762849764 762849765 762849766 762849767 762849768 762849769 762849770 762849771 762849772 762849773 762849774 762849775 762849776 762849777 762849778 762849779 762849780 762849781 762849782 762849783 762849784 762849785 762849786 762849787 762849788 762849789 762849790 762849791 762849792 762849793 762849794 762849795 762849796 762849797 762849798 762849799 762849800 762849801 762849802 762849803 762849804 762849805 762849806 762849807 762849808 762849809 762849810 762849811 762849812 762849813 762849814 762849815 762849816 762849817 762849818 762849819 762849820 762849821 762849822 762849823 762849824 762849825 762849826 762849827 762849828 762849829 762849830 762849831 762849832 762849833 762849834 762849835 762849836 762849837 762849838 762849839 762849840 762849841 762849842 762849843 762849844 762849845 762849846 762849847 762849848 762849849 762849850 762849851 762849852 762849853 762849854 762849855 762849856 762849857 762850239 762850247 762850248 762850249 762850250 762850251 762850252 762850253 762850254 762850255 762850256 762850257 762850258 762850259 762850260 762850261 762850262 762850263 762850264 762850265 762850266 762850267 762850268 762850269 762850270 762850271 762850272 762850273 762850274 762850275 762850276 762850277 762850278 762850279 762850280 762850281 762850282 762850283 762850284 762850285 762850286 762850287 762850288 762850289 762850290 762850291 762850292 762850293 762850294 762850295 762850296 762850297 762850298 762850299 762850300 762850301 762850302 762850303 762850304 762850305 762850306 762850307 762850308 762850309 762850310 762850311 762850312 762850313 762850314 762850324 762850325 762850326 762850327 762850328 762850329 762850330 762850331 762850332 762850333 762850334 762850335 762850336 762850337 762850338 762850339 762850340 762850341 762850342 762850343 762850344 762850345 762850346 762850347 762850348 762850349 762850350 762850351 762850352 762850353 762850354 762850355 762850356 762850357 762850358 762850359 762850360 762850361 762850362 762850363 762850364 762850365 762850366 762850367 762850368 762850369 762850370 762850371 762850372 762850373 762850374 762850375 762850376 762850377 762850378 762850379 762850380 762850381 762850382 762850383 762850384 762850385 762850386 762850387 762850388 762850389 762850390 762850391 762850392 762850393 762850394 762850395 762850396 762850397 762850398 762850399 762850400 762850401 762850402 762850403 762850404 762850405 762850406 762850407 762850408 762850409 762850410 762850411 762850412 762850413 762850414 762850415 762850416 762850417 762850418 762850419 762850420 762850421 762850422 762850423 762850424 762850425 762850426 762850427 762850428 762850429 762850430 762850431 762850432 762850433 762850434 762850435 762850436 762850437 762850438 762850439 762850440 762850441 762850442 762850443 762850444 762850445 762850446 762850447 762850448 762850449 762850450 762850451 762850452 762850453 762850454 762850455 762850456 762850457 762850458 762850459 762850460 762850461 762850462 762850463 762850464 762850465 762850466 762850467 762850468 762850469 762850470 762850471 762850477 762850478 762850479 762850480 762850481 762850482 762850483 762850484 762850485 762850486 762850487 762850488 762850489 762850490 762850491 762850492 762850493 762850494 762850495 762850496 762850497 762850498 762850499 762850500 762850501 762850502 762850503 762850504 762850505 762850506 762850507 762850508 762850509 762850510 762850511 762850512 762850513 762850514 762850515 762850516 762850517 762850518 762850519 762850520 762850521 762850522 762850523 762850524 762850525 762850526 762850527 762850528 762850529 762850530 762850531 762850532 762850533 762850534 762850535 762850536 762850537 762850538 762850539 762850540 762850541 762850542 762850543 762850544 762850545 762850546 762850547 762850548 762850549 762850550 762850551 762850552 762850553 762850554 762850555 762850556 762850557 762850558 762850559 762850560 762850561 762850562 762850563 762850564 762850565 762850566 762850567 762850568 762850569 762850570 762850571 762850572 762850573 762850574 762850575 762850576 762850577 762850578 762850579 762850580 762850581 762850582 762850583 762850584 762850585 762850586 762850587 762850588 762850589 762850590 762850591 762850592 762850593 762850594 762850595 762850596 762850597 762850598 762850599 762850600 762850601 762850602 762850603 762850604 762850605 762850606 762850607 762850608 762850609 762850610 762850611 762850612 762850613 762850614 762850615 762850616 762850617 762850618 762850619 762850620 762850621 762850622 762850623 762850624 762850625 762850626 762850627 762850628 762850629 762850630 762850631 762850632 762850633 762850634 762850635 762850636 762850637 762850638 762850639 762850640 762850641 762850642 762850643 762850644 762850645 762850646 762850647 762850648 762850649 762850650 762850651 762850652 762850653 762850654 762850655 762850656 762850657 762850658 762850659 762850660 762850661 762850662 762850663 762850664 762850665 762850666 762850667 762850668 762850669 762850670 762850671 762850672 762850673 762850674 762850675 762850676 762850677 762850678 762850679 762850680 762850681 762850682 762850683 762850684 762850685 762850686 762850687 762850688 762850689 762850690 762850691 762850692 762850693 762850694 762850695 762850696 762850697 762850698 762850699 762850700 762850701 762850702 762850703 762850704 762850705 762850706 762850707 762850708 762850709 762850710 762850711 762850712 762850713 762850714 762850715 762850716 762850717 762850718 762850719 762850720 762850721 762850722 762850723 762850724 762850725 762850726 762850727 762850728 762850729 762850730 762850731 762850732 762850733 762850734 762850735 762850736 762850737 762850738 762850739 762850740 762850741 762850742 762850743 762850744 762850745 762850746 762850747 762850748 762850749 762850750 762850751 762850752 762850753 762850754 762850755 762850756 762850757 762850758 762850759 763270975 763294957 763295806 763304366 763304599 763305228 763305975 763309274 763314274 763315741 763315937 763316917 763317970 763318262 763318713 763319742 763319967 763321380 763336881 763339989 763351734 763351765 763351871 763360683 763410221 763413396 763416641 763536557 763536771 766222412 766339175 766339582 766339650 766339968 767275060 767418536 767420776 767441363 767444452 767466774 767466940 767551096 767563766 767567102 767567402 767568483 767573397 767573611 767574307 767584105 767648675 767648768 767652306 767745369 767746068 767746144 767746400 767746701 767746818 767746984 767747089 767748183 767770522 767772992 767773075 767833797 767834276 767843728 767843821 767843852 767844245 767844488 767857001 768418552 768419091 768425649 768457230 768457380 768457832 768789133 768794659 768958184 768963625 768965338 768973188 768976109 768982034 768985197 768986819 768990217 768994175 768995538 768997916 768998913 769002807 769027017 769048826 769050666 769051132 769058425 769082134 769127357 769144978 769153262 769169525 769171105 769177044 769191207 769197221 769216318 769929638 769950853 769981712 770063212 770069820 770201269 770510343 770753083 770756615 770756781 770756985 770769011 770769288 770769577 771035940 771721274 771747500 771749540 771755771 771768633 771777548 771788692 771791931 771872333 771903016 772028804 772039370 772040639 772043141 772043294 772082121 772357462 772358371 772362182 772362353 772365767 772366177 772366443 772367711 772368528 772369703 772370388 772373012 773312959 773348895 773397229 773402075 773464227 773499667 773872671 773873397 775135682 777785696 777812887 778002106 778094454 778134090 778151583 778151694 778151803 778151876 778151957 778152803 778201138 778728117 778728174 778732183 779474346 779497098 779516634 779656559 779779542 780314340 780338135 780338279 780338588 780339353 780339504 780339762 780398143 780398726 780398938 780399138 780399256 780399389 780399458 780400026 780400414 780400884 780401272 780414871 780415746 780446363 780535892 780537177 780557520 780561690 780595424 780595772 780596021 780596253 780596429 780596849 780609559 780619772 780619898 780627268 780627914 780628657 780629613 780630479 780720139 780720518 780721907 780784516 780974266 781007670 781021997 781022497 781111901 781112242 781113723 781114147 781127241 781127397 781141576 781142254 781142572 781147762 781149873 781151224 781151527 781151679 781151788 781152240 781152378 781152547 781152773 781264416 781264732 781265659 781266717 781267761 781268027 781268257 781268516 781332051 781335821 781335941 781377995 781378776 781398771 781415826 781416195 781591415 781682416 781684854 781777222 781780775 781781320 781781398 781785482 781788723 781790875 781796084 781796677 781813396 781828030 781831345 781831363 781831520 781834712 781834764 781834908 781835262 781835308 781836198 781836224 781836814 782007167 782015883 782235282 782318761 782517335 782540644 782607444 782608006 782691329 782691602 782692774 782697560 782698614 782698880 782699232 782699675 782700119 782712300 782719930 782729269 782742656 782749674 782778334 782778538 782808055 783375549 783403095 784059803 784164785 784197322 784254025 784266252 784267718 784268194 784268871 784272349 784275706 784278129 784283081 784283453 784334494 784348544 784488645 784536788 784545210 784552713 784558658 784571272 784599015 784600709 785960951 788595916 788633436 788635458 788664118 788693715 788699805 788707956 788749572 788838807 788849100 788679341 788868020 788693958 788876992 788888813 788890371 788890949 788984747 788989296 789037336 789082306 789082864 789085691 789086886 789163259 789171837 789188381 789201584 789266452 789274573 789585530 789586214 789587678 789699287 789699829 789700285 789702536 789741706 789742472 789744618 789746031 789809918 790129701 790202843 790219215 790226114 790302196 790346824 790347843 790448348 790449712 790450793 790454280 790454991 790456043 790456198 790456489 790458026 790461802 790462129 790467686 790475869 790478765 790483030 790594802 790595374 790603419 790613884 790627324 790629249 790630227 790631189 790632816 790684454 790727188 790742549 790764198 791569889 791801937 791834203 791834864 791893587 791895662 791896230 791897550 791907491 791912434 791993458 792002157 792005358 792150978 792159831 792172891 792178211 792179905 792188386 792195026 792195393 792217694 792256655 792415465 793233316 793233485 793233497 793233498 793273291 793287666 793329077 793331256 793342139 793359112 793369887 793413268 793436815 793522877 793524226 793533662 793537252 793539145 793553592 793554140 793556649 793557384 793557441 793564039 793582318 793662814 793846730 793853488 793860667 793870317 793888558 793892063 793892701 793936849 793956349 793974918 794307557 794804812 794810548 794813736 794813739 794813741 794813742 794813743 794827053 794889353 794922499 795033516 795035012 795036904 795037280 795048241 795050633 795050636 795053207 795059807 795062154 795068927 795074658 795076542 795078367 795094908 795096604 795097989 795100710 795101685 795149590 795149591 795152046 795152051 795152052 795152055 795152206 795152214 795152215 795152237 795152374 795152380 795164685 795164692 795164693 795164694 795164899 795164903 795164904 795164905 795165064 795165073 795165074 795165075 795170338 795170339 795170348 795170587 795170594 795170595 795170752 795170770 795170775 795200226 795238998 795239188 795239352 795239474 795239478 795239506 795239646 795239794 795243883 795243887 795243888 795244099 795244116 795244263 795244271 795244541 795244553 795244554 795244707 795244728 795244743 795244907 795245226 795245232 795245243 795245395 795245407 795247806 795247813 795248432 795248558 795248587 795249607 795249608 795249609 795249792 795249890 795250189 795257288 795257289 795257327 795257463 795257474 795257631 795257644 795257814 795257825 795257831 795258007 795258183 795259274 795259628 795259804 795259833 795259966 795259977 795259984 795260027 795260254 795260510 795260518 795260576 795263903 795265804 795265810 795265811 795265950 795265955 795265973 795265983 795266110 795266171 795266172 795266232 795266290 795266369 795266391 795266401 795266524 795266564 795266570 795266637 795266741 795267110 795267163 795267298 795267375 795267461 795267475 795267478 795267698 795267827 795269596 795269656 795269659 795269670 795269677 795269940 795270103 795283071 796142365 796142738 796267570 797185151 797185862 799007429 799009186 799009195 799009368 799009373 799009388 799009389 799009532 799009540 799009556 799009910 799009916 799009917 799010050 799010071 799010072 799010076 799017560 799017561 799017562 799017564 799017804 799017822 799017823 799017959 799017960 799018006 799019324 799019325 799019328 799019329 799019497 799019511 799019664 799019665 799019677 799019824 799019845 799020707 799020711 799020713 799020714 799020889 799020895 799020896 799020897 799020898 799021070 799021074 799021075 799021077 799021078 799021246 799021247 799021248 799021249 799021263 799021395 799021420 799115390 799240619 799324945 799324946 799324947 799324951 799324952 799325162 799325163 799325168 799325169 799325170 799325348 799325349 799325350 799325518 799325519 799325520 799325526 799325673 799325674 799325677 799325678 799325679 799328639 799334506 799351963 799359944 799361781 799368836 799387625 799434137 799436846 799469053 799493665 799526556 799595188 761164252 761169140 761202002 762417283 762417843 762417919 762418292 763351332 763861811 763863842 771749851 772372212 779410956 779433203 780314210 780462539 780595024 781787054 782273035 782315213 783390405 790536843 791697683 791775969 791919567 793233310 793233317 793233318 793233320 793376458 793523679 794893134 794918134 795259635 795265799 589866662 587489153 610736373 - BACKUP_CONFIG_TEMPLATE_PATH: terraform/helm/fullnode/files/backup/gcs.yaml - # workflow config - RUNS_ON: "high-perf-docker-with-local-ssd" - TIMEOUT_MINUTES: 480 - - replay-mainnet: - if: | - github.event_name == 'schedule' || - github.event_name == 'push' || - github.event_name == 'workflow_dispatch' && (inputs.CHAIN_NAME == 'mainnet' || inputs.CHAIN_NAME == 'all' ) - needs: determine-test-metadata - uses: ./.github/workflows/workflow-run-replay-verify.yaml - secrets: inherit - with: - GIT_SHA: ${{ inputs.GIT_SHA }} - # replay-verify config - BUCKET: aptos-mainnet-backup-backup-e098483d - SUB_DIR: e1 - HISTORY_START: 0 - TXNS_TO_SKIP: 12253479 12277499 148358668 - BACKUP_CONFIG_TEMPLATE_PATH: terraform/helm/fullnode/files/backup/gcs.yaml - # workflow config - RUNS_ON: "high-perf-docker-with-local-ssd" - TIMEOUT_MINUTES: 480 - - test-replay: - if: ${{ (github.event_name == 'pull_request') && contains(github.event.pull_request.labels.*.name, 'CICD:test-replay')}} - needs: determine-test-metadata - uses: ./.github/workflows/workflow-run-replay-verify.yaml - secrets: inherit - with: - GIT_SHA: ${{ github.event.pull_request.head.sha }} - # replay-verify config - BUCKET: aptos-testnet-backup-b7b1ad7a - SUB_DIR: e1 - HISTORY_START: 250000000 # TODO: We need an exhaustive list of txns_to_skip before we can set this to 0. - TXNS_TO_SKIP: 46874937 151020059 409163615 409163669 409163708 409163774 409163845 409163955 409164059 409164191 414625832 - BACKUP_CONFIG_TEMPLATE_PATH: terraform/helm/fullnode/files/backup/gcs.yaml - # workflow config - RUNS_ON: "high-perf-docker-with-local-ssd" - TIMEOUT_MINUTES: 120 # increase test replay timeout to capture more flaky errors diff --git a/.github/workflows/run-fullnode-sync.yaml b/.github/workflows/run-fullnode-sync.yaml deleted file mode 100644 index 4e08def639f84..0000000000000 --- a/.github/workflows/run-fullnode-sync.yaml +++ /dev/null @@ -1,110 +0,0 @@ -# This workflow is a simple wrapper around the fullnode-sync github -# action. It invokes the action with all the neccessary configurations -# required by the specific fullnode sync test instance. - -name: "Run Fullnode Sync" - -on: - workflow_call: - inputs: - TEST_NAME: - description: "The unique name of the fullnode test." - type: string - required: true - GIT_REF: - description: "The aptos-core git ref (GIT_REF or commit hash) to switch to before running the fullnode." - type: string - required: true - NETWORK: - description: "The network to connect the fullnode to: devnet, testnet, or mainnet." - type: string - required: true - BOOTSTRAPPING_MODE: - description: "The state sync bootstrapping mode for the fullnode." - type: string - required: true - CONTINUOUS_SYNCING_MODE: - description: "The state sync continuous syncing mode for the fullnode." - type: string - required: true - TIMEOUT_MINUTES: - description: "The number of minutes to wait for fullnode sync to finish." - type: number - required: false - default: 300 # Run for at most 5 hours - workflow_dispatch: - inputs: - TEST_NAME: - description: "The unique name of the fullnode test." - type: string - required: true - GIT_REF: - description: "The aptos-core GIT_REF (or ref) to switch to before running the fullnode." - type: string - required: true - NETWORK: - description: "The network to connect the fullnode to: devnet, testnet, or mainnet." - type: string - required: true - BOOTSTRAPPING_MODE: - description: "The state sync bootstrapping mode for the fullnode." - type: string - required: true - CONTINUOUS_SYNCING_MODE: - description: "The state sync continuous syncing mode for the fullnode." - type: string - required: true - -jobs: - fullnode-sync: - runs-on: medium-perf-docker-with-local-ssd - timeout-minutes: ${{ inputs.TIMEOUT_MINUTES || 300 }} # the default run is 300 minutes (5 hours). Specified here because workflow_dispatch uses string rather than number - steps: - - uses: actions/checkout@v3 - - - uses: ./.github/actions/fullnode-sync - with: - GIT_REF: ${{ inputs.GIT_REF }} - NETWORK: ${{ inputs.NETWORK }} - BOOTSTRAPPING_MODE: ${{ inputs.BOOTSTRAPPING_MODE }} - CONTINUOUS_SYNCING_MODE: ${{ inputs.CONTINUOUS_SYNCING_MODE }} - DATA_DIR_FILE_PATH: /tmp/ - NODE_LOG_FILE_PATH: /tmp/node_log - METRICS_DUMP_FILE_PATH: /tmp/metrics - - - name: Upload node logs as an artifact - uses: actions/upload-artifact@v3 - if: ${{ always() }} - with: - name: node_log - path: | - /tmp/node_log - retention-days: 14 - - - name: Upload the metrics dump as an artifact - uses: actions/upload-artifact@v3 - if: ${{ always() }} - with: - name: metrics - path: | - /tmp/metrics - retention-days: 14 - - - name: Post to a Slack channel on failure - if: failure() - id: slack - uses: slackapi/slack-github-action@936158bbe252e9a6062e793ea4609642c966e302 # pin@v1.21.0 - with: - payload: | - { - "text": "${{ ':x:' }} `${{ inputs.TEST_NAME }}`: <${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|link>" - } - env: - SLACK_WEBHOOK_URL: ${{ secrets.FORGE_SLACK_WEBHOOK_URL }} - - # Because we have to checkout the actions and then check out a different - # git ref, it's possible the actions directory will be modified. So, we - # need to check it out again for the Post Run actions/checkout to succeed. - - uses: actions/checkout@v3 - with: - path: actions diff --git a/.github/workflows/run-gas-calibration.yaml b/.github/workflows/run-gas-calibration.yaml deleted file mode 100644 index 1f91062a4f633..0000000000000 --- a/.github/workflows/run-gas-calibration.yaml +++ /dev/null @@ -1,39 +0,0 @@ -name: "Gas Calibration" -on: - pull_request: - types: [labeled, opened, synchronize, reopened, auto_merge_enabled] - push: - branches: - - main - - devnet - - testnet - - auto - - canary - -env: - HAS_BUILDPULSE_SECRETS: ${{ secrets.BUILDPULSE_ACCESS_KEY_ID != '' && secrets.BUILDPULSE_SECRET_ACCESS_KEY != '' }} - HAS_DATADOG_SECRETS: ${{ secrets.DD_API_KEY != '' }} - CARGO_INCREMENTAL: "0" - CARGO_TERM_COLOR: always - -# cancel redundant builds -concurrency: - # cancel redundant builds on PRs (only on PR, not on branches) - group: ${{ github.workflow }}-${{ (github.event_name == 'pull_request' && github.ref) || github.sha }} - cancel-in-progress: true - -jobs: - run-gas-calibration: - if: contains(github.event.pull_request.labels.*.name, 'CICD:non-required-tests') - runs-on: runs-on,cpu=64,family=c7,hdd=500,image=aptos-ubuntu-x64,run-id=${{ github.run_id }} - steps: - - uses: actions/checkout@v3 - with: - fetch-depth: 0 # get all the history because cargo xtest --change-since origin/main requires it. - - uses: aptos-labs/aptos-core/.github/actions/rust-setup@main - with: - GIT_CREDENTIALS: ${{ secrets.GIT_CREDENTIALS }} - - name: install Valgrind - shell: bash - run: sudo apt-get -y install valgrind - - run: cargo run -p aptos-vm-profiling -- -r diff --git a/.github/workflows/rust-client-tests.yaml b/.github/workflows/rust-client-tests.yaml deleted file mode 100644 index 0b5ce8e5a9c9a..0000000000000 --- a/.github/workflows/rust-client-tests.yaml +++ /dev/null @@ -1,86 +0,0 @@ -# Each of these jobs runs the Rust SDK client tests from this commit against a local -# testnet built from one of the production release branches. In other words, we run the -# tests against a local devnet, testnet, and mainnet. - -name: "Rust SDK Client Tests" -on: - pull_request_target: - types: [labeled, opened, synchronize, reopened, auto_merge_enabled] - push: - branches: - - main - -permissions: - contents: read - id-token: write # Required for GCP Workload Identity federation which we use to login into Google Artifact Registry - -jobs: - # Note on the job-level `if` conditions: - # This workflow is designed such that we run subsequent jobs only when a 'push' - # triggered the workflow or on 'pull_request's which have set auto_merge=true - # or have the label "CICD:run-e2e-tests". - permission-check: - runs-on: ubuntu-latest - steps: - - name: Check repository permission for user which triggered workflow - uses: sushichop/action-repository-permission@13d208f5ae7a6a3fc0e5a7c2502c214983f0241c - with: - required-permission: write - comment-not-permitted: Sorry, you don't have permission to trigger this workflow. - - run-tests-devnet: - if: contains(github.event.pull_request.labels.*.name, 'CICD:non-required-tests') - needs: [permission-check] - runs-on: runs-on,cpu=64,family=c7,hdd=500,image=aptos-ubuntu-x64,run-id=${{ github.run_id }} - steps: - - uses: actions/checkout@v3 - - uses: aptos-labs/aptos-core/.github/actions/docker-setup@main - with: - GCP_WORKLOAD_IDENTITY_PROVIDER: ${{ secrets.GCP_WORKLOAD_IDENTITY_PROVIDER }} - GCP_SERVICE_ACCOUNT_EMAIL: ${{ secrets.GCP_SERVICE_ACCOUNT_EMAIL }} - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - AWS_DOCKER_ARTIFACT_REPO: ${{ secrets.AWS_DOCKER_ARTIFACT_REPO }} - GIT_CREDENTIALS: ${{ secrets.GIT_CREDENTIALS }} - - uses: ./.github/actions/run-rust-client-tests - with: - NETWORK: devnet - GCP_DOCKER_ARTIFACT_REPO: ${{ vars.GCP_DOCKER_ARTIFACT_REPO }} - - run-tests-testnet: - if: contains(github.event.pull_request.labels.*.name, 'CICD:non-required-tests') - needs: [permission-check] - runs-on: runs-on,cpu=64,family=c7,hdd=500,image=aptos-ubuntu-x64,run-id=${{ github.run_id }} - steps: - - uses: actions/checkout@v3 - - uses: aptos-labs/aptos-core/.github/actions/docker-setup@main - with: - GCP_WORKLOAD_IDENTITY_PROVIDER: ${{ secrets.GCP_WORKLOAD_IDENTITY_PROVIDER }} - GCP_SERVICE_ACCOUNT_EMAIL: ${{ secrets.GCP_SERVICE_ACCOUNT_EMAIL }} - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - AWS_DOCKER_ARTIFACT_REPO: ${{ secrets.AWS_DOCKER_ARTIFACT_REPO }} - GIT_CREDENTIALS: ${{ secrets.GIT_CREDENTIALS }} - - uses: ./.github/actions/run-rust-client-tests - with: - NETWORK: testnet - GCP_DOCKER_ARTIFACT_REPO: ${{ vars.GCP_DOCKER_ARTIFACT_REPO }} - - run-tests-mainnet: - if: contains(github.event.pull_request.labels.*.name, 'CICD:non-required-tests') - needs: [permission-check] - runs-on: runs-on,cpu=64,family=c7,hdd=500,image=aptos-ubuntu-x64,run-id=${{ github.run_id }} - steps: - - uses: actions/checkout@v3 - - uses: aptos-labs/aptos-core/.github/actions/docker-setup@main - with: - GCP_WORKLOAD_IDENTITY_PROVIDER: ${{ secrets.GCP_WORKLOAD_IDENTITY_PROVIDER }} - GCP_SERVICE_ACCOUNT_EMAIL: ${{ secrets.GCP_SERVICE_ACCOUNT_EMAIL }} - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - AWS_DOCKER_ARTIFACT_REPO: ${{ secrets.AWS_DOCKER_ARTIFACT_REPO }} - GIT_CREDENTIALS: ${{ secrets.GIT_CREDENTIALS }} - - uses: ./.github/actions/run-rust-client-tests - with: - NETWORK: mainnet - GCP_DOCKER_ARTIFACT_REPO: ${{ vars.GCP_DOCKER_ARTIFACT_REPO }} diff --git a/.github/workflows/semgrep.yaml b/.github/workflows/semgrep.yaml deleted file mode 100644 index 19e8577fb383f..0000000000000 --- a/.github/workflows/semgrep.yaml +++ /dev/null @@ -1,27 +0,0 @@ -name: Semgrep - -on: - workflow_dispatch: - pull_request: - types: [labeled, opened, synchronize, reopened, auto_merge_enabled] - schedule: - - cron: '0 * * * *' - -jobs: - semgrep: - name: semgrep/ci - runs-on: ubuntu-latest - - container: - image: returntocorp/semgrep - options: --user root - - # Skip any PR created by dependabot to avoid permission issues: - if: (github.actor != 'dependabot[bot]') - - steps: - - uses: actions/checkout@v3 - - run: semgrep ci - env: - SEMGREP_RULES: >- - ./.github/linters/semgrep/pull-request-target-code-checkout.yaml diff --git a/.github/workflows/terraform-freeze.yaml b/.github/workflows/terraform-freeze.yaml deleted file mode 100644 index 3b254053acffd..0000000000000 --- a/.github/workflows/terraform-freeze.yaml +++ /dev/null @@ -1,15 +0,0 @@ -name: "Terraform Freeze checker" - -on: - pull_request: - paths: - - "terraform/**" - -jobs: - check-terraform-modifications: - runs-on: ubuntu-latest - steps: - - run: | - echo "Terraform modifications in this repository are not allowed." - echo "The Source of Truth for Terraform is the internal-ops repository." - exit 1 diff --git a/.github/workflows/test-copy-images-to-dockerhub.yaml b/.github/workflows/test-copy-images-to-dockerhub.yaml deleted file mode 100644 index 4f01de7814f18..0000000000000 --- a/.github/workflows/test-copy-images-to-dockerhub.yaml +++ /dev/null @@ -1,28 +0,0 @@ -name: Test Release Images -on: - pull_request: - paths: - - "docker/release-images.mjs" - - "docker/__tests__/**" - push: - branches: - - main - paths: - - "docker/release-images.mjs" - - "docker/__tests__/**" - -permissions: - contents: read - -jobs: - test-copy-images: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 - with: - node-version-file: .node-version - - uses: pnpm/action-setup@v2 - - run: pnpm install - - name: Test Release Images - run: ./docker/test.sh diff --git a/.github/workflows/ts-sdk-e2e-tests.yaml b/.github/workflows/ts-sdk-e2e-tests.yaml deleted file mode 100644 index c906451abd78b..0000000000000 --- a/.github/workflows/ts-sdk-e2e-tests.yaml +++ /dev/null @@ -1,77 +0,0 @@ -# Each of these jobs runs the TS SDK E2E tests from this commit against a local testnet -# built from one of the aptos-core branches. Currently we only test against a local -# testnet in a CLI built from main. - -env: - GIT_SHA: ${{ github.event.pull_request.head.sha || github.sha }} - -name: "TS SDK E2E Tests" -on: - pull_request_target: - types: [labeled, opened, synchronize, reopened, auto_merge_enabled] - push: - branches: - - main - -permissions: - contents: read - id-token: write # Required for GCP Workload Identity federation which we use to login into Google Artifact Registry - -# cancel redundant builds -concurrency: - # cancel redundant builds on PRs (only on PR, not on branches) - group: ${{ github.workflow }}-${{ (github.event_name == 'pull_request_target' && github.event.pull_request.head.sha) || github.sha }} - cancel-in-progress: true - -jobs: - # Note on the job-level `if` conditions: - # This workflow is designed such that we run subsequent jobs only when a 'push' - # triggered the workflow or on 'pull_request's which have set auto_merge=true - # or have the label "CICD:run-e2e-tests". - permission-check: - runs-on: ubuntu-latest - steps: - - name: Check repository permission for user which triggered workflow - uses: sushichop/action-repository-permission@13d208f5ae7a6a3fc0e5a7c2502c214983f0241c - with: - required-permission: write - comment-not-permitted: Sorry, you don't have permission to trigger this workflow. - - # This job determines which files were changed - file_change_determinator: - needs: [permission-check] - runs-on: ubuntu-latest - outputs: - only_docs_changed: ${{ steps.determine_file_changes.outputs.only_docs_changed }} - steps: - - uses: actions/checkout@v3 - - name: Run the file change determinator - id: determine_file_changes - uses: ./.github/actions/file-change-determinator - - # This is a PR required job. This runs both the non-indexer and indexer TS SDK tests. - # Now that the latter runs against the local testnet too we make these land blocking. - run-tests-main-branch: - needs: [permission-check, file_change_determinator] - runs-on: runs-on,cpu=64,family=c7,hdd=500,image=aptos-ubuntu-x64,run-id=${{ github.run_id }} - steps: - - uses: actions/checkout@v3 - if: needs.file_change_determinator.outputs.only_docs_changed != 'true' - with: - ref: ${{ env.GIT_SHA }} - - uses: aptos-labs/aptos-core/.github/actions/docker-setup@main - if: needs.file_change_determinator.outputs.only_docs_changed != 'true' - with: - GCP_WORKLOAD_IDENTITY_PROVIDER: ${{ secrets.GCP_WORKLOAD_IDENTITY_PROVIDER }} - GCP_SERVICE_ACCOUNT_EMAIL: ${{ secrets.GCP_SERVICE_ACCOUNT_EMAIL }} - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - AWS_DOCKER_ARTIFACT_REPO: ${{ secrets.AWS_DOCKER_ARTIFACT_REPO }} - GIT_CREDENTIALS: ${{ secrets.GIT_CREDENTIALS }} - - uses: ./.github/actions/run-ts-sdk-e2e-tests - if: needs.file_change_determinator.outputs.only_docs_changed != 'true' - with: - BRANCH: main - GCP_DOCKER_ARTIFACT_REPO: ${{ vars.GCP_DOCKER_ARTIFACT_REPO }} - - run: echo "Skipping the tests on the main branch! Unrelated changes detected." - if: needs.file_change_determinator.outputs.only_docs_changed == 'true' diff --git a/.github/workflows/windows-build.yaml b/.github/workflows/windows-build.yaml deleted file mode 100644 index 2b4ae24767328..0000000000000 --- a/.github/workflows/windows-build.yaml +++ /dev/null @@ -1,64 +0,0 @@ -# This workflow tests that the Aptos CLI can be compiled on Windows -name: "Windows CLI Build" - -on: - workflow_dispatch: - pull_request: - types: [labeled, opened, synchronize, reopened, auto_merge_enabled] - schedule: - # Run twice a day at 12PM PT and 8PM PT Monday through Friday - - cron: "0 19,3 * * 1-5" - # Run once a day at 12PM PT on Saturday and Sunday - - cron: "0 19 * * 6,0" - -jobs: - windows-build: - runs-on: windows-latest - if: | # Only run on each PR once an appropriate event occurs - ( - github.event_name == 'workflow_dispatch' || - github.event_name == 'schedule' || - contains(github.event.pull_request.labels.*.name, 'CICD:run-windows-tests') - ) - defaults: - run: - shell: pwsh - steps: - - uses: actions/checkout@v4 - with: - ref: ${{ github.event.pull_request.head.sha }} - fetch-depth: 0 # Fetch all git history for accurate target determination - - # This action will cache ~/.cargo and ./target (or the equivalent on Windows in - # this case). See more here: - # https://github.com/Swatinem/rust-cache#cache-details - - name: Run cargo cache - uses: Swatinem/rust-cache@359a70e43a0bb8a13953b04a90f76428b4959bb6 # pin@v2.2.0 - - - name: Set up WinGet - run: Set-Variable ProgressPreference SilentlyContinue ; PowerShell -ExecutionPolicy Bypass -File scripts/windows_dev_setup.ps1 - - - name: Install the Developer Tools - run: Set-Variable ProgressPreference SilentlyContinue ; PowerShell -ExecutionPolicy Bypass -File scripts/windows_dev_setup.ps1 -t - - # This is required for the openssl-sys crate to build. - # See: https://github.com/sfackler/rust-openssl/issues/1542#issuecomment-1399358351 - - name: Update the VCPKG root - run: echo "VCPKG_ROOT=$env:VCPKG_INSTALLATION_ROOT" | Out-File -FilePath $env:GITHUB_ENV -Append - - name: Install OpenSSL - run: vcpkg install openssl:x64-windows-static-md --clean-after-build - - # Output the changed files - - name: Output the changed files - run: cargo x changed-files -vv - shell: bash - - # Output the affected packages - - name: Output the affected packages - run: cargo x affected-packages -vv - shell: bash - - # Build and test the Aptos CLI (if it has changed) - - name: Build and test the CLI - run: cargo x targeted-cli-tests -vv - shell: bash diff --git a/.github/workflows/workflow-run-docker-rust-build.yaml b/.github/workflows/workflow-run-docker-rust-build.yaml deleted file mode 100644 index eb39e8a60438b..0000000000000 --- a/.github/workflows/workflow-run-docker-rust-build.yaml +++ /dev/null @@ -1,98 +0,0 @@ -name: "*run Docker rust build reusable workflow" - -on: - workflow_call: - inputs: - GIT_SHA: - required: true - type: string - description: The git SHA1 to build. If not specified, the latest commit on the triggering branch will be built - TARGET_CACHE_ID: - required: true - type: string - description: ID of the docker cache to use for the build - FEATURES: - required: false - type: string - description: The cargo features to build. If not specified, none will be built other than those specified in cargo config - PROFILE: - default: release - required: false - type: string - description: The cargo profile to build. If not specified, the default release profile will be used - BUILD_ADDL_TESTING_IMAGES: - default: false - required: false - type: boolean - description: Whether to build additional testing images. If not specified, only the base release images will be built - TARGET_REGISTRY: - default: gcp - required: false - type: string - description: The target docker registry to push to - - workflow_dispatch: - inputs: - GIT_SHA: - required: true - type: string - description: The git SHA1 to build. If not specified, the latest commit on the triggering branch will be built - FEATURES: - required: false - type: string - description: The cargo features to build. If not specified, none will be built other than those specified in cargo config - PROFILE: - default: release - required: false - type: string - description: The cargo profile to build. If not specified, the default release profile will be used - BUILD_ADDL_TESTING_IMAGES: - default: false - required: false - type: boolean - description: Whether to build additional testing images. If not specified, only the base release images will be built - TARGET_REGISTRY: - default: gcp - required: false - type: string - description: The target docker registry to push to - -env: - GIT_SHA: ${{ inputs.GIT_SHA }} - TARGET_CACHE_ID: ${{ inputs.TARGET_CACHE_ID || inputs.GIT_SHA }} # on workflow_dispatch, the build is one-off, so use the git sha as the cache id instead of another key - PROFILE: ${{ inputs.PROFILE }} - FEATURES: ${{ inputs.FEATURES }} - BUILD_ADDL_TESTING_IMAGES: ${{ inputs.BUILD_ADDL_TESTING_IMAGES }} - AWS_ECR_ACCOUNT_NUM: ${{ secrets.ENV_ECR_AWS_ACCOUNT_NUM }} - GCP_DOCKER_ARTIFACT_REPO: ${{ vars.GCP_DOCKER_ARTIFACT_REPO }} - TARGET_REGISTRY: ${{ inputs.TARGET_REGISTRY }} - -permissions: - contents: read - id-token: write #required for GCP Workload Identity federation which we use to login into Google Artifact Registry - -jobs: - rust-all: - runs-on: experimental-docker - steps: - - uses: actions/checkout@v3 - with: - ref: ${{ env.GIT_SHA }} - - - uses: aptos-labs/aptos-core/.github/actions/docker-setup@main - with: - GCP_WORKLOAD_IDENTITY_PROVIDER: ${{ secrets.GCP_WORKLOAD_IDENTITY_PROVIDER }} - GCP_SERVICE_ACCOUNT_EMAIL: ${{ secrets.GCP_SERVICE_ACCOUNT_EMAIL }} - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - AWS_DOCKER_ARTIFACT_REPO: ${{ secrets.AWS_DOCKER_ARTIFACT_REPO }} - GIT_CREDENTIALS: ${{ secrets.GIT_CREDENTIALS }} - - - name: Build and Push Rust images - run: docker/builder/docker-bake-rust-all.sh - env: - PROFILE: ${{ env.PROFILE }} - FEATURES: ${{ env.FEATURES }} - BUILD_ADDL_TESTING_IMAGES: ${{ env.BUILD_ADDL_TESTING_IMAGES }} - GIT_CREDENTIALS: ${{ secrets.GIT_CREDENTIALS }} - TARGET_REGISTRY: ${{ env.TARGET_REGISTRY }} diff --git a/.github/workflows/workflow-run-execution-performance.yaml b/.github/workflows/workflow-run-execution-performance.yaml deleted file mode 100644 index 48c5c1ee6ff6b..0000000000000 --- a/.github/workflows/workflow-run-execution-performance.yaml +++ /dev/null @@ -1,90 +0,0 @@ -name: "*run execution-performance reusable workflow" - -on: - # This allows the workflow to be triggered from another workflow - workflow_call: - inputs: - GIT_SHA: - required: true - type: string - description: The git SHA1 to test. - RUNNER_NAME: - required: false - default: executor-benchmark-runner - type: string - IS_FULL_RUN: - required: false - default: false - type: boolean - description: Run complete version of the tests - IGNORE_TARGET_DETERMINATION: - required: false - default: false - type: boolean - description: Ignore target determination and run the tests - # This allows the workflow to be triggered manually from the Github UI or CLI - # NOTE: because the "number" type is not supported, we default to 720 minute timeout - workflow_dispatch: - inputs: - GIT_SHA: - required: true - type: string - description: The git SHA1 to test. - RUNNER_NAME: - required: false - default: executor-benchmark-runner - type: choice - options: - - executor-benchmark-runner - description: The name of the runner to use for the test. - IS_FULL_RUN: - required: false - default: false - type: boolean - description: Run complete version of the tests - IGNORE_TARGET_DETERMINATION: - required: false - default: false - type: boolean - description: Ignore target determination and run the tests - -jobs: - # This job determines which tests to run - test-target-determinator: - runs-on: ubuntu-latest - outputs: - run_execution_performance_test: ${{ steps.determine_test_targets.outputs.run_execution_performance_test }} - steps: - - uses: actions/checkout@v3 - - name: Run the test target determinator - id: determine_test_targets - uses: ./.github/actions/test-target-determinator - - # Run single node execution performance tests - single-node-performance: - needs: test-target-determinator - timeout-minutes: 60 - runs-on: ${{ inputs.RUNNER_NAME }} - steps: - - uses: actions/checkout@v3 - with: - ref: ${{ inputs.GIT_SHA }} - if: ${{ inputs.IGNORE_TARGET_DETERMINATION || needs.test-target-determinator.outputs.run_execution_performance_test == 'true' }} - - - uses: aptos-labs/aptos-core/.github/actions/rust-setup@main - with: - GIT_CREDENTIALS: ${{ secrets.GIT_CREDENTIALS }} - if: ${{ inputs.IGNORE_TARGET_DETERMINATION || needs.test-target-determinator.outputs.run_execution_performance_test == 'true' }} - - - name: Run single node execution benchmark in performance build mode - shell: bash - run: TABULATE_INSTALL=lib-only pip install tabulate && testsuite/single_node_performance.py - if: ${{ !inputs.IS_FULL_RUN && (inputs.IGNORE_TARGET_DETERMINATION || needs.test-target-determinator.outputs.run_execution_performance_test == 'true') }} - - - name: Run full version of the single node execution benchmark in performance build mode - shell: bash - run: TABULATE_INSTALL=lib-only pip install tabulate && FLOW=CONTINUOUS testsuite/single_node_performance.py - if: ${{ inputs.IS_FULL_RUN && (inputs.IGNORE_TARGET_DETERMINATION || needs.test-target-determinator.outputs.run_execution_performance_test == 'true') }} - - - run: echo "Skipping single node execution performance! Unrelated changes detected." - if: ${{ !inputs.IGNORE_TARGET_DETERMINATION && needs.test-target-determinator.outputs.run_execution_performance_test != 'true' }} diff --git a/.github/workflows/workflow-run-forge.yaml b/.github/workflows/workflow-run-forge.yaml deleted file mode 100644 index 5de05cc005469..0000000000000 --- a/.github/workflows/workflow-run-forge.yaml +++ /dev/null @@ -1,218 +0,0 @@ -name: "*run Forge reusable workflow" - -on: - # this is called from within the build-images.yaml workflow since we depend on the images having been built before - workflow_call: - inputs: - GIT_SHA: - required: false - type: string - description: The git SHA1 to test. If not specified, Forge will check the latest commits on the current branch - IMAGE_TAG: - required: false - type: string - description: The docker image tag to test. If not specified, falls back on GIT_SHA, and then to the latest commits on the current branch - FORGE_IMAGE_TAG: - required: false - type: string - description: The docker image tag to use for forge runner. If not specified, falls back on GIT_SHA, and then to the latest commits on the current branch - FORGE_NAMESPACE: - required: false - type: string - description: The Forge k8s namespace to be used for test. This value should manage Forge test concurrency. It may be truncated. - FORGE_CLUSTER_NAME: - required: false - type: string - description: The Forge k8s cluster to be used for test - FORGE_RUNNER_DURATION_SECS: - required: false - type: number - default: 480 - description: Duration of the forge test run - FORGE_TEST_SUITE: - required: false - type: string - default: land_blocking - description: Test suite to run - POST_TO_SLACK: - required: false - type: boolean - default: false - description: Whether to post the test results comment to Slack - COMMENT_ON_PR: - required: false - type: boolean - default: true - description: Whether to post the test results comment to the PR - TIMEOUT_MINUTES: - required: false - type: number - default: 360 - description: Github job timeout in minutes - FORGE_ENABLE_FAILPOINTS: - required: false - type: string - description: Whether to use failpoints images - FORGE_ENABLE_HAPROXY: - required: false - type: string - description: Whether to use HAPRoxy - FORGE_ENABLE_PERFORMANCE: - required: false - type: string - description: Whether to use performance images - COMMENT_HEADER: - required: false - type: string - default: forge - description: A unique ID for Forge sticky comment on your PR. See - https://github.com/marocchino/sticky-pull-request-comment#keep-more-than-one-comment - SKIP_JOB: - required: false - default: false - type: boolean - description: Set to true to skip this job. Useful for PRs that don't require this workflow. - -env: - AWS_ACCOUNT_NUM: ${{ secrets.ENV_ECR_AWS_ACCOUNT_NUM }} - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - GCP_WORKLOAD_IDENTITY_PROVIDER: ${{ secrets.GCP_WORKLOAD_IDENTITY_PROVIDER }} - GCP_SERVICE_ACCOUNT_EMAIL: ${{ secrets.GCP_SERVICE_ACCOUNT_EMAIL }} - AWS_REGION: us-west-2 - IMAGE_TAG: ${{ inputs.IMAGE_TAG }} - FORGE_IMAGE_TAG: ${{ inputs.FORGE_IMAGE_TAG }} - FORGE_BLOCKING: ${{ secrets.FORGE_BLOCKING }} - FORGE_CLUSTER_NAME: ${{ inputs.FORGE_CLUSTER_NAME }} - FORGE_OUTPUT: forge_output.txt - FORGE_REPORT: forge_report.json - FORGE_COMMENT: forge_comment.txt - FORGE_PRE_COMMENT: forge_pre_comment.txt - FORGE_RUNNER_MODE: k8s - FORGE_RUNNER_DURATION_SECS: ${{ inputs.FORGE_RUNNER_DURATION_SECS }} - FORGE_NAMESPACE: ${{ inputs.FORGE_NAMESPACE }} - FORGE_ENABLE_HAPROXY: ${{ inputs.FORGE_ENABLE_HAPROXY }} - FORGE_TEST_SUITE: ${{ inputs.FORGE_TEST_SUITE }} - POST_TO_SLACK: ${{ inputs.POST_TO_SLACK }} - FORGE_ENABLE_FAILPOINTS: ${{ inputs.FORGE_ENABLE_FAILPOINTS }} - FORGE_ENABLE_PERFORMANCE: ${{ inputs.FORGE_ENABLE_PERFORMANCE }} - COMMENT_HEADER: ${{ inputs.COMMENT_HEADER }} - VERBOSE: true - COMMENT_ON_PR: ${{ inputs.COMMENT_ON_PR }} - -# TODO: should we migrate this to a composite action, so that we can skip it -# at the call site, and don't need to wrap each step in an if statement? -jobs: - forge: - runs-on: ubuntu-latest - timeout-minutes: ${{ inputs.TIMEOUT_MINUTES }} - steps: - - uses: actions/checkout@v4 - if: ${{ !inputs.SKIP_JOB }} - with: - ref: ${{ inputs.GIT_SHA }} - # get the last 10 commits if GIT_SHA is not specified - fetch-depth: inputs.GIT_SHA != null && 0 || 10 - - - uses: actions/setup-python@v4 - if: ${{ !inputs.SKIP_JOB }} - - - name: Install python deps - run: pip3 install click==8.1.3 psutil==5.9.1 - if: ${{ !inputs.SKIP_JOB }} - - # Calculate the auth duration based on the test duration - # If the test duration is less than the default 90 minutes, use the default - # otherwise add 30 minutes to the length of the Forge test run - - name: Calculate Forge Auth Duration - if: ${{ !inputs.SKIP_JOB }} - id: calculate-auth-duration - run: | - auth_duration=$(( $FORGE_RUNNER_DURATION_SECS > 5400 ? $FORGE_RUNNER_DURATION_SECS + 30 * 60 : 5400 )) - echo "auth_duration=${auth_duration}" >> $GITHUB_OUTPUT - - - uses: aptos-labs/aptos-core/.github/actions/docker-setup@main - if: ${{ !inputs.SKIP_JOB }} - id: docker-setup - with: - GCP_WORKLOAD_IDENTITY_PROVIDER: ${{ secrets.GCP_WORKLOAD_IDENTITY_PROVIDER }} - GCP_SERVICE_ACCOUNT_EMAIL: ${{ secrets.GCP_SERVICE_ACCOUNT_EMAIL }} - # action/docker-setup logs in to GCP under project "aptos-ci", but this workflow - # runs kubectl under project "aptos-forge-gcp-0", to which the service account - # of "aptos-ci" has delegated access. The exported environment variables will - # still refer to "aptos-ci", which confuses the gcloud CLI, so we need to keep - # them out of the environment. That's ok, because gcloud will take configuration - # from the file-system anyway. - EXPORT_GCP_PROJECT_VARIABLES: "false" - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - AWS_DOCKER_ARTIFACT_REPO: ${{ secrets.AWS_DOCKER_ARTIFACT_REPO }} - GIT_CREDENTIALS: ${{ secrets.GIT_CREDENTIALS }} - GCP_AUTH_DURATION: ${{ steps.calculate-auth-duration.outputs.auth_duration }} - - - name: "Install GCloud SDK" - if: ${{ !inputs.SKIP_JOB }} - uses: "google-github-actions/setup-gcloud@v2" - with: - version: ">= 418.0.0" - install_components: "kubectl,gke-gcloud-auth-plugin" - - - name: "Export GCloud auth token" - if: ${{ !inputs.SKIP_JOB }} - id: gcloud-auth - run: echo "CLOUDSDK_AUTH_ACCESS_TOKEN=${{ steps.docker-setup.outputs.CLOUDSDK_AUTH_ACCESS_TOKEN }}" >> $GITHUB_ENV - shell: bash - - - name: "Setup GCloud project" - if: ${{ !inputs.SKIP_JOB }} - shell: bash - run: gcloud config set project aptos-forge-gcp-0 - - - name: Run pre-Forge checks - if: ${{ !inputs.SKIP_JOB }} - shell: bash - env: - FORGE_RUNNER_MODE: pre-forge - run: testsuite/run_forge.sh - - - name: Post pre-Forge comment - if: ${{ !inputs.SKIP_JOB && env.COMMENT_ON_PR == 'true' && github.event.number != null }} - uses: marocchino/sticky-pull-request-comment@39c5b5dc7717447d0cba270cd115037d32d28443 # pin@39c5b5dc7717447d0cba270cd115037d32d2844 - with: - header: ${{ env.COMMENT_HEADER }} - hide_and_recreate: true # Hide the previous comment and add a comment at the end - hide_classify: "OUTDATED" - path: ${{ env.FORGE_PRE_COMMENT }} - - - name: Run Forge - if: ${{ !inputs.SKIP_JOB }} - shell: bash - run: testsuite/run_forge.sh - - - name: Post forge result comment - # Post a Github comment if the run has not been cancelled and if we're running on a PR - if: ${{ !inputs.SKIP_JOB && env.COMMENT_ON_PR == 'true' && github.event.number != null && !cancelled() }} - uses: marocchino/sticky-pull-request-comment@39c5b5dc7717447d0cba270cd115037d32d28443 # pin@39c5b5dc7717447d0cba270cd115037d32d2844 - with: - header: ${{ env.COMMENT_HEADER }} - hide_and_recreate: true - hide_classify: "OUTDATED" - path: ${{ env.FORGE_COMMENT }} - - - name: Post to a Slack channel on failure - # Post a Slack comment if the run has not been cancelled and the envs are set - if: ${{ !inputs.SKIP_JOB && env.POST_TO_SLACK == 'true' && failure() }} - id: slack - uses: slackapi/slack-github-action@936158bbe252e9a6062e793ea4609642c966e302 # pin@v1.21.0 - with: - # For posting a rich message using Block Kit - payload: | - { - "text": "${{ job.status == 'success' && ':white_check_mark:' || ':x:' }} ${{ github.job }}(suite: `${{ inputs.FORGE_TEST_SUITE }}`, namespace: `${{ inputs.FORGE_NAMESPACE }}`): <${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|link>" - } - env: - SLACK_WEBHOOK_URL: ${{ secrets.FORGE_SLACK_WEBHOOK_URL }} - - # Print out whether the job was skipped. - - run: echo "Skipping forge test!" - if: ${{ inputs.SKIP_JOB }} diff --git a/.github/workflows/workflow-run-module-verify.yaml b/.github/workflows/workflow-run-module-verify.yaml deleted file mode 100644 index 2dd3a9ac7b0f4..0000000000000 --- a/.github/workflows/workflow-run-module-verify.yaml +++ /dev/null @@ -1,71 +0,0 @@ -name: "*run module-verify reusable workflow" -on: - # This allows the workflow to be triggered from another workflow - workflow_call: - inputs: - GIT_SHA: - required: false - type: string - description: The git SHA1 to test. If not specified, it will use the latest commit on main. - # module-verify config - BUCKET: - required: true - type: string - description: The bucket to use for the backup. If not specified, it will use the default bucket. - SUB_DIR: - required: true - type: string - description: The subdirectory to use for the backup. If not specified, it will use the default subdirectory. - BACKUP_CONFIG_TEMPLATE_PATH: - description: "The path to the backup config template to use." - type: string - required: true - # GHA job config - RUNS_ON: - description: "The runner to use for the job." - type: string - required: true - default: "high-perf-docker-with-local-ssd" - TIMEOUT_MINUTES: - description: "Github job timeout in minutes" - type: number - required: true - default: 720 - -jobs: - module-verify: - # if we're running on a PR, it's only for testing purposes, so we can set a shorter timeout - timeout-minutes: ${{ inputs.TIMEOUT_MINUTES }} - runs-on: ${{ inputs.RUNS_ON }} - steps: - - uses: actions/checkout@v3 - with: - ref: ${{ inputs.GIT_SHA }} - - - uses: aptos-labs/aptos-core/.github/actions/rust-setup@main - with: - GIT_CREDENTIALS: ${{ secrets.GIT_CREDENTIALS }} - - - name: Install AWS CLI - shell: bash - run: | - scripts/dev_setup.sh -b -i awscli - echo "${HOME}/bin/" >> $GITHUB_PATH # default INSTALL_DIR to path - - - name: Install s5cmd - shell: bash - run: | - scripts/dev_setup.sh -b -i s5cmd - echo "${HOME}/bin/" >> $GITHUB_PATH # default INSTALL_DIR to path - - - name: Build CLI binaries in release mode - shell: bash - run: cargo build --release -p aptos-debugger - - - name: Run module-verify in parallel - shell: bash - run: testsuite/module_verify.py - env: - BUCKET: ${{ inputs.BUCKET }} - SUB_DIR: ${{ inputs.SUB_DIR }} - BACKUP_CONFIG_TEMPLATE_PATH: ${{ inputs.BACKUP_CONFIG_TEMPLATE_PATH }} diff --git a/.github/workflows/workflow-run-replay-verify.yaml b/.github/workflows/workflow-run-replay-verify.yaml deleted file mode 100644 index 29dbdf1c88c13..0000000000000 --- a/.github/workflows/workflow-run-replay-verify.yaml +++ /dev/null @@ -1,116 +0,0 @@ -name: "*run replay-verify reusable workflow" - -on: - # This allows the workflow to be triggered from another workflow - workflow_call: - inputs: - GIT_SHA: - required: true - type: string - description: The git SHA1 to test. - # replay-verify config - BUCKET: - required: true - type: string - description: The bucket to use for the backup. If not specified, it will use the default bucket. - SUB_DIR: - required: true - type: string - description: The subdirectory to use for the backup. If not specified, it will use the default subdirectory. - HISTORY_START: - required: true - type: string - description: The history start to use for the backup. If not specified, it will use the default history start. - TXNS_TO_SKIP: - required: false - type: string - description: The list of transaction versions to skip. If not specified, it will use the default list. - BACKUP_CONFIG_TEMPLATE_PATH: - description: "The path to the backup config template to use." - type: string - required: true - # GHA job config - RUNS_ON: - description: "The runner to use for the job." - type: string - required: true - default: "high-perf-docker-with-local-ssd" - TIMEOUT_MINUTES: - description: "Github job timeout in minutes" - type: number - required: true - default: 720 - # This allows the workflow to be triggered manually from the Github UI or CLI - # NOTE: because the "number" type is not supported, we default to 720 minute timeout - workflow_dispatch: - inputs: - GIT_SHA: - required: true - type: string - description: The git SHA1 to test. - # replay-verify config - BUCKET: - required: true - type: string - description: The bucket to use for the backup. If not specified, it will use the default bucket. - SUB_DIR: - required: true - type: string - description: The subdirectory to use for the backup. If not specified, it will use the default subdirectory. - HISTORY_START: - required: true - type: string - description: The history start to use for the backup. If not specified, it will use the default history start. - TXNS_TO_SKIP: - required: false - type: string - description: The list of transaction versions to skip. If not specified, it will use the default list. - BACKUP_CONFIG_TEMPLATE_PATH: - description: "The path to the backup config template to use." - type: string - required: true - # GHA job config - RUNS_ON: - description: "The runner to use for the job." - type: string - required: true - default: "high-perf-docker-with-local-ssd" - -jobs: - replay-verify: - timeout-minutes: ${{ inputs.TIMEOUT_MINUTES || 720 }} - runs-on: ${{ inputs.RUNS_ON }} - strategy: - fail-fast: false - matrix: - number: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18] # runner number - steps: - - name: Echo Runner Number - run: echo "Runner is ${{ matrix.number }}" - - uses: actions/checkout@v4 - with: - ref: ${{ inputs.GIT_SHA }} - - - uses: aptos-labs/aptos-core/.github/actions/rust-setup@main - with: - GIT_CREDENTIALS: ${{ secrets.GIT_CREDENTIALS }} - - - name: Install GCloud SDK - uses: "google-github-actions/setup-gcloud@v2" - with: - version: ">= 418.0.0" - install_components: "kubectl,gke-gcloud-auth-plugin" - - - name: Build CLI binaries in release mode - shell: bash - run: cargo build --release -p aptos-debugger - - - name: Run replay-verify in parallel - shell: bash - run: testsuite/replay_verify.py ${{ matrix.number }} 19 # first argument is the runner number, second argument is the total number of runners - env: - BUCKET: ${{ inputs.BUCKET }} - SUB_DIR: ${{ inputs.SUB_DIR }} - HISTORY_START: ${{ inputs.HISTORY_START }} - TXNS_TO_SKIP: ${{ inputs.TXNS_TO_SKIP }} - BACKUP_CONFIG_TEMPLATE_PATH: ${{ inputs.BACKUP_CONFIG_TEMPLATE_PATH }} diff --git a/.gitignore b/.gitignore index 47156ef12d9ac..973c858fa9514 100644 --- a/.gitignore +++ b/.gitignore @@ -135,3 +135,6 @@ test_indexer_grpc/* *.dot *.bytecode !third_party/move/move-prover/tests/xsources/design/*.bytecode + +# ignore boogie bpl +boogie.bpl diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 312e964feab2d..0000000000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "rust-analyzer.rustfmt.extraArgs": [ - "+nightly" - ], - "rust-analyzer.showUnlinkedFileNotification": false -} diff --git a/CODEOWNERS b/CODEOWNERS index 73eb4fa743af3..48af08fc69340 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -1,113 +1,2 @@ -# **Please** keep this file ordered alphabetically by directory paths. - -# Owners for the `.github` directory and all its subdirectories. -/.github/ @aptos-labs/prod-eng - -# Owners for the `/api` directory and all its subdirectories. -/api/ @banool @gregnazario @0xmaayan - -# Owners for the `/aptos-move` directory and its subdirectories:`aptos-gas`, `aptos-vm`, `framework` and `framework/aptos-stdlib/sources/cryptography`. -/aptos-move/aptos-aggregator/ @georgemitenkov @gelash @zekun000 -/aptos-move/aptos-gas/ @vgao1996 -/aptos-move/aptos-vm/ @davidiw @wrwg @zekun000 @vgao1996 @georgemitenkov -/aptos-move/aptos-vm/src/keyless_validation.rs @alinush @heliuchuan -/aptos-move/aptos-vm-types/ @georgemitenkov @gelash @vgao1996 -/aptos-move/framework/ @davidiw @movekevin @wrwg -/aptos-move/framework/aptos-framework/sources/account.move @alinush -/aptos-move/framework/aptos-framework/sources/jwks.move @zjma -/aptos-move/framework/aptos-framework/sources/keyless_account.move @alinush -/aptos-move/framework/aptos-stdlib/sources/cryptography/ @alinush @zjma @mstraka100 -/aptos-move/framework/**/*.spec.move @junkil-park -/aptos-move/framework/aptos-stdlib/sources/hash.move @alinush - -# Owner for aptos-token, cryptography natives, parallel-executor and vm-genesis. -/aptos-move/framework/aptos-token @areshand -/aptos-move/framework/src/natives/cryptography/ @alinush @zjma @mstraka100 -/aptos-move/framework/src/natives/aggregator_natives/ @georgemitenkov @gelash @zekun000 -/aptos-move/block-executor/ @gelash @zekun000 @sasha8 @danielxiangzl -/aptos-move/sharded_block-executor/ @sitalkedia -/aptos-move/mvhashmap/ @gelash @runtian-zhou @sasha8 @danielxiangzl -/aptos-move/vm-genesis/ @davidiw @movekevin - -# Owner for aptos node (to prevent things from becoming out of hand :D) -/aptos-node/ @joshlind - -# Owner for the node configs (to prevent things from becoming out of hand :D) -/config/ @joshlind @gregnazario - -# Owners for the `/consensus` directory and all its subdirectories. -/consensus/ @zekun000 @sasha8 @ibalajiarun - -# Owners for quorum store. -/consensus/src/quorum_store/ @bchocho @sasha8 @gelash - -# Owners for the `/crates/aptos` directory and all its subdirectories. -/crates/aptos @gregnazario @banool - -# Owners for the `/crates/aptos-crypto*` directories. -/crates/aptos-crypto-derive/ @alinush @zjma @mstraka100 @rex1fernando -/crates/aptos-crypto/ @alinush @zjma @mstraka100 @rex1fernando - -# Owners for the `/crates/aptos-faucet` directory and all its subdirectories. And other faucet, genesis, and OpenAPI-related crates. -/crates/aptos-faucet @banool @gregnazario -/crates/aptos-genesis @gregnazario - -# Owners for the aptos-logger crate -/crates/aptos-logger @gregnazario @joshlind - -/crates/aptos-open-api @banool @gregnazario - -# Owners for the aptos-protos crate -/crates/aptos-protos @banool @bowenyang007 @jillxuu @larry-aptos @rtso - -/crates/aptos-rest-client @banool @gregnazario - -# Owners for the `/aptos-rosetta` directory and related crates. -/crates/aptos-rosetta @gregnazario -/crates/aptos-rosetta-cli @gregnazario - -# Owners for the aptos-speculative-state-helper crate -/crates/aptos-speculative-state-helper @gelash - -# Owners for the `telemetry` related crates. -/crates/aptos-telemetry @ibalajiarun @geekflyer -/crates/aptos-telemetry-service @ibalajiarun @geekflyer - -# Owners for the inspection-service crate -/crates/inspection-service/ @joshlind @brianolson - -# Owners for the `/dashboards` directory and all its subdirectories. -/dashboards/ @aptos-labs/prod-eng - -# Owners for the `/docker` directory and all its subdirectories. -/docker/ @aptos-labs/prod-eng -/docker/builder/docker-bake-rust-all.hcl @aptos-labs/prod-eng @aptos-labs/security - -# Owners for execution and storage. -/execution/ @msmouse @lightmark @grao1991 - -# Owners for mempool. -/mempool/ @bchocho - -# Owners for the network and all its subdirectories. -/network/ @joshlind @brianolson - -# Owners for the scripts -/scripts/ @aptos-labs/prod-eng -/scripts/authenticator_regenerate.sh @alinush @hariria @heliuchuan -/scripts/algebra-gas/ @zjma - -# Owners for the `/state-sync` directory and all its subdirectories. -/state-sync/ @joshlind - -# Owners for execution and storage. -/storage/ @msmouse @lightmark @grao1991 - -# Owners for the `/terraform` directory and all its subdirectories. -/terraform/ @aptos-labs/prod-eng - -# Owners for the `aptos-dkg` crate. -/crates/aptos-dkg @alinush @rex1fernando - -/types/src/keyless/ @alinush @heliuchuan -/types/src/transaction/authenticator.rs @alinush @mstraka100 +# Global code owners +/ @0xmovses @l-monninger @musitdev @sebtomba @andygolay @mzabaluev @Icarus131 @Primata diff --git a/Cargo.lock b/Cargo.lock index ecdc4b0cb3946..9c07a61c74d44 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -108,6 +108,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ "cfg-if", + "const-random", "getrandom 0.2.11", "once_cell", "serde", @@ -130,6 +131,27 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fd" +[[package]] +name = "allocative" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "082af274fd02beef17b7f0725a49ecafe6c075ef56cac9d6363eb3916a9817ae" +dependencies = [ + "allocative_derive", + "ctor", +] + +[[package]] +name = "allocative_derive" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe233a377643e0fc1a56421d7c90acdec45c291b30345eb9f08e8d0ddce5a4ab" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + [[package]] name = "allocator-api2" version = "0.2.16" @@ -168,15 +190,16 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.5" +version = "0.6.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d664a92ecae85fd0a7392615844904654d1d5f5514837f471ddef4a057aba1b6" +checksum = "64e15c1ab1f89faffbf04a634d5e1962e9074f2741eef6d97f3c4e322426d526" dependencies = [ "anstyle", "anstyle-parse", "anstyle-query", "anstyle-wincon", "colorchoice", + "is_terminal_polyfill", "utf8parse", ] @@ -229,106 +252,6 @@ dependencies = [ "backtrace", ] -[[package]] -name = "approx" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" -dependencies = [ - "num-traits", -] - -[[package]] -name = "aptos" -version = "3.4.1" -dependencies = [ - "anyhow", - "aptos-api-types", - "aptos-backup-cli", - "aptos-bitvec", - "aptos-build-info", - "aptos-cached-packages", - "aptos-cli-common", - "aptos-config", - "aptos-crypto", - "aptos-faucet-core", - "aptos-framework", - "aptos-gas-profiling", - "aptos-gas-schedule", - "aptos-genesis", - "aptos-github-client", - "aptos-global-constants", - "aptos-indexer-grpc-server-framework", - "aptos-indexer-grpc-utils", - "aptos-keygen", - "aptos-ledger", - "aptos-logger", - "aptos-move-debugger", - "aptos-network-checker", - "aptos-node", - "aptos-protos 1.3.0", - "aptos-rest-client", - "aptos-sdk", - "aptos-storage-interface", - "aptos-telemetry", - "aptos-temppath", - "aptos-types", - "aptos-vm", - "aptos-vm-genesis", - "aptos-vm-logging", - "aptos-vm-types", - "async-trait", - "base64 0.13.1", - "bcs 0.1.4", - "bollard", - "chrono", - "clap 4.4.14", - "clap_complete", - "dashmap", - "diesel", - "diesel-async 0.4.1 (git+https://github.com/weiznich/diesel_async.git?rev=d02798c67065d763154d7272dd0c09b39757d0f2)", - "dirs", - "futures", - "hex", - "itertools 0.12.1", - "jemallocator", - "maplit", - "move-binary-format", - "move-bytecode-source-map", - "move-cli", - "move-command-line-common", - "move-compiler", - "move-core-types", - "move-coverage", - "move-disassembler", - "move-ir-types", - "move-model", - "move-package", - "move-symbol-pool", - "move-unit-test", - "move-vm-runtime", - "pathsearch", - "poem", - "processor", - "rand 0.7.3", - "reqwest", - "self_update", - "serde", - "serde_json", - "serde_yaml 0.8.26", - "server-framework", - "shadow-rs", - "tempfile", - "thiserror", - "tokio", - "toml 0.7.8", - "tonic 0.11.0", - "tracing", - "tracing-subscriber 0.3.18", - "url", - "version-compare", -] - [[package]] name = "aptos-abstract-gas-usage" version = "0.1.0" @@ -366,7 +289,7 @@ dependencies = [ "aptos-storage-interface", "aptos-system-utils 0.1.0", "aptos-types", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "http", "hyper", "sha256", @@ -380,7 +303,7 @@ version = "0.1.0" dependencies = [ "aptos-logger", "aptos-types", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "claims", "move-binary-format", "move-core-types", @@ -416,7 +339,7 @@ dependencies = [ "aptos-types", "aptos-vm", "async-trait", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "bytes", "fail", "futures", @@ -468,7 +391,7 @@ dependencies = [ "aptos-vm", "aptos-vm-logging", "aptos-vm-validator", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "bytes", "goldenfile", "hyper", @@ -519,7 +442,7 @@ dependencies = [ "aptos-types", "aptos-vm", "async-trait", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "bytes", "hex", "indoc", @@ -556,9 +479,9 @@ dependencies = [ "aptos-types", "aptos-vm", "async-trait", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "bytes", - "clap 4.4.14", + "clap 4.5.13", "csv", "futures", "itertools 0.12.1", @@ -566,7 +489,7 @@ dependencies = [ "move-bytecode-verifier", "num_cpus", "once_cell", - "pin-project 1.1.3", + "pin-project", "proptest", "rand 0.7.3", "regex", @@ -595,7 +518,7 @@ dependencies = [ "aptos-storage-interface", "aptos-temppath", "aptos-types", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "bytes", "hyper", "once_cell", @@ -618,7 +541,7 @@ dependencies = [ name = "aptos-bitvec" version = "0.1.0" dependencies = [ - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "proptest", "proptest-derive", "serde", @@ -641,7 +564,7 @@ dependencies = [ "aptos-vm-logging", "aptos-vm-types", "arc-swap", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "bytes", "claims", "concurrent-queue", @@ -673,8 +596,8 @@ dependencies = [ "aptos-logger", "aptos-metrics-core", "aptos-types", - "bcs 0.1.4", - "clap 4.4.14", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", + "clap 4.5.13", "criterion", "dashmap", "itertools 0.12.1", @@ -710,7 +633,7 @@ dependencies = [ "aptos-framework", "aptos-package-builder", "aptos-types", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "move-core-types", "once_cell", "proptest", @@ -724,7 +647,7 @@ dependencies = [ "anyhow", "camino", "chrono", - "clap 4.4.14", + "clap 4.5.13", "clap-verbosity-flag", "determinator", "env_logger", @@ -751,7 +674,7 @@ name = "aptos-cli-common" version = "1.0.0" dependencies = [ "anstyle", - "clap 4.4.14", + "clap 4.5.13", "clap_complete", ] @@ -759,32 +682,6 @@ dependencies = [ name = "aptos-collections" version = "0.1.0" -[[package]] -name = "aptos-comparison-testing" -version = "0.1.0" -dependencies = [ - "anyhow", - "aptos-framework", - "aptos-language-e2e-tests", - "aptos-rest-client", - "aptos-types", - "aptos-validator-interface", - "aptos-vm", - "bcs 0.1.4", - "clap 4.4.14", - "futures", - "itertools 0.12.1", - "move-compiler", - "move-core-types", - "move-model", - "move-package", - "rocksdb", - "serde", - "tempfile", - "tokio", - "url", -] - [[package]] name = "aptos-compression" version = "0.1.0" @@ -793,7 +690,7 @@ dependencies = [ "aptos-logger", "aptos-metrics-core", "aptos-types", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "lz4", "once_cell", "rand 0.7.3", @@ -814,7 +711,7 @@ dependencies = [ "aptos-temppath", "aptos-types", "arr_macro", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "byteorder", "cfg-if", "get_if_addrs", @@ -876,12 +773,12 @@ dependencies = [ "aptos-vm", "aptos-vm-validator", "async-trait", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "byteorder", "bytes", "chrono", "claims", - "clap 4.4.14", + "clap 4.5.13", "dashmap", "enum_dispatch", "fail", @@ -945,7 +842,7 @@ dependencies = [ "aptos-logger", "aptos-short-hex-str", "aptos-types", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "fail", "futures", "itertools 0.12.1", @@ -968,7 +865,7 @@ dependencies = [ "backtrace", "move-core-types", "serde", - "toml 0.7.8", + "toml 0.8.2", ] [[package]] @@ -986,7 +883,7 @@ dependencies = [ "ark-serialize", "ark-std", "base64 0.13.1", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "bitvec 1.0.1", "blake2", "blake2-rfc", @@ -1065,7 +962,7 @@ dependencies = [ "aptos-types", "arc-swap", "async-trait", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "claims", "dashmap", "futures", @@ -1134,10 +1031,10 @@ dependencies = [ "aptos-types", "arc-swap", "arr_macro", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "byteorder", "claims", - "clap 4.4.14", + "clap 4.5.13", "crossbeam-channel", "dashmap", "either", @@ -1156,6 +1053,7 @@ dependencies = [ "serde", "static_assertions", "status-line", + "tracing", ] [[package]] @@ -1172,7 +1070,7 @@ dependencies = [ "aptos-schemadb", "aptos-storage-interface", "aptos-types", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "bytes", "dashmap", "move-core-types", @@ -1188,7 +1086,7 @@ dependencies = [ "aptos-schemadb", "aptos-storage-interface", "aptos-types", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "byteorder", "proptest", "proptest-derive", @@ -1213,8 +1111,8 @@ dependencies = [ "aptos-temppath", "aptos-types", "aptos-vm", - "bcs 0.1.4", - "clap 4.4.14", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", + "clap 4.5.13", "itertools 0.12.1", "tokio", ] @@ -1229,7 +1127,7 @@ dependencies = [ "aptos-logger", "aptos-move-debugger", "aptos-push-metrics", - "clap 4.4.14", + "clap 4.5.13", "jemallocator", "tokio", ] @@ -1242,7 +1140,7 @@ dependencies = [ "aptos-crypto", "aptos-crypto-derive", "aptos-runtimes", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "blst", "blstrs", "criterion", @@ -1289,7 +1187,7 @@ dependencies = [ "aptos-types", "aptos-validator-transaction-pool", "async-trait", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "bytes", "fail", "futures", @@ -1339,7 +1237,7 @@ dependencies = [ "aptos-types", "aptos-vm", "aptos-vm-genesis", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "claims", "futures", "move-binary-format", @@ -1391,7 +1289,7 @@ dependencies = [ "aptos-vm", "aptos-vm-genesis", "arr_macro", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "bytes", "dashmap", "fail", @@ -1433,9 +1331,9 @@ dependencies = [ "aptos-types", "aptos-vm", "async-trait", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "chrono", - "clap 4.4.14", + "clap 4.5.13", "derivative", "indicatif 0.15.0", "itertools 0.12.1", @@ -1448,7 +1346,7 @@ dependencies = [ "serde", "thread_local", "tokio", - "toml 0.7.8", + "toml 0.8.2", ] [[package]] @@ -1467,8 +1365,8 @@ dependencies = [ "aptos-storage-interface", "aptos-types", "aptos-vm", - "bcs 0.1.4", - "clap 4.4.14", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", + "clap 4.5.13", "crossbeam-channel", "ctrlc", "dashmap", @@ -1512,7 +1410,7 @@ dependencies = [ "aptos-secure-net", "aptos-storage-interface", "aptos-types", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "criterion", "itertools 0.12.1", "once_cell", @@ -1581,7 +1479,7 @@ dependencies = [ "aptos-faucet-core", "aptos-logger", "aptos-sdk", - "clap 4.4.14", + "clap 4.5.13", "tokio", ] @@ -1597,7 +1495,7 @@ dependencies = [ "aptos-sdk", "async-trait", "captcha", - "clap 4.4.14", + "clap 4.5.13", "deadpool-redis", "enum_dispatch", "futures", @@ -1638,7 +1536,7 @@ dependencies = [ "anyhow", "aptos-faucet-core", "aptos-logger", - "clap 4.4.14", + "clap 4.5.13", "tokio", ] @@ -1650,7 +1548,7 @@ dependencies = [ "aptos-logger", "aptos-node-checker", "aptos-sdk", - "clap 4.4.14", + "clap 4.5.13", "env_logger", "futures", "gcp-bigquery-client", @@ -1666,7 +1564,6 @@ version = "0.0.0" dependencies = [ "again", "anyhow", - "aptos", "aptos-cached-packages", "aptos-cli-common", "aptos-config", @@ -1687,7 +1584,7 @@ dependencies = [ "aptos-transaction-generator-lib", "async-trait", "chrono", - "clap 4.4.14", + "clap 4.5.13", "either", "futures", "hex", @@ -1696,6 +1593,7 @@ dependencies = [ "json-patch", "k8s-openapi", "kube", + "movement", "num_cpus", "once_cell", "prometheus-http-query", @@ -1727,7 +1625,7 @@ dependencies = [ "aptos-testcases", "async-trait", "chrono", - "clap 4.4.14", + "clap 4.5.13", "futures", "jemallocator", "once_cell", @@ -1761,13 +1659,13 @@ dependencies = [ "ark-ff", "ark-serialize", "ark-std", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "better_any", "blake2-rfc", "bulletproofs", "byteorder", "claims", - "clap 4.4.14", + "clap 4.5.13", "codespan-reporting", "curve25519-dalek-ng", "either", @@ -1818,28 +1716,6 @@ dependencies = [ "move-core-types", ] -[[package]] -name = "aptos-gas-calibration" -version = "0.1.0" -dependencies = [ - "anyhow", - "aptos-abstract-gas-usage", - "aptos-cached-packages", - "aptos-framework", - "aptos-gas-algebra", - "aptos-gas-schedule", - "aptos-language-e2e-tests", - "aptos-types", - "bcs 0.1.4", - "clap 4.4.14", - "float-cmp", - "move-binary-format", - "move-core-types", - "move-ir-compiler", - "nalgebra", - "walkdir", -] - [[package]] name = "aptos-gas-meter" version = "0.1.0" @@ -1894,8 +1770,8 @@ dependencies = [ "aptos-gas-schedule", "aptos-package-builder", "aptos-types", - "bcs 0.1.4", - "clap 4.4.14", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", + "clap 4.5.13", "move-core-types", "move-model", "tempfile", @@ -1919,7 +1795,7 @@ dependencies = [ "aptos-types", "aptos-vm", "aptos-vm-genesis", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "rand 0.7.3", "serde", "serde_yaml 0.8.26", @@ -1962,7 +1838,7 @@ dependencies = [ "aptos-storage-interface", "aptos-types", "async-trait", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "bigdecimal", "chrono", "diesel", @@ -1986,10 +1862,10 @@ dependencies = [ "aptos-indexer-grpc-server-framework", "aptos-indexer-grpc-utils", "aptos-metrics-core", - "aptos-moving-average 0.1.0 (git+https://github.com/aptos-labs/aptos-indexer-processors.git?rev=4801acae7aea30d7e96bbfbe5ec5b04056dfa4cf)", + "aptos-moving-average", "aptos-protos 1.3.0", "async-trait", - "clap 4.4.14", + "clap 4.5.13", "futures", "futures-core", "jemallocator", @@ -2013,11 +1889,11 @@ dependencies = [ "aptos-indexer-grpc-server-framework", "aptos-indexer-grpc-utils", "aptos-metrics-core", - "aptos-moving-average 0.1.0 (git+https://github.com/aptos-labs/aptos-indexer-processors.git?rev=4801acae7aea30d7e96bbfbe5ec5b04056dfa4cf)", + "aptos-moving-average", "aptos-protos 1.3.0", "aptos-transaction-filter", "async-trait", - "clap 4.4.14", + "clap 4.5.13", "futures", "jemallocator", "once_cell", @@ -2041,9 +1917,9 @@ dependencies = [ "aptos-indexer-grpc-server-framework", "aptos-indexer-grpc-utils", "aptos-metrics-core", - "aptos-moving-average 0.1.0 (git+https://github.com/aptos-labs/aptos-indexer-processors.git?rev=4801acae7aea30d7e96bbfbe5ec5b04056dfa4cf)", + "aptos-moving-average", "async-trait", - "clap 4.4.14", + "clap 4.5.13", "futures", "jemallocator", "once_cell", @@ -2075,7 +1951,7 @@ dependencies = [ "aptos-mempool", "aptos-mempool-notifications", "aptos-metrics-core", - "aptos-moving-average 0.1.0 (git+https://github.com/aptos-labs/aptos-indexer-processors.git?rev=4801acae7aea30d7e96bbfbe5ec5b04056dfa4cf)", + "aptos-moving-average", "aptos-proptest-helpers", "aptos-protos 1.3.0", "aptos-runtimes", @@ -2086,7 +1962,7 @@ dependencies = [ "aptos-types", "aptos-vm", "aptos-vm-validator", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "bytes", "chrono", "futures", @@ -2157,13 +2033,13 @@ dependencies = [ "aptos-system-utils 0.1.0", "async-trait", "backtrace", - "clap 4.4.14", + "clap 4.5.13", "prometheus", "serde", "serde_yaml 0.8.26", "tempfile", "tokio", - "toml 0.7.8", + "toml 0.8.2", "tracing", "tracing-subscriber 0.3.18", "warp", @@ -2212,7 +2088,6 @@ dependencies = [ "backoff", "base64 0.13.1", "chrono", - "cloud-storage", "dashmap", "futures", "itertools 0.12.1", @@ -2278,7 +2153,7 @@ dependencies = [ "aptos-storage-interface", "aptos-types", "arr_macro", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "byteorder", "itertools 0.12.1", "num-derive", @@ -2406,13 +2281,13 @@ dependencies = [ "ark-ff", "ark-serialize", "ark-std", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "blstrs", "derivation-path", "ed25519-dalek 1.0.1", "hex", "hmac 0.12.1", - "jsonwebtoken 8.3.0", + "jsonwebtoken", "once_cell", "rand 0.7.3", "regex", @@ -2430,7 +2305,7 @@ dependencies = [ "aptos-types", "ark-bls12-381", "ark-serialize", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "hex", "reqwest", "serde_json", @@ -2453,11 +2328,11 @@ dependencies = [ "ark-ec", "ark-ff", "ark-serialize", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "dashmap", "hex", "hyper", - "jsonwebtoken 8.3.0", + "jsonwebtoken", "jwt", "once_cell", "rand 0.7.3", @@ -2493,7 +2368,7 @@ dependencies = [ "aptos-vm-genesis", "aptos-vm-logging", "aptos-vm-types", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "bytes", "claims", "goldenfile", @@ -2598,7 +2473,7 @@ dependencies = [ "aptos-time-service", "aptos-types", "aptos-vm-validator", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "enum_dispatch", "fail", "futures", @@ -2664,8 +2539,8 @@ dependencies = [ "aptos-vm", "aptos-vm-logging", "aptos-vm-types", - "bcs 0.1.4", - "clap 4.4.14", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", + "clap 4.5.13", "itertools 0.12.1", "regex", "reqwest", @@ -2693,7 +2568,7 @@ dependencies = [ "aptos-gas-schedule", "aptos-types", "aptos-vm", - "clap 4.4.14", + "clap 4.5.13", "move-cli", "move-package", "move-prover", @@ -2725,15 +2600,7 @@ dependencies = [ [[package]] name = "aptos-moving-average" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-indexer-processors.git?rev=4801acae7aea30d7e96bbfbe5ec5b04056dfa4cf#4801acae7aea30d7e96bbfbe5ec5b04056dfa4cf" -dependencies = [ - "chrono", -] - -[[package]] -name = "aptos-moving-average" -version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-indexer-processors.git?rev=5244b84fa5ed872e5280dc8df032d744d62ad29d#5244b84fa5ed872e5280dc8df032d744d62ad29d" +source = "git+https://github.com/movementlabsxyz/aptos-indexer-processors?rev=77a36245400250e7d8a854360194288d078681bc#77a36245400250e7d8a854360194288d078681bc" dependencies = [ "chrono", ] @@ -2769,7 +2636,7 @@ dependencies = [ "aptos-gas-algebra", "aptos-gas-schedule", "aptos-types", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "bytes", "move-binary-format", "move-core-types", @@ -2787,7 +2654,7 @@ dependencies = [ "aptos-types", "bytes", "futures", - "pin-project 1.1.3", + "pin-project", "serde", "tokio", "tokio-util 0.7.10", @@ -2818,7 +2685,7 @@ dependencies = [ "aptos-types", "arc-swap", "async-trait", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "bytes", "futures", "futures-util", @@ -2827,7 +2694,7 @@ dependencies = [ "maplit", "once_cell", "ordered-float 3.9.2", - "pin-project 1.1.3", + "pin-project", "proptest", "proptest-derive", "rand 0.7.3", @@ -2876,7 +2743,7 @@ dependencies = [ "aptos-network-discovery", "aptos-time-service", "aptos-types", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "futures", "maplit", "rand 0.7.3", @@ -2894,7 +2761,7 @@ dependencies = [ "aptos-logger", "aptos-network", "aptos-types", - "clap 4.4.14", + "clap 4.5.13", "futures", "serde", "tokio", @@ -2918,7 +2785,7 @@ dependencies = [ "aptos-temppath", "aptos-time-service", "aptos-types", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "futures", "once_cell", "rand 0.7.3", @@ -2927,36 +2794,6 @@ dependencies = [ "url", ] -[[package]] -name = "aptos-nft-metadata-crawler-parser" -version = "0.1.0" -dependencies = [ - "anyhow", - "aptos-indexer-grpc-server-framework", - "aptos-metrics-core", - "async-trait", - "backoff", - "bytes", - "chrono", - "clap 4.4.14", - "diesel", - "diesel_migrations", - "field_count", - "futures", - "google-cloud-storage", - "image", - "once_cell", - "regex", - "reqwest", - "serde", - "serde_json", - "sha256", - "tokio", - "tracing", - "url", - "warp", -] - [[package]] name = "aptos-node" version = "0.0.0-main" @@ -3013,8 +2850,8 @@ dependencies = [ "aptos-types", "aptos-validator-transaction-pool", "aptos-vm", - "bcs 0.1.4", - "clap 4.4.14", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", + "clap 4.5.13", "either", "fail", "futures", @@ -3044,7 +2881,7 @@ dependencies = [ "aptos-sdk", "aptos-transaction-emitter-lib", "async-trait", - "clap 4.4.14", + "clap 4.5.13", "futures", "once_cell", "poem", @@ -3115,7 +2952,7 @@ dependencies = [ "aptos-mempool", "aptos-storage-interface", "aptos-types", - "clap 4.4.14", + "clap 4.5.13", ] [[package]] @@ -3147,7 +2984,7 @@ dependencies = [ "aptos-peer-monitoring-service-types", "aptos-time-service", "aptos-types", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "enum_dispatch", "futures", "maplit", @@ -3178,7 +3015,7 @@ dependencies = [ "aptos-storage-interface", "aptos-time-service", "aptos-types", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "bytes", "claims", "futures", @@ -3197,7 +3034,7 @@ version = "0.1.0" dependencies = [ "aptos-config", "aptos-types", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "serde", "thiserror", ] @@ -3217,7 +3054,7 @@ dependencies = [ [[package]] name = "aptos-profiler" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core.git?rev=4541add3fd29826ec57f22658ca286d2d6134b93#4541add3fd29826ec57f22658ca286d2d6134b93" +source = "git+https://github.com/movementlabsxyz/aptos-core?rev=338f9a1bcc06f62ce4a4994f1642b9a61b631ee0#338f9a1bcc06f62ce4a4994f1642b9a61b631ee0" dependencies = [ "anyhow", "backtrace", @@ -3250,7 +3087,7 @@ dependencies = [ [[package]] name = "aptos-protos" version = "1.3.0" -source = "git+https://github.com/aptos-labs/aptos-core.git?tag=aptos-node-v1.12.1#4b9a2593facaee92b28df2e99b2773a7e4f930f5" +source = "git+https://github.com/movementlabsxyz/aptos-core?rev=338f9a1bcc06f62ce4a4994f1642b9a61b631ee0#338f9a1bcc06f62ce4a4994f1642b9a61b631ee0" dependencies = [ "futures-core", "pbjson", @@ -3284,7 +3121,7 @@ dependencies = [ "aptos-logger", "aptos-metrics-core", "futures", - "pin-project 1.1.3", + "pin-project", "tokio", "tokio-util 0.7.10", ] @@ -3294,7 +3131,6 @@ name = "aptos-release-builder" version = "0.1.0" dependencies = [ "anyhow", - "aptos", "aptos-api-types", "aptos-build-info", "aptos-crypto", @@ -3307,14 +3143,15 @@ dependencies = [ "aptos-rest-client", "aptos-temppath", "aptos-types", - "bcs 0.1.4", - "clap 4.4.14", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", + "clap 4.5.13", "futures", "git2 0.16.1", "handlebars", "hex", "move-core-types", "move-model", + "movement", "once_cell", "reqwest", "serde", @@ -3371,9 +3208,9 @@ dependencies = [ "aptos-infallible", "aptos-logger", "aptos-types", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "bytes", - "clap 4.4.14", + "clap 4.5.13", "hex", "move-core-types", "reqwest", @@ -3416,8 +3253,8 @@ dependencies = [ "aptos-sdk", "aptos-types", "aptos-warp-webserver", - "bcs 0.1.4", - "clap 4.4.14", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", + "clap 4.5.13", "futures", "hex", "itertools 0.12.1", @@ -3437,11 +3274,11 @@ name = "aptos-rosetta-cli" version = "0.0.1" dependencies = [ "anyhow", - "aptos", "aptos-logger", "aptos-rosetta", "aptos-types", - "clap 4.4.14", + "clap 4.5.13", + "movement", "serde", "serde_json", "tokio", @@ -3536,7 +3373,7 @@ dependencies = [ "aptos-rest-client", "aptos-types", "base64 0.13.1", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "ed25519-dalek-bip32", "hex", "move-core-types", @@ -3557,8 +3394,8 @@ dependencies = [ "aptos-cached-packages", "aptos-framework", "aptos-types", - "bcs 0.1.4", - "clap 4.4.14", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", + "clap 4.5.13", "heck 0.4.1", "move-core-types", "once_cell", @@ -3578,7 +3415,7 @@ dependencies = [ "aptos-logger", "aptos-metrics-core", "aptos-protos 1.3.0", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "crossbeam-channel", "once_cell", "serde", @@ -3600,7 +3437,7 @@ dependencies = [ "aptos-time-service", "aptos-vault-client", "base64 0.13.1", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "chrono", "enum_dispatch", "rand 0.7.3", @@ -3670,7 +3507,7 @@ dependencies = [ "aptos-vm", "aptos-vm-genesis", "async-trait", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "claims", "futures", "mockall", @@ -3698,9 +3535,10 @@ dependencies = [ "aptos-types", "aptos-vm", "assert_unordered", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "crossbeam-channel", "dashmap", + "move-core-types", "once_cell", "parking_lot 0.12.1", "proptest", @@ -3755,7 +3593,7 @@ dependencies = [ "aptos-time-service", "aptos-types", "arc-swap", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "bytes", "claims", "dashmap", @@ -3779,7 +3617,7 @@ dependencies = [ "aptos-crypto", "aptos-time-service", "aptos-types", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "claims", "num-traits", "proptest", @@ -3810,10 +3648,10 @@ dependencies = [ [[package]] name = "aptos-system-utils" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core.git?rev=4541add3fd29826ec57f22658ca286d2d6134b93#4541add3fd29826ec57f22658ca286d2d6134b93" +source = "git+https://github.com/movementlabsxyz/aptos-core?rev=338f9a1bcc06f62ce4a4994f1642b9a61b631ee0#338f9a1bcc06f62ce4a4994f1642b9a61b631ee0" dependencies = [ "anyhow", - "aptos-profiler 0.1.0 (git+https://github.com/aptos-labs/aptos-core.git?rev=4541add3fd29826ec57f22658ca286d2d6134b93)", + "aptos-profiler 0.1.0 (git+https://github.com/movementlabsxyz/aptos-core?rev=338f9a1bcc06f62ce4a4994f1642b9a61b631ee0)", "async-mutex", "http", "hyper", @@ -3896,16 +3734,16 @@ dependencies = [ "aptos-rest-client", "aptos-types", "base64 0.13.1", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "chrono", "claims", - "clap 4.4.14", + "clap 4.5.13", "debug-ignore", "flate2", "futures", "gcp-bigquery-client", "httpmock", - "jsonwebtoken 8.3.0", + "jsonwebtoken", "once_cell", "prometheus", "rand 0.7.3", @@ -3937,7 +3775,6 @@ name = "aptos-testcases" version = "0.0.0" dependencies = [ "anyhow", - "aptos", "aptos-config", "aptos-forge", "aptos-global-constants", @@ -3951,11 +3788,12 @@ dependencies = [ "aptos-types", "assert_approx_eq", "async-trait", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "csv", "futures", "hex", "itertools 0.12.1", + "movement", "rand 0.7.3", "reqwest", "tokio", @@ -3969,7 +3807,7 @@ dependencies = [ "aptos-infallible", "enum_dispatch", "futures", - "pin-project 1.1.3", + "pin-project", "thiserror", "tokio", "tokio-test", @@ -3991,7 +3829,7 @@ dependencies = [ "aptos-types", "aptos-vm", "aptos-vm-logging", - "clap 4.4.14", + "clap 4.5.13", "criterion", "criterion-cpu-time", "num_cpus", @@ -4007,7 +3845,7 @@ dependencies = [ "aptos-logger", "aptos-sdk", "aptos-transaction-emitter-lib", - "clap 4.4.14", + "clap 4.5.13", "futures", "rand 0.7.3", "tokio", @@ -4029,7 +3867,7 @@ dependencies = [ "aptos-transaction-generator-lib", "aptos-types", "async-trait", - "clap 4.4.14", + "clap 4.5.13", "futures", "itertools 0.12.1", "once_cell", @@ -4066,7 +3904,7 @@ dependencies = [ "aptos-logger", "aptos-sdk", "async-trait", - "clap 4.4.14", + "clap 4.5.13", "move-binary-format", "once_cell", "rand 0.7.3", @@ -4090,8 +3928,8 @@ dependencies = [ "aptos-types", "aptos-vm", "aptos-vm-genesis", - "bcs 0.1.4", - "clap 4.4.14", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", + "clap 4.5.13", "codespan-reporting", "datatest-stable", "hex", @@ -4130,7 +3968,7 @@ dependencies = [ "arr_macro", "async-trait", "base64 0.13.1", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "bytes", "ciborium", "claims", @@ -4142,7 +3980,7 @@ dependencies = [ "hashbrown 0.14.3", "hex", "itertools 0.12.1", - "jsonwebtoken 8.3.0", + "jsonwebtoken", "move-binary-format", "move-bytecode-verifier", "move-core-types", @@ -4199,7 +4037,7 @@ dependencies = [ "aptos-types", "async-recursion", "async-trait", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "lru 0.7.8", "move-core-types", "tokio", @@ -4265,7 +4103,7 @@ dependencies = [ "aptos-vm-types", "ark-bn254", "ark-groth16", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "bytes", "claims", "crossbeam-channel", @@ -4288,20 +4126,6 @@ dependencies = [ "serde", ] -[[package]] -name = "aptos-vm-benchmarks" -version = "0.1.0" -dependencies = [ - "aptos-cached-packages", - "aptos-framework", - "aptos-language-e2e-tests", - "aptos-types", - "bcs 0.1.4", - "clap 4.4.14", - "move-binary-format", - "move-core-types", -] - [[package]] name = "aptos-vm-genesis" version = "0.1.0" @@ -4313,7 +4137,7 @@ dependencies = [ "aptos-proptest-helpers", "aptos-types", "aptos-vm", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "bytes", "move-core-types", "move-vm-runtime", @@ -4352,8 +4176,8 @@ dependencies = [ "aptos-table-natives", "aptos-types", "aptos-vm", - "bcs 0.1.4", - "clap 4.4.14", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", + "clap 4.5.13", "glob", "move-binary-format", "move-core-types", @@ -4376,7 +4200,7 @@ dependencies = [ "aptos-language-e2e-tests", "aptos-types", "aptos-vm", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "bytes", "claims", "either", @@ -4419,7 +4243,7 @@ dependencies = [ "aptos-api-types", "aptos-config", "aptos-logger", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "hyper", "serde", "serde_json", @@ -4753,19 +4577,6 @@ dependencies = [ "pin-project-lite", ] -[[package]] -name = "async-compression" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc2d0cfb2a7388d34f590e76686704c494ed7aaceed62ee1ba35cbf363abc2a5" -dependencies = [ - "flate2", - "futures-core", - "memchr", - "pin-project-lite", - "tokio", -] - [[package]] name = "async-executor" version = "1.8.0" @@ -5160,12 +4971,6 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" -[[package]] -name = "base64" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff" - [[package]] name = "base64" version = "0.13.1" @@ -5225,8 +5030,9 @@ dependencies = [ [[package]] name = "bcs" -version = "0.1.4" -source = "git+https://github.com/aptos-labs/bcs.git?rev=d31fab9d81748e2594be5cd5cdf845786a30562d#d31fab9d81748e2594be5cd5cdf845786a30562d" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85b6598a2f5d564fb7855dc6b06fd1c38cff5a72bd8b863a4d021938497b440a" dependencies = [ "serde", "thiserror", @@ -5235,8 +5041,7 @@ dependencies = [ [[package]] name = "bcs" version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85b6598a2f5d564fb7855dc6b06fd1c38cff5a72bd8b863a4d021938497b440a" +source = "git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c#bc16d2d39cabafaabd76173dd1b04b2aa170cf0c" dependencies = [ "serde", "thiserror", @@ -5315,7 +5120,7 @@ version = "0.69.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a00dc851838a2120612785d195287475a3ac45514741da670b735818822129a0" dependencies = [ - "bitflags 2.4.1", + "bitflags 2.6.0", "cexpr", "clang-sys", "itertools 0.12.1", @@ -5344,12 +5149,6 @@ version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" -[[package]] -name = "bit_field" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61" - [[package]] name = "bitflags" version = "1.3.2" @@ -5358,9 +5157,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.4.1" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" [[package]] name = "bitmaps" @@ -5707,7 +5506,7 @@ name = "calc-dep-sizes" version = "0.1.0" dependencies = [ "anyhow", - "clap 4.4.14", + "clap 4.5.13", "futures", "move-binary-format", "move-core-types", @@ -5724,6 +5523,19 @@ dependencies = [ "serde", ] +[[package]] +name = "canonical_json" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f89083fd014d71c47a718d7f4ac050864dac8587668dbe90baf9e261064c5710" +dependencies = [ + "hex", + "regex", + "serde", + "serde_json", + "thiserror", +] + [[package]] name = "captcha" version = "0.0.9" @@ -5829,9 +5641,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.31" +version = "0.4.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38" +checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" dependencies = [ "android-tzdata", "iana-time-zone", @@ -5839,7 +5651,7 @@ dependencies = [ "num-traits", "serde", "wasm-bindgen", - "windows-targets 0.48.5", + "windows-targets 0.52.0", ] [[package]] @@ -5961,12 +5773,12 @@ dependencies = [ [[package]] name = "clap" -version = "4.4.14" +version = "4.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33e92c5c1a78c62968ec57dbc2440366a2d6e5a23faf829970ff1585dc6b18e2" +checksum = "0fbb260a053428790f3de475e304ff84cdbc4face759ea7a3e64c1edd938a7fc" dependencies = [ "clap_builder", - "clap_derive 4.4.7", + "clap_derive 4.5.13", ] [[package]] @@ -5975,20 +5787,20 @@ version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c90e95e5bd4e8ac34fa6f37c774b0c6f8ed06ea90c79931fd448fcf941a9767" dependencies = [ - "clap 4.4.14", + "clap 4.5.13", "log", ] [[package]] name = "clap_builder" -version = "4.4.14" +version = "4.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4323769dc8a61e2c39ad7dc26f6f2800524691a44d74fe3d1071a5c24db6370" +checksum = "64b17d7ea74e9f833c7dbf2cbe4fb12ff26783eda4782a8975b72f895c9b4d99" dependencies = [ "anstream", "anstyle", - "clap_lex 0.6.0", - "strsim 0.10.0", + "clap_lex 0.7.2", + "strsim 0.11.1", ] [[package]] @@ -5997,7 +5809,7 @@ version = "4.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97aeaa95557bd02f23fbb662f981670c3d20c5a26e69f7354b28f57092437fcd" dependencies = [ - "clap 4.4.14", + "clap 4.5.13", ] [[package]] @@ -6015,11 +5827,11 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.4.7" +version = "4.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442" +checksum = "501d359d5f3dcaf6ecdeee48833ae73ec6e42723a1e52419c79abf9507eec0a0" dependencies = [ - "heck 0.4.1", + "heck 0.5.0", "proc-macro2", "quote", "syn 2.0.48", @@ -6036,9 +5848,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.6.0" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1" +checksum = "1462739cb27611015575c0c11df5df7601141071f07518d56fcc1be504cbec97" [[package]] name = "clear_on_drop" @@ -6049,30 +5861,6 @@ dependencies = [ "cc", ] -[[package]] -name = "cloud-storage" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7602ac4363f68ac757d6b87dd5d850549a14d37489902ae639c06ecec06ad275" -dependencies = [ - "async-trait", - "base64 0.13.1", - "bytes", - "chrono", - "dotenv", - "futures-util", - "hex", - "jsonwebtoken 7.2.0", - "lazy_static", - "pem 0.8.3", - "percent-encoding", - "reqwest", - "ring 0.16.20", - "serde", - "serde_json", - "tokio", -] - [[package]] name = "codespan" version = "0.11.1" @@ -6202,6 +5990,26 @@ version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" +[[package]] +name = "const-random" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359" +dependencies = [ + "const-random-macro", +] + +[[package]] +name = "const-random-macro" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" +dependencies = [ + "getrandom 0.2.11", + "once_cell", + "tiny-keccak", +] + [[package]] name = "const_fn" version = "0.4.9" @@ -6579,6 +6387,16 @@ dependencies = [ "memchr", ] +[[package]] +name = "ctor" +version = "0.1.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096" +dependencies = [ + "quote", + "syn 1.0.109", +] + [[package]] name = "ctr" version = "0.9.2" @@ -6998,12 +6816,12 @@ checksum = "3ae2a35373c5c74340b79ae6780b498b2b183915ec5dacf263aac5a099bf485a" [[package]] name = "diesel" -version = "2.1.4" +version = "2.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62c6fcf842f17f8c78ecf7c81d75c5ce84436b41ee07e03f490fbb5f5a8731d8" +checksum = "158fe8e2e68695bd615d7e4f3227c0727b151330d3e253b525086c348d055d5e" dependencies = [ "bigdecimal", - "bitflags 2.4.1", + "bitflags 2.6.0", "byteorder", "chrono", "diesel_derives", @@ -7018,22 +6836,9 @@ dependencies = [ [[package]] name = "diesel-async" -version = "0.4.1" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acada1517534c92d3f382217b485db8a8638f111b0e3f2a2a8e26165050f77be" -dependencies = [ - "async-trait", - "diesel", - "futures-util", - "scoped-futures", - "tokio", - "tokio-postgres", -] - -[[package]] -name = "diesel-async" -version = "0.4.1" -source = "git+https://github.com/weiznich/diesel_async.git?rev=d02798c67065d763154d7272dd0c09b39757d0f2#d02798c67065d763154d7272dd0c09b39757d0f2" +checksum = "4c5c6ec8d5c7b8444d19a47161797cbe361e0fb1ee40c6a8124ec915b64a4125" dependencies = [ "async-trait", "bb8", @@ -7044,25 +6849,14 @@ dependencies = [ "tokio-postgres", ] -[[package]] -name = "diesel_async_migrations" -version = "0.11.0" -source = "git+https://github.com/niroco/diesel_async_migrations?rev=11f331b73c5cfcc894380074f748d8fda710ac12#11f331b73c5cfcc894380074f748d8fda710ac12" -dependencies = [ - "diesel", - "diesel-async 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "macros", - "scoped-futures", - "tracing", -] - [[package]] name = "diesel_derives" -version = "2.1.2" +version = "2.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef8337737574f55a468005a83499da720f20c65586241ffea339db9ecdfd2b44" +checksum = "e7f2c3de51e2ba6bf2a648285696137aaf0f5f487bcbea93972fe8a364e131a4" dependencies = [ "diesel_table_macro_syntax", + "dsl_auto_type", "proc-macro2", "quote", "syn 2.0.48", @@ -7070,9 +6864,9 @@ dependencies = [ [[package]] name = "diesel_migrations" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6036b3f0120c5961381b570ee20a02432d7e2d27ea60de9578799cf9156914ac" +checksum = "8a73ce704bad4231f001bff3314d91dce4aba0770cee8b233991859abc15c1f6" dependencies = [ "diesel", "migrations_internals", @@ -7081,9 +6875,9 @@ dependencies = [ [[package]] name = "diesel_table_macro_syntax" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc5557efc453706fed5e4fa85006fe9817c224c3f480a34c7e5959fd700921c5" +checksum = "209c735641a413bc68c4923a9d6ad4bcb3ca306b794edaa7eb0b3228a99ffb25" dependencies = [ "syn 2.0.48", ] @@ -7202,18 +6996,26 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" -[[package]] -name = "dotenv" -version = "0.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f" - [[package]] name = "downcast" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1435fa1053d8b2fbbe9be7e97eca7f33d37b28409959813daefc1446a14247f1" +[[package]] +name = "dsl_auto_type" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5d9abe6314103864cc2d8901b7ae224e0ab1a103a0a416661b4097b0779b607" +dependencies = [ + "darling 0.20.9", + "either", + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.48", +] + [[package]] name = "dunce" version = "1.0.4" @@ -7263,8 +7065,9 @@ dependencies = [ "aptos-types", "aptos-vm", "aptos-vm-types", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "claims", + "ethabi", "hex", "move-binary-format", "move-command-line-common", @@ -7280,6 +7083,7 @@ dependencies = [ "serde", "sha3 0.9.1", "test-case", + "tiny-keccak", ] [[package]] @@ -7690,29 +7494,13 @@ dependencies = [ "sha3 0.8.2", ] -[[package]] -name = "exr" -version = "1.71.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "832a761f35ab3e6664babfbdc6cef35a4860e816ec3916dcfd0882954e98a8a8" -dependencies = [ - "bit_field", - "flume", - "half 2.2.1", - "lebe", - "miniz_oxide", - "rayon-core", - "smallvec", - "zune-inflate", -] - [[package]] name = "extract-ethereum-abi" version = "0.1.0" dependencies = [ "anyhow", "atty", - "clap 4.4.14", + "clap 4.5.13", "codespan-reporting", "move-to-yul", "serde_json", @@ -7866,7 +7654,7 @@ checksum = "e29e5681dc8556fb9df1409e95eae050e12e8776394313da3546dcb8cf390c73" dependencies = [ "az", "bytemuck", - "half 2.2.1", + "half 1.8.2", "typenum", ] @@ -7941,15 +7729,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "flume" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181" -dependencies = [ - "spin 0.9.8", -] - [[package]] name = "fnv" version = "1.0.7" @@ -8168,7 +7947,7 @@ dependencies = [ "aptos-types", "aptos-vm", "arbitrary", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "libfuzzer-sys", "move-binary-format", "move-bytecode-verifier", @@ -8193,49 +7972,6 @@ version = "0.3.55" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2" -[[package]] -name = "gcemeta" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47d460327b24cc34c86d53d60a90e9e6044817f7906ebd9baa5c3d0ee13e1ecf" -dependencies = [ - "bytes", - "hyper", - "serde", - "serde_json", - "thiserror", - "tokio", - "tracing", -] - -[[package]] -name = "gcloud-sdk" -version = "0.20.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a24376e7850e7864bb326debc5765a1dda4fc47603c22e2bc0ebf30ff59141b" -dependencies = [ - "async-trait", - "chrono", - "futures", - "gcemeta", - "hyper", - "jsonwebtoken 8.3.0", - "once_cell", - "prost 0.11.9", - "prost-types 0.11.9", - "reqwest", - "secret-vault-value", - "serde", - "serde_json", - "tokio", - "tonic 0.9.2", - "tower", - "tower-layer", - "tower-util", - "tracing", - "url", -] - [[package]] name = "gcp-bigquery-client" version = "0.16.8" @@ -8259,27 +7995,6 @@ dependencies = [ "yup-oauth2", ] -[[package]] -name = "generate-format" -version = "0.1.0" -dependencies = [ - "aptos-api-types", - "aptos-config", - "aptos-consensus", - "aptos-consensus-types", - "aptos-crypto", - "aptos-crypto-derive", - "aptos-network", - "aptos-types", - "bcs 0.1.4", - "clap 4.4.14", - "move-core-types", - "rand 0.7.3", - "serde", - "serde-reflection", - "serde_yaml 0.8.26", -] - [[package]] name = "generic-array" version = "0.12.4" @@ -8358,16 +8073,6 @@ dependencies = [ "polyval", ] -[[package]] -name = "gif" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80792593675e051cf94a4b111980da2ba60d4a83e43e0048c5693baab3977045" -dependencies = [ - "color_quant", - "weezl", -] - [[package]] name = "gimli" version = "0.28.1" @@ -8467,7 +8172,7 @@ dependencies = [ "google-cloud-metadata", "google-cloud-token", "home", - "jsonwebtoken 8.3.0", + "jsonwebtoken", "reqwest", "serde", "serde_json", @@ -8670,6 +8375,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "02b4af3693f1b705df946e9fe5631932443781d0aabb423b62fcd4d73f6d2fd0" dependencies = [ "crunchy", + "num-traits", ] [[package]] @@ -9014,7 +8720,7 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", - "socket2 0.5.5", + "socket2 0.4.10", "tokio", "tower-service", "tracing", @@ -9086,7 +8792,7 @@ dependencies = [ "futures-util", "hex", "hyper", - "pin-project 1.1.3", + "pin-project", "tokio", ] @@ -9189,14 +8895,9 @@ dependencies = [ "bytemuck", "byteorder", "color_quant", - "exr", - "gif", - "jpeg-decoder", "num-rational 0.4.1", "num-traits", "png", - "qoi", - "tiff", ] [[package]] @@ -9339,7 +9040,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "321f0f839cd44a4686e9504b0a62b4d69a50b62072144c71c68f5873c167b8d9" dependencies = [ "ahash 0.8.11", - "clap 4.4.14", + "clap 4.5.13", "crossbeam-channel", "crossbeam-utils", "dashmap", @@ -9376,6 +9077,12 @@ dependencies = [ "web-sys", ] +[[package]] +name = "integer-encoding" +version = "3.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bb03732005da905c88227371639bf1ad885cc712789c011c31c5fb3ab3ccf02" + [[package]] name = "internment" version = "0.5.6" @@ -9441,6 +9148,12 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06d198e9919d9822d5f7083ba8530e04de87841eaf21ead9af8f2304efd57c89" +[[package]] +name = "is_terminal_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" + [[package]] name = "isahc" version = "1.7.2" @@ -9530,15 +9243,6 @@ dependencies = [ "libc", ] -[[package]] -name = "jpeg-decoder" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc0000e42512c92e31c2252315bda326620a4e034105e900c98ec492fa077b3e" -dependencies = [ - "rayon", -] - [[package]] name = "js-sys" version = "0.3.66" @@ -9570,20 +9274,6 @@ dependencies = [ "serde_json", ] -[[package]] -name = "jsonwebtoken" -version = "7.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afabcc15e437a6484fc4f12d0fd63068fe457bf93f1c148d3d9649c60b103f32" -dependencies = [ - "base64 0.12.3", - "pem 0.8.3", - "ring 0.16.20", - "serde", - "serde_json", - "simple_asn1 0.4.1", -] - [[package]] name = "jsonwebtoken" version = "8.3.0" @@ -9591,11 +9281,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6971da4d9c3aa03c3d8f3ff0f4155b534aad021292003895a469716b2a230378" dependencies = [ "base64 0.21.6", - "pem 1.1.1", + "pem", "ring 0.16.20", "serde", "serde_json", - "simple_asn1 0.6.2", + "simple_asn1", ] [[package]] @@ -9678,8 +9368,8 @@ dependencies = [ "jsonpath_lib", "k8s-openapi", "kube-core", - "pem 1.1.1", - "pin-project 1.1.3", + "pem", + "pin-project", "rustls 0.20.9", "rustls-pemfile 0.2.1", "serde", @@ -9800,12 +9490,6 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" -[[package]] -name = "lebe" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" - [[package]] name = "ledger-apdu" version = "0.10.0" @@ -9912,7 +9596,7 @@ version = "0.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8" dependencies = [ - "bitflags 2.4.1", + "bitflags 2.6.0", "libc", "redox_syscall 0.4.1", ] @@ -10047,7 +9731,7 @@ name = "listener" version = "0.1.0" dependencies = [ "bytes", - "clap 4.4.14", + "clap 4.5.13", "tokio", ] @@ -10123,12 +9807,12 @@ dependencies = [ ] [[package]] -name = "macros" -version = "0.1.0" -source = "git+https://github.com/niroco/diesel_async_migrations?rev=11f331b73c5cfcc894380074f748d8fda710ac12#11f331b73c5cfcc894380074f748d8fda710ac12" +name = "lz4_flex" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75761162ae2b0e580d7e7c390558127e5f01b4194debd6221fd8c207fc80e3f5" dependencies = [ - "proc-macro2", - "quote", + "twox-hash", ] [[package]] @@ -10170,16 +9854,6 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" -[[package]] -name = "matrixmultiply" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7574c1cf36da4798ab73da5b215bbf444f50718207754cb522201d78d1cd0ff2" -dependencies = [ - "autocfg", - "rawpointer", -] - [[package]] name = "md-5" version = "0.10.6" @@ -10228,19 +9902,19 @@ dependencies = [ [[package]] name = "migrations_internals" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f23f71580015254b020e856feac3df5878c2c7a8812297edd6c0a485ac9dada" +checksum = "fd01039851e82f8799046eabbb354056283fb265c8ec0996af940f4e85a380ff" dependencies = [ "serde", - "toml 0.7.8", + "toml 0.8.2", ] [[package]] name = "migrations_macros" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cce3325ac70e67bbab5bd837a31cae01f1a6db64e0e744a33cb03a543469ef08" +checksum = "ffb161cc72176cb37aa47f1fc520d3ef02263d67d661f44f05d05a079e1237fd" dependencies = [ "migrations_internals", "proc-macro2", @@ -10358,8 +10032,8 @@ version = "0.1.0" dependencies = [ "anyhow", "aptos-framework", - "bcs 0.1.4", - "clap 4.4.14", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", + "clap 4.5.13", "move-binary-format", ] @@ -10374,7 +10048,7 @@ name = "move-abigen" version = "0.1.0" dependencies = [ "anyhow", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "codespan-reporting", "datatest-stable", "heck 0.4.1", @@ -10440,7 +10114,7 @@ name = "move-bytecode-source-map" version = "0.1.0" dependencies = [ "anyhow", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "move-binary-format", "move-command-line-common", "move-core-types", @@ -10489,7 +10163,7 @@ name = "move-bytecode-viewer" version = "0.1.0" dependencies = [ "anyhow", - "clap 4.4.14", + "clap 4.5.13", "crossterm 0.26.1", "move-binary-format", "move-bytecode-source-map", @@ -10503,7 +10177,7 @@ name = "move-cli" version = "0.1.0" dependencies = [ "anyhow", - "clap 4.4.14", + "clap 4.5.13", "codespan-reporting", "colored", "datatest-stable", @@ -10550,8 +10224,8 @@ name = "move-compiler" version = "0.0.1" dependencies = [ "anyhow", - "bcs 0.1.4", - "clap 4.4.14", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", + "clap 4.5.13", "codespan-reporting", "datatest-stable", "hex", @@ -10586,8 +10260,8 @@ version = "0.1.0" dependencies = [ "abstract-domain-derive", "anyhow", - "bcs 0.1.4", - "clap 4.4.14", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", + "clap 4.5.13", "codespan-reporting", "datatest-stable", "ethnum", @@ -10635,7 +10309,7 @@ version = "0.0.4" dependencies = [ "anyhow", "arbitrary", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "bytes", "ethnum", "hashbrown 0.14.3", @@ -10660,8 +10334,8 @@ name = "move-coverage" version = "0.1.0" dependencies = [ "anyhow", - "bcs 0.1.4", - "clap 4.4.14", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", + "clap 4.5.13", "codespan", "colored", "move-binary-format", @@ -10678,7 +10352,7 @@ name = "move-disassembler" version = "0.1.0" dependencies = [ "anyhow", - "clap 4.4.14", + "clap 4.5.13", "colored", "move-binary-format", "move-bytecode-source-map", @@ -10694,7 +10368,7 @@ name = "move-docgen" version = "0.1.0" dependencies = [ "anyhow", - "clap 4.4.14", + "clap 4.5.13", "codespan", "codespan-reporting", "datatest-stable", @@ -10746,8 +10420,8 @@ dependencies = [ name = "move-explain" version = "0.1.0" dependencies = [ - "bcs 0.1.4", - "clap 4.4.14", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", + "clap 4.5.13", "move-command-line-common", "move-core-types", ] @@ -10757,8 +10431,8 @@ name = "move-ir-compiler" version = "0.1.0" dependencies = [ "anyhow", - "bcs 0.1.4", - "clap 4.4.14", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", + "clap 4.5.13", "move-binary-format", "move-bytecode-source-map", "move-bytecode-verifier", @@ -10848,7 +10522,7 @@ name = "move-package" version = "0.1.0" dependencies = [ "anyhow", - "clap 4.4.14", + "clap 4.5.13", "colored", "datatest-stable", "evm-exec-utils", @@ -10876,7 +10550,7 @@ dependencies = [ "sha2 0.9.9", "tempfile", "termcolor", - "toml 0.7.8", + "toml 0.8.2", "walkdir", "whoami", ] @@ -10887,7 +10561,7 @@ version = "0.1.0" dependencies = [ "anyhow", "atty", - "clap 4.4.14", + "clap 4.5.13", "codespan-reporting", "datatest-stable", "itertools 0.12.1", @@ -10908,7 +10582,7 @@ dependencies = [ "shell-words", "simplelog", "tempfile", - "toml 0.7.8", + "toml 0.8.2", "walkdir", ] @@ -11081,7 +10755,7 @@ version = "0.1.0" dependencies = [ "anyhow", "atty", - "clap 4.4.14", + "clap 4.5.13", "codespan", "codespan-reporting", "datatest-stable", @@ -11112,7 +10786,7 @@ name = "move-transactional-test-runner" version = "0.1.0" dependencies = [ "anyhow", - "clap 4.4.14", + "clap 4.5.13", "datatest-stable", "difference", "move-binary-format", @@ -11144,7 +10818,7 @@ version = "0.1.0" dependencies = [ "anyhow", "better_any", - "clap 4.4.14", + "clap 4.5.13", "codespan-reporting", "colored", "datatest-stable", @@ -11254,18 +10928,109 @@ dependencies = [ name = "move-vm-types" version = "0.1.0" dependencies = [ - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "claims", "derivative", "itertools 0.12.1", "move-binary-format", "move-core-types", - "proptest", + "proptest", + "rand 0.7.3", + "serde", + "smallbitvec", + "smallvec", + "triomphe", +] + +[[package]] +name = "movement" +version = "3.5.0" +dependencies = [ + "anyhow", + "aptos-api-types", + "aptos-backup-cli", + "aptos-bitvec", + "aptos-build-info", + "aptos-cached-packages", + "aptos-cli-common", + "aptos-config", + "aptos-crypto", + "aptos-faucet-core", + "aptos-framework", + "aptos-gas-profiling", + "aptos-gas-schedule", + "aptos-genesis", + "aptos-github-client", + "aptos-global-constants", + "aptos-indexer-grpc-server-framework", + "aptos-indexer-grpc-utils", + "aptos-keygen", + "aptos-ledger", + "aptos-logger", + "aptos-move-debugger", + "aptos-network-checker", + "aptos-node", + "aptos-protos 1.3.0", + "aptos-rest-client", + "aptos-sdk", + "aptos-storage-interface", + "aptos-telemetry", + "aptos-temppath", + "aptos-types", + "aptos-vm", + "aptos-vm-genesis", + "aptos-vm-logging", + "aptos-vm-types", + "async-trait", + "base64 0.13.1", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", + "bollard", + "chrono", + "clap 4.5.13", + "clap_complete", + "dashmap", + "diesel", + "diesel-async", + "dirs", + "futures", + "hex", + "itertools 0.12.1", + "jemallocator", + "maplit", + "move-binary-format", + "move-bytecode-source-map", + "move-cli", + "move-command-line-common", + "move-compiler", + "move-core-types", + "move-coverage", + "move-disassembler", + "move-ir-types", + "move-model", + "move-package", + "move-symbol-pool", + "move-unit-test", + "move-vm-runtime", + "pathsearch", + "poem", + "processor", "rand 0.7.3", + "reqwest", + "self_update", "serde", - "smallbitvec", - "smallvec", - "triomphe", + "serde_json", + "serde_yaml 0.8.26", + "server-framework", + "shadow-rs", + "tempfile", + "thiserror", + "tokio", + "toml 0.8.2", + "tonic 0.11.0", + "tracing", + "tracing-subscriber 0.3.18", + "url", + "version-compare", ] [[package]] @@ -11287,33 +11052,6 @@ dependencies = [ "version_check", ] -[[package]] -name = "nalgebra" -version = "0.32.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "307ed9b18cc2423f29e83f84fd23a8e73628727990181f18641a8b5dc2ab1caa" -dependencies = [ - "approx", - "matrixmultiply", - "nalgebra-macros", - "num-complex 0.4.4", - "num-rational 0.4.1", - "num-traits", - "simba", - "typenum", -] - -[[package]] -name = "nalgebra-macros" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91761aed67d03ad966ef783ae962ef9bbaca728d2dd7ceb7939ec110fffad998" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "named-lock" version = "0.2.0" @@ -11394,7 +11132,7 @@ version = "0.27.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" dependencies = [ - "bitflags 2.4.1", + "bitflags 2.6.0", "cfg-if", "libc", ] @@ -11516,17 +11254,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "num-bigint" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "090c7f9998ee0ff65aa5b723e4009f7b217707f1fb5ea551329cc4d6231fb304" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - [[package]] name = "num-bigint" version = "0.3.3" @@ -11585,6 +11312,12 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + [[package]] name = "num-derive" version = "0.3.3" @@ -11753,7 +11486,7 @@ version = "0.10.62" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8cde4d2d9200ad5909f8dac647e29482e07c3a35de8a13fce7c9c7747ad9f671" dependencies = [ - "bitflags 2.4.1", + "bitflags 2.6.0", "cfg-if", "foreign-types 0.3.2", "libc", @@ -11992,6 +11725,40 @@ dependencies = [ "windows-targets 0.48.5", ] +[[package]] +name = "parquet" +version = "52.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e977b9066b4d3b03555c22bdc442f3fadebd96a39111249113087d0edb2691cd" +dependencies = [ + "ahash 0.8.11", + "bytes", + "chrono", + "futures", + "half 2.2.1", + "hashbrown 0.14.3", + "lz4_flex", + "num 0.4.1", + "num-bigint 0.4.4", + "paste", + "seq-macro", + "thrift", + "tokio", + "twox-hash", +] + +[[package]] +name = "parquet_derive" +version = "52.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e57262f900bc3e93755be67e0fc4e2fcdae416b563472528e413c6e0a52ee81" +dependencies = [ + "parquet", + "proc-macro2", + "quote", + "syn 2.0.48", +] + [[package]] name = "parse-zoneinfo" version = "0.3.0" @@ -12040,7 +11807,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "499cff8432e71c5f8784d9645aac0f9fca604d67f59b68a606170b5e229c6538" dependencies = [ - "bitflags 2.4.1", + "bitflags 2.6.0", "ciborium", "coset", "data-encoding", @@ -12114,17 +11881,6 @@ dependencies = [ "crypto-mac 0.8.0", ] -[[package]] -name = "pem" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd56cbd21fea48d0c440b41cd69c589faacade08c992d9a54e471b79d0fd13eb" -dependencies = [ - "base64 0.13.1", - "once_cell", - "regex", -] - [[package]] name = "pem" version = "1.1.1" @@ -12270,33 +12026,13 @@ dependencies = [ "siphasher", ] -[[package]] -name = "pin-project" -version = "0.4.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ef0f924a5ee7ea9cbcea77529dba45f8a9ba9f622419fe3386ca581a3ae9d5a" -dependencies = [ - "pin-project-internal 0.4.30", -] - [[package]] name = "pin-project" version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422" dependencies = [ - "pin-project-internal 1.1.3", -] - -[[package]] -name = "pin-project-internal" -version = "0.4.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "851c8d0ce9bebe43790dedfc86614c23494ac9f423dd618d3a61fc693eafe61e" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", + "pin-project-internal", ] [[package]] @@ -12875,47 +12611,54 @@ dependencies = [ [[package]] name = "processor" version = "1.0.0" -source = "git+https://github.com/aptos-labs/aptos-indexer-processors.git?rev=5244b84fa5ed872e5280dc8df032d744d62ad29d#5244b84fa5ed872e5280dc8df032d744d62ad29d" +source = "git+https://github.com/movementlabsxyz/aptos-indexer-processors?rev=77a36245400250e7d8a854360194288d078681bc#77a36245400250e7d8a854360194288d078681bc" dependencies = [ "ahash 0.8.11", + "allocative", + "allocative_derive", "anyhow", - "aptos-moving-average 0.1.0 (git+https://github.com/aptos-labs/aptos-indexer-processors.git?rev=5244b84fa5ed872e5280dc8df032d744d62ad29d)", - "aptos-protos 1.3.0 (git+https://github.com/aptos-labs/aptos-core.git?tag=aptos-node-v1.12.1)", + "aptos-moving-average", + "aptos-protos 1.3.0 (git+https://github.com/movementlabsxyz/aptos-core?rev=338f9a1bcc06f62ce4a4994f1642b9a61b631ee0)", "async-trait", - "base64 0.13.1", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "bigdecimal", + "bitflags 2.6.0", + "canonical_json", "chrono", - "clap 4.4.14", + "clap 4.5.13", "diesel", - "diesel-async 0.4.1 (git+https://github.com/weiznich/diesel_async.git?rev=d02798c67065d763154d7272dd0c09b39757d0f2)", - "diesel_async_migrations", + "diesel-async", "diesel_migrations", "enum_dispatch", "field_count", "futures", "futures-util", - "gcloud-sdk", "google-cloud-googleapis", "google-cloud-pubsub", + "google-cloud-storage", "hex", + "hyper", "itertools 0.12.1", "jemallocator", "kanal", + "lazy_static", "native-tls", + "num 0.4.1", "num_cpus", "once_cell", + "parquet", + "parquet_derive", "postgres-native-tls", "prometheus", "prost 0.12.3", - "prost-types 0.12.3", "regex", "serde", "serde_json", "server-framework", "sha2 0.9.9", "sha3 0.9.1", - "strum 0.24.1", + "strum 0.26.2", + "tiny-keccak", "tokio", "tokio-postgres", "tonic 0.11.0", @@ -12992,7 +12735,7 @@ checksum = "31b476131c3c86cb68032fdc5cb6d5a1045e3e42d96b69fa599fd77701e1f5bf" dependencies = [ "bit-set", "bit-vec", - "bitflags 2.4.1", + "bitflags 2.6.0", "lazy_static", "num-traits", "rand 0.8.5", @@ -13110,7 +12853,7 @@ version = "0.1.0" dependencies = [ "anyhow", "chrono", - "clap 4.4.14", + "clap 4.5.13", "codespan-reporting", "itertools 0.12.1", "log", @@ -13156,15 +12899,6 @@ dependencies = [ "unicase", ] -[[package]] -name = "qoi" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001" -dependencies = [ - "bytemuck", -] - [[package]] name = "qstring" version = "0.7.2" @@ -13362,12 +13096,6 @@ dependencies = [ "rand 0.8.5", ] -[[package]] -name = "rawpointer" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" - [[package]] name = "rayon" version = "1.9.0" @@ -13519,7 +13247,6 @@ version = "0.11.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37b1ae8d9ac08420c66222fb9096fc5de435c3c48542bc5336c51892cffafb41" dependencies = [ - "async-compression", "base64 0.21.6", "bytes", "cookie 0.16.2", @@ -13869,7 +13596,7 @@ version = "0.38.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72e572a5e8ca657d7366229cdde4bd14c4eb5499a9573d4d366fe1b599daa316" dependencies = [ - "bitflags 2.4.1", + "bitflags 2.6.0", "errno", "libc", "linux-raw-sys 0.4.12", @@ -14043,15 +13770,6 @@ version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" -[[package]] -name = "safe_arch" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f398075ce1e6a179b46f51bd88d0598b92b00d3551f1a2d4ac49e771b56ac354" -dependencies = [ - "bytemuck", -] - [[package]] name = "same-file" version = "1.0.6" @@ -14157,19 +13875,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "secret-vault-value" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5f8cfb86d2019f64a4cfb49e499f401f406fbec946c1ffeea9d0504284347de" -dependencies = [ - "prost 0.12.3", - "prost-types 0.12.3", - "serde", - "serde_json", - "zeroize", -] - [[package]] name = "security-framework" version = "2.9.2" @@ -14238,11 +13943,17 @@ name = "sender" version = "0.1.0" dependencies = [ "bytes", - "clap 4.4.14", + "clap 4.5.13", "event-listener 2.5.3", "tokio", ] +[[package]] +name = "seq-macro" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3f0bf26fd526d2a95683cd0f87bf103b8539e2ca1ef48ce002d67aad59aa0b4" + [[package]] name = "serde" version = "1.0.197" @@ -14266,7 +13977,7 @@ name = "serde-generate" version = "0.20.6" source = "git+https://github.com/aptos-labs/serde-reflection?rev=73b6bbf748334b71ff6d7d09d06a29e3062ca075#73b6bbf748334b71ff6d7d09d06a29e3062ca075" dependencies = [ - "bcs 0.1.6", + "bcs 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "bincode", "heck 0.3.3", "include_dir", @@ -14481,20 +14192,19 @@ dependencies = [ [[package]] name = "server-framework" version = "1.0.0" -source = "git+https://github.com/aptos-labs/aptos-indexer-processors.git?rev=5244b84fa5ed872e5280dc8df032d744d62ad29d#5244b84fa5ed872e5280dc8df032d744d62ad29d" +source = "git+https://github.com/movementlabsxyz/aptos-indexer-processors?rev=77a36245400250e7d8a854360194288d078681bc#77a36245400250e7d8a854360194288d078681bc" dependencies = [ "anyhow", - "aptos-system-utils 0.1.0 (git+https://github.com/aptos-labs/aptos-core.git?rev=4541add3fd29826ec57f22658ca286d2d6134b93)", + "aptos-system-utils 0.1.0 (git+https://github.com/movementlabsxyz/aptos-core?rev=338f9a1bcc06f62ce4a4994f1642b9a61b631ee0)", "async-trait", "backtrace", - "clap 4.4.14", - "futures", + "clap 4.5.13", "prometheus", "serde", "serde_yaml 0.8.26", "tempfile", "tokio", - "toml 0.7.8", + "toml 0.8.2", "tracing", "tracing-subscriber 0.3.18", "warp", @@ -14669,19 +14379,6 @@ dependencies = [ "rand_core 0.6.4", ] -[[package]] -name = "simba" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "061507c94fc6ab4ba1c9a0305018408e312e17c041eb63bef8aa726fa33aceae" -dependencies = [ - "approx", - "num-complex 0.4.4", - "num-traits", - "paste", - "wide", -] - [[package]] name = "simd-adler32" version = "0.3.7" @@ -14708,17 +14405,6 @@ dependencies = [ "similar", ] -[[package]] -name = "simple_asn1" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "692ca13de57ce0613a363c8c2f1de925adebc81b04c923ac60c5488bb44abe4b" -dependencies = [ - "chrono", - "num-bigint 0.2.6", - "num-traits", -] - [[package]] name = "simple_asn1" version = "0.6.2" @@ -14826,7 +14512,6 @@ name = "smoke-test" version = "0.1.0" dependencies = [ "anyhow", - "aptos", "aptos-backup-cli", "aptos-bitvec", "aptos-cached-packages", @@ -14864,13 +14549,14 @@ dependencies = [ "aptos-vault-client", "aptos-vm", "base64 0.13.1", - "bcs 0.1.4", + "bcs 0.1.6 (git+https://github.com/movementlabsxyz/bcs.git?rev=bc16d2d39cabafaabd76173dd1b04b2aa170cf0c)", "diesel", "digest 0.9.0", "futures", "hex", "hyper", "move-core-types", + "movement", "num_cpus", "once_cell", "rand 0.7.3", @@ -14950,9 +14636,6 @@ name = "spin" version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" -dependencies = [ - "lock_api", -] [[package]] name = "spki" @@ -15073,9 +14756,6 @@ name = "strum" version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" -dependencies = [ - "strum_macros 0.24.3", -] [[package]] name = "strum" @@ -15091,6 +14771,9 @@ name = "strum" version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5d8cec3501a5194c432b2b7976db6b7d10ec95c253208b45f83f7136aa985e29" +dependencies = [ + "strum_macros 0.26.4", +] [[package]] name = "strum_macros" @@ -15379,7 +15062,7 @@ dependencies = [ name = "test-generation" version = "0.1.0" dependencies = [ - "clap 4.4.14", + "clap 4.5.13", "crossbeam-channel", "getrandom 0.2.11", "hex", @@ -15405,7 +15088,7 @@ name = "testdiff" version = "0.1.0" dependencies = [ "anyhow", - "clap 4.4.14", + "clap 4.5.13", "once_cell", "regex", "walkdir", @@ -15487,25 +15170,26 @@ dependencies = [ ] [[package]] -name = "tiff" -version = "0.9.0" +name = "thrift" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d172b0f4d3fba17ba89811858b9d3d97f928aece846475bbda076ca46736211" +checksum = "7e54bc85fc7faa8bc175c4bab5b92ba8d9a3ce893d0e9f42cc455c8ab16a9e09" dependencies = [ - "flate2", - "jpeg-decoder", - "weezl", + "byteorder", + "integer-encoding", + "ordered-float 2.10.1", ] [[package]] name = "time" -version = "0.3.31" +version = "0.3.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f657ba42c3f86e7680e53c8cd3af8abbe56b5491790b46e22e19c0d57463583e" +checksum = "ef89ece63debf11bc32d1ed8d078ac870cbeb44da02afb02a9ff135ae7ca0582" dependencies = [ "deranged", "itoa", "libc", + "num-conv", "num_threads", "powerfmt", "serde", @@ -15521,10 +15205,11 @@ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" -version = "0.2.16" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26197e33420244aeb70c3e8c78376ca46571bc4e701e4791c2cd9f57dcb3a43f" +checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" dependencies = [ + "num-conv", "time-core", ] @@ -15664,7 +15349,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f57eb36ecbe0fc510036adff84824dd3c24bb781e21bfa67b69d556aa85214f" dependencies = [ - "pin-project 1.1.3", + "pin-project", "rand 0.8.5", "tokio", ] @@ -15788,14 +15473,14 @@ dependencies = [ [[package]] name = "toml" -version = "0.7.8" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257" +checksum = "185d8ab0dfbb35cf1399a6344d8484209c088f75f8f68230da55d48d95d43e3d" dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit 0.19.15", + "toml_edit 0.20.2", ] [[package]] @@ -15814,8 +15499,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ "indexmap 2.2.5", - "serde", - "serde_spanned", "toml_datetime", "winnow", ] @@ -15827,6 +15510,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" dependencies = [ "indexmap 2.2.5", + "serde", + "serde_spanned", "toml_datetime", "winnow", ] @@ -15851,9 +15536,8 @@ dependencies = [ "hyper", "hyper-timeout", "percent-encoding", - "pin-project 1.1.3", + "pin-project", "prost 0.11.9", - "rustls-native-certs 0.6.3", "rustls-pemfile 1.0.4", "tokio", "tokio-rustls 0.24.1", @@ -15882,7 +15566,7 @@ dependencies = [ "hyper", "hyper-timeout", "percent-encoding", - "pin-project 1.1.3", + "pin-project", "prost 0.12.3", "rustls-native-certs 0.7.0", "rustls-pemfile 2.1.1", @@ -15920,7 +15604,7 @@ dependencies = [ "futures-core", "futures-util", "indexmap 1.9.3", - "pin-project 1.1.3", + "pin-project", "pin-project-lite", "rand 0.8.5", "slab", @@ -15982,18 +15666,6 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" -[[package]] -name = "tower-util" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1093c19826d33807c72511e68f73b4a0469a3f22c2bd5f7d5212178b4b89674" -dependencies = [ - "futures-core", - "futures-util", - "pin-project 0.4.30", - "tower-service", -] - [[package]] name = "tracing" version = "0.1.40" @@ -16033,7 +15705,7 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" dependencies = [ - "pin-project 1.1.3", + "pin-project", "tracing", ] @@ -16181,6 +15853,16 @@ dependencies = [ "utf-8", ] +[[package]] +name = "twox-hash" +version = "1.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" +dependencies = [ + "cfg-if", + "static_assertions", +] + [[package]] name = "typed-arena" version = "2.0.2" @@ -16462,7 +16144,7 @@ dependencies = [ "errno", "js-sys", "libc", - "rustix 0.38.28", + "rustix 0.37.27", "wasi 0.11.0+wasi-snapshot-preview1", "wasm-bindgen", "winapi 0.3.9", @@ -16587,7 +16269,7 @@ dependencies = [ "mime_guess", "multer", "percent-encoding", - "pin-project 1.1.3", + "pin-project", "rustls-pemfile 1.0.4", "scoped-tls", "serde", @@ -16763,12 +16445,6 @@ version = "0.25.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1778a42e8b3b90bff8d0f5032bf22250792889a5cdc752aa0020c84abe3aaf10" -[[package]] -name = "weezl" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb" - [[package]] name = "which" version = "4.4.2" @@ -16792,16 +16468,6 @@ dependencies = [ "web-sys", ] -[[package]] -name = "wide" -version = "0.7.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c68938b57b33da363195412cfc5fc37c9ed49aa9cfe2156fde64b8d2c9498242" -dependencies = [ - "bytemuck", - "safe_arch", -] - [[package]] name = "widestring" version = "0.5.1" @@ -17262,12 +16928,3 @@ dependencies = [ "cc", "pkg-config", ] - -[[package]] -name = "zune-inflate" -version = "0.2.54" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73ab332fe2f6680068f3582b16a24f90ad7096d5d39b974d1c0aff0125116f02" -dependencies = [ - "simd-adler32", -] diff --git a/Cargo.toml b/Cargo.toml index 78792c45d7105..8c0c58c45c078 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,10 +8,7 @@ members = [ "api/types", "aptos-move/aptos-abstract-gas-usage", "aptos-move/aptos-aggregator", - "aptos-move/aptos-debugger", - "aptos-move/aptos-e2e-comparison-testing", "aptos-move/aptos-gas-algebra", - "aptos-move/aptos-gas-calibration", "aptos-move/aptos-gas-meter", "aptos-move/aptos-gas-profiling", "aptos-move/aptos-gas-schedule", @@ -25,7 +22,6 @@ members = [ "aptos-move/aptos-transactional-test-harness", "aptos-move/aptos-validator-interface", "aptos-move/aptos-vm", - "aptos-move/aptos-vm-benchmarks", "aptos-move/aptos-vm-logging", "aptos-move/aptos-vm-profiling", "aptos-move/aptos-vm-types", @@ -78,6 +74,7 @@ members = [ "crates/aptos-log-derive", "crates/aptos-logger", "crates/aptos-metrics-core", + "aptos-move/aptos-debugger", "crates/aptos-network-checker", "crates/aptos-node-identity", "crates/aptos-openapi", @@ -124,7 +121,6 @@ members = [ "ecosystem/indexer-grpc/indexer-grpc-table-info", "ecosystem/indexer-grpc/indexer-grpc-utils", "ecosystem/indexer-grpc/transaction-filter", - "ecosystem/nft-metadata-crawler-parser", "ecosystem/node-checker", "ecosystem/node-checker/fn-check-client", "execution/block-partitioner", @@ -186,7 +182,6 @@ members = [ "testsuite/forge-cli", "testsuite/fuzzer", "testsuite/fuzzer/fuzz", - "testsuite/generate-format", "testsuite/module-publish", "testsuite/smoke-test", "testsuite/testcases", @@ -259,14 +254,10 @@ members = [ # # For more, see the "Conditional compilation for tests" section in documentation/coding_guidelines.md. default-members = [ - "aptos-node", "consensus/safety-rules", - "crates/aptos", - "crates/aptos-debugger", "crates/aptos-faucet/service", "crates/aptos-keygen", "crates/aptos-rate-limiter", - "crates/aptos-rosetta", "crates/transaction-emitter", "aptos-move/framework", "storage/backup/backup-cli", @@ -287,7 +278,7 @@ rust-version = "1.78.0" [workspace.dependencies] # Internal crate dependencies. # Please do not add any test features here: they should be declared by the individual crate. -aptos = { path = "crates/aptos" } +movement = { path = "crates/aptos" } aptos-accumulator = { path = "storage/accumulator" } aptos-admin-service = { path = "crates/aptos-admin-service" } aptos-aggregator = { path = "aptos-move/aptos-aggregator" } @@ -338,14 +329,13 @@ aptos-faucet-cli = { path = "crates/aptos-faucet/cli" } aptos-faucet-core = { path = "crates/aptos-faucet/core" } aptos-faucet-service = { path = "crates/aptos-faucet/service" } aptos-faucet-metrics-server = { path = "crates/aptos-faucet/metrics-server" } -aptos-fallible = { path = "crates/fallible" } aptos-forge = { path = "testsuite/forge" } +aptos-fallible = { path = "crates/fallible" } aptos-framework = { path = "aptos-move/framework" } fuzzer = { path = "testsuite/fuzzer" } aptos-abstract-gas-usage = { path = "aptos-move/aptos-abstract-gas-usage" } aptos-gas-meter = { path = "aptos-move/aptos-gas-meter" } aptos-gas-algebra = { path = "aptos-move/aptos-gas-algebra" } -aptos-gas-calibration = { path = "aptos-move/aptos-gas-calibration" } aptos-gas-profiling = { path = "aptos-move/aptos-gas-profiling" } aptos-gas-schedule = { path = "aptos-move/aptos-gas-schedule" } aptos-gas-schedule-updator = { path = "aptos-move/aptos-gas-schedule-updator" } @@ -388,7 +378,6 @@ aptos-network-benchmark = { path = "network/benchmark" } aptos-network-builder = { path = "network/builder" } aptos-network-checker = { path = "crates/aptos-network-checker" } aptos-network-discovery = { path = "network/discovery" } -aptos-nft-metadata-crawler-parser = { path = "ecosystem/nft-metadata-crawler-parser" } aptos-node = { path = "aptos-node" } aptos-node-checker = { path = "ecosystem/node-checker" } aptos-node-identity = { path = "crates/aptos-node-identity" } @@ -477,7 +466,11 @@ ark-ff = "0.4.0" ark-groth16 = "0.4.0" ark-serialize = "0.4.0" ark-std = { version = "0.4.0", features = ["getrandom"] } -aptos-moving-average = { git = "https://github.com/aptos-labs/aptos-indexer-processors.git", rev = "4801acae7aea30d7e96bbfbe5ec5b04056dfa4cf" } + +aptos-moving-average = { git = "https://github.com/movementlabsxyz/aptos-indexer-processors", rev = "77a36245400250e7d8a854360194288d078681bc" } +processor = { git = "https://github.com/movementlabsxyz/aptos-indexer-processors", rev = "77a36245400250e7d8a854360194288d078681bc", default-features = false } +server-framework = { git = "https://github.com/movementlabsxyz/aptos-indexer-processors", rev = "77a36245400250e7d8a854360194288d078681bc", default-features = false } + assert_approx_eq = "1.1.0" assert_unordered = "0.3.5" async-channel = "1.7.1" @@ -490,9 +483,10 @@ base64 = "0.13.0" base64-url = "2.0.1" backoff = { version = "0.4.0", features = ["tokio"] } backtrace = "0.3.58" -bcs = { git = "https://github.com/aptos-labs/bcs.git", rev = "d31fab9d81748e2594be5cd5cdf845786a30562d" } +bcs = { git = "https://github.com/movementlabsxyz/bcs.git", rev = "bc16d2d39cabafaabd76173dd1b04b2aa170cf0c" } better_any = "0.1.1" bellman = { version = "0.13.1", default-features = false } +# Bumped down to 0.3 due to https://github.com/diesel-rs/diesel/issues/4477 bigdecimal = { version = "0.4.0", features = ["serde"] } version-compare = "0.1.1" bitvec = "1.0.1" @@ -514,10 +508,6 @@ claims = "0.7" clap = { version = "4.3.9", features = ["derive", "env", "unstable-styles"] } clap-verbosity-flag = "2.1.1" clap_complete = "4.4.1" -cloud-storage = { version = "0.11.1", features = [ - "global-client", - "rustls-tls", -], default-features = false } codespan = "0.11.1" codespan-reporting = "0.11.1" colored = "2.0.0" @@ -542,16 +532,14 @@ derivation-path = "0.2.0" derive_builder = "0.20.0" determinator = "0.12.0" derive_more = "0.99.11" -diesel = "2.1" -# Use the crate version once this feature gets released on crates.io: -# https://github.com/weiznich/diesel_async/commit/e165e8c96a6c540ebde2d6d7c52df5c5620a4bf1 -diesel-async = { git = "https://github.com/weiznich/diesel_async.git", rev = "d02798c67065d763154d7272dd0c09b39757d0f2", features = [ +diesel = "2.2.3" +diesel-async = { version = "0.5", features = [ "async-connection-wrapper", "postgres", "bb8", "tokio", ] } -diesel_migrations = { version = "2.1.0", features = ["postgres"] } +diesel_migrations = { version = "2.2", features = ["postgres"] } difference = "2.0.0" digest = "0.9.0" dir-diff = "0.3.2" @@ -561,10 +549,10 @@ dunce = "1.0.4" ed25519-dalek = { version = "1.0.1", features = ["std", "serde"] } ed25519-dalek-bip32 = "0.2.0" either = "1.6.1" +ethabi = "18.0.0" enum_dispatch = "0.3.12" env_logger = "0.10.0" erased-serde = "0.3.13" -ethabi = "18.0.0" ethnum = "1.5.0" event-listener = "2.5.3" evm = { version = "0.33.1", features = ["tracing"] } @@ -771,7 +759,7 @@ tokio-scoped = { version = "0.2.0" } tokio-stream = { version = "0.1.14", features = ["fs"] } tokio-test = "0.4.1" tokio-util = { version = "0.7.2", features = ["compat", "codec"] } -toml = "0.7.4" +toml = "0.8" tonic = { version = "0.11.0", features = [ "tls-roots", "transport", @@ -797,8 +785,9 @@ walkdir = "2.3.3" warp = { version = "0.3.5", features = ["tls"] } warp-reverse-proxy = "1.0.0" which = "4.2.5" +x25519-dalek = { git = "https://github.com/aptos-labs/x25519-dalek", branch = "zeroize_v1" } #Set to this version to be compatible with Sovereign Labs +zeroize = "1.6.0" #Set to this version to be compatible with Sovereign Labs whoami = "1.5.0" -x25519-dalek = "1.2.0" z3tracer = "0.8.0" # MOVE DEPENDENCIES diff --git a/api/goldens/aptos_api__tests__transactions_test__test_get_transactions_output_genesis_transaction.json b/api/goldens/aptos_api__tests__transactions_test__test_get_transactions_output_genesis_transaction.json index 90057ba6e841c..4cfbb8b992472 100644 --- a/api/goldens/aptos_api__tests__transactions_test__test_get_transactions_output_genesis_transaction.json +++ b/api/goldens/aptos_api__tests__transactions_test__test_get_transactions_output_genesis_transaction.json @@ -10214,7 +10214,7 @@ "type": "0x1::coin::CoinInfo<0x1::aptos_coin::AptosCoin>", "data": { "decimals": 8, - "name": "Aptos Coin", + "name": "Move Coin", "supply": { "vec": [ { @@ -10233,7 +10233,7 @@ } ] }, - "symbol": "APT" + "symbol": "MOVE" } }, "type": "write_resource" @@ -24701,7 +24701,7 @@ "type": "0x1::coin::CoinInfo<0x1::aptos_coin::AptosCoin>", "data": { "decimals": 8, - "name": "Aptos Coin", + "name": "Move Coin", "supply": { "vec": [ { @@ -24720,7 +24720,7 @@ } ] }, - "symbol": "APT" + "symbol": "MOVE" } }, "type": "write_resource" diff --git a/api/src/accounts.rs b/api/src/accounts.rs index 1f597ce8552e1..13558bc384495 100644 --- a/api/src/accounts.rs +++ b/api/src/accounts.rs @@ -64,12 +64,7 @@ impl AccountsApi { self.context .check_api_output_enabled("Get account", &accept_type)?; - let context = self.context.clone(); - api_spawn_blocking(move || { - let account = Account::new(context, address.0, ledger_version.0, None, None)?; - account.account(&accept_type) - }) - .await + self.get_account_inner(accept_type, address.0, ledger_version.0).await } /// Get account resources @@ -177,6 +172,22 @@ impl AccountsApi { } } +impl AccountsApi { + pub async fn get_account_inner( + &self, + accept_type: AcceptType, + address: Address, + ledger_version: Option, + ) -> BasicResultWith404 { + let context = self.context.clone(); + api_spawn_blocking(move || { + let account = Account::new(context, address, ledger_version, None, None)?; + account.account(&accept_type) + }) + .await + } +} + /// A struct representing Account related lookups for resources and modules pub struct Account { context: Arc, diff --git a/api/src/context.rs b/api/src/context.rs index c91a3cf42bc3f..b154b2d9c6287 100644 --- a/api/src/context.rs +++ b/api/src/context.rs @@ -210,7 +210,6 @@ impl Context { .clone() .send(MempoolClientRequest::SubmitTransaction(txn, req_sender)) .await?; - callback.await? } diff --git a/api/src/lib.rs b/api/src/lib.rs index 838394268d667..e9fd197bbde31 100644 --- a/api/src/lib.rs +++ b/api/src/lib.rs @@ -4,10 +4,10 @@ use poem_openapi::Tags; -mod accept_type; -mod accounts; -mod basic; -mod bcs_payload; +pub mod accept_type; +pub mod accounts; +pub mod basic; +pub mod bcs_payload; mod blocks; mod check_size; pub mod context; @@ -19,12 +19,12 @@ mod log; pub mod metrics; mod page; mod response; -mod runtime; -mod set_failpoints; -mod state; +pub mod runtime; +pub mod set_failpoints; +pub mod state; #[cfg(test)] pub mod tests; -mod transactions; +pub mod transactions; mod view_function; /// API categories for the OpenAPI spec diff --git a/api/src/runtime.rs b/api/src/runtime.rs index cf666d1f959df..f9858c64be35a 100644 --- a/api/src/runtime.rs +++ b/api/src/runtime.rs @@ -94,6 +94,48 @@ pub fn bootstrap( // TODO: https://github.com/poem-web/poem/issues/332 // TODO: https://github.com/poem-web/poem/issues/333 +pub struct Apis { + pub accounts: AccountsApi, + pub basic: BasicApi, + pub blocks: BlocksApi, + pub events: EventsApi, + pub index: IndexApi, + pub state: StateApi, + pub transactions: TransactionsApi, + pub view_function: ViewFunctionApi, +} + +pub fn get_apis(context : Arc) -> Apis { + + Apis { + accounts: AccountsApi { + context: context.clone(), + }, + basic: BasicApi { + context: context.clone(), + }, + blocks: BlocksApi { + context: context.clone(), + }, + events: EventsApi { + context: context.clone(), + }, + index: IndexApi { + context: context.clone(), + }, + state: StateApi { + context: context.clone(), + }, + transactions: TransactionsApi { + context: context.clone(), + }, + view_function: ViewFunctionApi { + context: context.clone(), + }, + } + +} + /// Generate the top level API service pub fn get_api_service( context: Arc, @@ -247,7 +289,7 @@ pub fn attach_poem_to_runtime( } #[handler] -async fn root_handler() -> Html<&'static str> { +pub async fn root_handler() -> Html<&'static str> { let response = " Aptos Node API diff --git a/api/src/transactions.rs b/api/src/transactions.rs index b7d2d75f0290f..0e628036af65b 100644 --- a/api/src/transactions.rs +++ b/api/src/transactions.rs @@ -152,7 +152,7 @@ impl TransactionsApi { operation_id = "get_transactions", tag = "ApiTags::Transactions" )] - async fn get_transactions( + pub async fn get_transactions( &self, accept_type: AcceptType, /// Ledger version to start list of transactions @@ -197,7 +197,7 @@ impl TransactionsApi { operation_id = "get_transaction_by_hash", tag = "ApiTags::Transactions" )] - async fn get_transaction_by_hash( + pub async fn get_transaction_by_hash( &self, accept_type: AcceptType, /// Hash of transaction to retrieve @@ -288,7 +288,7 @@ impl TransactionsApi { operation_id = "get_transaction_by_version", tag = "ApiTags::Transactions" )] - async fn get_transaction_by_version( + pub async fn get_transaction_by_version( &self, accept_type: AcceptType, /// Version of transaction to retrieve @@ -318,7 +318,7 @@ impl TransactionsApi { operation_id = "get_account_transactions", tag = "ApiTags::Transactions" )] - async fn get_accounts_transactions( + pub async fn get_accounts_transactions( &self, accept_type: AcceptType, /// Address of account with or without a `0x` prefix @@ -369,7 +369,7 @@ impl TransactionsApi { operation_id = "submit_transaction", tag = "ApiTags::Transactions" )] - async fn submit_transaction( + pub async fn submit_transaction( &self, accept_type: AcceptType, data: SubmitTransactionPost, @@ -422,7 +422,7 @@ impl TransactionsApi { operation_id = "submit_batch_transactions", tag = "ApiTags::Transactions" )] - async fn submit_transactions_batch( + pub async fn submit_transactions_batch( &self, accept_type: AcceptType, data: SubmitTransactionsBatchPost, @@ -477,7 +477,7 @@ impl TransactionsApi { operation_id = "simulate_transaction", tag = "ApiTags::Transactions" )] - async fn simulate_transaction( + pub async fn simulate_transaction( &self, accept_type: AcceptType, /// If set to true, the max gas value in the transaction will be ignored @@ -647,7 +647,7 @@ impl TransactionsApi { operation_id = "encode_submission", tag = "ApiTags::Transactions" )] - async fn encode_submission( + pub async fn encode_submission( &self, accept_type: AcceptType, data: Json, @@ -707,7 +707,7 @@ impl TransactionsApi { operation_id = "estimate_gas_price", tag = "ApiTags::Transactions" )] - async fn estimate_gas_price(&self, accept_type: AcceptType) -> BasicResult { + pub async fn estimate_gas_price(&self, accept_type: AcceptType) -> BasicResult { fail_point_poem("endpoint_encode_submission")?; self.context .check_api_output_enabled("Estimate gas price", &accept_type)?; @@ -824,7 +824,7 @@ impl TransactionsApi { } } - async fn get_transaction_by_hash_inner( + pub async fn get_transaction_by_hash_inner( &self, accept_type: &AcceptType, hash: HashValue, @@ -847,7 +847,6 @@ impl TransactionsApi { })? .context(format!("Failed to find transaction with hash: {}", hash)) .map_err(|_| transaction_not_found_by_hash(hash, &ledger_info))?; - let api = self.clone(); api_spawn_blocking(move || api.get_transaction_inner(&accept_type, txn_data, &ledger_info)) .await diff --git a/aptos-move/aptos-e2e-comparison-testing/src/data_collection.rs b/aptos-move/aptos-e2e-comparison-testing/src/data_collection.rs deleted file mode 100644 index 837f495c22287..0000000000000 --- a/aptos-move/aptos-e2e-comparison-testing/src/data_collection.rs +++ /dev/null @@ -1,268 +0,0 @@ -// Copyright Š Aptos Foundation -// SPDX-License-Identifier: Apache-2.0 - -use crate::{ - data_state_view::DataStateView, dump_and_compile_from_package_metadata, is_aptos_package, - CompilationCache, DataManager, IndexWriter, PackageInfo, TxnIndex, -}; -use anyhow::{format_err, Result}; -use aptos_framework::natives::code::PackageMetadata; -use aptos_rest_client::Client; -use aptos_types::{ - state_store::{state_key::StateKey, state_value::StateValue, TStateView}, - transaction::{ - signature_verified_transaction::SignatureVerifiedTransaction, Transaction, - TransactionOutput, Version, - }, - write_set::TOTAL_SUPPLY_STATE_KEY, -}; -use aptos_validator_interface::{AptosValidatorInterface, FilterCondition, RestDebuggerInterface}; -use aptos_vm::{AptosVM, VMExecutor}; -use move_core_types::account_address::AccountAddress; -use std::{ - collections::HashMap, - ops::Deref, - path::PathBuf, - sync::{Arc, Mutex}, -}; - -pub struct DataCollection { - debugger: Arc, - current_dir: PathBuf, - batch_size: u64, - dump_write_set: bool, - filter_condition: FilterCondition, -} - -impl DataCollection { - pub fn new( - debugger: Arc, - current_dir: PathBuf, - batch_size: u64, - skip_failed_txns: bool, - skip_publish_txns: bool, - dump_write_set: bool, - skip_source_code: bool, - target_account: Option, - ) -> Self { - Self { - debugger, - current_dir, - batch_size, - dump_write_set, - filter_condition: FilterCondition { - skip_failed_txns, - skip_publish_txns, - check_source_code: !skip_source_code, - target_account, - }, - } - } - - pub fn new_with_rest_client( - rest_client: Client, - current_dir: PathBuf, - batch_size: u64, - skip_failed_txns: bool, - skip_publish_txns: bool, - dump_write_set: bool, - skip_source_code: bool, - target_account: Option, - ) -> Result { - Ok(Self::new( - Arc::new(RestDebuggerInterface::new(rest_client)), - current_dir, - batch_size, - skip_failed_txns, - skip_publish_txns, - dump_write_set, - skip_source_code, - target_account, - )) - } - - fn execute_transactions_at_version_with_state_view( - txns: Vec, - debugger_state_view: &DataStateView, - ) -> Result> { - let sig_verified_txns: Vec = - txns.into_iter().map(|x| x.into()).collect::>(); - // check whether total supply can be retrieved - // used for debugging the aggregator panic issue, will be removed later - // FIXME(#10412): remove the assert - let val = debugger_state_view.get_state_value(TOTAL_SUPPLY_STATE_KEY.deref()); - assert!(val.is_ok() && val.unwrap().is_some()); - AptosVM::execute_block_no_limit(&sig_verified_txns, debugger_state_view) - .map_err(|err| format_err!("Unexpected VM Error: {:?}", err)) - } - - fn dump_and_check_src( - version: Version, - address: AccountAddress, - package_name: String, - map: HashMap<(AccountAddress, String), PackageMetadata>, - compilation_cache: &mut CompilationCache, - current_dir: PathBuf, - ) -> Option { - let upgrade_number = if is_aptos_package(&package_name) { - None - } else { - let package = map.get(&(address, package_name.clone())).unwrap(); - Some(package.upgrade_number) - }; - - let package_info = PackageInfo { - address, - package_name: package_name.clone(), - upgrade_number, - }; - if compilation_cache.failed_packages_v1.contains(&package_info) { - return None; - } - if !is_aptos_package(&package_name) - && !compilation_cache - .compiled_package_map - .contains_key(&package_info) - { - let res = dump_and_compile_from_package_metadata( - package_info.clone(), - current_dir, - &map, - compilation_cache, - None, - ); - if res.is_err() { - eprintln!("{} at: {}", res.unwrap_err(), version); - return None; - } - } - Some(package_info) - } - - fn dump_txn_index( - data_manager: &mut DataManager, - txn_index: TxnIndex, - data_state: &HashMap, - epoch_result_res: Result>, - dump_write_set: bool, - ) { - // dump TxnIndex - data_manager.dump_txn_index(txn_index.version, &txn_index); - // dump state data - data_manager.dump_state_data(txn_index.version, data_state); - // dump write set - if dump_write_set { - let output = epoch_result_res.unwrap(); - assert_eq!(output.len(), 1); - let write_set = output[0].write_set(); - data_manager.dump_write_set(txn_index.version, write_set); - } - } - - pub async fn dump_data(&self, begin: Version, limit: u64) -> Result<()> { - println!("begin dumping data"); - let compilation_cache = Arc::new(Mutex::new(CompilationCache::default())); - let data_manager = Arc::new(Mutex::new(DataManager::new_with_dir_creation( - &self.current_dir, - ))); - let index_writer = Arc::new(Mutex::new(IndexWriter::new(&self.current_dir))); - - let mut cur_version = begin; - let mut module_registry_map = HashMap::new(); - while cur_version < begin + limit { - let batch = if cur_version + self.batch_size <= begin + limit { - self.batch_size - } else { - begin + limit - cur_version - }; - let res_txns = self - .debugger - .get_and_filter_committed_transactions( - cur_version, - batch, - self.filter_condition, - &mut module_registry_map, - ) - .await; - // if error happens when collecting txns, log the version range - if res_txns.is_err() { - index_writer - .lock() - .unwrap() - .write_err(&format!("{}:{}", cur_version, batch)); - } - let txns = res_txns.unwrap_or_default(); - if !txns.is_empty() { - let mut txn_execution_ths = vec![]; - for (version, txn, source_code_data) in txns { - println!("get txn at version:{}", version); - - let compilation_cache = compilation_cache.clone(); - let current_dir = self.current_dir.clone(); - let dump_write_set = self.dump_write_set; - let data_manager = data_manager.clone(); - let index = index_writer.clone(); - - let state_view = - DataStateView::new_with_data_reads(self.debugger.clone(), version); - - let txn_execution_thread = tokio::task::spawn_blocking(move || { - let epoch_result_res = - Self::execute_transactions_at_version_with_state_view( - vec![txn.clone()], - &state_view, - ); - if let Err(err) = epoch_result_res { - println!( - "execution error during transaction at version:{} :{}", - version, err - ); - return; - } - - let mut version_idx = TxnIndex { - version, - txn, - package_info: PackageInfo::non_compilable_info(), - }; - - // handle source code - if let Some((address, package_name, map)) = source_code_data { - let package_info_opt = Self::dump_and_check_src( - version, - address, - package_name, - map, - &mut compilation_cache.lock().unwrap(), - current_dir.clone(), - ); - if package_info_opt.is_none() { - return; - } - version_idx.package_info = package_info_opt.unwrap(); - } - - // dump through data_manager - Self::dump_txn_index( - &mut data_manager.lock().unwrap(), - version_idx, - &state_view.get_state_keys().lock().unwrap(), - epoch_result_res, - dump_write_set, - ); - - // Log version - index.lock().unwrap().add_version(version); - }); - txn_execution_ths.push(txn_execution_thread); - } - futures::future::join_all(txn_execution_ths).await; - // Dump version - index_writer.lock().unwrap().dump_version(); - } - cur_version += batch; - } - index_writer.lock().unwrap().flush_writer(); - Ok(()) - } -} diff --git a/aptos-move/aptos-e2e-comparison-testing/src/main.rs b/aptos-move/aptos-e2e-comparison-testing/src/main.rs deleted file mode 100644 index 0d50666fe345f..0000000000000 --- a/aptos-move/aptos-e2e-comparison-testing/src/main.rs +++ /dev/null @@ -1,171 +0,0 @@ -// Copyright Š Aptos Foundation -// SPDX-License-Identifier: Apache-2.0 - -use anyhow::Result; -use aptos_comparison_testing::{ - prepare_aptos_packages, DataCollection, Execution, ExecutionMode, OnlineExecutor, APTOS_COMMONS, -}; -use aptos_rest_client::Client; -use clap::{Parser, Subcommand}; -use move_core_types::account_address::AccountAddress; -use std::path::PathBuf; -use url::Url; - -const BATCH_SIZE: u64 = 500; - -#[derive(Subcommand)] -pub enum Cmd { - /// Collect and dump the data - Dump { - /// Endpoint url to obtain the txn data, e.g. `https://api.mainnet.aptoslabs.com/v1` for mainnet. - /// To avoid rate limiting, users need to apply for API key from `https://developers.aptoslabs.com/` - /// and set the env variable X_API_KEY using the obtained key - endpoint: String, - /// Path to the dumped data - output_path: Option, - /// Do not dump failed txns - #[clap(long, default_value_t = false)] - skip_failed_txns: bool, - /// Do not dump publish txns - #[clap(long, default_value_t = false)] - skip_publish_txns: bool, - /// Collect txns regardless whether the source code is available - #[clap(long, default_value_t = false)] - skip_source_code_check: bool, - /// Dump the write set of txns - #[clap(long, default_value_t = false)] - dump_write_set: bool, - /// With this set, only dump transactions that are sent to this account - #[clap(long)] - target_account: Option, - }, - /// Collect and execute txns without dumping the state data - Online { - /// Endpoint url to obtain the txn data, - /// e.g. `https://api.mainnet.aptoslabs.com/v1` for mainnet. - /// To avoid rate limiting, users need to apply for API key from `https://developers.aptoslabs.com/` - /// and set the env variable X_API_KEY using the obtained key - endpoint: String, - /// Path to the dumped data - output_path: Option, - /// Do not dump failed txns - #[clap(long, default_value_t = false)] - skip_failed_txns: bool, - /// Do not dump publish txns - #[clap(long, default_value_t = false)] - skip_publish_txns: bool, - /// Whether to execute against V1, V2 alone or both compilers for comparison - /// Used when execution_only is true - #[clap(long)] - execution_mode: Option, - }, - /// Execution of txns - Execute { - /// Path to the data - input_path: Option, - /// Whether to execute against V1, V2 alone or both compilers for comparison - #[clap(long)] - execution_mode: Option, - }, -} - -#[derive(Parser)] -pub struct Argument { - #[clap(subcommand)] - cmd: Cmd, - - /// Scan/execute from the txn of this version - #[clap(long)] - begin_version: u64, - - /// Number of txns to scan/execute - #[clap(long)] - limit: u64, -} - -#[tokio::main] -async fn main() -> Result<()> { - let args = Argument::parse(); - - match args.cmd { - Cmd::Dump { - endpoint, - output_path, - skip_failed_txns, - skip_publish_txns, - skip_source_code_check: skip_source_code, - dump_write_set, - target_account, - } => { - let batch_size = BATCH_SIZE; - let output = if let Some(path) = output_path { - path - } else { - PathBuf::from(".") - }; - if !output.exists() { - std::fs::create_dir_all(output.as_path()).unwrap(); - } - if !skip_source_code { - prepare_aptos_packages(output.join(APTOS_COMMONS)).await; - } - let data_collector = DataCollection::new_with_rest_client( - Client::new(Url::parse(&endpoint)?), - output.clone(), - batch_size, - skip_failed_txns, - skip_publish_txns, - dump_write_set, - skip_source_code, - target_account, - )?; - data_collector - .dump_data(args.begin_version, args.limit) - .await?; - }, - Cmd::Online { - endpoint, - output_path, - skip_failed_txns, - skip_publish_txns, - execution_mode, - } => { - let batch_size = BATCH_SIZE; - let output = if let Some(path) = output_path { - path - } else { - PathBuf::from(".") - }; - if !output.exists() { - std::fs::create_dir_all(output.as_path()).unwrap(); - } - prepare_aptos_packages(output.join(APTOS_COMMONS)).await; - let online = OnlineExecutor::new_with_rest_client( - Client::new(Url::parse(&endpoint)?), - output.clone(), - batch_size, - skip_failed_txns, - skip_publish_txns, - execution_mode.unwrap_or_default(), - endpoint, - )?; - online.execute(args.begin_version, args.limit).await?; - }, - Cmd::Execute { - input_path, - execution_mode, - } => { - let input = if let Some(path) = input_path { - path - } else { - PathBuf::from(".") - }; - prepare_aptos_packages(input.join(APTOS_COMMONS)).await; - let executor = Execution::new(input, execution_mode.unwrap_or_default()); - executor - .execute_txns(args.begin_version, args.limit) - .await?; - }, - }; - Ok(()) -} diff --git a/aptos-move/aptos-e2e-comparison-testing/src/online_execution.rs b/aptos-move/aptos-e2e-comparison-testing/src/online_execution.rs deleted file mode 100644 index 166f2ff1e808f..0000000000000 --- a/aptos-move/aptos-e2e-comparison-testing/src/online_execution.rs +++ /dev/null @@ -1,240 +0,0 @@ -// Copyright Š Aptos Foundation -// SPDX-License-Identifier: Apache-2.0 - -use crate::{ - compile_aptos_packages, dump_and_compile_from_package_metadata, is_aptos_package, - CompilationCache, ExecutionMode, IndexWriter, PackageInfo, TxnIndex, APTOS_COMMONS, -}; -use anyhow::Result; -use aptos_framework::natives::code::PackageMetadata; -use aptos_language_e2e_tests::data_store::FakeDataStore; -use aptos_rest_client::Client; -use aptos_types::transaction::Version; -use aptos_validator_interface::{AptosValidatorInterface, FilterCondition, RestDebuggerInterface}; -use move_core_types::account_address::AccountAddress; -use std::{ - collections::HashMap, - path::PathBuf, - sync::{Arc, Mutex}, -}; -use url::Url; - -pub struct OnlineExecutor { - debugger: Arc, - current_dir: PathBuf, - batch_size: u64, - filter_condition: FilterCondition, - execution_mode: ExecutionMode, - endpoint: String, -} - -impl OnlineExecutor { - pub fn new( - debugger: Arc, - current_dir: PathBuf, - batch_size: u64, - skip_failed_txns: bool, - skip_publish_txns: bool, - execution_mode: ExecutionMode, - endpoint: String, - ) -> Self { - Self { - debugger, - current_dir, - batch_size, - filter_condition: FilterCondition { - skip_failed_txns, - skip_publish_txns, - check_source_code: true, - target_account: None, - }, - execution_mode, - endpoint, - } - } - - pub fn new_with_rest_client( - rest_client: Client, - current_dir: PathBuf, - batch_size: u64, - skip_failed_txns: bool, - skip_publish_txns: bool, - execution_mode: ExecutionMode, - endpoint: String, - ) -> Result { - Ok(Self::new( - Arc::new(RestDebuggerInterface::new(rest_client)), - current_dir, - batch_size, - skip_failed_txns, - skip_publish_txns, - execution_mode, - endpoint, - )) - } - - fn dump_and_check_src( - version: Version, - address: AccountAddress, - package_name: String, - map: HashMap<(AccountAddress, String), PackageMetadata>, - compilation_cache: &mut CompilationCache, - execution_mode: Option, - current_dir: PathBuf, - ) -> Option { - let upgrade_number = if is_aptos_package(&package_name) { - None - } else { - let package = map.get(&(address, package_name.clone())).unwrap(); - Some(package.upgrade_number) - }; - - let package_info = PackageInfo { - address, - package_name: package_name.clone(), - upgrade_number, - }; - if compilation_cache.failed_packages_v1.contains(&package_info) { - return None; - } - if !is_aptos_package(&package_name) - && !compilation_cache - .compiled_package_map - .contains_key(&package_info) - { - let res = dump_and_compile_from_package_metadata( - package_info.clone(), - current_dir, - &map, - compilation_cache, - execution_mode, - ); - if res.is_err() { - eprintln!("{} at:{}", res.unwrap_err(), version); - return None; - } - } - Some(package_info) - } - - pub async fn execute(&self, begin: Version, limit: u64) -> Result<()> { - println!("begin executing events"); - let compilation_cache = Arc::new(Mutex::new(CompilationCache::default())); - let index_writer = Arc::new(Mutex::new(IndexWriter::new(&self.current_dir))); - - let aptos_commons_path = self.current_dir.join(APTOS_COMMONS); - if self.execution_mode.is_v1_or_compare() { - compile_aptos_packages( - &aptos_commons_path, - &mut compilation_cache.lock().unwrap().compiled_package_cache_v1, - false, - )?; - } - if self.execution_mode.is_v2_or_compare() { - compile_aptos_packages( - &aptos_commons_path, - &mut compilation_cache.lock().unwrap().compiled_package_cache_v2, - true, - )?; - } - - let mut cur_version = begin; - let mut module_registry_map = HashMap::new(); - while cur_version < begin + limit { - let batch = if cur_version + self.batch_size <= begin + limit { - self.batch_size - } else { - begin + limit - cur_version - }; - let res_txns = self - .debugger - .get_and_filter_committed_transactions( - cur_version, - batch, - self.filter_condition, - &mut module_registry_map, - ) - .await; - // if error happens when collecting txns, log the version range - if res_txns.is_err() { - index_writer.lock().unwrap().write_err(&format!( - "{}:{}:{:?}", - cur_version, - batch, - res_txns.unwrap_err() - )); - cur_version += batch; - continue; - } - let txns = res_txns.unwrap_or_default(); - if !txns.is_empty() { - let mut txn_execution_ths = vec![]; - for (version, txn, source_code_data) in txns { - println!("get txn at version:{}", version); - - let compilation_cache = compilation_cache.clone(); - let current_dir = self.current_dir.clone(); - let execution_mode = self.execution_mode; - let endpoint = self.endpoint.clone(); - - let txn_execution_thread = tokio::task::spawn_blocking(move || { - let executor = crate::Execution::new(current_dir.clone(), execution_mode); - - let mut version_idx = TxnIndex { - version, - txn: txn.clone(), - package_info: PackageInfo::non_compilable_info(), - }; - - // handle source code - if let Some((address, package_name, map)) = source_code_data { - let execution_mode_opt = Some(execution_mode); - let package_info_opt = Self::dump_and_check_src( - version, - address, - package_name, - map, - &mut compilation_cache.lock().unwrap(), - execution_mode_opt, - current_dir.clone(), - ); - if package_info_opt.is_none() { - return; - } - - version_idx.package_info = package_info_opt.unwrap(); - - let state_store = FakeDataStore::default(); - - let cache_v1 = compilation_cache - .lock() - .unwrap() - .compiled_package_cache_v1 - .clone(); - let cache_v2 = compilation_cache - .lock() - .unwrap() - .compiled_package_cache_v2 - .clone(); - - let client = Client::new(Url::parse(&endpoint).unwrap()); - let debugger = Arc::new(RestDebuggerInterface::new(client)); - executor.execute_and_compare( - version, - state_store, - &version_idx, - &cache_v1, - &cache_v2, - Some(debugger), - ); - } - }); - txn_execution_ths.push(txn_execution_thread); - } - futures::future::join_all(txn_execution_ths).await; - } - cur_version += batch; - } - Ok(()) - } -} diff --git a/aptos-move/aptos-e2e-comparison-testing/test-data-mainnet-10m-15/rocks_txn_idx_db/000008.sst b/aptos-move/aptos-e2e-comparison-testing/test-data-mainnet-10m-15/rocks_txn_idx_db/000008.sst deleted file mode 100644 index 7036ed0037da0..0000000000000 Binary files a/aptos-move/aptos-e2e-comparison-testing/test-data-mainnet-10m-15/rocks_txn_idx_db/000008.sst and /dev/null differ diff --git a/aptos-move/aptos-e2e-comparison-testing/test-data-mainnet-10m-15/rocks_txn_idx_db/000009.log b/aptos-move/aptos-e2e-comparison-testing/test-data-mainnet-10m-15/rocks_txn_idx_db/000009.log deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/aptos-move/aptos-e2e-comparison-testing/test-data-mainnet-10m-15/rocks_txn_idx_db/000013.log b/aptos-move/aptos-e2e-comparison-testing/test-data-mainnet-10m-15/rocks_txn_idx_db/000013.log deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/aptos-move/aptos-e2e-comparison-testing/test-data-mainnet-10m-15/rocks_txn_idx_db/000017.log b/aptos-move/aptos-e2e-comparison-testing/test-data-mainnet-10m-15/rocks_txn_idx_db/000017.log deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/aptos-move/aptos-e2e-comparison-testing/test-data-mainnet-10m-15/rocks_txn_idx_db/CURRENT b/aptos-move/aptos-e2e-comparison-testing/test-data-mainnet-10m-15/rocks_txn_idx_db/CURRENT deleted file mode 100644 index e417a51c357b8..0000000000000 --- a/aptos-move/aptos-e2e-comparison-testing/test-data-mainnet-10m-15/rocks_txn_idx_db/CURRENT +++ /dev/null @@ -1 +0,0 @@ -MANIFEST-000018 diff --git a/aptos-move/aptos-e2e-comparison-testing/test-data-mainnet-10m-15/rocks_txn_idx_db/IDENTITY b/aptos-move/aptos-e2e-comparison-testing/test-data-mainnet-10m-15/rocks_txn_idx_db/IDENTITY deleted file mode 100644 index 05d8318173ba8..0000000000000 --- a/aptos-move/aptos-e2e-comparison-testing/test-data-mainnet-10m-15/rocks_txn_idx_db/IDENTITY +++ /dev/null @@ -1 +0,0 @@ -68030351-9558-4d6e-aa76-818928bc21b6 \ No newline at end of file diff --git a/aptos-move/aptos-e2e-comparison-testing/test-data-mainnet-10m-15/rocks_txn_idx_db/LOCK b/aptos-move/aptos-e2e-comparison-testing/test-data-mainnet-10m-15/rocks_txn_idx_db/LOCK deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/aptos-move/aptos-e2e-comparison-testing/test-data-mainnet-10m-15/rocks_txn_idx_db/LOG b/aptos-move/aptos-e2e-comparison-testing/test-data-mainnet-10m-15/rocks_txn_idx_db/LOG deleted file mode 100644 index e84095f5ab5b2..0000000000000 --- a/aptos-move/aptos-e2e-comparison-testing/test-data-mainnet-10m-15/rocks_txn_idx_db/LOG +++ /dev/null @@ -1,285 +0,0 @@ -2023/11/02-13:17:00.663558 8055427840 RocksDB version: 8.1.1 -2023/11/02-13:17:00.664409 8055427840 Compile date 2023-04-06 16:38:52 -2023/11/02-13:17:00.664411 8055427840 DB SUMMARY -2023/11/02-13:17:00.664412 8055427840 DB Session ID: 2G1H1OMZJVXUMOOLASCB -2023/11/02-13:17:00.664488 8055427840 CURRENT file: CURRENT -2023/11/02-13:17:00.664490 8055427840 IDENTITY file: IDENTITY -2023/11/02-13:17:00.664496 8055427840 MANIFEST file: MANIFEST-000014 size: 181 Bytes -2023/11/02-13:17:00.664509 8055427840 SST files in ./test-data-mainnet-10m-15/rocks_txn_idx_db dir, Total Num: 1, files: 000008.sst -2023/11/02-13:17:00.664511 8055427840 Write Ahead Log file in ./test-data-mainnet-10m-15/rocks_txn_idx_db: 000009.log size: 0 ; 000013.log size: 0 ; -2023/11/02-13:17:00.664513 8055427840 Options.error_if_exists: 0 -2023/11/02-13:17:00.664514 8055427840 Options.create_if_missing: 1 -2023/11/02-13:17:00.664515 8055427840 Options.paranoid_checks: 1 -2023/11/02-13:17:00.664516 8055427840 Options.flush_verify_memtable_count: 1 -2023/11/02-13:17:00.664517 8055427840 Options.track_and_verify_wals_in_manifest: 0 -2023/11/02-13:17:00.664518 8055427840 Options.verify_sst_unique_id_in_manifest: 1 -2023/11/02-13:17:00.664519 8055427840 Options.env: 0x108aae5b8 -2023/11/02-13:17:00.664520 8055427840 Options.fs: PosixFileSystem -2023/11/02-13:17:00.664521 8055427840 Options.info_log: 0x1148ec9e8 -2023/11/02-13:17:00.664522 8055427840 Options.max_file_opening_threads: 16 -2023/11/02-13:17:00.664523 8055427840 Options.statistics: 0x0 -2023/11/02-13:17:00.664524 8055427840 Options.use_fsync: 0 -2023/11/02-13:17:00.664525 8055427840 Options.max_log_file_size: 0 -2023/11/02-13:17:00.664526 8055427840 Options.max_manifest_file_size: 1073741824 -2023/11/02-13:17:00.664527 8055427840 Options.log_file_time_to_roll: 0 -2023/11/02-13:17:00.664527 8055427840 Options.keep_log_file_num: 1000 -2023/11/02-13:17:00.664528 8055427840 Options.recycle_log_file_num: 0 -2023/11/02-13:17:00.664529 8055427840 Options.allow_fallocate: 1 -2023/11/02-13:17:00.664530 8055427840 Options.allow_mmap_reads: 0 -2023/11/02-13:17:00.664531 8055427840 Options.allow_mmap_writes: 0 -2023/11/02-13:17:00.664532 8055427840 Options.use_direct_reads: 0 -2023/11/02-13:17:00.664533 8055427840 Options.use_direct_io_for_flush_and_compaction: 0 -2023/11/02-13:17:00.664534 8055427840 Options.create_missing_column_families: 0 -2023/11/02-13:17:00.664535 8055427840 Options.db_log_dir: -2023/11/02-13:17:00.664536 8055427840 Options.wal_dir: -2023/11/02-13:17:00.664536 8055427840 Options.table_cache_numshardbits: 6 -2023/11/02-13:17:00.664538 8055427840 Options.WAL_ttl_seconds: 0 -2023/11/02-13:17:00.664538 8055427840 Options.WAL_size_limit_MB: 0 -2023/11/02-13:17:00.664539 8055427840 Options.max_write_batch_group_size_bytes: 1048576 -2023/11/02-13:17:00.664540 8055427840 Options.manifest_preallocation_size: 4194304 -2023/11/02-13:17:00.664541 8055427840 Options.is_fd_close_on_exec: 1 -2023/11/02-13:17:00.664542 8055427840 Options.advise_random_on_open: 1 -2023/11/02-13:17:00.664543 8055427840 Options.db_write_buffer_size: 0 -2023/11/02-13:17:00.664544 8055427840 Options.write_buffer_manager: 0x600002801110 -2023/11/02-13:17:00.664545 8055427840 Options.access_hint_on_compaction_start: 1 -2023/11/02-13:17:00.664546 8055427840 Options.random_access_max_buffer_size: 1048576 -2023/11/02-13:17:00.664547 8055427840 Options.use_adaptive_mutex: 0 -2023/11/02-13:17:00.664548 8055427840 Options.rate_limiter: 0x0 -2023/11/02-13:17:00.664549 8055427840 Options.sst_file_manager.rate_bytes_per_sec: 0 -2023/11/02-13:17:00.664550 8055427840 Options.wal_recovery_mode: 2 -2023/11/02-13:17:00.664551 8055427840 Options.enable_thread_tracking: 0 -2023/11/02-13:17:00.664552 8055427840 Options.enable_pipelined_write: 0 -2023/11/02-13:17:00.664553 8055427840 Options.unordered_write: 0 -2023/11/02-13:17:00.664554 8055427840 Options.allow_concurrent_memtable_write: 1 -2023/11/02-13:17:00.664554 8055427840 Options.enable_write_thread_adaptive_yield: 1 -2023/11/02-13:17:00.664555 8055427840 Options.write_thread_max_yield_usec: 100 -2023/11/02-13:17:00.664556 8055427840 Options.write_thread_slow_yield_usec: 3 -2023/11/02-13:17:00.664557 8055427840 Options.row_cache: None -2023/11/02-13:17:00.664558 8055427840 Options.wal_filter: None -2023/11/02-13:17:00.664559 8055427840 Options.avoid_flush_during_recovery: 0 -2023/11/02-13:17:00.664560 8055427840 Options.allow_ingest_behind: 0 -2023/11/02-13:17:00.664561 8055427840 Options.two_write_queues: 0 -2023/11/02-13:17:00.664562 8055427840 Options.manual_wal_flush: 0 -2023/11/02-13:17:00.664563 8055427840 Options.wal_compression: 0 -2023/11/02-13:17:00.664563 8055427840 Options.atomic_flush: 0 -2023/11/02-13:17:00.664564 8055427840 Options.avoid_unnecessary_blocking_io: 0 -2023/11/02-13:17:00.664565 8055427840 Options.persist_stats_to_disk: 0 -2023/11/02-13:17:00.664566 8055427840 Options.write_dbid_to_manifest: 0 -2023/11/02-13:17:00.664567 8055427840 Options.log_readahead_size: 0 -2023/11/02-13:17:00.664568 8055427840 Options.file_checksum_gen_factory: Unknown -2023/11/02-13:17:00.664580 8055427840 Options.best_efforts_recovery: 0 -2023/11/02-13:17:00.664581 8055427840 Options.max_bgerror_resume_count: 2147483647 -2023/11/02-13:17:00.664582 8055427840 Options.bgerror_resume_retry_interval: 1000000 -2023/11/02-13:17:00.664583 8055427840 Options.allow_data_in_errors: 0 -2023/11/02-13:17:00.664584 8055427840 Options.db_host_id: __hostname__ -2023/11/02-13:17:00.664585 8055427840 Options.enforce_single_del_contracts: true -2023/11/02-13:17:00.664586 8055427840 Options.max_background_jobs: 2 -2023/11/02-13:17:00.664587 8055427840 Options.max_background_compactions: -1 -2023/11/02-13:17:00.664588 8055427840 Options.max_subcompactions: 1 -2023/11/02-13:17:00.664589 8055427840 Options.avoid_flush_during_shutdown: 0 -2023/11/02-13:17:00.664589 8055427840 Options.writable_file_max_buffer_size: 1048576 -2023/11/02-13:17:00.664590 8055427840 Options.delayed_write_rate : 16777216 -2023/11/02-13:17:00.664591 8055427840 Options.max_total_wal_size: 0 -2023/11/02-13:17:00.664592 8055427840 Options.delete_obsolete_files_period_micros: 21600000000 -2023/11/02-13:17:00.664593 8055427840 Options.stats_dump_period_sec: 600 -2023/11/02-13:17:00.664594 8055427840 Options.stats_persist_period_sec: 600 -2023/11/02-13:17:00.664595 8055427840 Options.stats_history_buffer_size: 1048576 -2023/11/02-13:17:00.664596 8055427840 Options.max_open_files: -1 -2023/11/02-13:17:00.664597 8055427840 Options.bytes_per_sync: 0 -2023/11/02-13:17:00.664598 8055427840 Options.wal_bytes_per_sync: 0 -2023/11/02-13:17:00.664599 8055427840 Options.strict_bytes_per_sync: 0 -2023/11/02-13:17:00.664599 8055427840 Options.compaction_readahead_size: 0 -2023/11/02-13:17:00.664600 8055427840 Options.max_background_flushes: -1 -2023/11/02-13:17:00.664601 8055427840 Compression algorithms supported: -2023/11/02-13:17:00.664614 8055427840 kZSTD supported: 1 -2023/11/02-13:17:00.664615 8055427840 kZlibCompression supported: 1 -2023/11/02-13:17:00.664616 8055427840 kXpressCompression supported: 0 -2023/11/02-13:17:00.664617 8055427840 kSnappyCompression supported: 1 -2023/11/02-13:17:00.664619 8055427840 kZSTDNotFinalCompression supported: 1 -2023/11/02-13:17:00.664620 8055427840 kLZ4HCCompression supported: 1 -2023/11/02-13:17:00.664621 8055427840 kLZ4Compression supported: 1 -2023/11/02-13:17:00.664622 8055427840 kBZip2Compression supported: 1 -2023/11/02-13:17:00.664628 8055427840 Fast CRC32 supported: Supported on Arm64 -2023/11/02-13:17:00.664630 8055427840 DMutex implementation: pthread_mutex_t -2023/11/02-13:17:00.664805 8055427840 [db/version_set.cc:5662] Recovering from manifest file: ./test-data-mainnet-10m-15/rocks_txn_idx_db/MANIFEST-000014 -2023/11/02-13:17:00.665058 8055427840 [db/column_family.cc:621] --------------- Options for column family [default]: -2023/11/02-13:17:00.665060 8055427840 Options.comparator: leveldb.BytewiseComparator -2023/11/02-13:17:00.665061 8055427840 Options.merge_operator: None -2023/11/02-13:17:00.665062 8055427840 Options.compaction_filter: None -2023/11/02-13:17:00.665063 8055427840 Options.compaction_filter_factory: None -2023/11/02-13:17:00.665064 8055427840 Options.sst_partitioner_factory: None -2023/11/02-13:17:00.665065 8055427840 Options.memtable_factory: SkipListFactory -2023/11/02-13:17:00.665066 8055427840 Options.table_factory: BlockBasedTable -2023/11/02-13:17:00.665077 8055427840 table_factory options: flush_block_policy_factory: FlushBlockBySizePolicyFactory (0x60000122c300) - cache_index_and_filter_blocks: 0 - cache_index_and_filter_blocks_with_high_priority: 1 - pin_l0_filter_and_index_blocks_in_cache: 0 - pin_top_level_index_and_filter: 1 - index_type: 0 - data_block_index_type: 0 - index_shortening: 1 - data_block_hash_table_util_ratio: 0.750000 - checksum: 4 - no_block_cache: 0 - block_cache: 0x600002627798 - block_cache_name: LRUCache - block_cache_options: - capacity : 8388608 - num_shard_bits : 4 - strict_capacity_limit : 0 - memory_allocator : None - high_pri_pool_ratio: 0.000 - low_pri_pool_ratio: 0.000 - persistent_cache: 0x0 - block_size: 4096 - block_size_deviation: 10 - block_restart_interval: 16 - index_block_restart_interval: 1 - metadata_block_size: 4096 - partition_filters: 0 - use_delta_encoding: 1 - filter_policy: nullptr - whole_key_filtering: 1 - verify_compression: 0 - read_amp_bytes_per_bit: 0 - format_version: 5 - enable_index_compression: 1 - block_align: 0 - max_auto_readahead_size: 262144 - prepopulate_block_cache: 0 - initial_auto_readahead_size: 8192 - num_file_reads_for_auto_readahead: 2 -2023/11/02-13:17:00.665078 8055427840 Options.write_buffer_size: 67108864 -2023/11/02-13:17:00.665079 8055427840 Options.max_write_buffer_number: 2 -2023/11/02-13:17:00.665080 8055427840 Options.compression: Snappy -2023/11/02-13:17:00.665081 8055427840 Options.bottommost_compression: Disabled -2023/11/02-13:17:00.665082 8055427840 Options.prefix_extractor: nullptr -2023/11/02-13:17:00.665083 8055427840 Options.memtable_insert_with_hint_prefix_extractor: nullptr -2023/11/02-13:17:00.665084 8055427840 Options.num_levels: 7 -2023/11/02-13:17:00.665085 8055427840 Options.min_write_buffer_number_to_merge: 1 -2023/11/02-13:17:00.665086 8055427840 Options.max_write_buffer_number_to_maintain: 0 -2023/11/02-13:17:00.665087 8055427840 Options.max_write_buffer_size_to_maintain: 0 -2023/11/02-13:17:00.665088 8055427840 Options.bottommost_compression_opts.window_bits: -14 -2023/11/02-13:17:00.665089 8055427840 Options.bottommost_compression_opts.level: 32767 -2023/11/02-13:17:00.665090 8055427840 Options.bottommost_compression_opts.strategy: 0 -2023/11/02-13:17:00.665091 8055427840 Options.bottommost_compression_opts.max_dict_bytes: 0 -2023/11/02-13:17:00.665092 8055427840 Options.bottommost_compression_opts.zstd_max_train_bytes: 0 -2023/11/02-13:17:00.665093 8055427840 Options.bottommost_compression_opts.parallel_threads: 1 -2023/11/02-13:17:00.665094 8055427840 Options.bottommost_compression_opts.enabled: false -2023/11/02-13:17:00.665095 8055427840 Options.bottommost_compression_opts.max_dict_buffer_bytes: 0 -2023/11/02-13:17:00.665096 8055427840 Options.bottommost_compression_opts.use_zstd_dict_trainer: true -2023/11/02-13:17:00.665096 8055427840 Options.compression_opts.window_bits: -14 -2023/11/02-13:17:00.665097 8055427840 Options.compression_opts.level: 32767 -2023/11/02-13:17:00.665098 8055427840 Options.compression_opts.strategy: 0 -2023/11/02-13:17:00.665099 8055427840 Options.compression_opts.max_dict_bytes: 0 -2023/11/02-13:17:00.665100 8055427840 Options.compression_opts.zstd_max_train_bytes: 0 -2023/11/02-13:17:00.665101 8055427840 Options.compression_opts.use_zstd_dict_trainer: true -2023/11/02-13:17:00.665102 8055427840 Options.compression_opts.parallel_threads: 1 -2023/11/02-13:17:00.665103 8055427840 Options.compression_opts.enabled: false -2023/11/02-13:17:00.665104 8055427840 Options.compression_opts.max_dict_buffer_bytes: 0 -2023/11/02-13:17:00.665105 8055427840 Options.level0_file_num_compaction_trigger: 4 -2023/11/02-13:17:00.665106 8055427840 Options.level0_slowdown_writes_trigger: 20 -2023/11/02-13:17:00.665107 8055427840 Options.level0_stop_writes_trigger: 36 -2023/11/02-13:17:00.665108 8055427840 Options.target_file_size_base: 67108864 -2023/11/02-13:17:00.665108 8055427840 Options.target_file_size_multiplier: 1 -2023/11/02-13:17:00.665109 8055427840 Options.max_bytes_for_level_base: 268435456 -2023/11/02-13:17:00.665110 8055427840 Options.level_compaction_dynamic_level_bytes: 0 -2023/11/02-13:17:00.665111 8055427840 Options.max_bytes_for_level_multiplier: 10.000000 -2023/11/02-13:17:00.665112 8055427840 Options.max_bytes_for_level_multiplier_addtl[0]: 1 -2023/11/02-13:17:00.665114 8055427840 Options.max_bytes_for_level_multiplier_addtl[1]: 1 -2023/11/02-13:17:00.665114 8055427840 Options.max_bytes_for_level_multiplier_addtl[2]: 1 -2023/11/02-13:17:00.665115 8055427840 Options.max_bytes_for_level_multiplier_addtl[3]: 1 -2023/11/02-13:17:00.665116 8055427840 Options.max_bytes_for_level_multiplier_addtl[4]: 1 -2023/11/02-13:17:00.665117 8055427840 Options.max_bytes_for_level_multiplier_addtl[5]: 1 -2023/11/02-13:17:00.665118 8055427840 Options.max_bytes_for_level_multiplier_addtl[6]: 1 -2023/11/02-13:17:00.665119 8055427840 Options.max_sequential_skip_in_iterations: 8 -2023/11/02-13:17:00.665120 8055427840 Options.max_compaction_bytes: 1677721600 -2023/11/02-13:17:00.665121 8055427840 Options.ignore_max_compaction_bytes_for_input: true -2023/11/02-13:17:00.665122 8055427840 Options.arena_block_size: 1048576 -2023/11/02-13:17:00.665123 8055427840 Options.soft_pending_compaction_bytes_limit: 68719476736 -2023/11/02-13:17:00.665124 8055427840 Options.hard_pending_compaction_bytes_limit: 274877906944 -2023/11/02-13:17:00.665125 8055427840 Options.disable_auto_compactions: 0 -2023/11/02-13:17:00.665126 8055427840 Options.compaction_style: kCompactionStyleLevel -2023/11/02-13:17:00.665128 8055427840 Options.compaction_pri: kMinOverlappingRatio -2023/11/02-13:17:00.665129 8055427840 Options.compaction_options_universal.size_ratio: 1 -2023/11/02-13:17:00.665130 8055427840 Options.compaction_options_universal.min_merge_width: 2 -2023/11/02-13:17:00.665131 8055427840 Options.compaction_options_universal.max_merge_width: 4294967295 -2023/11/02-13:17:00.665132 8055427840 Options.compaction_options_universal.max_size_amplification_percent: 200 -2023/11/02-13:17:00.665133 8055427840 Options.compaction_options_universal.compression_size_percent: -1 -2023/11/02-13:17:00.665134 8055427840 Options.compaction_options_universal.stop_style: kCompactionStopStyleTotalSize -2023/11/02-13:17:00.665135 8055427840 Options.compaction_options_fifo.max_table_files_size: 1073741824 -2023/11/02-13:17:00.665136 8055427840 Options.compaction_options_fifo.allow_compaction: 0 -2023/11/02-13:17:00.665137 8055427840 Options.table_properties_collectors: -2023/11/02-13:17:00.665138 8055427840 Options.inplace_update_support: 0 -2023/11/02-13:17:00.665139 8055427840 Options.inplace_update_num_locks: 10000 -2023/11/02-13:17:00.665140 8055427840 Options.memtable_prefix_bloom_size_ratio: 0.000000 -2023/11/02-13:17:00.665141 8055427840 Options.memtable_whole_key_filtering: 0 -2023/11/02-13:17:00.665142 8055427840 Options.memtable_huge_page_size: 0 -2023/11/02-13:17:00.665143 8055427840 Options.bloom_locality: 0 -2023/11/02-13:17:00.665144 8055427840 Options.max_successive_merges: 0 -2023/11/02-13:17:00.665145 8055427840 Options.optimize_filters_for_hits: 0 -2023/11/02-13:17:00.665146 8055427840 Options.paranoid_file_checks: 0 -2023/11/02-13:17:00.665147 8055427840 Options.force_consistency_checks: 1 -2023/11/02-13:17:00.665148 8055427840 Options.report_bg_io_stats: 0 -2023/11/02-13:17:00.665149 8055427840 Options.ttl: 2592000 -2023/11/02-13:17:00.665150 8055427840 Options.periodic_compaction_seconds: 0 -2023/11/02-13:17:00.665151 8055427840 Options.preclude_last_level_data_seconds: 0 -2023/11/02-13:17:00.665151 8055427840 Options.preserve_internal_time_seconds: 0 -2023/11/02-13:17:00.665152 8055427840 Options.enable_blob_files: false -2023/11/02-13:17:00.665153 8055427840 Options.min_blob_size: 0 -2023/11/02-13:17:00.665154 8055427840 Options.blob_file_size: 268435456 -2023/11/02-13:17:00.665155 8055427840 Options.blob_compression_type: NoCompression -2023/11/02-13:17:00.665156 8055427840 Options.enable_blob_garbage_collection: false -2023/11/02-13:17:00.665157 8055427840 Options.blob_garbage_collection_age_cutoff: 0.250000 -2023/11/02-13:17:00.665158 8055427840 Options.blob_garbage_collection_force_threshold: 1.000000 -2023/11/02-13:17:00.665159 8055427840 Options.blob_compaction_readahead_size: 0 -2023/11/02-13:17:00.665160 8055427840 Options.blob_file_starting_level: 0 -2023/11/02-13:17:00.665161 8055427840 Options.experimental_mempurge_threshold: 0.000000 -2023/11/02-13:17:00.666105 8055427840 [db/version_set.cc:5713] Recovered from manifest file:./test-data-mainnet-10m-15/rocks_txn_idx_db/MANIFEST-000014 succeeded,manifest_file_number is 14, next_file_number is 16, last_sequence is 5, log_number is 10,prev_log_number is 0,max_column_family is 0,min_log_number_to_keep is 5 -2023/11/02-13:17:00.666109 8055427840 [db/version_set.cc:5722] Column family [default] (ID 0), log number is 10 -2023/11/02-13:17:00.666162 8055427840 [db/db_impl/db_impl_open.cc:537] DB ID: 68030351-9558-4d6e-aa76-818928bc21b6 -2023/11/02-13:17:00.666313 8055427840 EVENT_LOG_v1 {"time_micros": 1698956220666308, "job": 1, "event": "recovery_started", "wal_files": [9, 13]} -2023/11/02-13:17:00.666316 8055427840 [db/db_impl/db_impl_open.cc:1018] Skipping log #9 since it is older than min log to keep #10 -2023/11/02-13:17:00.666318 8055427840 [db/db_impl/db_impl_open.cc:1031] Recovering log #13 mode 2 -2023/11/02-13:17:00.666390 8055427840 EVENT_LOG_v1 {"time_micros": 1698956220666388, "job": 1, "event": "recovery_finished"} -2023/11/02-13:17:00.666510 8055427840 [db/version_set.cc:5180] Creating manifest 18 -2023/11/02-13:17:00.670027 8055427840 [db/db_impl/db_impl_open.cc:1977] SstFileManager instance 0x11483dd20 -2023/11/02-13:17:00.670088 8055427840 DB pointer 0x117d50c00 -2023/11/02-13:17:00.670312 6127726592 [db/db_impl/db_impl.cc:1085] ------- DUMPING STATS ------- -2023/11/02-13:17:00.670317 6127726592 [db/db_impl/db_impl.cc:1086] -** DB Stats ** -Uptime(secs): 0.0 total, 0.0 interval -Cumulative writes: 0 writes, 0 keys, 0 commit groups, 0.0 writes per commit group, ingest: 0.00 GB, 0.00 MB/s -Cumulative WAL: 0 writes, 0 syncs, 0.00 writes per sync, written: 0.00 GB, 0.00 MB/s -Cumulative stall: 00:00:0.000 H:M:S, 0.0 percent -Interval writes: 0 writes, 0 keys, 0 commit groups, 0.0 writes per commit group, ingest: 0.00 MB, 0.00 MB/s -Interval WAL: 0 writes, 0 syncs, 0.00 writes per sync, written: 0.00 GB, 0.00 MB/s -Interval stall: 00:00:0.000 H:M:S, 0.0 percent -Write Stall (count): write-buffer-manager-limit-stops: 0, -** Compaction Stats [default] ** -Level Files Size Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) CompMergeCPU(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop Rblob(GB) Wblob(GB) ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - L0 1/0 2.36 KB 0.2 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00 0.00 0 0.000 0 0 0.0 0.0 - Sum 1/0 2.36 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00 0.00 0 0.000 0 0 0.0 0.0 - Int 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00 0.00 0 0.000 0 0 0.0 0.0 - -** Compaction Stats [default] ** -Priority Files Size Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) CompMergeCPU(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop Rblob(GB) Wblob(GB) ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - -Blob file count: 0, total size: 0.0 GB, garbage size: 0.0 GB, space amp: 0.0 - -Uptime(secs): 0.0 total, 0.0 interval -Flush(GB): cumulative 0.000, interval 0.000 -AddFile(GB): cumulative 0.000, interval 0.000 -AddFile(Total Files): cumulative 0, interval 0 -AddFile(L0 Files): cumulative 0, interval 0 -AddFile(Keys): cumulative 0, interval 0 -Cumulative compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds -Interval compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds -Write Stall (count): cf-l0-file-count-limit-delays-with-ongoing-compaction: 0, cf-l0-file-count-limit-stops-with-ongoing-compaction: 0, l0-file-count-limit-delays: 0, l0-file-count-limit-stops: 0, memtable-limit-delays: 0, memtable-limit-stops: 0, pending-compaction-bytes-delays: 0, pending-compaction-bytes-stops: 0, total-delays: 0, total-stops: 0, Block cache LRUCache@0x600002627798#20324 capacity: 8.00 MB usage: 0.08 KB table_size: 256 occupancy: 87 collections: 1 last_copies: 0 last_secs: 6.1e-05 secs_since: 0 -Block cache entry stats(count,size,portion): Misc(1,0.00 KB,0%) - -** File Read Latency Histogram By Level [default] ** -2023/11/02-13:17:01.414265 8055427840 [db/db_impl/db_impl.cc:490] Shutdown: canceling all background work -2023/11/02-13:17:01.414681 8055427840 [db/db_impl/db_impl.cc:692] Shutdown complete diff --git a/aptos-move/aptos-e2e-comparison-testing/test-data-mainnet-10m-15/rocks_txn_idx_db/LOG.old.1698910458082437 b/aptos-move/aptos-e2e-comparison-testing/test-data-mainnet-10m-15/rocks_txn_idx_db/LOG.old.1698910458082437 deleted file mode 100644 index ec4a5b94a361d..0000000000000 --- a/aptos-move/aptos-e2e-comparison-testing/test-data-mainnet-10m-15/rocks_txn_idx_db/LOG.old.1698910458082437 +++ /dev/null @@ -1,278 +0,0 @@ -2023/11/02-00:31:27.191544 8055427840 RocksDB version: 8.1.1 -2023/11/02-00:31:27.192301 8055427840 Compile date 2023-04-06 16:38:52 -2023/11/02-00:31:27.192304 8055427840 DB SUMMARY -2023/11/02-00:31:27.192305 8055427840 DB Session ID: ZA63LMYL22FIAA8L51WL -2023/11/02-00:31:27.192355 8055427840 SST files in ./test-data-mainnet-10m-15/rocks_txn_idx_db dir, Total Num: 0, files: -2023/11/02-00:31:27.192358 8055427840 Write Ahead Log file in ./test-data-mainnet-10m-15/rocks_txn_idx_db: -2023/11/02-00:31:27.192359 8055427840 Options.error_if_exists: 0 -2023/11/02-00:31:27.192360 8055427840 Options.create_if_missing: 1 -2023/11/02-00:31:27.192361 8055427840 Options.paranoid_checks: 1 -2023/11/02-00:31:27.192362 8055427840 Options.flush_verify_memtable_count: 1 -2023/11/02-00:31:27.192363 8055427840 Options.track_and_verify_wals_in_manifest: 0 -2023/11/02-00:31:27.192364 8055427840 Options.verify_sst_unique_id_in_manifest: 1 -2023/11/02-00:31:27.192365 8055427840 Options.env: 0x1056665f8 -2023/11/02-00:31:27.192366 8055427840 Options.fs: PosixFileSystem -2023/11/02-00:31:27.192367 8055427840 Options.info_log: 0x131804c38 -2023/11/02-00:31:27.192368 8055427840 Options.max_file_opening_threads: 16 -2023/11/02-00:31:27.192369 8055427840 Options.statistics: 0x0 -2023/11/02-00:31:27.192370 8055427840 Options.use_fsync: 0 -2023/11/02-00:31:27.192371 8055427840 Options.max_log_file_size: 0 -2023/11/02-00:31:27.192372 8055427840 Options.max_manifest_file_size: 1073741824 -2023/11/02-00:31:27.192373 8055427840 Options.log_file_time_to_roll: 0 -2023/11/02-00:31:27.192374 8055427840 Options.keep_log_file_num: 1000 -2023/11/02-00:31:27.192375 8055427840 Options.recycle_log_file_num: 0 -2023/11/02-00:31:27.192375 8055427840 Options.allow_fallocate: 1 -2023/11/02-00:31:27.192376 8055427840 Options.allow_mmap_reads: 0 -2023/11/02-00:31:27.192377 8055427840 Options.allow_mmap_writes: 0 -2023/11/02-00:31:27.192378 8055427840 Options.use_direct_reads: 0 -2023/11/02-00:31:27.192379 8055427840 Options.use_direct_io_for_flush_and_compaction: 0 -2023/11/02-00:31:27.192380 8055427840 Options.create_missing_column_families: 0 -2023/11/02-00:31:27.192381 8055427840 Options.db_log_dir: -2023/11/02-00:31:27.192382 8055427840 Options.wal_dir: -2023/11/02-00:31:27.192383 8055427840 Options.table_cache_numshardbits: 6 -2023/11/02-00:31:27.192384 8055427840 Options.WAL_ttl_seconds: 0 -2023/11/02-00:31:27.192384 8055427840 Options.WAL_size_limit_MB: 0 -2023/11/02-00:31:27.192385 8055427840 Options.max_write_batch_group_size_bytes: 1048576 -2023/11/02-00:31:27.192386 8055427840 Options.manifest_preallocation_size: 4194304 -2023/11/02-00:31:27.192387 8055427840 Options.is_fd_close_on_exec: 1 -2023/11/02-00:31:27.192388 8055427840 Options.advise_random_on_open: 1 -2023/11/02-00:31:27.192389 8055427840 Options.db_write_buffer_size: 0 -2023/11/02-00:31:27.192390 8055427840 Options.write_buffer_manager: 0x6000039b4000 -2023/11/02-00:31:27.192391 8055427840 Options.access_hint_on_compaction_start: 1 -2023/11/02-00:31:27.192392 8055427840 Options.random_access_max_buffer_size: 1048576 -2023/11/02-00:31:27.192393 8055427840 Options.use_adaptive_mutex: 0 -2023/11/02-00:31:27.192394 8055427840 Options.rate_limiter: 0x0 -2023/11/02-00:31:27.192395 8055427840 Options.sst_file_manager.rate_bytes_per_sec: 0 -2023/11/02-00:31:27.192396 8055427840 Options.wal_recovery_mode: 2 -2023/11/02-00:31:27.192397 8055427840 Options.enable_thread_tracking: 0 -2023/11/02-00:31:27.192398 8055427840 Options.enable_pipelined_write: 0 -2023/11/02-00:31:27.192399 8055427840 Options.unordered_write: 0 -2023/11/02-00:31:27.192399 8055427840 Options.allow_concurrent_memtable_write: 1 -2023/11/02-00:31:27.192400 8055427840 Options.enable_write_thread_adaptive_yield: 1 -2023/11/02-00:31:27.192401 8055427840 Options.write_thread_max_yield_usec: 100 -2023/11/02-00:31:27.192402 8055427840 Options.write_thread_slow_yield_usec: 3 -2023/11/02-00:31:27.192403 8055427840 Options.row_cache: None -2023/11/02-00:31:27.192404 8055427840 Options.wal_filter: None -2023/11/02-00:31:27.192405 8055427840 Options.avoid_flush_during_recovery: 0 -2023/11/02-00:31:27.192406 8055427840 Options.allow_ingest_behind: 0 -2023/11/02-00:31:27.192407 8055427840 Options.two_write_queues: 0 -2023/11/02-00:31:27.192408 8055427840 Options.manual_wal_flush: 0 -2023/11/02-00:31:27.192409 8055427840 Options.wal_compression: 0 -2023/11/02-00:31:27.192410 8055427840 Options.atomic_flush: 0 -2023/11/02-00:31:27.192410 8055427840 Options.avoid_unnecessary_blocking_io: 0 -2023/11/02-00:31:27.192411 8055427840 Options.persist_stats_to_disk: 0 -2023/11/02-00:31:27.192412 8055427840 Options.write_dbid_to_manifest: 0 -2023/11/02-00:31:27.192413 8055427840 Options.log_readahead_size: 0 -2023/11/02-00:31:27.192414 8055427840 Options.file_checksum_gen_factory: Unknown -2023/11/02-00:31:27.192425 8055427840 Options.best_efforts_recovery: 0 -2023/11/02-00:31:27.192426 8055427840 Options.max_bgerror_resume_count: 2147483647 -2023/11/02-00:31:27.192427 8055427840 Options.bgerror_resume_retry_interval: 1000000 -2023/11/02-00:31:27.192428 8055427840 Options.allow_data_in_errors: 0 -2023/11/02-00:31:27.192429 8055427840 Options.db_host_id: __hostname__ -2023/11/02-00:31:27.192430 8055427840 Options.enforce_single_del_contracts: true -2023/11/02-00:31:27.192431 8055427840 Options.max_background_jobs: 2 -2023/11/02-00:31:27.192432 8055427840 Options.max_background_compactions: -1 -2023/11/02-00:31:27.192432 8055427840 Options.max_subcompactions: 1 -2023/11/02-00:31:27.192433 8055427840 Options.avoid_flush_during_shutdown: 0 -2023/11/02-00:31:27.192434 8055427840 Options.writable_file_max_buffer_size: 1048576 -2023/11/02-00:31:27.192435 8055427840 Options.delayed_write_rate : 16777216 -2023/11/02-00:31:27.192436 8055427840 Options.max_total_wal_size: 0 -2023/11/02-00:31:27.192437 8055427840 Options.delete_obsolete_files_period_micros: 21600000000 -2023/11/02-00:31:27.192438 8055427840 Options.stats_dump_period_sec: 600 -2023/11/02-00:31:27.192439 8055427840 Options.stats_persist_period_sec: 600 -2023/11/02-00:31:27.192440 8055427840 Options.stats_history_buffer_size: 1048576 -2023/11/02-00:31:27.192441 8055427840 Options.max_open_files: -1 -2023/11/02-00:31:27.192441 8055427840 Options.bytes_per_sync: 0 -2023/11/02-00:31:27.192442 8055427840 Options.wal_bytes_per_sync: 0 -2023/11/02-00:31:27.192443 8055427840 Options.strict_bytes_per_sync: 0 -2023/11/02-00:31:27.192444 8055427840 Options.compaction_readahead_size: 0 -2023/11/02-00:31:27.192445 8055427840 Options.max_background_flushes: -1 -2023/11/02-00:31:27.192446 8055427840 Compression algorithms supported: -2023/11/02-00:31:27.192458 8055427840 kZSTD supported: 1 -2023/11/02-00:31:27.192459 8055427840 kZlibCompression supported: 1 -2023/11/02-00:31:27.192461 8055427840 kXpressCompression supported: 0 -2023/11/02-00:31:27.192462 8055427840 kSnappyCompression supported: 1 -2023/11/02-00:31:27.192463 8055427840 kZSTDNotFinalCompression supported: 1 -2023/11/02-00:31:27.192464 8055427840 kLZ4HCCompression supported: 1 -2023/11/02-00:31:27.192465 8055427840 kLZ4Compression supported: 1 -2023/11/02-00:31:27.192466 8055427840 kBZip2Compression supported: 1 -2023/11/02-00:31:27.192471 8055427840 Fast CRC32 supported: Supported on Arm64 -2023/11/02-00:31:27.192472 8055427840 DMutex implementation: pthread_mutex_t -2023/11/02-00:31:27.192803 8055427840 [db/db_impl/db_impl_open.cc:315] Creating manifest 1 -2023/11/02-00:31:27.193267 8055427840 [db/version_set.cc:5662] Recovering from manifest file: ./test-data-mainnet-10m-15/rocks_txn_idx_db/MANIFEST-000001 -2023/11/02-00:31:27.193518 8055427840 [db/column_family.cc:621] --------------- Options for column family [default]: -2023/11/02-00:31:27.193521 8055427840 Options.comparator: leveldb.BytewiseComparator -2023/11/02-00:31:27.193522 8055427840 Options.merge_operator: None -2023/11/02-00:31:27.193523 8055427840 Options.compaction_filter: None -2023/11/02-00:31:27.193524 8055427840 Options.compaction_filter_factory: None -2023/11/02-00:31:27.193525 8055427840 Options.sst_partitioner_factory: None -2023/11/02-00:31:27.193526 8055427840 Options.memtable_factory: SkipListFactory -2023/11/02-00:31:27.193527 8055427840 Options.table_factory: BlockBasedTable -2023/11/02-00:31:27.193552 8055427840 table_factory options: flush_block_policy_factory: FlushBlockBySizePolicyFactory (0x6000002bc2a0) - cache_index_and_filter_blocks: 0 - cache_index_and_filter_blocks_with_high_priority: 1 - pin_l0_filter_and_index_blocks_in_cache: 0 - pin_top_level_index_and_filter: 1 - index_type: 0 - data_block_index_type: 0 - index_shortening: 1 - data_block_hash_table_util_ratio: 0.750000 - checksum: 4 - no_block_cache: 0 - block_cache: 0x6000037b40d8 - block_cache_name: LRUCache - block_cache_options: - capacity : 8388608 - num_shard_bits : 4 - strict_capacity_limit : 0 - memory_allocator : None - high_pri_pool_ratio: 0.000 - low_pri_pool_ratio: 0.000 - persistent_cache: 0x0 - block_size: 4096 - block_size_deviation: 10 - block_restart_interval: 16 - index_block_restart_interval: 1 - metadata_block_size: 4096 - partition_filters: 0 - use_delta_encoding: 1 - filter_policy: nullptr - whole_key_filtering: 1 - verify_compression: 0 - read_amp_bytes_per_bit: 0 - format_version: 5 - enable_index_compression: 1 - block_align: 0 - max_auto_readahead_size: 262144 - prepopulate_block_cache: 0 - initial_auto_readahead_size: 8192 - num_file_reads_for_auto_readahead: 2 -2023/11/02-00:31:27.193554 8055427840 Options.write_buffer_size: 67108864 -2023/11/02-00:31:27.193555 8055427840 Options.max_write_buffer_number: 2 -2023/11/02-00:31:27.193556 8055427840 Options.compression: Snappy -2023/11/02-00:31:27.193557 8055427840 Options.bottommost_compression: Disabled -2023/11/02-00:31:27.193558 8055427840 Options.prefix_extractor: nullptr -2023/11/02-00:31:27.193558 8055427840 Options.memtable_insert_with_hint_prefix_extractor: nullptr -2023/11/02-00:31:27.193559 8055427840 Options.num_levels: 7 -2023/11/02-00:31:27.193560 8055427840 Options.min_write_buffer_number_to_merge: 1 -2023/11/02-00:31:27.193561 8055427840 Options.max_write_buffer_number_to_maintain: 0 -2023/11/02-00:31:27.193562 8055427840 Options.max_write_buffer_size_to_maintain: 0 -2023/11/02-00:31:27.193563 8055427840 Options.bottommost_compression_opts.window_bits: -14 -2023/11/02-00:31:27.193564 8055427840 Options.bottommost_compression_opts.level: 32767 -2023/11/02-00:31:27.193565 8055427840 Options.bottommost_compression_opts.strategy: 0 -2023/11/02-00:31:27.193566 8055427840 Options.bottommost_compression_opts.max_dict_bytes: 0 -2023/11/02-00:31:27.193566 8055427840 Options.bottommost_compression_opts.zstd_max_train_bytes: 0 -2023/11/02-00:31:27.193567 8055427840 Options.bottommost_compression_opts.parallel_threads: 1 -2023/11/02-00:31:27.193568 8055427840 Options.bottommost_compression_opts.enabled: false -2023/11/02-00:31:27.193569 8055427840 Options.bottommost_compression_opts.max_dict_buffer_bytes: 0 -2023/11/02-00:31:27.193570 8055427840 Options.bottommost_compression_opts.use_zstd_dict_trainer: true -2023/11/02-00:31:27.193571 8055427840 Options.compression_opts.window_bits: -14 -2023/11/02-00:31:27.193572 8055427840 Options.compression_opts.level: 32767 -2023/11/02-00:31:27.193573 8055427840 Options.compression_opts.strategy: 0 -2023/11/02-00:31:27.193574 8055427840 Options.compression_opts.max_dict_bytes: 0 -2023/11/02-00:31:27.193574 8055427840 Options.compression_opts.zstd_max_train_bytes: 0 -2023/11/02-00:31:27.193575 8055427840 Options.compression_opts.use_zstd_dict_trainer: true -2023/11/02-00:31:27.193576 8055427840 Options.compression_opts.parallel_threads: 1 -2023/11/02-00:31:27.193577 8055427840 Options.compression_opts.enabled: false -2023/11/02-00:31:27.193578 8055427840 Options.compression_opts.max_dict_buffer_bytes: 0 -2023/11/02-00:31:27.193579 8055427840 Options.level0_file_num_compaction_trigger: 4 -2023/11/02-00:31:27.193580 8055427840 Options.level0_slowdown_writes_trigger: 20 -2023/11/02-00:31:27.193581 8055427840 Options.level0_stop_writes_trigger: 36 -2023/11/02-00:31:27.193582 8055427840 Options.target_file_size_base: 67108864 -2023/11/02-00:31:27.193582 8055427840 Options.target_file_size_multiplier: 1 -2023/11/02-00:31:27.193583 8055427840 Options.max_bytes_for_level_base: 268435456 -2023/11/02-00:31:27.193584 8055427840 Options.level_compaction_dynamic_level_bytes: 0 -2023/11/02-00:31:27.193585 8055427840 Options.max_bytes_for_level_multiplier: 10.000000 -2023/11/02-00:31:27.193586 8055427840 Options.max_bytes_for_level_multiplier_addtl[0]: 1 -2023/11/02-00:31:27.193587 8055427840 Options.max_bytes_for_level_multiplier_addtl[1]: 1 -2023/11/02-00:31:27.193588 8055427840 Options.max_bytes_for_level_multiplier_addtl[2]: 1 -2023/11/02-00:31:27.193589 8055427840 Options.max_bytes_for_level_multiplier_addtl[3]: 1 -2023/11/02-00:31:27.193590 8055427840 Options.max_bytes_for_level_multiplier_addtl[4]: 1 -2023/11/02-00:31:27.193591 8055427840 Options.max_bytes_for_level_multiplier_addtl[5]: 1 -2023/11/02-00:31:27.193591 8055427840 Options.max_bytes_for_level_multiplier_addtl[6]: 1 -2023/11/02-00:31:27.193592 8055427840 Options.max_sequential_skip_in_iterations: 8 -2023/11/02-00:31:27.193593 8055427840 Options.max_compaction_bytes: 1677721600 -2023/11/02-00:31:27.193594 8055427840 Options.ignore_max_compaction_bytes_for_input: true -2023/11/02-00:31:27.193595 8055427840 Options.arena_block_size: 1048576 -2023/11/02-00:31:27.193596 8055427840 Options.soft_pending_compaction_bytes_limit: 68719476736 -2023/11/02-00:31:27.193597 8055427840 Options.hard_pending_compaction_bytes_limit: 274877906944 -2023/11/02-00:31:27.193597 8055427840 Options.disable_auto_compactions: 0 -2023/11/02-00:31:27.193599 8055427840 Options.compaction_style: kCompactionStyleLevel -2023/11/02-00:31:27.193601 8055427840 Options.compaction_pri: kMinOverlappingRatio -2023/11/02-00:31:27.193601 8055427840 Options.compaction_options_universal.size_ratio: 1 -2023/11/02-00:31:27.193602 8055427840 Options.compaction_options_universal.min_merge_width: 2 -2023/11/02-00:31:27.193603 8055427840 Options.compaction_options_universal.max_merge_width: 4294967295 -2023/11/02-00:31:27.193604 8055427840 Options.compaction_options_universal.max_size_amplification_percent: 200 -2023/11/02-00:31:27.193605 8055427840 Options.compaction_options_universal.compression_size_percent: -1 -2023/11/02-00:31:27.193607 8055427840 Options.compaction_options_universal.stop_style: kCompactionStopStyleTotalSize -2023/11/02-00:31:27.193608 8055427840 Options.compaction_options_fifo.max_table_files_size: 1073741824 -2023/11/02-00:31:27.193610 8055427840 Options.compaction_options_fifo.allow_compaction: 0 -2023/11/02-00:31:27.193612 8055427840 Options.table_properties_collectors: -2023/11/02-00:31:27.193612 8055427840 Options.inplace_update_support: 0 -2023/11/02-00:31:27.193613 8055427840 Options.inplace_update_num_locks: 10000 -2023/11/02-00:31:27.193614 8055427840 Options.memtable_prefix_bloom_size_ratio: 0.000000 -2023/11/02-00:31:27.193615 8055427840 Options.memtable_whole_key_filtering: 0 -2023/11/02-00:31:27.193616 8055427840 Options.memtable_huge_page_size: 0 -2023/11/02-00:31:27.193617 8055427840 Options.bloom_locality: 0 -2023/11/02-00:31:27.193618 8055427840 Options.max_successive_merges: 0 -2023/11/02-00:31:27.193619 8055427840 Options.optimize_filters_for_hits: 0 -2023/11/02-00:31:27.193619 8055427840 Options.paranoid_file_checks: 0 -2023/11/02-00:31:27.193620 8055427840 Options.force_consistency_checks: 1 -2023/11/02-00:31:27.193621 8055427840 Options.report_bg_io_stats: 0 -2023/11/02-00:31:27.193622 8055427840 Options.ttl: 2592000 -2023/11/02-00:31:27.193623 8055427840 Options.periodic_compaction_seconds: 0 -2023/11/02-00:31:27.193624 8055427840 Options.preclude_last_level_data_seconds: 0 -2023/11/02-00:31:27.193625 8055427840 Options.preserve_internal_time_seconds: 0 -2023/11/02-00:31:27.193626 8055427840 Options.enable_blob_files: false -2023/11/02-00:31:27.193626 8055427840 Options.min_blob_size: 0 -2023/11/02-00:31:27.193627 8055427840 Options.blob_file_size: 268435456 -2023/11/02-00:31:27.193628 8055427840 Options.blob_compression_type: NoCompression -2023/11/02-00:31:27.193629 8055427840 Options.enable_blob_garbage_collection: false -2023/11/02-00:31:27.193630 8055427840 Options.blob_garbage_collection_age_cutoff: 0.250000 -2023/11/02-00:31:27.193631 8055427840 Options.blob_garbage_collection_force_threshold: 1.000000 -2023/11/02-00:31:27.193632 8055427840 Options.blob_compaction_readahead_size: 0 -2023/11/02-00:31:27.193633 8055427840 Options.blob_file_starting_level: 0 -2023/11/02-00:31:27.193634 8055427840 Options.experimental_mempurge_threshold: 0.000000 -2023/11/02-00:31:27.194427 8055427840 [db/version_set.cc:5713] Recovered from manifest file:./test-data-mainnet-10m-15/rocks_txn_idx_db/MANIFEST-000001 succeeded,manifest_file_number is 1, next_file_number is 3, last_sequence is 0, log_number is 0,prev_log_number is 0,max_column_family is 0,min_log_number_to_keep is 0 -2023/11/02-00:31:27.194437 8055427840 [db/version_set.cc:5722] Column family [default] (ID 0), log number is 0 -2023/11/02-00:31:27.194528 8055427840 [db/db_impl/db_impl_open.cc:537] DB ID: 68030351-9558-4d6e-aa76-818928bc21b6 -2023/11/02-00:31:27.194912 8055427840 [db/version_set.cc:5180] Creating manifest 5 -2023/11/02-00:31:27.197797 8055427840 [db/db_impl/db_impl_open.cc:1977] SstFileManager instance 0x131804e80 -2023/11/02-00:31:27.197849 8055427840 DB pointer 0x13100e000 -2023/11/02-00:31:27.198111 6182547456 [db/db_impl/db_impl.cc:1085] ------- DUMPING STATS ------- -2023/11/02-00:31:27.198115 6182547456 [db/db_impl/db_impl.cc:1086] -** DB Stats ** -Uptime(secs): 0.0 total, 0.0 interval -Cumulative writes: 0 writes, 0 keys, 0 commit groups, 0.0 writes per commit group, ingest: 0.00 GB, 0.00 MB/s -Cumulative WAL: 0 writes, 0 syncs, 0.00 writes per sync, written: 0.00 GB, 0.00 MB/s -Cumulative stall: 00:00:0.000 H:M:S, 0.0 percent -Interval writes: 0 writes, 0 keys, 0 commit groups, 0.0 writes per commit group, ingest: 0.00 MB, 0.00 MB/s -Interval WAL: 0 writes, 0 syncs, 0.00 writes per sync, written: 0.00 GB, 0.00 MB/s -Interval stall: 00:00:0.000 H:M:S, 0.0 percent -Write Stall (count): write-buffer-manager-limit-stops: 0, -** Compaction Stats [default] ** -Level Files Size Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) CompMergeCPU(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop Rblob(GB) Wblob(GB) ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Sum 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00 0.00 0 0.000 0 0 0.0 0.0 - Int 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00 0.00 0 0.000 0 0 0.0 0.0 - -** Compaction Stats [default] ** -Priority Files Size Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) CompMergeCPU(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop Rblob(GB) Wblob(GB) ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - -Blob file count: 0, total size: 0.0 GB, garbage size: 0.0 GB, space amp: 0.0 - -Uptime(secs): 0.0 total, 0.0 interval -Flush(GB): cumulative 0.000, interval 0.000 -AddFile(GB): cumulative 0.000, interval 0.000 -AddFile(Total Files): cumulative 0, interval 0 -AddFile(L0 Files): cumulative 0, interval 0 -AddFile(Keys): cumulative 0, interval 0 -Cumulative compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds -Interval compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds -Write Stall (count): cf-l0-file-count-limit-delays-with-ongoing-compaction: 0, cf-l0-file-count-limit-stops-with-ongoing-compaction: 0, l0-file-count-limit-delays: 0, l0-file-count-limit-stops: 0, memtable-limit-delays: 0, memtable-limit-stops: 0, pending-compaction-bytes-delays: 0, pending-compaction-bytes-stops: 0, total-delays: 0, total-stops: 0, Block cache LRUCache@0x6000037b40d8#81515 capacity: 8.00 MB usage: 0.08 KB table_size: 256 occupancy: 87 collections: 1 last_copies: 0 last_secs: 6.3e-05 secs_since: 0 -Block cache entry stats(count,size,portion): Misc(1,0.00 KB,0%) - -** File Read Latency Histogram By Level [default] ** -2023/11/02-00:31:43.993905 8055427840 [db/db_impl/db_impl.cc:490] Shutdown: canceling all background work -2023/11/02-00:31:43.994367 8055427840 [db/db_impl/db_impl.cc:692] Shutdown complete diff --git a/aptos-move/aptos-e2e-comparison-testing/test-data-mainnet-10m-15/rocks_txn_idx_db/LOG.old.1698956094329658 b/aptos-move/aptos-e2e-comparison-testing/test-data-mainnet-10m-15/rocks_txn_idx_db/LOG.old.1698956094329658 deleted file mode 100644 index ab1d63b75c4e6..0000000000000 --- a/aptos-move/aptos-e2e-comparison-testing/test-data-mainnet-10m-15/rocks_txn_idx_db/LOG.old.1698956094329658 +++ /dev/null @@ -1,287 +0,0 @@ -2023/11/02-00:34:18.083113 8055427840 RocksDB version: 8.1.1 -2023/11/02-00:34:18.083632 8055427840 Compile date 2023-04-06 16:38:52 -2023/11/02-00:34:18.083635 8055427840 DB SUMMARY -2023/11/02-00:34:18.083636 8055427840 DB Session ID: QD13XW6AB2MM5DAATVM5 -2023/11/02-00:34:18.083688 8055427840 CURRENT file: CURRENT -2023/11/02-00:34:18.083690 8055427840 IDENTITY file: IDENTITY -2023/11/02-00:34:18.083695 8055427840 MANIFEST file: MANIFEST-000005 size: 66 Bytes -2023/11/02-00:34:18.083708 8055427840 SST files in ./test-data-mainnet-10m-15/rocks_txn_idx_db dir, Total Num: 0, files: -2023/11/02-00:34:18.083710 8055427840 Write Ahead Log file in ./test-data-mainnet-10m-15/rocks_txn_idx_db: 000004.log size: 2188 ; -2023/11/02-00:34:18.083711 8055427840 Options.error_if_exists: 0 -2023/11/02-00:34:18.083712 8055427840 Options.create_if_missing: 1 -2023/11/02-00:34:18.083713 8055427840 Options.paranoid_checks: 1 -2023/11/02-00:34:18.083714 8055427840 Options.flush_verify_memtable_count: 1 -2023/11/02-00:34:18.083715 8055427840 Options.track_and_verify_wals_in_manifest: 0 -2023/11/02-00:34:18.083716 8055427840 Options.verify_sst_unique_id_in_manifest: 1 -2023/11/02-00:34:18.083717 8055427840 Options.env: 0x104d125f8 -2023/11/02-00:34:18.083718 8055427840 Options.fs: PosixFileSystem -2023/11/02-00:34:18.083719 8055427840 Options.info_log: 0x150f09828 -2023/11/02-00:34:18.083720 8055427840 Options.max_file_opening_threads: 16 -2023/11/02-00:34:18.083721 8055427840 Options.statistics: 0x0 -2023/11/02-00:34:18.083722 8055427840 Options.use_fsync: 0 -2023/11/02-00:34:18.083723 8055427840 Options.max_log_file_size: 0 -2023/11/02-00:34:18.083724 8055427840 Options.max_manifest_file_size: 1073741824 -2023/11/02-00:34:18.083724 8055427840 Options.log_file_time_to_roll: 0 -2023/11/02-00:34:18.083725 8055427840 Options.keep_log_file_num: 1000 -2023/11/02-00:34:18.083726 8055427840 Options.recycle_log_file_num: 0 -2023/11/02-00:34:18.083727 8055427840 Options.allow_fallocate: 1 -2023/11/02-00:34:18.083728 8055427840 Options.allow_mmap_reads: 0 -2023/11/02-00:34:18.083729 8055427840 Options.allow_mmap_writes: 0 -2023/11/02-00:34:18.083730 8055427840 Options.use_direct_reads: 0 -2023/11/02-00:34:18.083731 8055427840 Options.use_direct_io_for_flush_and_compaction: 0 -2023/11/02-00:34:18.083732 8055427840 Options.create_missing_column_families: 0 -2023/11/02-00:34:18.083733 8055427840 Options.db_log_dir: -2023/11/02-00:34:18.083733 8055427840 Options.wal_dir: -2023/11/02-00:34:18.083734 8055427840 Options.table_cache_numshardbits: 6 -2023/11/02-00:34:18.083735 8055427840 Options.WAL_ttl_seconds: 0 -2023/11/02-00:34:18.083736 8055427840 Options.WAL_size_limit_MB: 0 -2023/11/02-00:34:18.083737 8055427840 Options.max_write_batch_group_size_bytes: 1048576 -2023/11/02-00:34:18.083738 8055427840 Options.manifest_preallocation_size: 4194304 -2023/11/02-00:34:18.083739 8055427840 Options.is_fd_close_on_exec: 1 -2023/11/02-00:34:18.083740 8055427840 Options.advise_random_on_open: 1 -2023/11/02-00:34:18.083741 8055427840 Options.db_write_buffer_size: 0 -2023/11/02-00:34:18.083741 8055427840 Options.write_buffer_manager: 0x600001e90750 -2023/11/02-00:34:18.083742 8055427840 Options.access_hint_on_compaction_start: 1 -2023/11/02-00:34:18.083743 8055427840 Options.random_access_max_buffer_size: 1048576 -2023/11/02-00:34:18.083744 8055427840 Options.use_adaptive_mutex: 0 -2023/11/02-00:34:18.083745 8055427840 Options.rate_limiter: 0x0 -2023/11/02-00:34:18.083746 8055427840 Options.sst_file_manager.rate_bytes_per_sec: 0 -2023/11/02-00:34:18.083747 8055427840 Options.wal_recovery_mode: 2 -2023/11/02-00:34:18.083748 8055427840 Options.enable_thread_tracking: 0 -2023/11/02-00:34:18.083749 8055427840 Options.enable_pipelined_write: 0 -2023/11/02-00:34:18.083750 8055427840 Options.unordered_write: 0 -2023/11/02-00:34:18.083751 8055427840 Options.allow_concurrent_memtable_write: 1 -2023/11/02-00:34:18.083752 8055427840 Options.enable_write_thread_adaptive_yield: 1 -2023/11/02-00:34:18.083753 8055427840 Options.write_thread_max_yield_usec: 100 -2023/11/02-00:34:18.083754 8055427840 Options.write_thread_slow_yield_usec: 3 -2023/11/02-00:34:18.083754 8055427840 Options.row_cache: None -2023/11/02-00:34:18.083755 8055427840 Options.wal_filter: None -2023/11/02-00:34:18.083756 8055427840 Options.avoid_flush_during_recovery: 0 -2023/11/02-00:34:18.083757 8055427840 Options.allow_ingest_behind: 0 -2023/11/02-00:34:18.083758 8055427840 Options.two_write_queues: 0 -2023/11/02-00:34:18.083759 8055427840 Options.manual_wal_flush: 0 -2023/11/02-00:34:18.083760 8055427840 Options.wal_compression: 0 -2023/11/02-00:34:18.083761 8055427840 Options.atomic_flush: 0 -2023/11/02-00:34:18.083762 8055427840 Options.avoid_unnecessary_blocking_io: 0 -2023/11/02-00:34:18.083763 8055427840 Options.persist_stats_to_disk: 0 -2023/11/02-00:34:18.083764 8055427840 Options.write_dbid_to_manifest: 0 -2023/11/02-00:34:18.083765 8055427840 Options.log_readahead_size: 0 -2023/11/02-00:34:18.083766 8055427840 Options.file_checksum_gen_factory: Unknown -2023/11/02-00:34:18.083777 8055427840 Options.best_efforts_recovery: 0 -2023/11/02-00:34:18.083778 8055427840 Options.max_bgerror_resume_count: 2147483647 -2023/11/02-00:34:18.083779 8055427840 Options.bgerror_resume_retry_interval: 1000000 -2023/11/02-00:34:18.083780 8055427840 Options.allow_data_in_errors: 0 -2023/11/02-00:34:18.083781 8055427840 Options.db_host_id: __hostname__ -2023/11/02-00:34:18.083782 8055427840 Options.enforce_single_del_contracts: true -2023/11/02-00:34:18.083783 8055427840 Options.max_background_jobs: 2 -2023/11/02-00:34:18.083784 8055427840 Options.max_background_compactions: -1 -2023/11/02-00:34:18.083785 8055427840 Options.max_subcompactions: 1 -2023/11/02-00:34:18.083786 8055427840 Options.avoid_flush_during_shutdown: 0 -2023/11/02-00:34:18.083787 8055427840 Options.writable_file_max_buffer_size: 1048576 -2023/11/02-00:34:18.083788 8055427840 Options.delayed_write_rate : 16777216 -2023/11/02-00:34:18.083789 8055427840 Options.max_total_wal_size: 0 -2023/11/02-00:34:18.083789 8055427840 Options.delete_obsolete_files_period_micros: 21600000000 -2023/11/02-00:34:18.083790 8055427840 Options.stats_dump_period_sec: 600 -2023/11/02-00:34:18.083791 8055427840 Options.stats_persist_period_sec: 600 -2023/11/02-00:34:18.083792 8055427840 Options.stats_history_buffer_size: 1048576 -2023/11/02-00:34:18.083793 8055427840 Options.max_open_files: -1 -2023/11/02-00:34:18.083794 8055427840 Options.bytes_per_sync: 0 -2023/11/02-00:34:18.083795 8055427840 Options.wal_bytes_per_sync: 0 -2023/11/02-00:34:18.083796 8055427840 Options.strict_bytes_per_sync: 0 -2023/11/02-00:34:18.083797 8055427840 Options.compaction_readahead_size: 0 -2023/11/02-00:34:18.083798 8055427840 Options.max_background_flushes: -1 -2023/11/02-00:34:18.083799 8055427840 Compression algorithms supported: -2023/11/02-00:34:18.083812 8055427840 kZSTD supported: 1 -2023/11/02-00:34:18.083813 8055427840 kZlibCompression supported: 1 -2023/11/02-00:34:18.083814 8055427840 kXpressCompression supported: 0 -2023/11/02-00:34:18.083815 8055427840 kSnappyCompression supported: 1 -2023/11/02-00:34:18.083816 8055427840 kZSTDNotFinalCompression supported: 1 -2023/11/02-00:34:18.083817 8055427840 kLZ4HCCompression supported: 1 -2023/11/02-00:34:18.083818 8055427840 kLZ4Compression supported: 1 -2023/11/02-00:34:18.083819 8055427840 kBZip2Compression supported: 1 -2023/11/02-00:34:18.083825 8055427840 Fast CRC32 supported: Supported on Arm64 -2023/11/02-00:34:18.083826 8055427840 DMutex implementation: pthread_mutex_t -2023/11/02-00:34:18.083963 8055427840 [db/version_set.cc:5662] Recovering from manifest file: ./test-data-mainnet-10m-15/rocks_txn_idx_db/MANIFEST-000005 -2023/11/02-00:34:18.084209 8055427840 [db/column_family.cc:621] --------------- Options for column family [default]: -2023/11/02-00:34:18.084212 8055427840 Options.comparator: leveldb.BytewiseComparator -2023/11/02-00:34:18.084213 8055427840 Options.merge_operator: None -2023/11/02-00:34:18.084214 8055427840 Options.compaction_filter: None -2023/11/02-00:34:18.084215 8055427840 Options.compaction_filter_factory: None -2023/11/02-00:34:18.084216 8055427840 Options.sst_partitioner_factory: None -2023/11/02-00:34:18.084217 8055427840 Options.memtable_factory: SkipListFactory -2023/11/02-00:34:18.084218 8055427840 Options.table_factory: BlockBasedTable -2023/11/02-00:34:18.084240 8055427840 table_factory options: flush_block_policy_factory: FlushBlockBySizePolicyFactory (0x6000025969c0) - cache_index_and_filter_blocks: 0 - cache_index_and_filter_blocks_with_high_priority: 1 - pin_l0_filter_and_index_blocks_in_cache: 0 - pin_top_level_index_and_filter: 1 - index_type: 0 - data_block_index_type: 0 - index_shortening: 1 - data_block_hash_table_util_ratio: 0.750000 - checksum: 4 - no_block_cache: 0 - block_cache: 0x600001094798 - block_cache_name: LRUCache - block_cache_options: - capacity : 8388608 - num_shard_bits : 4 - strict_capacity_limit : 0 - memory_allocator : None - high_pri_pool_ratio: 0.000 - low_pri_pool_ratio: 0.000 - persistent_cache: 0x0 - block_size: 4096 - block_size_deviation: 10 - block_restart_interval: 16 - index_block_restart_interval: 1 - metadata_block_size: 4096 - partition_filters: 0 - use_delta_encoding: 1 - filter_policy: nullptr - whole_key_filtering: 1 - verify_compression: 0 - read_amp_bytes_per_bit: 0 - format_version: 5 - enable_index_compression: 1 - block_align: 0 - max_auto_readahead_size: 262144 - prepopulate_block_cache: 0 - initial_auto_readahead_size: 8192 - num_file_reads_for_auto_readahead: 2 -2023/11/02-00:34:18.084241 8055427840 Options.write_buffer_size: 67108864 -2023/11/02-00:34:18.084242 8055427840 Options.max_write_buffer_number: 2 -2023/11/02-00:34:18.084244 8055427840 Options.compression: Snappy -2023/11/02-00:34:18.084245 8055427840 Options.bottommost_compression: Disabled -2023/11/02-00:34:18.084246 8055427840 Options.prefix_extractor: nullptr -2023/11/02-00:34:18.084247 8055427840 Options.memtable_insert_with_hint_prefix_extractor: nullptr -2023/11/02-00:34:18.084248 8055427840 Options.num_levels: 7 -2023/11/02-00:34:18.084249 8055427840 Options.min_write_buffer_number_to_merge: 1 -2023/11/02-00:34:18.084250 8055427840 Options.max_write_buffer_number_to_maintain: 0 -2023/11/02-00:34:18.084250 8055427840 Options.max_write_buffer_size_to_maintain: 0 -2023/11/02-00:34:18.084251 8055427840 Options.bottommost_compression_opts.window_bits: -14 -2023/11/02-00:34:18.084252 8055427840 Options.bottommost_compression_opts.level: 32767 -2023/11/02-00:34:18.084253 8055427840 Options.bottommost_compression_opts.strategy: 0 -2023/11/02-00:34:18.084254 8055427840 Options.bottommost_compression_opts.max_dict_bytes: 0 -2023/11/02-00:34:18.084255 8055427840 Options.bottommost_compression_opts.zstd_max_train_bytes: 0 -2023/11/02-00:34:18.084256 8055427840 Options.bottommost_compression_opts.parallel_threads: 1 -2023/11/02-00:34:18.084257 8055427840 Options.bottommost_compression_opts.enabled: false -2023/11/02-00:34:18.084258 8055427840 Options.bottommost_compression_opts.max_dict_buffer_bytes: 0 -2023/11/02-00:34:18.084259 8055427840 Options.bottommost_compression_opts.use_zstd_dict_trainer: true -2023/11/02-00:34:18.084260 8055427840 Options.compression_opts.window_bits: -14 -2023/11/02-00:34:18.084261 8055427840 Options.compression_opts.level: 32767 -2023/11/02-00:34:18.084262 8055427840 Options.compression_opts.strategy: 0 -2023/11/02-00:34:18.084263 8055427840 Options.compression_opts.max_dict_bytes: 0 -2023/11/02-00:34:18.084264 8055427840 Options.compression_opts.zstd_max_train_bytes: 0 -2023/11/02-00:34:18.084265 8055427840 Options.compression_opts.use_zstd_dict_trainer: true -2023/11/02-00:34:18.084266 8055427840 Options.compression_opts.parallel_threads: 1 -2023/11/02-00:34:18.084267 8055427840 Options.compression_opts.enabled: false -2023/11/02-00:34:18.084268 8055427840 Options.compression_opts.max_dict_buffer_bytes: 0 -2023/11/02-00:34:18.084269 8055427840 Options.level0_file_num_compaction_trigger: 4 -2023/11/02-00:34:18.084270 8055427840 Options.level0_slowdown_writes_trigger: 20 -2023/11/02-00:34:18.084271 8055427840 Options.level0_stop_writes_trigger: 36 -2023/11/02-00:34:18.084272 8055427840 Options.target_file_size_base: 67108864 -2023/11/02-00:34:18.084273 8055427840 Options.target_file_size_multiplier: 1 -2023/11/02-00:34:18.084274 8055427840 Options.max_bytes_for_level_base: 268435456 -2023/11/02-00:34:18.084274 8055427840 Options.level_compaction_dynamic_level_bytes: 0 -2023/11/02-00:34:18.084275 8055427840 Options.max_bytes_for_level_multiplier: 10.000000 -2023/11/02-00:34:18.084276 8055427840 Options.max_bytes_for_level_multiplier_addtl[0]: 1 -2023/11/02-00:34:18.084277 8055427840 Options.max_bytes_for_level_multiplier_addtl[1]: 1 -2023/11/02-00:34:18.084278 8055427840 Options.max_bytes_for_level_multiplier_addtl[2]: 1 -2023/11/02-00:34:18.084279 8055427840 Options.max_bytes_for_level_multiplier_addtl[3]: 1 -2023/11/02-00:34:18.084280 8055427840 Options.max_bytes_for_level_multiplier_addtl[4]: 1 -2023/11/02-00:34:18.084281 8055427840 Options.max_bytes_for_level_multiplier_addtl[5]: 1 -2023/11/02-00:34:18.084282 8055427840 Options.max_bytes_for_level_multiplier_addtl[6]: 1 -2023/11/02-00:34:18.084283 8055427840 Options.max_sequential_skip_in_iterations: 8 -2023/11/02-00:34:18.084284 8055427840 Options.max_compaction_bytes: 1677721600 -2023/11/02-00:34:18.084285 8055427840 Options.ignore_max_compaction_bytes_for_input: true -2023/11/02-00:34:18.084286 8055427840 Options.arena_block_size: 1048576 -2023/11/02-00:34:18.084287 8055427840 Options.soft_pending_compaction_bytes_limit: 68719476736 -2023/11/02-00:34:18.084288 8055427840 Options.hard_pending_compaction_bytes_limit: 274877906944 -2023/11/02-00:34:18.084288 8055427840 Options.disable_auto_compactions: 0 -2023/11/02-00:34:18.084290 8055427840 Options.compaction_style: kCompactionStyleLevel -2023/11/02-00:34:18.084292 8055427840 Options.compaction_pri: kMinOverlappingRatio -2023/11/02-00:34:18.084292 8055427840 Options.compaction_options_universal.size_ratio: 1 -2023/11/02-00:34:18.084293 8055427840 Options.compaction_options_universal.min_merge_width: 2 -2023/11/02-00:34:18.084294 8055427840 Options.compaction_options_universal.max_merge_width: 4294967295 -2023/11/02-00:34:18.084295 8055427840 Options.compaction_options_universal.max_size_amplification_percent: 200 -2023/11/02-00:34:18.084296 8055427840 Options.compaction_options_universal.compression_size_percent: -1 -2023/11/02-00:34:18.084298 8055427840 Options.compaction_options_universal.stop_style: kCompactionStopStyleTotalSize -2023/11/02-00:34:18.084300 8055427840 Options.compaction_options_fifo.max_table_files_size: 1073741824 -2023/11/02-00:34:18.084301 8055427840 Options.compaction_options_fifo.allow_compaction: 0 -2023/11/02-00:34:18.084303 8055427840 Options.table_properties_collectors: -2023/11/02-00:34:18.084304 8055427840 Options.inplace_update_support: 0 -2023/11/02-00:34:18.084305 8055427840 Options.inplace_update_num_locks: 10000 -2023/11/02-00:34:18.084305 8055427840 Options.memtable_prefix_bloom_size_ratio: 0.000000 -2023/11/02-00:34:18.084306 8055427840 Options.memtable_whole_key_filtering: 0 -2023/11/02-00:34:18.084307 8055427840 Options.memtable_huge_page_size: 0 -2023/11/02-00:34:18.084308 8055427840 Options.bloom_locality: 0 -2023/11/02-00:34:18.084309 8055427840 Options.max_successive_merges: 0 -2023/11/02-00:34:18.084310 8055427840 Options.optimize_filters_for_hits: 0 -2023/11/02-00:34:18.084311 8055427840 Options.paranoid_file_checks: 0 -2023/11/02-00:34:18.084312 8055427840 Options.force_consistency_checks: 1 -2023/11/02-00:34:18.084312 8055427840 Options.report_bg_io_stats: 0 -2023/11/02-00:34:18.084313 8055427840 Options.ttl: 2592000 -2023/11/02-00:34:18.084314 8055427840 Options.periodic_compaction_seconds: 0 -2023/11/02-00:34:18.084315 8055427840 Options.preclude_last_level_data_seconds: 0 -2023/11/02-00:34:18.084316 8055427840 Options.preserve_internal_time_seconds: 0 -2023/11/02-00:34:18.084317 8055427840 Options.enable_blob_files: false -2023/11/02-00:34:18.084318 8055427840 Options.min_blob_size: 0 -2023/11/02-00:34:18.084319 8055427840 Options.blob_file_size: 268435456 -2023/11/02-00:34:18.084320 8055427840 Options.blob_compression_type: NoCompression -2023/11/02-00:34:18.084320 8055427840 Options.enable_blob_garbage_collection: false -2023/11/02-00:34:18.084321 8055427840 Options.blob_garbage_collection_age_cutoff: 0.250000 -2023/11/02-00:34:18.084322 8055427840 Options.blob_garbage_collection_force_threshold: 1.000000 -2023/11/02-00:34:18.084323 8055427840 Options.blob_compaction_readahead_size: 0 -2023/11/02-00:34:18.084324 8055427840 Options.blob_file_starting_level: 0 -2023/11/02-00:34:18.084325 8055427840 Options.experimental_mempurge_threshold: 0.000000 -2023/11/02-00:34:18.084960 8055427840 [db/version_set.cc:5713] Recovered from manifest file:./test-data-mainnet-10m-15/rocks_txn_idx_db/MANIFEST-000005 succeeded,manifest_file_number is 5, next_file_number is 7, last_sequence is 0, log_number is 0,prev_log_number is 0,max_column_family is 0,min_log_number_to_keep is 0 -2023/11/02-00:34:18.084965 8055427840 [db/version_set.cc:5722] Column family [default] (ID 0), log number is 0 -2023/11/02-00:34:18.085017 8055427840 [db/db_impl/db_impl_open.cc:537] DB ID: 68030351-9558-4d6e-aa76-818928bc21b6 -2023/11/02-00:34:18.085174 8055427840 EVENT_LOG_v1 {"time_micros": 1698910458085169, "job": 1, "event": "recovery_started", "wal_files": [4]} -2023/11/02-00:34:18.085177 8055427840 [db/db_impl/db_impl_open.cc:1031] Recovering log #4 mode 2 -2023/11/02-00:34:18.086121 8055427840 EVENT_LOG_v1 {"time_micros": 1698910458086100, "cf_name": "default", "job": 1, "event": "table_file_creation", "file_number": 8, "file_size": 2413, "file_checksum": "", "file_checksum_func_name": "Unknown", "smallest_seqno": 1, "largest_seqno": 5, "table_properties": {"data_size": 1440, "index_size": 26, "index_partitions": 0, "top_level_index_size": 0, "index_key_is_user_key": 1, "index_value_is_delta_encoded": 1, "filter_size": 0, "raw_key_size": 80, "raw_average_key_size": 16, "raw_value_size": 2033, "raw_average_value_size": 406, "num_data_blocks": 1, "num_entries": 5, "num_filter_entries": 0, "num_deletions": 0, "num_merge_operands": 0, "num_range_deletions": 0, "format_version": 0, "fixed_key_len": 0, "filter_policy": "", "column_family_name": "default", "column_family_id": 0, "comparator": "leveldb.BytewiseComparator", "merge_operator": "nullptr", "prefix_extractor_name": "nullptr", "property_collectors": "[]", "compression": "Snappy", "compression_options": "window_bits=-14; level=32767; strategy=0; max_dict_bytes=0; zstd_max_train_bytes=0; enabled=0; max_dict_buffer_bytes=0; use_zstd_dict_trainer=1; ", "creation_time": 1698910458, "oldest_key_time": 0, "file_creation_time": 0, "slow_compression_estimated_data_size": 0, "fast_compression_estimated_data_size": 0, "db_id": "68030351-9558-4d6e-aa76-818928bc21b6", "db_session_id": "QD13XW6AB2MM5DAATVM5", "orig_file_number": 8, "seqno_to_time_mapping": "N/A"}} -2023/11/02-00:34:18.086205 8055427840 EVENT_LOG_v1 {"time_micros": 1698910458086203, "job": 1, "event": "recovery_finished"} -2023/11/02-00:34:18.086339 8055427840 [db/version_set.cc:5180] Creating manifest 10 -2023/11/02-00:34:18.089165 8055427840 [file/delete_scheduler.cc:77] Deleted file ./test-data-mainnet-10m-15/rocks_txn_idx_db/000004.log immediately, rate_bytes_per_sec 0, total_trash_size 0 max_trash_db_ratio 0.250000 -2023/11/02-00:34:18.089212 8055427840 [db/db_impl/db_impl_open.cc:1977] SstFileManager instance 0x150f09bb0 -2023/11/02-00:34:18.089265 8055427840 DB pointer 0x151826a00 -2023/11/02-00:34:18.089542 6192328704 [db/db_impl/db_impl.cc:1085] ------- DUMPING STATS ------- -2023/11/02-00:34:18.089582 6192328704 [db/db_impl/db_impl.cc:1086] -** DB Stats ** -Uptime(secs): 0.0 total, 0.0 interval -Cumulative writes: 0 writes, 0 keys, 0 commit groups, 0.0 writes per commit group, ingest: 0.00 GB, 0.00 MB/s -Cumulative WAL: 0 writes, 0 syncs, 0.00 writes per sync, written: 0.00 GB, 0.00 MB/s -Cumulative stall: 00:00:0.000 H:M:S, 0.0 percent -Interval writes: 0 writes, 0 keys, 0 commit groups, 0.0 writes per commit group, ingest: 0.00 MB, 0.00 MB/s -Interval WAL: 0 writes, 0 syncs, 0.00 writes per sync, written: 0.00 GB, 0.00 MB/s -Interval stall: 00:00:0.000 H:M:S, 0.0 percent -Write Stall (count): write-buffer-manager-limit-stops: 0, -** Compaction Stats [default] ** -Level Files Size Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) CompMergeCPU(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop Rblob(GB) Wblob(GB) ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - L0 1/0 2.36 KB 0.2 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 2.7 0.00 0.00 1 0.001 0 0 0.0 0.0 - Sum 1/0 2.36 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 2.7 0.00 0.00 1 0.001 0 0 0.0 0.0 - Int 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 2.7 0.00 0.00 1 0.001 0 0 0.0 0.0 - -** Compaction Stats [default] ** -Priority Files Size Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) CompMergeCPU(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop Rblob(GB) Wblob(GB) ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -User 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.7 0.00 0.00 1 0.001 0 0 0.0 0.0 - -Blob file count: 0, total size: 0.0 GB, garbage size: 0.0 GB, space amp: 0.0 - -Uptime(secs): 0.0 total, 0.0 interval -Flush(GB): cumulative 0.000, interval 0.000 -AddFile(GB): cumulative 0.000, interval 0.000 -AddFile(Total Files): cumulative 0, interval 0 -AddFile(L0 Files): cumulative 0, interval 0 -AddFile(Keys): cumulative 0, interval 0 -Cumulative compaction: 0.00 GB write, 0.43 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds -Interval compaction: 0.00 GB write, 0.43 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds -Write Stall (count): cf-l0-file-count-limit-delays-with-ongoing-compaction: 0, cf-l0-file-count-limit-stops-with-ongoing-compaction: 0, l0-file-count-limit-delays: 0, l0-file-count-limit-stops: 0, memtable-limit-delays: 0, memtable-limit-stops: 0, pending-compaction-bytes-delays: 0, pending-compaction-bytes-stops: 0, total-delays: 0, total-stops: 0, Block cache LRUCache@0x600001094798#82102 capacity: 8.00 MB usage: 0.08 KB table_size: 256 occupancy: 87 collections: 1 last_copies: 0 last_secs: 5.2e-05 secs_since: 0 -Block cache entry stats(count,size,portion): Misc(1,0.00 KB,0%) - -** File Read Latency Histogram By Level [default] ** -2023/11/02-00:34:18.380812 8055427840 [db/db_impl/db_impl.cc:490] Shutdown: canceling all background work -2023/11/02-00:34:18.381317 8055427840 [db/db_impl/db_impl.cc:692] Shutdown complete diff --git a/aptos-move/aptos-e2e-comparison-testing/test-data-mainnet-10m-15/rocks_txn_idx_db/LOG.old.1698956220662845 b/aptos-move/aptos-e2e-comparison-testing/test-data-mainnet-10m-15/rocks_txn_idx_db/LOG.old.1698956220662845 deleted file mode 100644 index 7445b3378294b..0000000000000 --- a/aptos-move/aptos-e2e-comparison-testing/test-data-mainnet-10m-15/rocks_txn_idx_db/LOG.old.1698956220662845 +++ /dev/null @@ -1,284 +0,0 @@ -2023/11/02-13:14:54.330383 8055427840 RocksDB version: 8.1.1 -2023/11/02-13:14:54.330688 8055427840 Compile date 2023-04-06 16:38:52 -2023/11/02-13:14:54.330690 8055427840 DB SUMMARY -2023/11/02-13:14:54.330691 8055427840 DB Session ID: GPA278ZM60CNTAIRK5I6 -2023/11/02-13:14:54.330753 8055427840 CURRENT file: CURRENT -2023/11/02-13:14:54.330755 8055427840 IDENTITY file: IDENTITY -2023/11/02-13:14:54.330761 8055427840 MANIFEST file: MANIFEST-000010 size: 180 Bytes -2023/11/02-13:14:54.330774 8055427840 SST files in ./test-data-mainnet-10m-15/rocks_txn_idx_db dir, Total Num: 1, files: 000008.sst -2023/11/02-13:14:54.330775 8055427840 Write Ahead Log file in ./test-data-mainnet-10m-15/rocks_txn_idx_db: 000009.log size: 0 ; -2023/11/02-13:14:54.330777 8055427840 Options.error_if_exists: 0 -2023/11/02-13:14:54.330778 8055427840 Options.create_if_missing: 1 -2023/11/02-13:14:54.330779 8055427840 Options.paranoid_checks: 1 -2023/11/02-13:14:54.330780 8055427840 Options.flush_verify_memtable_count: 1 -2023/11/02-13:14:54.330781 8055427840 Options.track_and_verify_wals_in_manifest: 0 -2023/11/02-13:14:54.330782 8055427840 Options.verify_sst_unique_id_in_manifest: 1 -2023/11/02-13:14:54.330782 8055427840 Options.env: 0x1057d25b8 -2023/11/02-13:14:54.330783 8055427840 Options.fs: PosixFileSystem -2023/11/02-13:14:54.330785 8055427840 Options.info_log: 0x12d669a88 -2023/11/02-13:14:54.330785 8055427840 Options.max_file_opening_threads: 16 -2023/11/02-13:14:54.330786 8055427840 Options.statistics: 0x0 -2023/11/02-13:14:54.330787 8055427840 Options.use_fsync: 0 -2023/11/02-13:14:54.330788 8055427840 Options.max_log_file_size: 0 -2023/11/02-13:14:54.330789 8055427840 Options.max_manifest_file_size: 1073741824 -2023/11/02-13:14:54.330790 8055427840 Options.log_file_time_to_roll: 0 -2023/11/02-13:14:54.330791 8055427840 Options.keep_log_file_num: 1000 -2023/11/02-13:14:54.330792 8055427840 Options.recycle_log_file_num: 0 -2023/11/02-13:14:54.330793 8055427840 Options.allow_fallocate: 1 -2023/11/02-13:14:54.330794 8055427840 Options.allow_mmap_reads: 0 -2023/11/02-13:14:54.330795 8055427840 Options.allow_mmap_writes: 0 -2023/11/02-13:14:54.330795 8055427840 Options.use_direct_reads: 0 -2023/11/02-13:14:54.330796 8055427840 Options.use_direct_io_for_flush_and_compaction: 0 -2023/11/02-13:14:54.330797 8055427840 Options.create_missing_column_families: 0 -2023/11/02-13:14:54.330798 8055427840 Options.db_log_dir: -2023/11/02-13:14:54.330799 8055427840 Options.wal_dir: -2023/11/02-13:14:54.330800 8055427840 Options.table_cache_numshardbits: 6 -2023/11/02-13:14:54.330801 8055427840 Options.WAL_ttl_seconds: 0 -2023/11/02-13:14:54.330802 8055427840 Options.WAL_size_limit_MB: 0 -2023/11/02-13:14:54.330803 8055427840 Options.max_write_batch_group_size_bytes: 1048576 -2023/11/02-13:14:54.330804 8055427840 Options.manifest_preallocation_size: 4194304 -2023/11/02-13:14:54.330804 8055427840 Options.is_fd_close_on_exec: 1 -2023/11/02-13:14:54.330805 8055427840 Options.advise_random_on_open: 1 -2023/11/02-13:14:54.330806 8055427840 Options.db_write_buffer_size: 0 -2023/11/02-13:14:54.330807 8055427840 Options.write_buffer_manager: 0x6000019001a0 -2023/11/02-13:14:54.330808 8055427840 Options.access_hint_on_compaction_start: 1 -2023/11/02-13:14:54.330809 8055427840 Options.random_access_max_buffer_size: 1048576 -2023/11/02-13:14:54.330810 8055427840 Options.use_adaptive_mutex: 0 -2023/11/02-13:14:54.330810 8055427840 Options.rate_limiter: 0x0 -2023/11/02-13:14:54.330812 8055427840 Options.sst_file_manager.rate_bytes_per_sec: 0 -2023/11/02-13:14:54.330813 8055427840 Options.wal_recovery_mode: 2 -2023/11/02-13:14:54.330814 8055427840 Options.enable_thread_tracking: 0 -2023/11/02-13:14:54.330814 8055427840 Options.enable_pipelined_write: 0 -2023/11/02-13:14:54.330815 8055427840 Options.unordered_write: 0 -2023/11/02-13:14:54.330816 8055427840 Options.allow_concurrent_memtable_write: 1 -2023/11/02-13:14:54.330817 8055427840 Options.enable_write_thread_adaptive_yield: 1 -2023/11/02-13:14:54.330818 8055427840 Options.write_thread_max_yield_usec: 100 -2023/11/02-13:14:54.330819 8055427840 Options.write_thread_slow_yield_usec: 3 -2023/11/02-13:14:54.330820 8055427840 Options.row_cache: None -2023/11/02-13:14:54.330820 8055427840 Options.wal_filter: None -2023/11/02-13:14:54.330821 8055427840 Options.avoid_flush_during_recovery: 0 -2023/11/02-13:14:54.330822 8055427840 Options.allow_ingest_behind: 0 -2023/11/02-13:14:54.330823 8055427840 Options.two_write_queues: 0 -2023/11/02-13:14:54.330824 8055427840 Options.manual_wal_flush: 0 -2023/11/02-13:14:54.330825 8055427840 Options.wal_compression: 0 -2023/11/02-13:14:54.330826 8055427840 Options.atomic_flush: 0 -2023/11/02-13:14:54.330827 8055427840 Options.avoid_unnecessary_blocking_io: 0 -2023/11/02-13:14:54.330828 8055427840 Options.persist_stats_to_disk: 0 -2023/11/02-13:14:54.330829 8055427840 Options.write_dbid_to_manifest: 0 -2023/11/02-13:14:54.330829 8055427840 Options.log_readahead_size: 0 -2023/11/02-13:14:54.330831 8055427840 Options.file_checksum_gen_factory: Unknown -2023/11/02-13:14:54.330842 8055427840 Options.best_efforts_recovery: 0 -2023/11/02-13:14:54.330843 8055427840 Options.max_bgerror_resume_count: 2147483647 -2023/11/02-13:14:54.330844 8055427840 Options.bgerror_resume_retry_interval: 1000000 -2023/11/02-13:14:54.330845 8055427840 Options.allow_data_in_errors: 0 -2023/11/02-13:14:54.330846 8055427840 Options.db_host_id: __hostname__ -2023/11/02-13:14:54.330847 8055427840 Options.enforce_single_del_contracts: true -2023/11/02-13:14:54.330848 8055427840 Options.max_background_jobs: 2 -2023/11/02-13:14:54.330848 8055427840 Options.max_background_compactions: -1 -2023/11/02-13:14:54.330849 8055427840 Options.max_subcompactions: 1 -2023/11/02-13:14:54.330850 8055427840 Options.avoid_flush_during_shutdown: 0 -2023/11/02-13:14:54.330851 8055427840 Options.writable_file_max_buffer_size: 1048576 -2023/11/02-13:14:54.330852 8055427840 Options.delayed_write_rate : 16777216 -2023/11/02-13:14:54.330853 8055427840 Options.max_total_wal_size: 0 -2023/11/02-13:14:54.330854 8055427840 Options.delete_obsolete_files_period_micros: 21600000000 -2023/11/02-13:14:54.330855 8055427840 Options.stats_dump_period_sec: 600 -2023/11/02-13:14:54.330856 8055427840 Options.stats_persist_period_sec: 600 -2023/11/02-13:14:54.330856 8055427840 Options.stats_history_buffer_size: 1048576 -2023/11/02-13:14:54.330857 8055427840 Options.max_open_files: -1 -2023/11/02-13:14:54.330858 8055427840 Options.bytes_per_sync: 0 -2023/11/02-13:14:54.330859 8055427840 Options.wal_bytes_per_sync: 0 -2023/11/02-13:14:54.330860 8055427840 Options.strict_bytes_per_sync: 0 -2023/11/02-13:14:54.330861 8055427840 Options.compaction_readahead_size: 0 -2023/11/02-13:14:54.330862 8055427840 Options.max_background_flushes: -1 -2023/11/02-13:14:54.330862 8055427840 Compression algorithms supported: -2023/11/02-13:14:54.330878 8055427840 kZSTD supported: 1 -2023/11/02-13:14:54.330879 8055427840 kZlibCompression supported: 1 -2023/11/02-13:14:54.330880 8055427840 kXpressCompression supported: 0 -2023/11/02-13:14:54.330881 8055427840 kSnappyCompression supported: 1 -2023/11/02-13:14:54.330882 8055427840 kZSTDNotFinalCompression supported: 1 -2023/11/02-13:14:54.330883 8055427840 kLZ4HCCompression supported: 1 -2023/11/02-13:14:54.330884 8055427840 kLZ4Compression supported: 1 -2023/11/02-13:14:54.330885 8055427840 kBZip2Compression supported: 1 -2023/11/02-13:14:54.330891 8055427840 Fast CRC32 supported: Supported on Arm64 -2023/11/02-13:14:54.330892 8055427840 DMutex implementation: pthread_mutex_t -2023/11/02-13:14:54.331285 8055427840 [db/version_set.cc:5662] Recovering from manifest file: ./test-data-mainnet-10m-15/rocks_txn_idx_db/MANIFEST-000010 -2023/11/02-13:14:54.331559 8055427840 [db/column_family.cc:621] --------------- Options for column family [default]: -2023/11/02-13:14:54.331562 8055427840 Options.comparator: leveldb.BytewiseComparator -2023/11/02-13:14:54.331563 8055427840 Options.merge_operator: None -2023/11/02-13:14:54.331564 8055427840 Options.compaction_filter: None -2023/11/02-13:14:54.331565 8055427840 Options.compaction_filter_factory: None -2023/11/02-13:14:54.331566 8055427840 Options.sst_partitioner_factory: None -2023/11/02-13:14:54.331567 8055427840 Options.memtable_factory: SkipListFactory -2023/11/02-13:14:54.331568 8055427840 Options.table_factory: BlockBasedTable -2023/11/02-13:14:54.331580 8055427840 table_factory options: flush_block_policy_factory: FlushBlockBySizePolicyFactory (0x600002320c80) - cache_index_and_filter_blocks: 0 - cache_index_and_filter_blocks_with_high_priority: 1 - pin_l0_filter_and_index_blocks_in_cache: 0 - pin_top_level_index_and_filter: 1 - index_type: 0 - data_block_index_type: 0 - index_shortening: 1 - data_block_hash_table_util_ratio: 0.750000 - checksum: 4 - no_block_cache: 0 - block_cache: 0x6000017364d8 - block_cache_name: LRUCache - block_cache_options: - capacity : 8388608 - num_shard_bits : 4 - strict_capacity_limit : 0 - memory_allocator : None - high_pri_pool_ratio: 0.000 - low_pri_pool_ratio: 0.000 - persistent_cache: 0x0 - block_size: 4096 - block_size_deviation: 10 - block_restart_interval: 16 - index_block_restart_interval: 1 - metadata_block_size: 4096 - partition_filters: 0 - use_delta_encoding: 1 - filter_policy: nullptr - whole_key_filtering: 1 - verify_compression: 0 - read_amp_bytes_per_bit: 0 - format_version: 5 - enable_index_compression: 1 - block_align: 0 - max_auto_readahead_size: 262144 - prepopulate_block_cache: 0 - initial_auto_readahead_size: 8192 - num_file_reads_for_auto_readahead: 2 -2023/11/02-13:14:54.331582 8055427840 Options.write_buffer_size: 67108864 -2023/11/02-13:14:54.331583 8055427840 Options.max_write_buffer_number: 2 -2023/11/02-13:14:54.331584 8055427840 Options.compression: Snappy -2023/11/02-13:14:54.331585 8055427840 Options.bottommost_compression: Disabled -2023/11/02-13:14:54.331586 8055427840 Options.prefix_extractor: nullptr -2023/11/02-13:14:54.331587 8055427840 Options.memtable_insert_with_hint_prefix_extractor: nullptr -2023/11/02-13:14:54.331588 8055427840 Options.num_levels: 7 -2023/11/02-13:14:54.331588 8055427840 Options.min_write_buffer_number_to_merge: 1 -2023/11/02-13:14:54.331589 8055427840 Options.max_write_buffer_number_to_maintain: 0 -2023/11/02-13:14:54.331590 8055427840 Options.max_write_buffer_size_to_maintain: 0 -2023/11/02-13:14:54.331591 8055427840 Options.bottommost_compression_opts.window_bits: -14 -2023/11/02-13:14:54.331592 8055427840 Options.bottommost_compression_opts.level: 32767 -2023/11/02-13:14:54.331593 8055427840 Options.bottommost_compression_opts.strategy: 0 -2023/11/02-13:14:54.331594 8055427840 Options.bottommost_compression_opts.max_dict_bytes: 0 -2023/11/02-13:14:54.331595 8055427840 Options.bottommost_compression_opts.zstd_max_train_bytes: 0 -2023/11/02-13:14:54.331596 8055427840 Options.bottommost_compression_opts.parallel_threads: 1 -2023/11/02-13:14:54.331597 8055427840 Options.bottommost_compression_opts.enabled: false -2023/11/02-13:14:54.331598 8055427840 Options.bottommost_compression_opts.max_dict_buffer_bytes: 0 -2023/11/02-13:14:54.331598 8055427840 Options.bottommost_compression_opts.use_zstd_dict_trainer: true -2023/11/02-13:14:54.331599 8055427840 Options.compression_opts.window_bits: -14 -2023/11/02-13:14:54.331600 8055427840 Options.compression_opts.level: 32767 -2023/11/02-13:14:54.331601 8055427840 Options.compression_opts.strategy: 0 -2023/11/02-13:14:54.331602 8055427840 Options.compression_opts.max_dict_bytes: 0 -2023/11/02-13:14:54.331603 8055427840 Options.compression_opts.zstd_max_train_bytes: 0 -2023/11/02-13:14:54.331604 8055427840 Options.compression_opts.use_zstd_dict_trainer: true -2023/11/02-13:14:54.331605 8055427840 Options.compression_opts.parallel_threads: 1 -2023/11/02-13:14:54.331605 8055427840 Options.compression_opts.enabled: false -2023/11/02-13:14:54.331606 8055427840 Options.compression_opts.max_dict_buffer_bytes: 0 -2023/11/02-13:14:54.331607 8055427840 Options.level0_file_num_compaction_trigger: 4 -2023/11/02-13:14:54.331608 8055427840 Options.level0_slowdown_writes_trigger: 20 -2023/11/02-13:14:54.331609 8055427840 Options.level0_stop_writes_trigger: 36 -2023/11/02-13:14:54.331610 8055427840 Options.target_file_size_base: 67108864 -2023/11/02-13:14:54.331611 8055427840 Options.target_file_size_multiplier: 1 -2023/11/02-13:14:54.331611 8055427840 Options.max_bytes_for_level_base: 268435456 -2023/11/02-13:14:54.331612 8055427840 Options.level_compaction_dynamic_level_bytes: 0 -2023/11/02-13:14:54.331613 8055427840 Options.max_bytes_for_level_multiplier: 10.000000 -2023/11/02-13:14:54.331614 8055427840 Options.max_bytes_for_level_multiplier_addtl[0]: 1 -2023/11/02-13:14:54.331615 8055427840 Options.max_bytes_for_level_multiplier_addtl[1]: 1 -2023/11/02-13:14:54.331616 8055427840 Options.max_bytes_for_level_multiplier_addtl[2]: 1 -2023/11/02-13:14:54.331617 8055427840 Options.max_bytes_for_level_multiplier_addtl[3]: 1 -2023/11/02-13:14:54.331618 8055427840 Options.max_bytes_for_level_multiplier_addtl[4]: 1 -2023/11/02-13:14:54.331619 8055427840 Options.max_bytes_for_level_multiplier_addtl[5]: 1 -2023/11/02-13:14:54.331620 8055427840 Options.max_bytes_for_level_multiplier_addtl[6]: 1 -2023/11/02-13:14:54.331621 8055427840 Options.max_sequential_skip_in_iterations: 8 -2023/11/02-13:14:54.331621 8055427840 Options.max_compaction_bytes: 1677721600 -2023/11/02-13:14:54.331622 8055427840 Options.ignore_max_compaction_bytes_for_input: true -2023/11/02-13:14:54.331623 8055427840 Options.arena_block_size: 1048576 -2023/11/02-13:14:54.331624 8055427840 Options.soft_pending_compaction_bytes_limit: 68719476736 -2023/11/02-13:14:54.331625 8055427840 Options.hard_pending_compaction_bytes_limit: 274877906944 -2023/11/02-13:14:54.331626 8055427840 Options.disable_auto_compactions: 0 -2023/11/02-13:14:54.331627 8055427840 Options.compaction_style: kCompactionStyleLevel -2023/11/02-13:14:54.331629 8055427840 Options.compaction_pri: kMinOverlappingRatio -2023/11/02-13:14:54.331630 8055427840 Options.compaction_options_universal.size_ratio: 1 -2023/11/02-13:14:54.331631 8055427840 Options.compaction_options_universal.min_merge_width: 2 -2023/11/02-13:14:54.331631 8055427840 Options.compaction_options_universal.max_merge_width: 4294967295 -2023/11/02-13:14:54.331632 8055427840 Options.compaction_options_universal.max_size_amplification_percent: 200 -2023/11/02-13:14:54.331633 8055427840 Options.compaction_options_universal.compression_size_percent: -1 -2023/11/02-13:14:54.331635 8055427840 Options.compaction_options_universal.stop_style: kCompactionStopStyleTotalSize -2023/11/02-13:14:54.331636 8055427840 Options.compaction_options_fifo.max_table_files_size: 1073741824 -2023/11/02-13:14:54.331637 8055427840 Options.compaction_options_fifo.allow_compaction: 0 -2023/11/02-13:14:54.331638 8055427840 Options.table_properties_collectors: -2023/11/02-13:14:54.331639 8055427840 Options.inplace_update_support: 0 -2023/11/02-13:14:54.331640 8055427840 Options.inplace_update_num_locks: 10000 -2023/11/02-13:14:54.331641 8055427840 Options.memtable_prefix_bloom_size_ratio: 0.000000 -2023/11/02-13:14:54.331642 8055427840 Options.memtable_whole_key_filtering: 0 -2023/11/02-13:14:54.331643 8055427840 Options.memtable_huge_page_size: 0 -2023/11/02-13:14:54.331644 8055427840 Options.bloom_locality: 0 -2023/11/02-13:14:54.331645 8055427840 Options.max_successive_merges: 0 -2023/11/02-13:14:54.331645 8055427840 Options.optimize_filters_for_hits: 0 -2023/11/02-13:14:54.331646 8055427840 Options.paranoid_file_checks: 0 -2023/11/02-13:14:54.331647 8055427840 Options.force_consistency_checks: 1 -2023/11/02-13:14:54.331648 8055427840 Options.report_bg_io_stats: 0 -2023/11/02-13:14:54.331649 8055427840 Options.ttl: 2592000 -2023/11/02-13:14:54.331650 8055427840 Options.periodic_compaction_seconds: 0 -2023/11/02-13:14:54.331651 8055427840 Options.preclude_last_level_data_seconds: 0 -2023/11/02-13:14:54.331651 8055427840 Options.preserve_internal_time_seconds: 0 -2023/11/02-13:14:54.331652 8055427840 Options.enable_blob_files: false -2023/11/02-13:14:54.331653 8055427840 Options.min_blob_size: 0 -2023/11/02-13:14:54.331654 8055427840 Options.blob_file_size: 268435456 -2023/11/02-13:14:54.331655 8055427840 Options.blob_compression_type: NoCompression -2023/11/02-13:14:54.331656 8055427840 Options.enable_blob_garbage_collection: false -2023/11/02-13:14:54.331657 8055427840 Options.blob_garbage_collection_age_cutoff: 0.250000 -2023/11/02-13:14:54.331658 8055427840 Options.blob_garbage_collection_force_threshold: 1.000000 -2023/11/02-13:14:54.331659 8055427840 Options.blob_compaction_readahead_size: 0 -2023/11/02-13:14:54.331660 8055427840 Options.blob_file_starting_level: 0 -2023/11/02-13:14:54.331661 8055427840 Options.experimental_mempurge_threshold: 0.000000 -2023/11/02-13:14:54.332879 8055427840 [db/version_set.cc:5713] Recovered from manifest file:./test-data-mainnet-10m-15/rocks_txn_idx_db/MANIFEST-000010 succeeded,manifest_file_number is 10, next_file_number is 12, last_sequence is 5, log_number is 5,prev_log_number is 0,max_column_family is 0,min_log_number_to_keep is 5 -2023/11/02-13:14:54.332885 8055427840 [db/version_set.cc:5722] Column family [default] (ID 0), log number is 5 -2023/11/02-13:14:54.333104 8055427840 [db/db_impl/db_impl_open.cc:537] DB ID: 68030351-9558-4d6e-aa76-818928bc21b6 -2023/11/02-13:14:54.333252 8055427840 EVENT_LOG_v1 {"time_micros": 1698956094333247, "job": 1, "event": "recovery_started", "wal_files": [9]} -2023/11/02-13:14:54.333256 8055427840 [db/db_impl/db_impl_open.cc:1031] Recovering log #9 mode 2 -2023/11/02-13:14:54.333332 8055427840 EVENT_LOG_v1 {"time_micros": 1698956094333330, "job": 1, "event": "recovery_finished"} -2023/11/02-13:14:54.333475 8055427840 [db/version_set.cc:5180] Creating manifest 14 -2023/11/02-13:14:54.336580 8055427840 [db/db_impl/db_impl_open.cc:1977] SstFileManager instance 0x12d637ee0 -2023/11/02-13:14:54.336635 8055427840 DB pointer 0x12c808200 -2023/11/02-13:14:54.336848 6181056512 [db/db_impl/db_impl.cc:1085] ------- DUMPING STATS ------- -2023/11/02-13:14:54.336851 6181056512 [db/db_impl/db_impl.cc:1086] -** DB Stats ** -Uptime(secs): 0.0 total, 0.0 interval -Cumulative writes: 0 writes, 0 keys, 0 commit groups, 0.0 writes per commit group, ingest: 0.00 GB, 0.00 MB/s -Cumulative WAL: 0 writes, 0 syncs, 0.00 writes per sync, written: 0.00 GB, 0.00 MB/s -Cumulative stall: 00:00:0.000 H:M:S, 0.0 percent -Interval writes: 0 writes, 0 keys, 0 commit groups, 0.0 writes per commit group, ingest: 0.00 MB, 0.00 MB/s -Interval WAL: 0 writes, 0 syncs, 0.00 writes per sync, written: 0.00 GB, 0.00 MB/s -Interval stall: 00:00:0.000 H:M:S, 0.0 percent -Write Stall (count): write-buffer-manager-limit-stops: 0, -** Compaction Stats [default] ** -Level Files Size Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) CompMergeCPU(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop Rblob(GB) Wblob(GB) ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - L0 1/0 2.36 KB 0.2 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00 0.00 0 0.000 0 0 0.0 0.0 - Sum 1/0 2.36 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00 0.00 0 0.000 0 0 0.0 0.0 - Int 0/0 0.00 KB 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00 0.00 0 0.000 0 0 0.0 0.0 - -** Compaction Stats [default] ** -Priority Files Size Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) CompMergeCPU(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop Rblob(GB) Wblob(GB) ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - -Blob file count: 0, total size: 0.0 GB, garbage size: 0.0 GB, space amp: 0.0 - -Uptime(secs): 0.0 total, 0.0 interval -Flush(GB): cumulative 0.000, interval 0.000 -AddFile(GB): cumulative 0.000, interval 0.000 -AddFile(Total Files): cumulative 0, interval 0 -AddFile(L0 Files): cumulative 0, interval 0 -AddFile(Keys): cumulative 0, interval 0 -Cumulative compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds -Interval compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds -Write Stall (count): cf-l0-file-count-limit-delays-with-ongoing-compaction: 0, cf-l0-file-count-limit-stops-with-ongoing-compaction: 0, l0-file-count-limit-delays: 0, l0-file-count-limit-stops: 0, memtable-limit-delays: 0, memtable-limit-stops: 0, pending-compaction-bytes-delays: 0, pending-compaction-bytes-stops: 0, total-delays: 0, total-stops: 0, Block cache LRUCache@0x6000017364d8#19704 capacity: 8.00 MB usage: 0.08 KB table_size: 256 occupancy: 87 collections: 1 last_copies: 0 last_secs: 4.2e-05 secs_since: 0 -Block cache entry stats(count,size,portion): Misc(1,0.00 KB,0%) - -** File Read Latency Histogram By Level [default] ** -2023/11/02-13:14:55.227208 8055427840 [db/db_impl/db_impl.cc:490] Shutdown: canceling all background work -2023/11/02-13:14:55.227681 8055427840 [db/db_impl/db_impl.cc:692] Shutdown complete diff --git a/aptos-move/aptos-e2e-comparison-testing/test-data-mainnet-10m-15/rocks_txn_idx_db/MANIFEST-000018 b/aptos-move/aptos-e2e-comparison-testing/test-data-mainnet-10m-15/rocks_txn_idx_db/MANIFEST-000018 deleted file mode 100644 index abd62c88782a3..0000000000000 Binary files a/aptos-move/aptos-e2e-comparison-testing/test-data-mainnet-10m-15/rocks_txn_idx_db/MANIFEST-000018 and /dev/null differ diff --git a/aptos-move/aptos-e2e-comparison-testing/test-data-mainnet-10m-15/rocks_txn_idx_db/OPTIONS-000016 b/aptos-move/aptos-e2e-comparison-testing/test-data-mainnet-10m-15/rocks_txn_idx_db/OPTIONS-000016 deleted file mode 100644 index ec56ef4f4d1e9..0000000000000 --- a/aptos-move/aptos-e2e-comparison-testing/test-data-mainnet-10m-15/rocks_txn_idx_db/OPTIONS-000016 +++ /dev/null @@ -1,198 +0,0 @@ -# This is a RocksDB option file. -# -# For detailed file format spec, please refer to the example file -# in examples/rocksdb_option_file_example.ini -# - -[Version] - rocksdb_version=8.1.1 - options_file_version=1.1 - -[DBOptions] - max_background_flushes=-1 - compaction_readahead_size=0 - strict_bytes_per_sync=false - wal_bytes_per_sync=0 - max_open_files=-1 - stats_history_buffer_size=1048576 - max_total_wal_size=0 - stats_persist_period_sec=600 - stats_dump_period_sec=600 - avoid_flush_during_shutdown=false - max_subcompactions=1 - bytes_per_sync=0 - delayed_write_rate=16777216 - max_background_compactions=-1 - max_background_jobs=2 - delete_obsolete_files_period_micros=21600000000 - writable_file_max_buffer_size=1048576 - file_checksum_gen_factory=nullptr - allow_data_in_errors=false - max_bgerror_resume_count=2147483647 - best_efforts_recovery=false - write_dbid_to_manifest=false - atomic_flush=false - wal_compression=kNoCompression - manual_wal_flush=false - two_write_queues=false - avoid_flush_during_recovery=false - dump_malloc_stats=false - info_log_level=INFO_LEVEL - write_thread_slow_yield_usec=3 - allow_ingest_behind=false - fail_if_options_file_error=false - persist_stats_to_disk=false - WAL_ttl_seconds=0 - bgerror_resume_retry_interval=1000000 - allow_concurrent_memtable_write=true - paranoid_checks=true - WAL_size_limit_MB=0 - lowest_used_cache_tier=kNonVolatileBlockTier - keep_log_file_num=1000 - table_cache_numshardbits=6 - max_file_opening_threads=16 - use_fsync=false - unordered_write=false - random_access_max_buffer_size=1048576 - log_readahead_size=0 - enable_pipelined_write=false - wal_recovery_mode=kPointInTimeRecovery - db_write_buffer_size=0 - allow_2pc=false - skip_checking_sst_file_sizes_on_db_open=false - skip_stats_update_on_db_open=false - recycle_log_file_num=0 - db_host_id=__hostname__ - access_hint_on_compaction_start=NORMAL - verify_sst_unique_id_in_manifest=true - track_and_verify_wals_in_manifest=false - error_if_exists=false - manifest_preallocation_size=4194304 - is_fd_close_on_exec=true - enable_write_thread_adaptive_yield=true - enable_thread_tracking=false - avoid_unnecessary_blocking_io=false - allow_fallocate=true - max_log_file_size=0 - advise_random_on_open=true - create_missing_column_families=false - max_write_batch_group_size_bytes=1048576 - use_adaptive_mutex=false - wal_filter=nullptr - create_if_missing=true - enforce_single_del_contracts=true - allow_mmap_writes=false - log_file_time_to_roll=0 - use_direct_io_for_flush_and_compaction=false - flush_verify_memtable_count=true - max_manifest_file_size=1073741824 - write_thread_max_yield_usec=100 - use_direct_reads=false - allow_mmap_reads=false - - -[CFOptions "default"] - memtable_protection_bytes_per_key=0 - bottommost_compression=kDisableCompressionOption - sample_for_compression=0 - blob_garbage_collection_age_cutoff=0.250000 - blob_compression_type=kNoCompression - prepopulate_blob_cache=kDisable - blob_compaction_readahead_size=0 - level0_stop_writes_trigger=36 - min_blob_size=0 - last_level_temperature=kUnknown - compaction_options_universal={allow_trivial_move=false;stop_style=kCompactionStopStyleTotalSize;min_merge_width=2;compression_size_percent=-1;max_size_amplification_percent=200;incremental=false;max_merge_width=4294967295;size_ratio=1;} - target_file_size_base=67108864 - ignore_max_compaction_bytes_for_input=true - memtable_whole_key_filtering=false - blob_file_starting_level=0 - soft_pending_compaction_bytes_limit=68719476736 - max_write_buffer_number=2 - ttl=2592000 - compaction_options_fifo={allow_compaction=false;age_for_warm=0;max_table_files_size=1073741824;} - check_flush_compaction_key_order=true - memtable_huge_page_size=0 - max_successive_merges=0 - inplace_update_num_locks=10000 - enable_blob_garbage_collection=false - arena_block_size=1048576 - bottommost_compression_opts={use_zstd_dict_trainer=true;enabled=false;parallel_threads=1;zstd_max_train_bytes=0;max_dict_bytes=0;strategy=0;max_dict_buffer_bytes=0;level=32767;window_bits=-14;} - target_file_size_multiplier=1 - max_bytes_for_level_multiplier_additional=1:1:1:1:1:1:1 - blob_garbage_collection_force_threshold=1.000000 - enable_blob_files=false - level0_slowdown_writes_trigger=20 - compression=kSnappyCompression - level0_file_num_compaction_trigger=4 - prefix_extractor=nullptr - max_bytes_for_level_multiplier=10.000000 - write_buffer_size=67108864 - disable_auto_compactions=false - max_compaction_bytes=1677721600 - compression_opts={use_zstd_dict_trainer=true;enabled=false;parallel_threads=1;zstd_max_train_bytes=0;max_dict_bytes=0;strategy=0;max_dict_buffer_bytes=0;level=32767;window_bits=-14;} - hard_pending_compaction_bytes_limit=274877906944 - blob_file_size=268435456 - periodic_compaction_seconds=0 - paranoid_file_checks=false - experimental_mempurge_threshold=0.000000 - memtable_prefix_bloom_size_ratio=0.000000 - max_bytes_for_level_base=268435456 - max_sequential_skip_in_iterations=8 - report_bg_io_stats=false - sst_partitioner_factory=nullptr - compaction_pri=kMinOverlappingRatio - compaction_style=kCompactionStyleLevel - compaction_filter_factory=nullptr - compaction_filter=nullptr - memtable_factory=SkipListFactory - comparator=leveldb.BytewiseComparator - bloom_locality=0 - min_write_buffer_number_to_merge=1 - table_factory=BlockBasedTable - max_write_buffer_size_to_maintain=0 - max_write_buffer_number_to_maintain=0 - preserve_internal_time_seconds=0 - force_consistency_checks=true - optimize_filters_for_hits=false - merge_operator=nullptr - num_levels=7 - level_compaction_dynamic_file_size=true - memtable_insert_with_hint_prefix_extractor=nullptr - level_compaction_dynamic_level_bytes=false - preclude_last_level_data_seconds=0 - inplace_update_support=false - -[TableOptions/BlockBasedTable "default"] - num_file_reads_for_auto_readahead=2 - metadata_cache_options={unpartitioned_pinning=kFallback;partition_pinning=kFallback;top_level_index_pinning=kFallback;} - read_amp_bytes_per_bit=0 - verify_compression=false - format_version=5 - optimize_filters_for_memory=false - partition_filters=false - detect_filter_construct_corruption=false - initial_auto_readahead_size=8192 - max_auto_readahead_size=262144 - enable_index_compression=true - checksum=kXXH3 - index_block_restart_interval=1 - pin_top_level_index_and_filter=true - block_align=false - block_size=4096 - index_type=kBinarySearch - filter_policy=nullptr - metadata_block_size=4096 - no_block_cache=false - index_shortening=kShortenSeparators - whole_key_filtering=true - block_size_deviation=10 - data_block_index_type=kDataBlockBinarySearch - data_block_hash_table_util_ratio=0.750000 - cache_index_and_filter_blocks=false - prepopulate_block_cache=kDisable - block_restart_interval=16 - pin_l0_filter_and_index_blocks_in_cache=false - cache_index_and_filter_blocks_with_high_priority=true - flush_block_policy_factory=FlushBlockBySizePolicyFactory - diff --git a/aptos-move/aptos-e2e-comparison-testing/test-data-mainnet-10m-15/rocks_txn_idx_db/OPTIONS-000020 b/aptos-move/aptos-e2e-comparison-testing/test-data-mainnet-10m-15/rocks_txn_idx_db/OPTIONS-000020 deleted file mode 100644 index ec56ef4f4d1e9..0000000000000 --- a/aptos-move/aptos-e2e-comparison-testing/test-data-mainnet-10m-15/rocks_txn_idx_db/OPTIONS-000020 +++ /dev/null @@ -1,198 +0,0 @@ -# This is a RocksDB option file. -# -# For detailed file format spec, please refer to the example file -# in examples/rocksdb_option_file_example.ini -# - -[Version] - rocksdb_version=8.1.1 - options_file_version=1.1 - -[DBOptions] - max_background_flushes=-1 - compaction_readahead_size=0 - strict_bytes_per_sync=false - wal_bytes_per_sync=0 - max_open_files=-1 - stats_history_buffer_size=1048576 - max_total_wal_size=0 - stats_persist_period_sec=600 - stats_dump_period_sec=600 - avoid_flush_during_shutdown=false - max_subcompactions=1 - bytes_per_sync=0 - delayed_write_rate=16777216 - max_background_compactions=-1 - max_background_jobs=2 - delete_obsolete_files_period_micros=21600000000 - writable_file_max_buffer_size=1048576 - file_checksum_gen_factory=nullptr - allow_data_in_errors=false - max_bgerror_resume_count=2147483647 - best_efforts_recovery=false - write_dbid_to_manifest=false - atomic_flush=false - wal_compression=kNoCompression - manual_wal_flush=false - two_write_queues=false - avoid_flush_during_recovery=false - dump_malloc_stats=false - info_log_level=INFO_LEVEL - write_thread_slow_yield_usec=3 - allow_ingest_behind=false - fail_if_options_file_error=false - persist_stats_to_disk=false - WAL_ttl_seconds=0 - bgerror_resume_retry_interval=1000000 - allow_concurrent_memtable_write=true - paranoid_checks=true - WAL_size_limit_MB=0 - lowest_used_cache_tier=kNonVolatileBlockTier - keep_log_file_num=1000 - table_cache_numshardbits=6 - max_file_opening_threads=16 - use_fsync=false - unordered_write=false - random_access_max_buffer_size=1048576 - log_readahead_size=0 - enable_pipelined_write=false - wal_recovery_mode=kPointInTimeRecovery - db_write_buffer_size=0 - allow_2pc=false - skip_checking_sst_file_sizes_on_db_open=false - skip_stats_update_on_db_open=false - recycle_log_file_num=0 - db_host_id=__hostname__ - access_hint_on_compaction_start=NORMAL - verify_sst_unique_id_in_manifest=true - track_and_verify_wals_in_manifest=false - error_if_exists=false - manifest_preallocation_size=4194304 - is_fd_close_on_exec=true - enable_write_thread_adaptive_yield=true - enable_thread_tracking=false - avoid_unnecessary_blocking_io=false - allow_fallocate=true - max_log_file_size=0 - advise_random_on_open=true - create_missing_column_families=false - max_write_batch_group_size_bytes=1048576 - use_adaptive_mutex=false - wal_filter=nullptr - create_if_missing=true - enforce_single_del_contracts=true - allow_mmap_writes=false - log_file_time_to_roll=0 - use_direct_io_for_flush_and_compaction=false - flush_verify_memtable_count=true - max_manifest_file_size=1073741824 - write_thread_max_yield_usec=100 - use_direct_reads=false - allow_mmap_reads=false - - -[CFOptions "default"] - memtable_protection_bytes_per_key=0 - bottommost_compression=kDisableCompressionOption - sample_for_compression=0 - blob_garbage_collection_age_cutoff=0.250000 - blob_compression_type=kNoCompression - prepopulate_blob_cache=kDisable - blob_compaction_readahead_size=0 - level0_stop_writes_trigger=36 - min_blob_size=0 - last_level_temperature=kUnknown - compaction_options_universal={allow_trivial_move=false;stop_style=kCompactionStopStyleTotalSize;min_merge_width=2;compression_size_percent=-1;max_size_amplification_percent=200;incremental=false;max_merge_width=4294967295;size_ratio=1;} - target_file_size_base=67108864 - ignore_max_compaction_bytes_for_input=true - memtable_whole_key_filtering=false - blob_file_starting_level=0 - soft_pending_compaction_bytes_limit=68719476736 - max_write_buffer_number=2 - ttl=2592000 - compaction_options_fifo={allow_compaction=false;age_for_warm=0;max_table_files_size=1073741824;} - check_flush_compaction_key_order=true - memtable_huge_page_size=0 - max_successive_merges=0 - inplace_update_num_locks=10000 - enable_blob_garbage_collection=false - arena_block_size=1048576 - bottommost_compression_opts={use_zstd_dict_trainer=true;enabled=false;parallel_threads=1;zstd_max_train_bytes=0;max_dict_bytes=0;strategy=0;max_dict_buffer_bytes=0;level=32767;window_bits=-14;} - target_file_size_multiplier=1 - max_bytes_for_level_multiplier_additional=1:1:1:1:1:1:1 - blob_garbage_collection_force_threshold=1.000000 - enable_blob_files=false - level0_slowdown_writes_trigger=20 - compression=kSnappyCompression - level0_file_num_compaction_trigger=4 - prefix_extractor=nullptr - max_bytes_for_level_multiplier=10.000000 - write_buffer_size=67108864 - disable_auto_compactions=false - max_compaction_bytes=1677721600 - compression_opts={use_zstd_dict_trainer=true;enabled=false;parallel_threads=1;zstd_max_train_bytes=0;max_dict_bytes=0;strategy=0;max_dict_buffer_bytes=0;level=32767;window_bits=-14;} - hard_pending_compaction_bytes_limit=274877906944 - blob_file_size=268435456 - periodic_compaction_seconds=0 - paranoid_file_checks=false - experimental_mempurge_threshold=0.000000 - memtable_prefix_bloom_size_ratio=0.000000 - max_bytes_for_level_base=268435456 - max_sequential_skip_in_iterations=8 - report_bg_io_stats=false - sst_partitioner_factory=nullptr - compaction_pri=kMinOverlappingRatio - compaction_style=kCompactionStyleLevel - compaction_filter_factory=nullptr - compaction_filter=nullptr - memtable_factory=SkipListFactory - comparator=leveldb.BytewiseComparator - bloom_locality=0 - min_write_buffer_number_to_merge=1 - table_factory=BlockBasedTable - max_write_buffer_size_to_maintain=0 - max_write_buffer_number_to_maintain=0 - preserve_internal_time_seconds=0 - force_consistency_checks=true - optimize_filters_for_hits=false - merge_operator=nullptr - num_levels=7 - level_compaction_dynamic_file_size=true - memtable_insert_with_hint_prefix_extractor=nullptr - level_compaction_dynamic_level_bytes=false - preclude_last_level_data_seconds=0 - inplace_update_support=false - -[TableOptions/BlockBasedTable "default"] - num_file_reads_for_auto_readahead=2 - metadata_cache_options={unpartitioned_pinning=kFallback;partition_pinning=kFallback;top_level_index_pinning=kFallback;} - read_amp_bytes_per_bit=0 - verify_compression=false - format_version=5 - optimize_filters_for_memory=false - partition_filters=false - detect_filter_construct_corruption=false - initial_auto_readahead_size=8192 - max_auto_readahead_size=262144 - enable_index_compression=true - checksum=kXXH3 - index_block_restart_interval=1 - pin_top_level_index_and_filter=true - block_align=false - block_size=4096 - index_type=kBinarySearch - filter_policy=nullptr - metadata_block_size=4096 - no_block_cache=false - index_shortening=kShortenSeparators - whole_key_filtering=true - block_size_deviation=10 - data_block_index_type=kDataBlockBinarySearch - data_block_hash_table_util_ratio=0.750000 - cache_index_and_filter_blocks=false - prepopulate_block_cache=kDisable - block_restart_interval=16 - pin_l0_filter_and_index_blocks_in_cache=false - cache_index_and_filter_blocks_with_high_priority=true - flush_block_policy_factory=FlushBlockBySizePolicyFactory - diff --git a/aptos-move/aptos-e2e-comparison-testing/test-data-mainnet-10m-15/state_data/10000003_state b/aptos-move/aptos-e2e-comparison-testing/test-data-mainnet-10m-15/state_data/10000003_state deleted file mode 100644 index 5c2c62d1bd0f5..0000000000000 Binary files a/aptos-move/aptos-e2e-comparison-testing/test-data-mainnet-10m-15/state_data/10000003_state and /dev/null differ diff --git a/aptos-move/aptos-e2e-comparison-testing/test-data-mainnet-10m-15/state_data/10000006_state b/aptos-move/aptos-e2e-comparison-testing/test-data-mainnet-10m-15/state_data/10000006_state deleted file mode 100644 index 0ecfc5451cb83..0000000000000 Binary files a/aptos-move/aptos-e2e-comparison-testing/test-data-mainnet-10m-15/state_data/10000006_state and /dev/null differ diff --git a/aptos-move/aptos-e2e-comparison-testing/test-data-mainnet-10m-15/state_data/10000007_state b/aptos-move/aptos-e2e-comparison-testing/test-data-mainnet-10m-15/state_data/10000007_state deleted file mode 100644 index 3acade7d727cf..0000000000000 Binary files a/aptos-move/aptos-e2e-comparison-testing/test-data-mainnet-10m-15/state_data/10000007_state and /dev/null differ diff --git a/aptos-move/aptos-e2e-comparison-testing/test-data-mainnet-10m-15/state_data/10000010_state b/aptos-move/aptos-e2e-comparison-testing/test-data-mainnet-10m-15/state_data/10000010_state deleted file mode 100644 index 9f20fcb0b5425..0000000000000 Binary files a/aptos-move/aptos-e2e-comparison-testing/test-data-mainnet-10m-15/state_data/10000010_state and /dev/null differ diff --git a/aptos-move/aptos-e2e-comparison-testing/test-data-mainnet-10m-15/state_data/10000011_state b/aptos-move/aptos-e2e-comparison-testing/test-data-mainnet-10m-15/state_data/10000011_state deleted file mode 100644 index 098046322fca7..0000000000000 Binary files a/aptos-move/aptos-e2e-comparison-testing/test-data-mainnet-10m-15/state_data/10000011_state and /dev/null differ diff --git a/aptos-move/aptos-e2e-comparison-testing/test-data-mainnet-10m-15/version_index.txt b/aptos-move/aptos-e2e-comparison-testing/test-data-mainnet-10m-15/version_index.txt deleted file mode 100644 index 3efd029956b68..0000000000000 --- a/aptos-move/aptos-e2e-comparison-testing/test-data-mainnet-10m-15/version_index.txt +++ /dev/null @@ -1,5 +0,0 @@ -10000003 -10000006 -10000007 -10000010 -10000011 diff --git a/aptos-move/aptos-gas-calibration/README.md b/aptos-move/aptos-gas-calibration/README.md deleted file mode 100644 index e1d34e932bd50..0000000000000 --- a/aptos-move/aptos-gas-calibration/README.md +++ /dev/null @@ -1,158 +0,0 @@ ---- -id: aptos-gas-calibration -title: Aptos Automated Gas Calibration ---- - -## Aptos Automated Gas Calibration - -The Aptos Automated Gas Calibration is a tool that lets anyone write Move Samples (or also Move IR) to calibrate the gas parameters for Native Functions (and also Move bytecode instructions). - -### Terminology: - -- User: Anyone writing Move Native Functions. -- Move Sample: A Move package in the `/samples` directory. -- Abstract Gas Usage: Records the number of times a gas parameter has been called. -- Calibration Function: A function used to track the running time and Abstract Gas Usage. - -### How the system works at a high-level: - -1. User implements the Native function and respective gas formula. -2. Write a Move Sample and some Calibration Functions. -3. Determine the Abstract Gas Usage of the Calibration Function to create a gas formula. -4. Determine the running time of the Calibration Function and formulate a linear equation. -5. Repeat 3-4 for all Move Samples in `/samples` -6. Solve the system of linear equations using Linear Algebra -7. Output a result to the User (the gas parameter costs, or any outliers, or gas parameters that couldn’t be solved) - -## Creating a Move Sample - -Create a Move project under `/samples` by running: - -```bash -mkdir MY-PROJECT -cd MY-PROJECT -cargo run -p aptos -- move init --name MY-PROJECT -``` - -## Writing Your First Calibration Function - -Calibration Functions need to be marked with `entry` and have a prefix of `calibrate_`. For example, the following functions would work: - -```Move -//// VALID -public entry fun calibrate() {} - -public entry fun calibrate_another_txn() {} - -public entry fun calibrate123() {} - -//// INVALID -public fun calibrate() {} - -public fun test_my_txn() {} - -public entry fun calibrate_addition(_x: u64, _y: u64) {} -``` - -If the Calibration Function is expected to error, please denote it with the postfix `_should_error`. - -``` -//// VALID -public entry fun calibrate_my_test_should_error() {} - -public entry fun calibrate_should_error() {} - -//// INVALID -public entry fun should_error_calibrate() {} - -public entry fun calibrate_test_error() {} - -public entry fun calibrate_test_should_error_() {} -``` -Note: These are still valid Calibration Functions that will still run, but would not error. - -## Usage - -```bash -cargo run --release -- --help -Automated Gas Calibration to calibrate Move bytecode and Native Functions - -Usage: aptos-gas-calibration [OPTIONS] - -Options: - -p, --pattern Specific tests to run that match a pattern [default: ""] - -i, --iterations Number of iterations to run each Calibration Function [default: 20] - -m, --max_execution_time Maximum execution time in milliseconds [default: 300] - -h, --help Print help -``` - -## Examples - -There are examples of how to write Calibration Functions under `/samples_ir` and `/samples`. There will be more examples in the future as more Users write Move Samples and add it to the calibration set. - -Here is an example written in the Move source language: -```Move -public fun calibrate_blake2b_256_impl(num_iterations: u64) { - let i = 0; - let msg = b"abcdefghijkl" - while i < num_iterations { - // This is what I want to calibrate: - aptos_hash::blake2b_256(msg); - aptos_hash::blake2b_256(msg); - aptos_hash::blake2b_256(msg); - aptos_hash::blake2b_256(msg); - aptos_hash::blake2b_256(msg); - aptos_hash::blake2b_256(msg); - aptos_hash::blake2b_256(msg); - aptos_hash::blake2b_256(msg); - aptos_hash::blake2b_256(msg); - aptos_hash::blake2b_256(msg); - i += 1; - } -} - -public entry fun calibrate_blake2b_256_x500() { - calibrate_blake2b_256_impl(50); -} - -public entry fun calibrate_blake2b_256_x1000() { - calibrate_blake2b_256_impl(100); -} - -public entry fun calibrate_blake2b_256_x5000() { - calibrate_blake2b_256_impl(500); -} -``` -As you can see in this example, we want the thing that we are trying to calibrate to run for a long enough time, and to also be called enough times. This is why we have the Native Function being called 10 times. Furthermore, we want to sample different lengths (discussed in more detail below), which is why we have data points at 500, 1000, and 5000. This allows the system to record an accurate and appropriate gas usage of the instructions being called, while finding the best line of fit. - -## FAQ - -### How many Calibration Functions to provide? - -In order for the system to find deterministic values for the gas parameters, the number of Calibration Functions needs to be at least the number of linearly independent samples for each gas parameter that we’re solving. For example, if a User was calling a function, it would use the gas parameters: `CALL_BASE`, `CALL_PER_ARG`, `CALL_PER_LOCAL`, which would require at least three Calibration Functions. - -### How do I write "good" Calibration Functions? - -A good Calibration Function should run for many iterations (i.e., see `/samples_ir/ld/ldu8.mvir`). This allows the system to record a good representation of the gas usage. Furthermore, the idea is that we are sampling different data points at different "lengths" to approximate a line of best fit. In the `ldu8.mvir` example, we have the data points at 100, 500, and 1000 iterations. - -### How are the gas parameters calculated? - -For every Calibration Function, the Abstract Gas Usage and running time are determined. This forms a linear equation. For all the Calibration Functions, we can create a system of lienar equations. To solve this system of linear equations, we compute the Least Squares Solution. - -If the matrix that represents this system is not invertible, then we report the undetermined gas parameters, or the linearly dependent combinations of gas parameters. The exact math can be found under `/src/math.rs`. - -Otherwise, the User can expect to see all the values, along with the running times and any outliers. - -### I see "linearly dependent variables" instead of the gas costs, what do I do? - -If you happen to see something like: - -``` -linearly dependent variables are: - -- gas parameter: HASH_BLAKE2B_256_BASE -- gas parameter: HASH_BLAKE2B_256_PER_BYTE -``` - -There are a few reasons as to why this would happen. The first reason would be that you may have an insufficient number of Calibration Functions for the gas parameters you are trying to calculate. In this example, there should be at least two Calibration Functions, since there are two gas parameters. Another reason would be that too many of the Calibration Functions are linearly dependent. That is, try writing them using different input sizes and varying number of iterations. - diff --git a/aptos-move/aptos-gas-calibration/samples/empty/Move.toml b/aptos-move/aptos-gas-calibration/samples/empty/Move.toml deleted file mode 100644 index 0ada5b49e2931..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples/empty/Move.toml +++ /dev/null @@ -1,16 +0,0 @@ -[package] -name = "empty" -version = "1.0.0" -authors = [] - -[addresses] -empty = "0xcafe" - -[dev-addresses] - -[dependencies.AptosFramework] -git = "https://github.com/aptos-labs/aptos-core.git" -rev = "mainnet" -subdir = "aptos-move/framework/aptos-framework" - -[dev-dependencies] diff --git a/aptos-move/aptos-gas-calibration/samples/empty/sources/Empty.move b/aptos-move/aptos-gas-calibration/samples/empty/sources/Empty.move deleted file mode 100644 index c5d9220a09e1c..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples/empty/sources/Empty.move +++ /dev/null @@ -1,5 +0,0 @@ -module empty::empty { - public entry fun calibrate_empty_test() { - return - } -} diff --git a/aptos-move/aptos-gas-calibration/samples_ir/bootstrap/core-loop.mvir b/aptos-move/aptos-gas-calibration/samples_ir/bootstrap/core-loop.mvir deleted file mode 100644 index 54f3eb0ee4c93..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/bootstrap/core-loop.mvir +++ /dev/null @@ -1,4567 +0,0 @@ -module 0xcafe.BootstrapCoreLoop { - // A minimal set of samples that allow us to calibrate all the instructions required - // to form a basic for loop. - // - st_loc - // - ld_const - // - lt - // - branch - // - add - // - ld_false - // - br_false - // - copy_loc (base + per_abs_val_unit) - // - move_loc - - public entry calibrate_move_loc_x10() { - let a: u64; - let b: u64; - label b0: - a = 5; - - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - - return; - } - - public entry calibrate_move_loc_x50() { - let a: u64; - let b: u64; - label b0: - a = 5; - - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - - return; - } - - public entry calibrate_move_loc_x100() { - let a: u64; - let b: u64; - label b0: - a = 5; - - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - - return; - } - - public entry calibrate_move_loc_x300() { - let a: u64; - let b: u64; - label b0: - a = 5; - - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - - return; - } - - public entry calibrate_move_loc_x600() { - let a: u64; - let b: u64; - label b0: - a = 5; - - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); b = move(a); a = move(b); - - return; - } - - - - public entry calibrate_br_false_x10() { - label b0: jump_if_false (false) b1; - label b1: jump_if_false (false) b2; - label b2: jump_if_false (false) b3; - label b3: jump_if_false (false) b4; - label b4: jump_if_false (false) b5; - label b5: jump_if_false (false) b6; - label b6: jump_if_false (false) b7; - label b7: jump_if_false (false) b8; - label b8: jump_if_false (false) b9; - label b9: jump_if_false (false) b10; - label b10: - return; - } - - public entry calibrate_br_false_x50() { - label b0: jump_if_false (false) b1; - label b1: jump_if_false (false) b2; - label b2: jump_if_false (false) b3; - label b3: jump_if_false (false) b4; - label b4: jump_if_false (false) b5; - label b5: jump_if_false (false) b6; - label b6: jump_if_false (false) b7; - label b7: jump_if_false (false) b8; - label b8: jump_if_false (false) b9; - label b9: jump_if_false (false) b10; - label b10: jump_if_false (false) b11; - label b11: jump_if_false (false) b12; - label b12: jump_if_false (false) b13; - label b13: jump_if_false (false) b14; - label b14: jump_if_false (false) b15; - label b15: jump_if_false (false) b16; - label b16: jump_if_false (false) b17; - label b17: jump_if_false (false) b18; - label b18: jump_if_false (false) b19; - label b19: jump_if_false (false) b20; - label b20: jump_if_false (false) b21; - label b21: jump_if_false (false) b22; - label b22: jump_if_false (false) b23; - label b23: jump_if_false (false) b24; - label b24: jump_if_false (false) b25; - label b25: jump_if_false (false) b26; - label b26: jump_if_false (false) b27; - label b27: jump_if_false (false) b28; - label b28: jump_if_false (false) b29; - label b29: jump_if_false (false) b30; - label b30: jump_if_false (false) b31; - label b31: jump_if_false (false) b32; - label b32: jump_if_false (false) b33; - label b33: jump_if_false (false) b34; - label b34: jump_if_false (false) b35; - label b35: jump_if_false (false) b36; - label b36: jump_if_false (false) b37; - label b37: jump_if_false (false) b38; - label b38: jump_if_false (false) b39; - label b39: jump_if_false (false) b40; - label b40: jump_if_false (false) b41; - label b41: jump_if_false (false) b42; - label b42: jump_if_false (false) b43; - label b43: jump_if_false (false) b44; - label b44: jump_if_false (false) b45; - label b45: jump_if_false (false) b46; - label b46: jump_if_false (false) b47; - label b47: jump_if_false (false) b48; - label b48: jump_if_false (false) b49; - label b49: jump_if_false (false) b50; - label b50: - return; - } - - public entry calibrate_br_false_x500() { - label b0: jump_if_false (false) b1; - label b1: jump_if_false (false) b2; - label b2: jump_if_false (false) b3; - label b3: jump_if_false (false) b4; - label b4: jump_if_false (false) b5; - label b5: jump_if_false (false) b6; - label b6: jump_if_false (false) b7; - label b7: jump_if_false (false) b8; - label b8: jump_if_false (false) b9; - label b9: jump_if_false (false) b10; - label b10: jump_if_false (false) b11; - label b11: jump_if_false (false) b12; - label b12: jump_if_false (false) b13; - label b13: jump_if_false (false) b14; - label b14: jump_if_false (false) b15; - label b15: jump_if_false (false) b16; - label b16: jump_if_false (false) b17; - label b17: jump_if_false (false) b18; - label b18: jump_if_false (false) b19; - label b19: jump_if_false (false) b20; - label b20: jump_if_false (false) b21; - label b21: jump_if_false (false) b22; - label b22: jump_if_false (false) b23; - label b23: jump_if_false (false) b24; - label b24: jump_if_false (false) b25; - label b25: jump_if_false (false) b26; - label b26: jump_if_false (false) b27; - label b27: jump_if_false (false) b28; - label b28: jump_if_false (false) b29; - label b29: jump_if_false (false) b30; - label b30: jump_if_false (false) b31; - label b31: jump_if_false (false) b32; - label b32: jump_if_false (false) b33; - label b33: jump_if_false (false) b34; - label b34: jump_if_false (false) b35; - label b35: jump_if_false (false) b36; - label b36: jump_if_false (false) b37; - label b37: jump_if_false (false) b38; - label b38: jump_if_false (false) b39; - label b39: jump_if_false (false) b40; - label b40: jump_if_false (false) b41; - label b41: jump_if_false (false) b42; - label b42: jump_if_false (false) b43; - label b43: jump_if_false (false) b44; - label b44: jump_if_false (false) b45; - label b45: jump_if_false (false) b46; - label b46: jump_if_false (false) b47; - label b47: jump_if_false (false) b48; - label b48: jump_if_false (false) b49; - label b49: jump_if_false (false) b50; - label b50: jump_if_false (false) b51; - label b51: jump_if_false (false) b52; - label b52: jump_if_false (false) b53; - label b53: jump_if_false (false) b54; - label b54: jump_if_false (false) b55; - label b55: jump_if_false (false) b56; - label b56: jump_if_false (false) b57; - label b57: jump_if_false (false) b58; - label b58: jump_if_false (false) b59; - label b59: jump_if_false (false) b60; - label b60: jump_if_false (false) b61; - label b61: jump_if_false (false) b62; - label b62: jump_if_false (false) b63; - label b63: jump_if_false (false) b64; - label b64: jump_if_false (false) b65; - label b65: jump_if_false (false) b66; - label b66: jump_if_false (false) b67; - label b67: jump_if_false (false) b68; - label b68: jump_if_false (false) b69; - label b69: jump_if_false (false) b70; - label b70: jump_if_false (false) b71; - label b71: jump_if_false (false) b72; - label b72: jump_if_false (false) b73; - label b73: jump_if_false (false) b74; - label b74: jump_if_false (false) b75; - label b75: jump_if_false (false) b76; - label b76: jump_if_false (false) b77; - label b77: jump_if_false (false) b78; - label b78: jump_if_false (false) b79; - label b79: jump_if_false (false) b80; - label b80: jump_if_false (false) b81; - label b81: jump_if_false (false) b82; - label b82: jump_if_false (false) b83; - label b83: jump_if_false (false) b84; - label b84: jump_if_false (false) b85; - label b85: jump_if_false (false) b86; - label b86: jump_if_false (false) b87; - label b87: jump_if_false (false) b88; - label b88: jump_if_false (false) b89; - label b89: jump_if_false (false) b90; - label b90: jump_if_false (false) b91; - label b91: jump_if_false (false) b92; - label b92: jump_if_false (false) b93; - label b93: jump_if_false (false) b94; - label b94: jump_if_false (false) b95; - label b95: jump_if_false (false) b96; - label b96: jump_if_false (false) b97; - label b97: jump_if_false (false) b98; - label b98: jump_if_false (false) b99; - label b99: jump_if_false (false) b100; - label b100: jump_if_false (false) b101; - label b101: jump_if_false (false) b102; - label b102: jump_if_false (false) b103; - label b103: jump_if_false (false) b104; - label b104: jump_if_false (false) b105; - label b105: jump_if_false (false) b106; - label b106: jump_if_false (false) b107; - label b107: jump_if_false (false) b108; - label b108: jump_if_false (false) b109; - label b109: jump_if_false (false) b110; - label b110: jump_if_false (false) b111; - label b111: jump_if_false (false) b112; - label b112: jump_if_false (false) b113; - label b113: jump_if_false (false) b114; - label b114: jump_if_false (false) b115; - label b115: jump_if_false (false) b116; - label b116: jump_if_false (false) b117; - label b117: jump_if_false (false) b118; - label b118: jump_if_false (false) b119; - label b119: jump_if_false (false) b120; - label b120: jump_if_false (false) b121; - label b121: jump_if_false (false) b122; - label b122: jump_if_false (false) b123; - label b123: jump_if_false (false) b124; - label b124: jump_if_false (false) b125; - label b125: jump_if_false (false) b126; - label b126: jump_if_false (false) b127; - label b127: jump_if_false (false) b128; - label b128: jump_if_false (false) b129; - label b129: jump_if_false (false) b130; - label b130: jump_if_false (false) b131; - label b131: jump_if_false (false) b132; - label b132: jump_if_false (false) b133; - label b133: jump_if_false (false) b134; - label b134: jump_if_false (false) b135; - label b135: jump_if_false (false) b136; - label b136: jump_if_false (false) b137; - label b137: jump_if_false (false) b138; - label b138: jump_if_false (false) b139; - label b139: jump_if_false (false) b140; - label b140: jump_if_false (false) b141; - label b141: jump_if_false (false) b142; - label b142: jump_if_false (false) b143; - label b143: jump_if_false (false) b144; - label b144: jump_if_false (false) b145; - label b145: jump_if_false (false) b146; - label b146: jump_if_false (false) b147; - label b147: jump_if_false (false) b148; - label b148: jump_if_false (false) b149; - label b149: jump_if_false (false) b150; - label b150: jump_if_false (false) b151; - label b151: jump_if_false (false) b152; - label b152: jump_if_false (false) b153; - label b153: jump_if_false (false) b154; - label b154: jump_if_false (false) b155; - label b155: jump_if_false (false) b156; - label b156: jump_if_false (false) b157; - label b157: jump_if_false (false) b158; - label b158: jump_if_false (false) b159; - label b159: jump_if_false (false) b160; - label b160: jump_if_false (false) b161; - label b161: jump_if_false (false) b162; - label b162: jump_if_false (false) b163; - label b163: jump_if_false (false) b164; - label b164: jump_if_false (false) b165; - label b165: jump_if_false (false) b166; - label b166: jump_if_false (false) b167; - label b167: jump_if_false (false) b168; - label b168: jump_if_false (false) b169; - label b169: jump_if_false (false) b170; - label b170: jump_if_false (false) b171; - label b171: jump_if_false (false) b172; - label b172: jump_if_false (false) b173; - label b173: jump_if_false (false) b174; - label b174: jump_if_false (false) b175; - label b175: jump_if_false (false) b176; - label b176: jump_if_false (false) b177; - label b177: jump_if_false (false) b178; - label b178: jump_if_false (false) b179; - label b179: jump_if_false (false) b180; - label b180: jump_if_false (false) b181; - label b181: jump_if_false (false) b182; - label b182: jump_if_false (false) b183; - label b183: jump_if_false (false) b184; - label b184: jump_if_false (false) b185; - label b185: jump_if_false (false) b186; - label b186: jump_if_false (false) b187; - label b187: jump_if_false (false) b188; - label b188: jump_if_false (false) b189; - label b189: jump_if_false (false) b190; - label b190: jump_if_false (false) b191; - label b191: jump_if_false (false) b192; - label b192: jump_if_false (false) b193; - label b193: jump_if_false (false) b194; - label b194: jump_if_false (false) b195; - label b195: jump_if_false (false) b196; - label b196: jump_if_false (false) b197; - label b197: jump_if_false (false) b198; - label b198: jump_if_false (false) b199; - label b199: jump_if_false (false) b200; - label b200: jump_if_false (false) b201; - label b201: jump_if_false (false) b202; - label b202: jump_if_false (false) b203; - label b203: jump_if_false (false) b204; - label b204: jump_if_false (false) b205; - label b205: jump_if_false (false) b206; - label b206: jump_if_false (false) b207; - label b207: jump_if_false (false) b208; - label b208: jump_if_false (false) b209; - label b209: jump_if_false (false) b210; - label b210: jump_if_false (false) b211; - label b211: jump_if_false (false) b212; - label b212: jump_if_false (false) b213; - label b213: jump_if_false (false) b214; - label b214: jump_if_false (false) b215; - label b215: jump_if_false (false) b216; - label b216: jump_if_false (false) b217; - label b217: jump_if_false (false) b218; - label b218: jump_if_false (false) b219; - label b219: jump_if_false (false) b220; - label b220: jump_if_false (false) b221; - label b221: jump_if_false (false) b222; - label b222: jump_if_false (false) b223; - label b223: jump_if_false (false) b224; - label b224: jump_if_false (false) b225; - label b225: jump_if_false (false) b226; - label b226: jump_if_false (false) b227; - label b227: jump_if_false (false) b228; - label b228: jump_if_false (false) b229; - label b229: jump_if_false (false) b230; - label b230: jump_if_false (false) b231; - label b231: jump_if_false (false) b232; - label b232: jump_if_false (false) b233; - label b233: jump_if_false (false) b234; - label b234: jump_if_false (false) b235; - label b235: jump_if_false (false) b236; - label b236: jump_if_false (false) b237; - label b237: jump_if_false (false) b238; - label b238: jump_if_false (false) b239; - label b239: jump_if_false (false) b240; - label b240: jump_if_false (false) b241; - label b241: jump_if_false (false) b242; - label b242: jump_if_false (false) b243; - label b243: jump_if_false (false) b244; - label b244: jump_if_false (false) b245; - label b245: jump_if_false (false) b246; - label b246: jump_if_false (false) b247; - label b247: jump_if_false (false) b248; - label b248: jump_if_false (false) b249; - label b249: jump_if_false (false) b250; - label b250: jump_if_false (false) b251; - label b251: jump_if_false (false) b252; - label b252: jump_if_false (false) b253; - label b253: jump_if_false (false) b254; - label b254: jump_if_false (false) b255; - label b255: jump_if_false (false) b256; - label b256: jump_if_false (false) b257; - label b257: jump_if_false (false) b258; - label b258: jump_if_false (false) b259; - label b259: jump_if_false (false) b260; - label b260: jump_if_false (false) b261; - label b261: jump_if_false (false) b262; - label b262: jump_if_false (false) b263; - label b263: jump_if_false (false) b264; - label b264: jump_if_false (false) b265; - label b265: jump_if_false (false) b266; - label b266: jump_if_false (false) b267; - label b267: jump_if_false (false) b268; - label b268: jump_if_false (false) b269; - label b269: jump_if_false (false) b270; - label b270: jump_if_false (false) b271; - label b271: jump_if_false (false) b272; - label b272: jump_if_false (false) b273; - label b273: jump_if_false (false) b274; - label b274: jump_if_false (false) b275; - label b275: jump_if_false (false) b276; - label b276: jump_if_false (false) b277; - label b277: jump_if_false (false) b278; - label b278: jump_if_false (false) b279; - label b279: jump_if_false (false) b280; - label b280: jump_if_false (false) b281; - label b281: jump_if_false (false) b282; - label b282: jump_if_false (false) b283; - label b283: jump_if_false (false) b284; - label b284: jump_if_false (false) b285; - label b285: jump_if_false (false) b286; - label b286: jump_if_false (false) b287; - label b287: jump_if_false (false) b288; - label b288: jump_if_false (false) b289; - label b289: jump_if_false (false) b290; - label b290: jump_if_false (false) b291; - label b291: jump_if_false (false) b292; - label b292: jump_if_false (false) b293; - label b293: jump_if_false (false) b294; - label b294: jump_if_false (false) b295; - label b295: jump_if_false (false) b296; - label b296: jump_if_false (false) b297; - label b297: jump_if_false (false) b298; - label b298: jump_if_false (false) b299; - label b299: jump_if_false (false) b300; - label b300: jump_if_false (false) b301; - label b301: jump_if_false (false) b302; - label b302: jump_if_false (false) b303; - label b303: jump_if_false (false) b304; - label b304: jump_if_false (false) b305; - label b305: jump_if_false (false) b306; - label b306: jump_if_false (false) b307; - label b307: jump_if_false (false) b308; - label b308: jump_if_false (false) b309; - label b309: jump_if_false (false) b310; - label b310: jump_if_false (false) b311; - label b311: jump_if_false (false) b312; - label b312: jump_if_false (false) b313; - label b313: jump_if_false (false) b314; - label b314: jump_if_false (false) b315; - label b315: jump_if_false (false) b316; - label b316: jump_if_false (false) b317; - label b317: jump_if_false (false) b318; - label b318: jump_if_false (false) b319; - label b319: jump_if_false (false) b320; - label b320: jump_if_false (false) b321; - label b321: jump_if_false (false) b322; - label b322: jump_if_false (false) b323; - label b323: jump_if_false (false) b324; - label b324: jump_if_false (false) b325; - label b325: jump_if_false (false) b326; - label b326: jump_if_false (false) b327; - label b327: jump_if_false (false) b328; - label b328: jump_if_false (false) b329; - label b329: jump_if_false (false) b330; - label b330: jump_if_false (false) b331; - label b331: jump_if_false (false) b332; - label b332: jump_if_false (false) b333; - label b333: jump_if_false (false) b334; - label b334: jump_if_false (false) b335; - label b335: jump_if_false (false) b336; - label b336: jump_if_false (false) b337; - label b337: jump_if_false (false) b338; - label b338: jump_if_false (false) b339; - label b339: jump_if_false (false) b340; - label b340: jump_if_false (false) b341; - label b341: jump_if_false (false) b342; - label b342: jump_if_false (false) b343; - label b343: jump_if_false (false) b344; - label b344: jump_if_false (false) b345; - label b345: jump_if_false (false) b346; - label b346: jump_if_false (false) b347; - label b347: jump_if_false (false) b348; - label b348: jump_if_false (false) b349; - label b349: jump_if_false (false) b350; - label b350: jump_if_false (false) b351; - label b351: jump_if_false (false) b352; - label b352: jump_if_false (false) b353; - label b353: jump_if_false (false) b354; - label b354: jump_if_false (false) b355; - label b355: jump_if_false (false) b356; - label b356: jump_if_false (false) b357; - label b357: jump_if_false (false) b358; - label b358: jump_if_false (false) b359; - label b359: jump_if_false (false) b360; - label b360: jump_if_false (false) b361; - label b361: jump_if_false (false) b362; - label b362: jump_if_false (false) b363; - label b363: jump_if_false (false) b364; - label b364: jump_if_false (false) b365; - label b365: jump_if_false (false) b366; - label b366: jump_if_false (false) b367; - label b367: jump_if_false (false) b368; - label b368: jump_if_false (false) b369; - label b369: jump_if_false (false) b370; - label b370: jump_if_false (false) b371; - label b371: jump_if_false (false) b372; - label b372: jump_if_false (false) b373; - label b373: jump_if_false (false) b374; - label b374: jump_if_false (false) b375; - label b375: jump_if_false (false) b376; - label b376: jump_if_false (false) b377; - label b377: jump_if_false (false) b378; - label b378: jump_if_false (false) b379; - label b379: jump_if_false (false) b380; - label b380: jump_if_false (false) b381; - label b381: jump_if_false (false) b382; - label b382: jump_if_false (false) b383; - label b383: jump_if_false (false) b384; - label b384: jump_if_false (false) b385; - label b385: jump_if_false (false) b386; - label b386: jump_if_false (false) b387; - label b387: jump_if_false (false) b388; - label b388: jump_if_false (false) b389; - label b389: jump_if_false (false) b390; - label b390: jump_if_false (false) b391; - label b391: jump_if_false (false) b392; - label b392: jump_if_false (false) b393; - label b393: jump_if_false (false) b394; - label b394: jump_if_false (false) b395; - label b395: jump_if_false (false) b396; - label b396: jump_if_false (false) b397; - label b397: jump_if_false (false) b398; - label b398: jump_if_false (false) b399; - label b399: jump_if_false (false) b400; - label b400: jump_if_false (false) b401; - label b401: jump_if_false (false) b402; - label b402: jump_if_false (false) b403; - label b403: jump_if_false (false) b404; - label b404: jump_if_false (false) b405; - label b405: jump_if_false (false) b406; - label b406: jump_if_false (false) b407; - label b407: jump_if_false (false) b408; - label b408: jump_if_false (false) b409; - label b409: jump_if_false (false) b410; - label b410: jump_if_false (false) b411; - label b411: jump_if_false (false) b412; - label b412: jump_if_false (false) b413; - label b413: jump_if_false (false) b414; - label b414: jump_if_false (false) b415; - label b415: jump_if_false (false) b416; - label b416: jump_if_false (false) b417; - label b417: jump_if_false (false) b418; - label b418: jump_if_false (false) b419; - label b419: jump_if_false (false) b420; - label b420: jump_if_false (false) b421; - label b421: jump_if_false (false) b422; - label b422: jump_if_false (false) b423; - label b423: jump_if_false (false) b424; - label b424: jump_if_false (false) b425; - label b425: jump_if_false (false) b426; - label b426: jump_if_false (false) b427; - label b427: jump_if_false (false) b428; - label b428: jump_if_false (false) b429; - label b429: jump_if_false (false) b430; - label b430: jump_if_false (false) b431; - label b431: jump_if_false (false) b432; - label b432: jump_if_false (false) b433; - label b433: jump_if_false (false) b434; - label b434: jump_if_false (false) b435; - label b435: jump_if_false (false) b436; - label b436: jump_if_false (false) b437; - label b437: jump_if_false (false) b438; - label b438: jump_if_false (false) b439; - label b439: jump_if_false (false) b440; - label b440: jump_if_false (false) b441; - label b441: jump_if_false (false) b442; - label b442: jump_if_false (false) b443; - label b443: jump_if_false (false) b444; - label b444: jump_if_false (false) b445; - label b445: jump_if_false (false) b446; - label b446: jump_if_false (false) b447; - label b447: jump_if_false (false) b448; - label b448: jump_if_false (false) b449; - label b449: jump_if_false (false) b450; - label b450: jump_if_false (false) b451; - label b451: jump_if_false (false) b452; - label b452: jump_if_false (false) b453; - label b453: jump_if_false (false) b454; - label b454: jump_if_false (false) b455; - label b455: jump_if_false (false) b456; - label b456: jump_if_false (false) b457; - label b457: jump_if_false (false) b458; - label b458: jump_if_false (false) b459; - label b459: jump_if_false (false) b460; - label b460: jump_if_false (false) b461; - label b461: jump_if_false (false) b462; - label b462: jump_if_false (false) b463; - label b463: jump_if_false (false) b464; - label b464: jump_if_false (false) b465; - label b465: jump_if_false (false) b466; - label b466: jump_if_false (false) b467; - label b467: jump_if_false (false) b468; - label b468: jump_if_false (false) b469; - label b469: jump_if_false (false) b470; - label b470: jump_if_false (false) b471; - label b471: jump_if_false (false) b472; - label b472: jump_if_false (false) b473; - label b473: jump_if_false (false) b474; - label b474: jump_if_false (false) b475; - label b475: jump_if_false (false) b476; - label b476: jump_if_false (false) b477; - label b477: jump_if_false (false) b478; - label b478: jump_if_false (false) b479; - label b479: jump_if_false (false) b480; - label b480: jump_if_false (false) b481; - label b481: jump_if_false (false) b482; - label b482: jump_if_false (false) b483; - label b483: jump_if_false (false) b484; - label b484: jump_if_false (false) b485; - label b485: jump_if_false (false) b486; - label b486: jump_if_false (false) b487; - label b487: jump_if_false (false) b488; - label b488: jump_if_false (false) b489; - label b489: jump_if_false (false) b490; - label b490: jump_if_false (false) b491; - label b491: jump_if_false (false) b492; - label b492: jump_if_false (false) b493; - label b493: jump_if_false (false) b494; - label b494: jump_if_false (false) b495; - label b495: jump_if_false (false) b496; - label b496: jump_if_false (false) b497; - label b497: jump_if_false (false) b498; - label b498: jump_if_false (false) b499; - label b499: jump_if_false (false) b500; - label b500: - return; - } - - public entry calibrate_br_false_x1000() { - label b0: jump_if_false (false) b1; - label b1: jump_if_false (false) b2; - label b2: jump_if_false (false) b3; - label b3: jump_if_false (false) b4; - label b4: jump_if_false (false) b5; - label b5: jump_if_false (false) b6; - label b6: jump_if_false (false) b7; - label b7: jump_if_false (false) b8; - label b8: jump_if_false (false) b9; - label b9: jump_if_false (false) b10; - label b10: jump_if_false (false) b11; - label b11: jump_if_false (false) b12; - label b12: jump_if_false (false) b13; - label b13: jump_if_false (false) b14; - label b14: jump_if_false (false) b15; - label b15: jump_if_false (false) b16; - label b16: jump_if_false (false) b17; - label b17: jump_if_false (false) b18; - label b18: jump_if_false (false) b19; - label b19: jump_if_false (false) b20; - label b20: jump_if_false (false) b21; - label b21: jump_if_false (false) b22; - label b22: jump_if_false (false) b23; - label b23: jump_if_false (false) b24; - label b24: jump_if_false (false) b25; - label b25: jump_if_false (false) b26; - label b26: jump_if_false (false) b27; - label b27: jump_if_false (false) b28; - label b28: jump_if_false (false) b29; - label b29: jump_if_false (false) b30; - label b30: jump_if_false (false) b31; - label b31: jump_if_false (false) b32; - label b32: jump_if_false (false) b33; - label b33: jump_if_false (false) b34; - label b34: jump_if_false (false) b35; - label b35: jump_if_false (false) b36; - label b36: jump_if_false (false) b37; - label b37: jump_if_false (false) b38; - label b38: jump_if_false (false) b39; - label b39: jump_if_false (false) b40; - label b40: jump_if_false (false) b41; - label b41: jump_if_false (false) b42; - label b42: jump_if_false (false) b43; - label b43: jump_if_false (false) b44; - label b44: jump_if_false (false) b45; - label b45: jump_if_false (false) b46; - label b46: jump_if_false (false) b47; - label b47: jump_if_false (false) b48; - label b48: jump_if_false (false) b49; - label b49: jump_if_false (false) b50; - label b50: jump_if_false (false) b51; - label b51: jump_if_false (false) b52; - label b52: jump_if_false (false) b53; - label b53: jump_if_false (false) b54; - label b54: jump_if_false (false) b55; - label b55: jump_if_false (false) b56; - label b56: jump_if_false (false) b57; - label b57: jump_if_false (false) b58; - label b58: jump_if_false (false) b59; - label b59: jump_if_false (false) b60; - label b60: jump_if_false (false) b61; - label b61: jump_if_false (false) b62; - label b62: jump_if_false (false) b63; - label b63: jump_if_false (false) b64; - label b64: jump_if_false (false) b65; - label b65: jump_if_false (false) b66; - label b66: jump_if_false (false) b67; - label b67: jump_if_false (false) b68; - label b68: jump_if_false (false) b69; - label b69: jump_if_false (false) b70; - label b70: jump_if_false (false) b71; - label b71: jump_if_false (false) b72; - label b72: jump_if_false (false) b73; - label b73: jump_if_false (false) b74; - label b74: jump_if_false (false) b75; - label b75: jump_if_false (false) b76; - label b76: jump_if_false (false) b77; - label b77: jump_if_false (false) b78; - label b78: jump_if_false (false) b79; - label b79: jump_if_false (false) b80; - label b80: jump_if_false (false) b81; - label b81: jump_if_false (false) b82; - label b82: jump_if_false (false) b83; - label b83: jump_if_false (false) b84; - label b84: jump_if_false (false) b85; - label b85: jump_if_false (false) b86; - label b86: jump_if_false (false) b87; - label b87: jump_if_false (false) b88; - label b88: jump_if_false (false) b89; - label b89: jump_if_false (false) b90; - label b90: jump_if_false (false) b91; - label b91: jump_if_false (false) b92; - label b92: jump_if_false (false) b93; - label b93: jump_if_false (false) b94; - label b94: jump_if_false (false) b95; - label b95: jump_if_false (false) b96; - label b96: jump_if_false (false) b97; - label b97: jump_if_false (false) b98; - label b98: jump_if_false (false) b99; - label b99: jump_if_false (false) b100; - label b100: jump_if_false (false) b101; - label b101: jump_if_false (false) b102; - label b102: jump_if_false (false) b103; - label b103: jump_if_false (false) b104; - label b104: jump_if_false (false) b105; - label b105: jump_if_false (false) b106; - label b106: jump_if_false (false) b107; - label b107: jump_if_false (false) b108; - label b108: jump_if_false (false) b109; - label b109: jump_if_false (false) b110; - label b110: jump_if_false (false) b111; - label b111: jump_if_false (false) b112; - label b112: jump_if_false (false) b113; - label b113: jump_if_false (false) b114; - label b114: jump_if_false (false) b115; - label b115: jump_if_false (false) b116; - label b116: jump_if_false (false) b117; - label b117: jump_if_false (false) b118; - label b118: jump_if_false (false) b119; - label b119: jump_if_false (false) b120; - label b120: jump_if_false (false) b121; - label b121: jump_if_false (false) b122; - label b122: jump_if_false (false) b123; - label b123: jump_if_false (false) b124; - label b124: jump_if_false (false) b125; - label b125: jump_if_false (false) b126; - label b126: jump_if_false (false) b127; - label b127: jump_if_false (false) b128; - label b128: jump_if_false (false) b129; - label b129: jump_if_false (false) b130; - label b130: jump_if_false (false) b131; - label b131: jump_if_false (false) b132; - label b132: jump_if_false (false) b133; - label b133: jump_if_false (false) b134; - label b134: jump_if_false (false) b135; - label b135: jump_if_false (false) b136; - label b136: jump_if_false (false) b137; - label b137: jump_if_false (false) b138; - label b138: jump_if_false (false) b139; - label b139: jump_if_false (false) b140; - label b140: jump_if_false (false) b141; - label b141: jump_if_false (false) b142; - label b142: jump_if_false (false) b143; - label b143: jump_if_false (false) b144; - label b144: jump_if_false (false) b145; - label b145: jump_if_false (false) b146; - label b146: jump_if_false (false) b147; - label b147: jump_if_false (false) b148; - label b148: jump_if_false (false) b149; - label b149: jump_if_false (false) b150; - label b150: jump_if_false (false) b151; - label b151: jump_if_false (false) b152; - label b152: jump_if_false (false) b153; - label b153: jump_if_false (false) b154; - label b154: jump_if_false (false) b155; - label b155: jump_if_false (false) b156; - label b156: jump_if_false (false) b157; - label b157: jump_if_false (false) b158; - label b158: jump_if_false (false) b159; - label b159: jump_if_false (false) b160; - label b160: jump_if_false (false) b161; - label b161: jump_if_false (false) b162; - label b162: jump_if_false (false) b163; - label b163: jump_if_false (false) b164; - label b164: jump_if_false (false) b165; - label b165: jump_if_false (false) b166; - label b166: jump_if_false (false) b167; - label b167: jump_if_false (false) b168; - label b168: jump_if_false (false) b169; - label b169: jump_if_false (false) b170; - label b170: jump_if_false (false) b171; - label b171: jump_if_false (false) b172; - label b172: jump_if_false (false) b173; - label b173: jump_if_false (false) b174; - label b174: jump_if_false (false) b175; - label b175: jump_if_false (false) b176; - label b176: jump_if_false (false) b177; - label b177: jump_if_false (false) b178; - label b178: jump_if_false (false) b179; - label b179: jump_if_false (false) b180; - label b180: jump_if_false (false) b181; - label b181: jump_if_false (false) b182; - label b182: jump_if_false (false) b183; - label b183: jump_if_false (false) b184; - label b184: jump_if_false (false) b185; - label b185: jump_if_false (false) b186; - label b186: jump_if_false (false) b187; - label b187: jump_if_false (false) b188; - label b188: jump_if_false (false) b189; - label b189: jump_if_false (false) b190; - label b190: jump_if_false (false) b191; - label b191: jump_if_false (false) b192; - label b192: jump_if_false (false) b193; - label b193: jump_if_false (false) b194; - label b194: jump_if_false (false) b195; - label b195: jump_if_false (false) b196; - label b196: jump_if_false (false) b197; - label b197: jump_if_false (false) b198; - label b198: jump_if_false (false) b199; - label b199: jump_if_false (false) b200; - label b200: jump_if_false (false) b201; - label b201: jump_if_false (false) b202; - label b202: jump_if_false (false) b203; - label b203: jump_if_false (false) b204; - label b204: jump_if_false (false) b205; - label b205: jump_if_false (false) b206; - label b206: jump_if_false (false) b207; - label b207: jump_if_false (false) b208; - label b208: jump_if_false (false) b209; - label b209: jump_if_false (false) b210; - label b210: jump_if_false (false) b211; - label b211: jump_if_false (false) b212; - label b212: jump_if_false (false) b213; - label b213: jump_if_false (false) b214; - label b214: jump_if_false (false) b215; - label b215: jump_if_false (false) b216; - label b216: jump_if_false (false) b217; - label b217: jump_if_false (false) b218; - label b218: jump_if_false (false) b219; - label b219: jump_if_false (false) b220; - label b220: jump_if_false (false) b221; - label b221: jump_if_false (false) b222; - label b222: jump_if_false (false) b223; - label b223: jump_if_false (false) b224; - label b224: jump_if_false (false) b225; - label b225: jump_if_false (false) b226; - label b226: jump_if_false (false) b227; - label b227: jump_if_false (false) b228; - label b228: jump_if_false (false) b229; - label b229: jump_if_false (false) b230; - label b230: jump_if_false (false) b231; - label b231: jump_if_false (false) b232; - label b232: jump_if_false (false) b233; - label b233: jump_if_false (false) b234; - label b234: jump_if_false (false) b235; - label b235: jump_if_false (false) b236; - label b236: jump_if_false (false) b237; - label b237: jump_if_false (false) b238; - label b238: jump_if_false (false) b239; - label b239: jump_if_false (false) b240; - label b240: jump_if_false (false) b241; - label b241: jump_if_false (false) b242; - label b242: jump_if_false (false) b243; - label b243: jump_if_false (false) b244; - label b244: jump_if_false (false) b245; - label b245: jump_if_false (false) b246; - label b246: jump_if_false (false) b247; - label b247: jump_if_false (false) b248; - label b248: jump_if_false (false) b249; - label b249: jump_if_false (false) b250; - label b250: jump_if_false (false) b251; - label b251: jump_if_false (false) b252; - label b252: jump_if_false (false) b253; - label b253: jump_if_false (false) b254; - label b254: jump_if_false (false) b255; - label b255: jump_if_false (false) b256; - label b256: jump_if_false (false) b257; - label b257: jump_if_false (false) b258; - label b258: jump_if_false (false) b259; - label b259: jump_if_false (false) b260; - label b260: jump_if_false (false) b261; - label b261: jump_if_false (false) b262; - label b262: jump_if_false (false) b263; - label b263: jump_if_false (false) b264; - label b264: jump_if_false (false) b265; - label b265: jump_if_false (false) b266; - label b266: jump_if_false (false) b267; - label b267: jump_if_false (false) b268; - label b268: jump_if_false (false) b269; - label b269: jump_if_false (false) b270; - label b270: jump_if_false (false) b271; - label b271: jump_if_false (false) b272; - label b272: jump_if_false (false) b273; - label b273: jump_if_false (false) b274; - label b274: jump_if_false (false) b275; - label b275: jump_if_false (false) b276; - label b276: jump_if_false (false) b277; - label b277: jump_if_false (false) b278; - label b278: jump_if_false (false) b279; - label b279: jump_if_false (false) b280; - label b280: jump_if_false (false) b281; - label b281: jump_if_false (false) b282; - label b282: jump_if_false (false) b283; - label b283: jump_if_false (false) b284; - label b284: jump_if_false (false) b285; - label b285: jump_if_false (false) b286; - label b286: jump_if_false (false) b287; - label b287: jump_if_false (false) b288; - label b288: jump_if_false (false) b289; - label b289: jump_if_false (false) b290; - label b290: jump_if_false (false) b291; - label b291: jump_if_false (false) b292; - label b292: jump_if_false (false) b293; - label b293: jump_if_false (false) b294; - label b294: jump_if_false (false) b295; - label b295: jump_if_false (false) b296; - label b296: jump_if_false (false) b297; - label b297: jump_if_false (false) b298; - label b298: jump_if_false (false) b299; - label b299: jump_if_false (false) b300; - label b300: jump_if_false (false) b301; - label b301: jump_if_false (false) b302; - label b302: jump_if_false (false) b303; - label b303: jump_if_false (false) b304; - label b304: jump_if_false (false) b305; - label b305: jump_if_false (false) b306; - label b306: jump_if_false (false) b307; - label b307: jump_if_false (false) b308; - label b308: jump_if_false (false) b309; - label b309: jump_if_false (false) b310; - label b310: jump_if_false (false) b311; - label b311: jump_if_false (false) b312; - label b312: jump_if_false (false) b313; - label b313: jump_if_false (false) b314; - label b314: jump_if_false (false) b315; - label b315: jump_if_false (false) b316; - label b316: jump_if_false (false) b317; - label b317: jump_if_false (false) b318; - label b318: jump_if_false (false) b319; - label b319: jump_if_false (false) b320; - label b320: jump_if_false (false) b321; - label b321: jump_if_false (false) b322; - label b322: jump_if_false (false) b323; - label b323: jump_if_false (false) b324; - label b324: jump_if_false (false) b325; - label b325: jump_if_false (false) b326; - label b326: jump_if_false (false) b327; - label b327: jump_if_false (false) b328; - label b328: jump_if_false (false) b329; - label b329: jump_if_false (false) b330; - label b330: jump_if_false (false) b331; - label b331: jump_if_false (false) b332; - label b332: jump_if_false (false) b333; - label b333: jump_if_false (false) b334; - label b334: jump_if_false (false) b335; - label b335: jump_if_false (false) b336; - label b336: jump_if_false (false) b337; - label b337: jump_if_false (false) b338; - label b338: jump_if_false (false) b339; - label b339: jump_if_false (false) b340; - label b340: jump_if_false (false) b341; - label b341: jump_if_false (false) b342; - label b342: jump_if_false (false) b343; - label b343: jump_if_false (false) b344; - label b344: jump_if_false (false) b345; - label b345: jump_if_false (false) b346; - label b346: jump_if_false (false) b347; - label b347: jump_if_false (false) b348; - label b348: jump_if_false (false) b349; - label b349: jump_if_false (false) b350; - label b350: jump_if_false (false) b351; - label b351: jump_if_false (false) b352; - label b352: jump_if_false (false) b353; - label b353: jump_if_false (false) b354; - label b354: jump_if_false (false) b355; - label b355: jump_if_false (false) b356; - label b356: jump_if_false (false) b357; - label b357: jump_if_false (false) b358; - label b358: jump_if_false (false) b359; - label b359: jump_if_false (false) b360; - label b360: jump_if_false (false) b361; - label b361: jump_if_false (false) b362; - label b362: jump_if_false (false) b363; - label b363: jump_if_false (false) b364; - label b364: jump_if_false (false) b365; - label b365: jump_if_false (false) b366; - label b366: jump_if_false (false) b367; - label b367: jump_if_false (false) b368; - label b368: jump_if_false (false) b369; - label b369: jump_if_false (false) b370; - label b370: jump_if_false (false) b371; - label b371: jump_if_false (false) b372; - label b372: jump_if_false (false) b373; - label b373: jump_if_false (false) b374; - label b374: jump_if_false (false) b375; - label b375: jump_if_false (false) b376; - label b376: jump_if_false (false) b377; - label b377: jump_if_false (false) b378; - label b378: jump_if_false (false) b379; - label b379: jump_if_false (false) b380; - label b380: jump_if_false (false) b381; - label b381: jump_if_false (false) b382; - label b382: jump_if_false (false) b383; - label b383: jump_if_false (false) b384; - label b384: jump_if_false (false) b385; - label b385: jump_if_false (false) b386; - label b386: jump_if_false (false) b387; - label b387: jump_if_false (false) b388; - label b388: jump_if_false (false) b389; - label b389: jump_if_false (false) b390; - label b390: jump_if_false (false) b391; - label b391: jump_if_false (false) b392; - label b392: jump_if_false (false) b393; - label b393: jump_if_false (false) b394; - label b394: jump_if_false (false) b395; - label b395: jump_if_false (false) b396; - label b396: jump_if_false (false) b397; - label b397: jump_if_false (false) b398; - label b398: jump_if_false (false) b399; - label b399: jump_if_false (false) b400; - label b400: jump_if_false (false) b401; - label b401: jump_if_false (false) b402; - label b402: jump_if_false (false) b403; - label b403: jump_if_false (false) b404; - label b404: jump_if_false (false) b405; - label b405: jump_if_false (false) b406; - label b406: jump_if_false (false) b407; - label b407: jump_if_false (false) b408; - label b408: jump_if_false (false) b409; - label b409: jump_if_false (false) b410; - label b410: jump_if_false (false) b411; - label b411: jump_if_false (false) b412; - label b412: jump_if_false (false) b413; - label b413: jump_if_false (false) b414; - label b414: jump_if_false (false) b415; - label b415: jump_if_false (false) b416; - label b416: jump_if_false (false) b417; - label b417: jump_if_false (false) b418; - label b418: jump_if_false (false) b419; - label b419: jump_if_false (false) b420; - label b420: jump_if_false (false) b421; - label b421: jump_if_false (false) b422; - label b422: jump_if_false (false) b423; - label b423: jump_if_false (false) b424; - label b424: jump_if_false (false) b425; - label b425: jump_if_false (false) b426; - label b426: jump_if_false (false) b427; - label b427: jump_if_false (false) b428; - label b428: jump_if_false (false) b429; - label b429: jump_if_false (false) b430; - label b430: jump_if_false (false) b431; - label b431: jump_if_false (false) b432; - label b432: jump_if_false (false) b433; - label b433: jump_if_false (false) b434; - label b434: jump_if_false (false) b435; - label b435: jump_if_false (false) b436; - label b436: jump_if_false (false) b437; - label b437: jump_if_false (false) b438; - label b438: jump_if_false (false) b439; - label b439: jump_if_false (false) b440; - label b440: jump_if_false (false) b441; - label b441: jump_if_false (false) b442; - label b442: jump_if_false (false) b443; - label b443: jump_if_false (false) b444; - label b444: jump_if_false (false) b445; - label b445: jump_if_false (false) b446; - label b446: jump_if_false (false) b447; - label b447: jump_if_false (false) b448; - label b448: jump_if_false (false) b449; - label b449: jump_if_false (false) b450; - label b450: jump_if_false (false) b451; - label b451: jump_if_false (false) b452; - label b452: jump_if_false (false) b453; - label b453: jump_if_false (false) b454; - label b454: jump_if_false (false) b455; - label b455: jump_if_false (false) b456; - label b456: jump_if_false (false) b457; - label b457: jump_if_false (false) b458; - label b458: jump_if_false (false) b459; - label b459: jump_if_false (false) b460; - label b460: jump_if_false (false) b461; - label b461: jump_if_false (false) b462; - label b462: jump_if_false (false) b463; - label b463: jump_if_false (false) b464; - label b464: jump_if_false (false) b465; - label b465: jump_if_false (false) b466; - label b466: jump_if_false (false) b467; - label b467: jump_if_false (false) b468; - label b468: jump_if_false (false) b469; - label b469: jump_if_false (false) b470; - label b470: jump_if_false (false) b471; - label b471: jump_if_false (false) b472; - label b472: jump_if_false (false) b473; - label b473: jump_if_false (false) b474; - label b474: jump_if_false (false) b475; - label b475: jump_if_false (false) b476; - label b476: jump_if_false (false) b477; - label b477: jump_if_false (false) b478; - label b478: jump_if_false (false) b479; - label b479: jump_if_false (false) b480; - label b480: jump_if_false (false) b481; - label b481: jump_if_false (false) b482; - label b482: jump_if_false (false) b483; - label b483: jump_if_false (false) b484; - label b484: jump_if_false (false) b485; - label b485: jump_if_false (false) b486; - label b486: jump_if_false (false) b487; - label b487: jump_if_false (false) b488; - label b488: jump_if_false (false) b489; - label b489: jump_if_false (false) b490; - label b490: jump_if_false (false) b491; - label b491: jump_if_false (false) b492; - label b492: jump_if_false (false) b493; - label b493: jump_if_false (false) b494; - label b494: jump_if_false (false) b495; - label b495: jump_if_false (false) b496; - label b496: jump_if_false (false) b497; - label b497: jump_if_false (false) b498; - label b498: jump_if_false (false) b499; - label b499: jump_if_false (false) b500; - label b500: jump_if_false (false) b501; - label b501: jump_if_false (false) b502; - label b502: jump_if_false (false) b503; - label b503: jump_if_false (false) b504; - label b504: jump_if_false (false) b505; - label b505: jump_if_false (false) b506; - label b506: jump_if_false (false) b507; - label b507: jump_if_false (false) b508; - label b508: jump_if_false (false) b509; - label b509: jump_if_false (false) b510; - label b510: jump_if_false (false) b511; - label b511: jump_if_false (false) b512; - label b512: jump_if_false (false) b513; - label b513: jump_if_false (false) b514; - label b514: jump_if_false (false) b515; - label b515: jump_if_false (false) b516; - label b516: jump_if_false (false) b517; - label b517: jump_if_false (false) b518; - label b518: jump_if_false (false) b519; - label b519: jump_if_false (false) b520; - label b520: jump_if_false (false) b521; - label b521: jump_if_false (false) b522; - label b522: jump_if_false (false) b523; - label b523: jump_if_false (false) b524; - label b524: jump_if_false (false) b525; - label b525: jump_if_false (false) b526; - label b526: jump_if_false (false) b527; - label b527: jump_if_false (false) b528; - label b528: jump_if_false (false) b529; - label b529: jump_if_false (false) b530; - label b530: jump_if_false (false) b531; - label b531: jump_if_false (false) b532; - label b532: jump_if_false (false) b533; - label b533: jump_if_false (false) b534; - label b534: jump_if_false (false) b535; - label b535: jump_if_false (false) b536; - label b536: jump_if_false (false) b537; - label b537: jump_if_false (false) b538; - label b538: jump_if_false (false) b539; - label b539: jump_if_false (false) b540; - label b540: jump_if_false (false) b541; - label b541: jump_if_false (false) b542; - label b542: jump_if_false (false) b543; - label b543: jump_if_false (false) b544; - label b544: jump_if_false (false) b545; - label b545: jump_if_false (false) b546; - label b546: jump_if_false (false) b547; - label b547: jump_if_false (false) b548; - label b548: jump_if_false (false) b549; - label b549: jump_if_false (false) b550; - label b550: jump_if_false (false) b551; - label b551: jump_if_false (false) b552; - label b552: jump_if_false (false) b553; - label b553: jump_if_false (false) b554; - label b554: jump_if_false (false) b555; - label b555: jump_if_false (false) b556; - label b556: jump_if_false (false) b557; - label b557: jump_if_false (false) b558; - label b558: jump_if_false (false) b559; - label b559: jump_if_false (false) b560; - label b560: jump_if_false (false) b561; - label b561: jump_if_false (false) b562; - label b562: jump_if_false (false) b563; - label b563: jump_if_false (false) b564; - label b564: jump_if_false (false) b565; - label b565: jump_if_false (false) b566; - label b566: jump_if_false (false) b567; - label b567: jump_if_false (false) b568; - label b568: jump_if_false (false) b569; - label b569: jump_if_false (false) b570; - label b570: jump_if_false (false) b571; - label b571: jump_if_false (false) b572; - label b572: jump_if_false (false) b573; - label b573: jump_if_false (false) b574; - label b574: jump_if_false (false) b575; - label b575: jump_if_false (false) b576; - label b576: jump_if_false (false) b577; - label b577: jump_if_false (false) b578; - label b578: jump_if_false (false) b579; - label b579: jump_if_false (false) b580; - label b580: jump_if_false (false) b581; - label b581: jump_if_false (false) b582; - label b582: jump_if_false (false) b583; - label b583: jump_if_false (false) b584; - label b584: jump_if_false (false) b585; - label b585: jump_if_false (false) b586; - label b586: jump_if_false (false) b587; - label b587: jump_if_false (false) b588; - label b588: jump_if_false (false) b589; - label b589: jump_if_false (false) b590; - label b590: jump_if_false (false) b591; - label b591: jump_if_false (false) b592; - label b592: jump_if_false (false) b593; - label b593: jump_if_false (false) b594; - label b594: jump_if_false (false) b595; - label b595: jump_if_false (false) b596; - label b596: jump_if_false (false) b597; - label b597: jump_if_false (false) b598; - label b598: jump_if_false (false) b599; - label b599: jump_if_false (false) b600; - label b600: jump_if_false (false) b601; - label b601: jump_if_false (false) b602; - label b602: jump_if_false (false) b603; - label b603: jump_if_false (false) b604; - label b604: jump_if_false (false) b605; - label b605: jump_if_false (false) b606; - label b606: jump_if_false (false) b607; - label b607: jump_if_false (false) b608; - label b608: jump_if_false (false) b609; - label b609: jump_if_false (false) b610; - label b610: jump_if_false (false) b611; - label b611: jump_if_false (false) b612; - label b612: jump_if_false (false) b613; - label b613: jump_if_false (false) b614; - label b614: jump_if_false (false) b615; - label b615: jump_if_false (false) b616; - label b616: jump_if_false (false) b617; - label b617: jump_if_false (false) b618; - label b618: jump_if_false (false) b619; - label b619: jump_if_false (false) b620; - label b620: jump_if_false (false) b621; - label b621: jump_if_false (false) b622; - label b622: jump_if_false (false) b623; - label b623: jump_if_false (false) b624; - label b624: jump_if_false (false) b625; - label b625: jump_if_false (false) b626; - label b626: jump_if_false (false) b627; - label b627: jump_if_false (false) b628; - label b628: jump_if_false (false) b629; - label b629: jump_if_false (false) b630; - label b630: jump_if_false (false) b631; - label b631: jump_if_false (false) b632; - label b632: jump_if_false (false) b633; - label b633: jump_if_false (false) b634; - label b634: jump_if_false (false) b635; - label b635: jump_if_false (false) b636; - label b636: jump_if_false (false) b637; - label b637: jump_if_false (false) b638; - label b638: jump_if_false (false) b639; - label b639: jump_if_false (false) b640; - label b640: jump_if_false (false) b641; - label b641: jump_if_false (false) b642; - label b642: jump_if_false (false) b643; - label b643: jump_if_false (false) b644; - label b644: jump_if_false (false) b645; - label b645: jump_if_false (false) b646; - label b646: jump_if_false (false) b647; - label b647: jump_if_false (false) b648; - label b648: jump_if_false (false) b649; - label b649: jump_if_false (false) b650; - label b650: jump_if_false (false) b651; - label b651: jump_if_false (false) b652; - label b652: jump_if_false (false) b653; - label b653: jump_if_false (false) b654; - label b654: jump_if_false (false) b655; - label b655: jump_if_false (false) b656; - label b656: jump_if_false (false) b657; - label b657: jump_if_false (false) b658; - label b658: jump_if_false (false) b659; - label b659: jump_if_false (false) b660; - label b660: jump_if_false (false) b661; - label b661: jump_if_false (false) b662; - label b662: jump_if_false (false) b663; - label b663: jump_if_false (false) b664; - label b664: jump_if_false (false) b665; - label b665: jump_if_false (false) b666; - label b666: jump_if_false (false) b667; - label b667: jump_if_false (false) b668; - label b668: jump_if_false (false) b669; - label b669: jump_if_false (false) b670; - label b670: jump_if_false (false) b671; - label b671: jump_if_false (false) b672; - label b672: jump_if_false (false) b673; - label b673: jump_if_false (false) b674; - label b674: jump_if_false (false) b675; - label b675: jump_if_false (false) b676; - label b676: jump_if_false (false) b677; - label b677: jump_if_false (false) b678; - label b678: jump_if_false (false) b679; - label b679: jump_if_false (false) b680; - label b680: jump_if_false (false) b681; - label b681: jump_if_false (false) b682; - label b682: jump_if_false (false) b683; - label b683: jump_if_false (false) b684; - label b684: jump_if_false (false) b685; - label b685: jump_if_false (false) b686; - label b686: jump_if_false (false) b687; - label b687: jump_if_false (false) b688; - label b688: jump_if_false (false) b689; - label b689: jump_if_false (false) b690; - label b690: jump_if_false (false) b691; - label b691: jump_if_false (false) b692; - label b692: jump_if_false (false) b693; - label b693: jump_if_false (false) b694; - label b694: jump_if_false (false) b695; - label b695: jump_if_false (false) b696; - label b696: jump_if_false (false) b697; - label b697: jump_if_false (false) b698; - label b698: jump_if_false (false) b699; - label b699: jump_if_false (false) b700; - label b700: jump_if_false (false) b701; - label b701: jump_if_false (false) b702; - label b702: jump_if_false (false) b703; - label b703: jump_if_false (false) b704; - label b704: jump_if_false (false) b705; - label b705: jump_if_false (false) b706; - label b706: jump_if_false (false) b707; - label b707: jump_if_false (false) b708; - label b708: jump_if_false (false) b709; - label b709: jump_if_false (false) b710; - label b710: jump_if_false (false) b711; - label b711: jump_if_false (false) b712; - label b712: jump_if_false (false) b713; - label b713: jump_if_false (false) b714; - label b714: jump_if_false (false) b715; - label b715: jump_if_false (false) b716; - label b716: jump_if_false (false) b717; - label b717: jump_if_false (false) b718; - label b718: jump_if_false (false) b719; - label b719: jump_if_false (false) b720; - label b720: jump_if_false (false) b721; - label b721: jump_if_false (false) b722; - label b722: jump_if_false (false) b723; - label b723: jump_if_false (false) b724; - label b724: jump_if_false (false) b725; - label b725: jump_if_false (false) b726; - label b726: jump_if_false (false) b727; - label b727: jump_if_false (false) b728; - label b728: jump_if_false (false) b729; - label b729: jump_if_false (false) b730; - label b730: jump_if_false (false) b731; - label b731: jump_if_false (false) b732; - label b732: jump_if_false (false) b733; - label b733: jump_if_false (false) b734; - label b734: jump_if_false (false) b735; - label b735: jump_if_false (false) b736; - label b736: jump_if_false (false) b737; - label b737: jump_if_false (false) b738; - label b738: jump_if_false (false) b739; - label b739: jump_if_false (false) b740; - label b740: jump_if_false (false) b741; - label b741: jump_if_false (false) b742; - label b742: jump_if_false (false) b743; - label b743: jump_if_false (false) b744; - label b744: jump_if_false (false) b745; - label b745: jump_if_false (false) b746; - label b746: jump_if_false (false) b747; - label b747: jump_if_false (false) b748; - label b748: jump_if_false (false) b749; - label b749: jump_if_false (false) b750; - label b750: jump_if_false (false) b751; - label b751: jump_if_false (false) b752; - label b752: jump_if_false (false) b753; - label b753: jump_if_false (false) b754; - label b754: jump_if_false (false) b755; - label b755: jump_if_false (false) b756; - label b756: jump_if_false (false) b757; - label b757: jump_if_false (false) b758; - label b758: jump_if_false (false) b759; - label b759: jump_if_false (false) b760; - label b760: jump_if_false (false) b761; - label b761: jump_if_false (false) b762; - label b762: jump_if_false (false) b763; - label b763: jump_if_false (false) b764; - label b764: jump_if_false (false) b765; - label b765: jump_if_false (false) b766; - label b766: jump_if_false (false) b767; - label b767: jump_if_false (false) b768; - label b768: jump_if_false (false) b769; - label b769: jump_if_false (false) b770; - label b770: jump_if_false (false) b771; - label b771: jump_if_false (false) b772; - label b772: jump_if_false (false) b773; - label b773: jump_if_false (false) b774; - label b774: jump_if_false (false) b775; - label b775: jump_if_false (false) b776; - label b776: jump_if_false (false) b777; - label b777: jump_if_false (false) b778; - label b778: jump_if_false (false) b779; - label b779: jump_if_false (false) b780; - label b780: jump_if_false (false) b781; - label b781: jump_if_false (false) b782; - label b782: jump_if_false (false) b783; - label b783: jump_if_false (false) b784; - label b784: jump_if_false (false) b785; - label b785: jump_if_false (false) b786; - label b786: jump_if_false (false) b787; - label b787: jump_if_false (false) b788; - label b788: jump_if_false (false) b789; - label b789: jump_if_false (false) b790; - label b790: jump_if_false (false) b791; - label b791: jump_if_false (false) b792; - label b792: jump_if_false (false) b793; - label b793: jump_if_false (false) b794; - label b794: jump_if_false (false) b795; - label b795: jump_if_false (false) b796; - label b796: jump_if_false (false) b797; - label b797: jump_if_false (false) b798; - label b798: jump_if_false (false) b799; - label b799: jump_if_false (false) b800; - label b800: jump_if_false (false) b801; - label b801: jump_if_false (false) b802; - label b802: jump_if_false (false) b803; - label b803: jump_if_false (false) b804; - label b804: jump_if_false (false) b805; - label b805: jump_if_false (false) b806; - label b806: jump_if_false (false) b807; - label b807: jump_if_false (false) b808; - label b808: jump_if_false (false) b809; - label b809: jump_if_false (false) b810; - label b810: jump_if_false (false) b811; - label b811: jump_if_false (false) b812; - label b812: jump_if_false (false) b813; - label b813: jump_if_false (false) b814; - label b814: jump_if_false (false) b815; - label b815: jump_if_false (false) b816; - label b816: jump_if_false (false) b817; - label b817: jump_if_false (false) b818; - label b818: jump_if_false (false) b819; - label b819: jump_if_false (false) b820; - label b820: jump_if_false (false) b821; - label b821: jump_if_false (false) b822; - label b822: jump_if_false (false) b823; - label b823: jump_if_false (false) b824; - label b824: jump_if_false (false) b825; - label b825: jump_if_false (false) b826; - label b826: jump_if_false (false) b827; - label b827: jump_if_false (false) b828; - label b828: jump_if_false (false) b829; - label b829: jump_if_false (false) b830; - label b830: jump_if_false (false) b831; - label b831: jump_if_false (false) b832; - label b832: jump_if_false (false) b833; - label b833: jump_if_false (false) b834; - label b834: jump_if_false (false) b835; - label b835: jump_if_false (false) b836; - label b836: jump_if_false (false) b837; - label b837: jump_if_false (false) b838; - label b838: jump_if_false (false) b839; - label b839: jump_if_false (false) b840; - label b840: jump_if_false (false) b841; - label b841: jump_if_false (false) b842; - label b842: jump_if_false (false) b843; - label b843: jump_if_false (false) b844; - label b844: jump_if_false (false) b845; - label b845: jump_if_false (false) b846; - label b846: jump_if_false (false) b847; - label b847: jump_if_false (false) b848; - label b848: jump_if_false (false) b849; - label b849: jump_if_false (false) b850; - label b850: jump_if_false (false) b851; - label b851: jump_if_false (false) b852; - label b852: jump_if_false (false) b853; - label b853: jump_if_false (false) b854; - label b854: jump_if_false (false) b855; - label b855: jump_if_false (false) b856; - label b856: jump_if_false (false) b857; - label b857: jump_if_false (false) b858; - label b858: jump_if_false (false) b859; - label b859: jump_if_false (false) b860; - label b860: jump_if_false (false) b861; - label b861: jump_if_false (false) b862; - label b862: jump_if_false (false) b863; - label b863: jump_if_false (false) b864; - label b864: jump_if_false (false) b865; - label b865: jump_if_false (false) b866; - label b866: jump_if_false (false) b867; - label b867: jump_if_false (false) b868; - label b868: jump_if_false (false) b869; - label b869: jump_if_false (false) b870; - label b870: jump_if_false (false) b871; - label b871: jump_if_false (false) b872; - label b872: jump_if_false (false) b873; - label b873: jump_if_false (false) b874; - label b874: jump_if_false (false) b875; - label b875: jump_if_false (false) b876; - label b876: jump_if_false (false) b877; - label b877: jump_if_false (false) b878; - label b878: jump_if_false (false) b879; - label b879: jump_if_false (false) b880; - label b880: jump_if_false (false) b881; - label b881: jump_if_false (false) b882; - label b882: jump_if_false (false) b883; - label b883: jump_if_false (false) b884; - label b884: jump_if_false (false) b885; - label b885: jump_if_false (false) b886; - label b886: jump_if_false (false) b887; - label b887: jump_if_false (false) b888; - label b888: jump_if_false (false) b889; - label b889: jump_if_false (false) b890; - label b890: jump_if_false (false) b891; - label b891: jump_if_false (false) b892; - label b892: jump_if_false (false) b893; - label b893: jump_if_false (false) b894; - label b894: jump_if_false (false) b895; - label b895: jump_if_false (false) b896; - label b896: jump_if_false (false) b897; - label b897: jump_if_false (false) b898; - label b898: jump_if_false (false) b899; - label b899: jump_if_false (false) b900; - label b900: jump_if_false (false) b901; - label b901: jump_if_false (false) b902; - label b902: jump_if_false (false) b903; - label b903: jump_if_false (false) b904; - label b904: jump_if_false (false) b905; - label b905: jump_if_false (false) b906; - label b906: jump_if_false (false) b907; - label b907: jump_if_false (false) b908; - label b908: jump_if_false (false) b909; - label b909: jump_if_false (false) b910; - label b910: jump_if_false (false) b911; - label b911: jump_if_false (false) b912; - label b912: jump_if_false (false) b913; - label b913: jump_if_false (false) b914; - label b914: jump_if_false (false) b915; - label b915: jump_if_false (false) b916; - label b916: jump_if_false (false) b917; - label b917: jump_if_false (false) b918; - label b918: jump_if_false (false) b919; - label b919: jump_if_false (false) b920; - label b920: jump_if_false (false) b921; - label b921: jump_if_false (false) b922; - label b922: jump_if_false (false) b923; - label b923: jump_if_false (false) b924; - label b924: jump_if_false (false) b925; - label b925: jump_if_false (false) b926; - label b926: jump_if_false (false) b927; - label b927: jump_if_false (false) b928; - label b928: jump_if_false (false) b929; - label b929: jump_if_false (false) b930; - label b930: jump_if_false (false) b931; - label b931: jump_if_false (false) b932; - label b932: jump_if_false (false) b933; - label b933: jump_if_false (false) b934; - label b934: jump_if_false (false) b935; - label b935: jump_if_false (false) b936; - label b936: jump_if_false (false) b937; - label b937: jump_if_false (false) b938; - label b938: jump_if_false (false) b939; - label b939: jump_if_false (false) b940; - label b940: jump_if_false (false) b941; - label b941: jump_if_false (false) b942; - label b942: jump_if_false (false) b943; - label b943: jump_if_false (false) b944; - label b944: jump_if_false (false) b945; - label b945: jump_if_false (false) b946; - label b946: jump_if_false (false) b947; - label b947: jump_if_false (false) b948; - label b948: jump_if_false (false) b949; - label b949: jump_if_false (false) b950; - label b950: jump_if_false (false) b951; - label b951: jump_if_false (false) b952; - label b952: jump_if_false (false) b953; - label b953: jump_if_false (false) b954; - label b954: jump_if_false (false) b955; - label b955: jump_if_false (false) b956; - label b956: jump_if_false (false) b957; - label b957: jump_if_false (false) b958; - label b958: jump_if_false (false) b959; - label b959: jump_if_false (false) b960; - label b960: jump_if_false (false) b961; - label b961: jump_if_false (false) b962; - label b962: jump_if_false (false) b963; - label b963: jump_if_false (false) b964; - label b964: jump_if_false (false) b965; - label b965: jump_if_false (false) b966; - label b966: jump_if_false (false) b967; - label b967: jump_if_false (false) b968; - label b968: jump_if_false (false) b969; - label b969: jump_if_false (false) b970; - label b970: jump_if_false (false) b971; - label b971: jump_if_false (false) b972; - label b972: jump_if_false (false) b973; - label b973: jump_if_false (false) b974; - label b974: jump_if_false (false) b975; - label b975: jump_if_false (false) b976; - label b976: jump_if_false (false) b977; - label b977: jump_if_false (false) b978; - label b978: jump_if_false (false) b979; - label b979: jump_if_false (false) b980; - label b980: jump_if_false (false) b981; - label b981: jump_if_false (false) b982; - label b982: jump_if_false (false) b983; - label b983: jump_if_false (false) b984; - label b984: jump_if_false (false) b985; - label b985: jump_if_false (false) b986; - label b986: jump_if_false (false) b987; - label b987: jump_if_false (false) b988; - label b988: jump_if_false (false) b989; - label b989: jump_if_false (false) b990; - label b990: jump_if_false (false) b991; - label b991: jump_if_false (false) b992; - label b992: jump_if_false (false) b993; - label b993: jump_if_false (false) b994; - label b994: jump_if_false (false) b995; - label b995: jump_if_false (false) b996; - label b996: jump_if_false (false) b997; - label b997: jump_if_false (false) b998; - label b998: jump_if_false (false) b999; - label b999: jump_if_false (false) b1000; - label b1000: - return; - } - - public entry calibrate_ld_false_x10() { - let a: bool; - label b0: - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - return; - } - - public entry calibrate_ld_false_x50() { - let a: bool; - label b0: - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - return; - } - - public entry calibrate_ld_false_x100() { - let a: bool; - label b0: - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - return; - } - - public entry calibrate_ld_false_x300() { - let a: bool; - label b0: - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - return; - } - - public entry calibrate_ld_false_x600() { - let a: bool; - label b0: - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - a, a, a, a, a, a, a, a, a, a = (false, false, false, false, false, false, false, false, false, false); - return; - } - - public entry calibrate_add_x10() { - let a: u64; - label b0: - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - return; - } - - public entry calibrate_add_x50() { - let a: u64; - label b0: - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - return; - } - - public entry calibrate_add_x100() { - let a: u64; - label b0: - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - return; - } - - public entry calibrate_add_x300() { - let a: u64; - label b0: - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - return; - } - - public entry calibrate_add_x600() { - let a: u64; - label b0: - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - a, a, a, a, a, a, a, a, a, a = (1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1, 1+1); - return; - } - - public entry calibrate_st_loc_x10() { - let a: u64; - label b0: - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - return; - } - - public entry calibrate_st_loc_x50() { - let a: u64; - label b0: - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - return; - } - - public entry calibrate_st_loc_x100() { - let a: u64; - label b0: - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - return; - } - - public entry calibrate_st_loc_x300() { - let a: u64; - label b0: - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - return; - } - - public entry calibrate_st_loc_x600() { - let a: u64; - label b0: - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - a, a, a, a, a, a, a, a, a, a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - return; - } - - public entry calibrate_ld_const_0_x10() { - label b0: - _, _, _, _, _, _, _, _, _, _ = (h"", h"", h"", h"", h"", h"", h"", h"", h"", h""); - return; - } - - public entry calibrate_ld_const_0_x100() { - label b0: - _, _, _, _, _, _, _, _, _, _ = (h"", h"", h"", h"", h"", h"", h"", h"", h"", h""); - _, _, _, _, _, _, _, _, _, _ = (h"", h"", h"", h"", h"", h"", h"", h"", h"", h""); - _, _, _, _, _, _, _, _, _, _ = (h"", h"", h"", h"", h"", h"", h"", h"", h"", h""); - _, _, _, _, _, _, _, _, _, _ = (h"", h"", h"", h"", h"", h"", h"", h"", h"", h""); - _, _, _, _, _, _, _, _, _, _ = (h"", h"", h"", h"", h"", h"", h"", h"", h"", h""); - _, _, _, _, _, _, _, _, _, _ = (h"", h"", h"", h"", h"", h"", h"", h"", h"", h""); - _, _, _, _, _, _, _, _, _, _ = (h"", h"", h"", h"", h"", h"", h"", h"", h"", h""); - _, _, _, _, _, _, _, _, _, _ = (h"", h"", h"", h"", h"", h"", h"", h"", h"", h""); - _, _, _, _, _, _, _, _, _, _ = (h"", h"", h"", h"", h"", h"", h"", h"", h"", h""); - _, _, _, _, _, _, _, _, _, _ = (h"", h"", h"", h"", h"", h"", h"", h"", h"", h""); - return; - } - - - public entry calibrate_ld_const_32_x10() { - label b0: - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - return; - } - - public entry calibrate_ld_const_32_x100() { - label b0: - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - return; - } - - public entry calibrate_ld_const_64_x10() { - label b0: - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - return; - } - - public entry calibrate_ld_const_64_x100() { - label b0: - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - return; - } - - public entry calibrate_ld_const_128_x100() { - label b0: - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - _ = h"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; - return; - } - - public entry calibrate_branch_x10() { - label b0: jump b1; - label b1: jump b2; - label b2: jump b3; - label b3: jump b4; - label b4: jump b5; - label b5: jump b6; - label b6: jump b7; - label b7: jump b8; - label b8: jump b9; - label b9: jump b10; - label b10: - return; - } - - public entry calibrate_branch_x50() { - label b0: jump b1; - label b1: jump b2; - label b2: jump b3; - label b3: jump b4; - label b4: jump b5; - label b5: jump b6; - label b6: jump b7; - label b7: jump b8; - label b8: jump b9; - label b9: jump b10; - label b10: jump b11; - label b11: jump b12; - label b12: jump b13; - label b13: jump b14; - label b14: jump b15; - label b15: jump b16; - label b16: jump b17; - label b17: jump b18; - label b18: jump b19; - label b19: jump b20; - label b20: jump b21; - label b21: jump b22; - label b22: jump b23; - label b23: jump b24; - label b24: jump b25; - label b25: jump b26; - label b26: jump b27; - label b27: jump b28; - label b28: jump b29; - label b29: jump b30; - label b30: jump b31; - label b31: jump b32; - label b32: jump b33; - label b33: jump b34; - label b34: jump b35; - label b35: jump b36; - label b36: jump b37; - label b37: jump b38; - label b38: jump b39; - label b39: jump b40; - label b40: jump b41; - label b41: jump b42; - label b42: jump b43; - label b43: jump b44; - label b44: jump b45; - label b45: jump b46; - label b46: jump b47; - label b47: jump b48; - label b48: jump b49; - label b49: jump b50; - label b50: - return; - } - - public entry calibrate_branch_x500() { - label b0: jump b1; - label b1: jump b2; - label b2: jump b3; - label b3: jump b4; - label b4: jump b5; - label b5: jump b6; - label b6: jump b7; - label b7: jump b8; - label b8: jump b9; - label b9: jump b10; - label b10: jump b11; - label b11: jump b12; - label b12: jump b13; - label b13: jump b14; - label b14: jump b15; - label b15: jump b16; - label b16: jump b17; - label b17: jump b18; - label b18: jump b19; - label b19: jump b20; - label b20: jump b21; - label b21: jump b22; - label b22: jump b23; - label b23: jump b24; - label b24: jump b25; - label b25: jump b26; - label b26: jump b27; - label b27: jump b28; - label b28: jump b29; - label b29: jump b30; - label b30: jump b31; - label b31: jump b32; - label b32: jump b33; - label b33: jump b34; - label b34: jump b35; - label b35: jump b36; - label b36: jump b37; - label b37: jump b38; - label b38: jump b39; - label b39: jump b40; - label b40: jump b41; - label b41: jump b42; - label b42: jump b43; - label b43: jump b44; - label b44: jump b45; - label b45: jump b46; - label b46: jump b47; - label b47: jump b48; - label b48: jump b49; - label b49: jump b50; - label b50: jump b51; - label b51: jump b52; - label b52: jump b53; - label b53: jump b54; - label b54: jump b55; - label b55: jump b56; - label b56: jump b57; - label b57: jump b58; - label b58: jump b59; - label b59: jump b60; - label b60: jump b61; - label b61: jump b62; - label b62: jump b63; - label b63: jump b64; - label b64: jump b65; - label b65: jump b66; - label b66: jump b67; - label b67: jump b68; - label b68: jump b69; - label b69: jump b70; - label b70: jump b71; - label b71: jump b72; - label b72: jump b73; - label b73: jump b74; - label b74: jump b75; - label b75: jump b76; - label b76: jump b77; - label b77: jump b78; - label b78: jump b79; - label b79: jump b80; - label b80: jump b81; - label b81: jump b82; - label b82: jump b83; - label b83: jump b84; - label b84: jump b85; - label b85: jump b86; - label b86: jump b87; - label b87: jump b88; - label b88: jump b89; - label b89: jump b90; - label b90: jump b91; - label b91: jump b92; - label b92: jump b93; - label b93: jump b94; - label b94: jump b95; - label b95: jump b96; - label b96: jump b97; - label b97: jump b98; - label b98: jump b99; - label b99: jump b100; - label b100: jump b101; - label b101: jump b102; - label b102: jump b103; - label b103: jump b104; - label b104: jump b105; - label b105: jump b106; - label b106: jump b107; - label b107: jump b108; - label b108: jump b109; - label b109: jump b110; - label b110: jump b111; - label b111: jump b112; - label b112: jump b113; - label b113: jump b114; - label b114: jump b115; - label b115: jump b116; - label b116: jump b117; - label b117: jump b118; - label b118: jump b119; - label b119: jump b120; - label b120: jump b121; - label b121: jump b122; - label b122: jump b123; - label b123: jump b124; - label b124: jump b125; - label b125: jump b126; - label b126: jump b127; - label b127: jump b128; - label b128: jump b129; - label b129: jump b130; - label b130: jump b131; - label b131: jump b132; - label b132: jump b133; - label b133: jump b134; - label b134: jump b135; - label b135: jump b136; - label b136: jump b137; - label b137: jump b138; - label b138: jump b139; - label b139: jump b140; - label b140: jump b141; - label b141: jump b142; - label b142: jump b143; - label b143: jump b144; - label b144: jump b145; - label b145: jump b146; - label b146: jump b147; - label b147: jump b148; - label b148: jump b149; - label b149: jump b150; - label b150: jump b151; - label b151: jump b152; - label b152: jump b153; - label b153: jump b154; - label b154: jump b155; - label b155: jump b156; - label b156: jump b157; - label b157: jump b158; - label b158: jump b159; - label b159: jump b160; - label b160: jump b161; - label b161: jump b162; - label b162: jump b163; - label b163: jump b164; - label b164: jump b165; - label b165: jump b166; - label b166: jump b167; - label b167: jump b168; - label b168: jump b169; - label b169: jump b170; - label b170: jump b171; - label b171: jump b172; - label b172: jump b173; - label b173: jump b174; - label b174: jump b175; - label b175: jump b176; - label b176: jump b177; - label b177: jump b178; - label b178: jump b179; - label b179: jump b180; - label b180: jump b181; - label b181: jump b182; - label b182: jump b183; - label b183: jump b184; - label b184: jump b185; - label b185: jump b186; - label b186: jump b187; - label b187: jump b188; - label b188: jump b189; - label b189: jump b190; - label b190: jump b191; - label b191: jump b192; - label b192: jump b193; - label b193: jump b194; - label b194: jump b195; - label b195: jump b196; - label b196: jump b197; - label b197: jump b198; - label b198: jump b199; - label b199: jump b200; - label b200: jump b201; - label b201: jump b202; - label b202: jump b203; - label b203: jump b204; - label b204: jump b205; - label b205: jump b206; - label b206: jump b207; - label b207: jump b208; - label b208: jump b209; - label b209: jump b210; - label b210: jump b211; - label b211: jump b212; - label b212: jump b213; - label b213: jump b214; - label b214: jump b215; - label b215: jump b216; - label b216: jump b217; - label b217: jump b218; - label b218: jump b219; - label b219: jump b220; - label b220: jump b221; - label b221: jump b222; - label b222: jump b223; - label b223: jump b224; - label b224: jump b225; - label b225: jump b226; - label b226: jump b227; - label b227: jump b228; - label b228: jump b229; - label b229: jump b230; - label b230: jump b231; - label b231: jump b232; - label b232: jump b233; - label b233: jump b234; - label b234: jump b235; - label b235: jump b236; - label b236: jump b237; - label b237: jump b238; - label b238: jump b239; - label b239: jump b240; - label b240: jump b241; - label b241: jump b242; - label b242: jump b243; - label b243: jump b244; - label b244: jump b245; - label b245: jump b246; - label b246: jump b247; - label b247: jump b248; - label b248: jump b249; - label b249: jump b250; - label b250: jump b251; - label b251: jump b252; - label b252: jump b253; - label b253: jump b254; - label b254: jump b255; - label b255: jump b256; - label b256: jump b257; - label b257: jump b258; - label b258: jump b259; - label b259: jump b260; - label b260: jump b261; - label b261: jump b262; - label b262: jump b263; - label b263: jump b264; - label b264: jump b265; - label b265: jump b266; - label b266: jump b267; - label b267: jump b268; - label b268: jump b269; - label b269: jump b270; - label b270: jump b271; - label b271: jump b272; - label b272: jump b273; - label b273: jump b274; - label b274: jump b275; - label b275: jump b276; - label b276: jump b277; - label b277: jump b278; - label b278: jump b279; - label b279: jump b280; - label b280: jump b281; - label b281: jump b282; - label b282: jump b283; - label b283: jump b284; - label b284: jump b285; - label b285: jump b286; - label b286: jump b287; - label b287: jump b288; - label b288: jump b289; - label b289: jump b290; - label b290: jump b291; - label b291: jump b292; - label b292: jump b293; - label b293: jump b294; - label b294: jump b295; - label b295: jump b296; - label b296: jump b297; - label b297: jump b298; - label b298: jump b299; - label b299: jump b300; - label b300: jump b301; - label b301: jump b302; - label b302: jump b303; - label b303: jump b304; - label b304: jump b305; - label b305: jump b306; - label b306: jump b307; - label b307: jump b308; - label b308: jump b309; - label b309: jump b310; - label b310: jump b311; - label b311: jump b312; - label b312: jump b313; - label b313: jump b314; - label b314: jump b315; - label b315: jump b316; - label b316: jump b317; - label b317: jump b318; - label b318: jump b319; - label b319: jump b320; - label b320: jump b321; - label b321: jump b322; - label b322: jump b323; - label b323: jump b324; - label b324: jump b325; - label b325: jump b326; - label b326: jump b327; - label b327: jump b328; - label b328: jump b329; - label b329: jump b330; - label b330: jump b331; - label b331: jump b332; - label b332: jump b333; - label b333: jump b334; - label b334: jump b335; - label b335: jump b336; - label b336: jump b337; - label b337: jump b338; - label b338: jump b339; - label b339: jump b340; - label b340: jump b341; - label b341: jump b342; - label b342: jump b343; - label b343: jump b344; - label b344: jump b345; - label b345: jump b346; - label b346: jump b347; - label b347: jump b348; - label b348: jump b349; - label b349: jump b350; - label b350: jump b351; - label b351: jump b352; - label b352: jump b353; - label b353: jump b354; - label b354: jump b355; - label b355: jump b356; - label b356: jump b357; - label b357: jump b358; - label b358: jump b359; - label b359: jump b360; - label b360: jump b361; - label b361: jump b362; - label b362: jump b363; - label b363: jump b364; - label b364: jump b365; - label b365: jump b366; - label b366: jump b367; - label b367: jump b368; - label b368: jump b369; - label b369: jump b370; - label b370: jump b371; - label b371: jump b372; - label b372: jump b373; - label b373: jump b374; - label b374: jump b375; - label b375: jump b376; - label b376: jump b377; - label b377: jump b378; - label b378: jump b379; - label b379: jump b380; - label b380: jump b381; - label b381: jump b382; - label b382: jump b383; - label b383: jump b384; - label b384: jump b385; - label b385: jump b386; - label b386: jump b387; - label b387: jump b388; - label b388: jump b389; - label b389: jump b390; - label b390: jump b391; - label b391: jump b392; - label b392: jump b393; - label b393: jump b394; - label b394: jump b395; - label b395: jump b396; - label b396: jump b397; - label b397: jump b398; - label b398: jump b399; - label b399: jump b400; - label b400: jump b401; - label b401: jump b402; - label b402: jump b403; - label b403: jump b404; - label b404: jump b405; - label b405: jump b406; - label b406: jump b407; - label b407: jump b408; - label b408: jump b409; - label b409: jump b410; - label b410: jump b411; - label b411: jump b412; - label b412: jump b413; - label b413: jump b414; - label b414: jump b415; - label b415: jump b416; - label b416: jump b417; - label b417: jump b418; - label b418: jump b419; - label b419: jump b420; - label b420: jump b421; - label b421: jump b422; - label b422: jump b423; - label b423: jump b424; - label b424: jump b425; - label b425: jump b426; - label b426: jump b427; - label b427: jump b428; - label b428: jump b429; - label b429: jump b430; - label b430: jump b431; - label b431: jump b432; - label b432: jump b433; - label b433: jump b434; - label b434: jump b435; - label b435: jump b436; - label b436: jump b437; - label b437: jump b438; - label b438: jump b439; - label b439: jump b440; - label b440: jump b441; - label b441: jump b442; - label b442: jump b443; - label b443: jump b444; - label b444: jump b445; - label b445: jump b446; - label b446: jump b447; - label b447: jump b448; - label b448: jump b449; - label b449: jump b450; - label b450: jump b451; - label b451: jump b452; - label b452: jump b453; - label b453: jump b454; - label b454: jump b455; - label b455: jump b456; - label b456: jump b457; - label b457: jump b458; - label b458: jump b459; - label b459: jump b460; - label b460: jump b461; - label b461: jump b462; - label b462: jump b463; - label b463: jump b464; - label b464: jump b465; - label b465: jump b466; - label b466: jump b467; - label b467: jump b468; - label b468: jump b469; - label b469: jump b470; - label b470: jump b471; - label b471: jump b472; - label b472: jump b473; - label b473: jump b474; - label b474: jump b475; - label b475: jump b476; - label b476: jump b477; - label b477: jump b478; - label b478: jump b479; - label b479: jump b480; - label b480: jump b481; - label b481: jump b482; - label b482: jump b483; - label b483: jump b484; - label b484: jump b485; - label b485: jump b486; - label b486: jump b487; - label b487: jump b488; - label b488: jump b489; - label b489: jump b490; - label b490: jump b491; - label b491: jump b492; - label b492: jump b493; - label b493: jump b494; - label b494: jump b495; - label b495: jump b496; - label b496: jump b497; - label b497: jump b498; - label b498: jump b499; - label b499: jump b500; - label b500: - return; - } - - public entry calibrate_branch_x1000() { - label b0: jump b1; - label b1: jump b2; - label b2: jump b3; - label b3: jump b4; - label b4: jump b5; - label b5: jump b6; - label b6: jump b7; - label b7: jump b8; - label b8: jump b9; - label b9: jump b10; - label b10: jump b11; - label b11: jump b12; - label b12: jump b13; - label b13: jump b14; - label b14: jump b15; - label b15: jump b16; - label b16: jump b17; - label b17: jump b18; - label b18: jump b19; - label b19: jump b20; - label b20: jump b21; - label b21: jump b22; - label b22: jump b23; - label b23: jump b24; - label b24: jump b25; - label b25: jump b26; - label b26: jump b27; - label b27: jump b28; - label b28: jump b29; - label b29: jump b30; - label b30: jump b31; - label b31: jump b32; - label b32: jump b33; - label b33: jump b34; - label b34: jump b35; - label b35: jump b36; - label b36: jump b37; - label b37: jump b38; - label b38: jump b39; - label b39: jump b40; - label b40: jump b41; - label b41: jump b42; - label b42: jump b43; - label b43: jump b44; - label b44: jump b45; - label b45: jump b46; - label b46: jump b47; - label b47: jump b48; - label b48: jump b49; - label b49: jump b50; - label b50: jump b51; - label b51: jump b52; - label b52: jump b53; - label b53: jump b54; - label b54: jump b55; - label b55: jump b56; - label b56: jump b57; - label b57: jump b58; - label b58: jump b59; - label b59: jump b60; - label b60: jump b61; - label b61: jump b62; - label b62: jump b63; - label b63: jump b64; - label b64: jump b65; - label b65: jump b66; - label b66: jump b67; - label b67: jump b68; - label b68: jump b69; - label b69: jump b70; - label b70: jump b71; - label b71: jump b72; - label b72: jump b73; - label b73: jump b74; - label b74: jump b75; - label b75: jump b76; - label b76: jump b77; - label b77: jump b78; - label b78: jump b79; - label b79: jump b80; - label b80: jump b81; - label b81: jump b82; - label b82: jump b83; - label b83: jump b84; - label b84: jump b85; - label b85: jump b86; - label b86: jump b87; - label b87: jump b88; - label b88: jump b89; - label b89: jump b90; - label b90: jump b91; - label b91: jump b92; - label b92: jump b93; - label b93: jump b94; - label b94: jump b95; - label b95: jump b96; - label b96: jump b97; - label b97: jump b98; - label b98: jump b99; - label b99: jump b100; - label b100: jump b101; - label b101: jump b102; - label b102: jump b103; - label b103: jump b104; - label b104: jump b105; - label b105: jump b106; - label b106: jump b107; - label b107: jump b108; - label b108: jump b109; - label b109: jump b110; - label b110: jump b111; - label b111: jump b112; - label b112: jump b113; - label b113: jump b114; - label b114: jump b115; - label b115: jump b116; - label b116: jump b117; - label b117: jump b118; - label b118: jump b119; - label b119: jump b120; - label b120: jump b121; - label b121: jump b122; - label b122: jump b123; - label b123: jump b124; - label b124: jump b125; - label b125: jump b126; - label b126: jump b127; - label b127: jump b128; - label b128: jump b129; - label b129: jump b130; - label b130: jump b131; - label b131: jump b132; - label b132: jump b133; - label b133: jump b134; - label b134: jump b135; - label b135: jump b136; - label b136: jump b137; - label b137: jump b138; - label b138: jump b139; - label b139: jump b140; - label b140: jump b141; - label b141: jump b142; - label b142: jump b143; - label b143: jump b144; - label b144: jump b145; - label b145: jump b146; - label b146: jump b147; - label b147: jump b148; - label b148: jump b149; - label b149: jump b150; - label b150: jump b151; - label b151: jump b152; - label b152: jump b153; - label b153: jump b154; - label b154: jump b155; - label b155: jump b156; - label b156: jump b157; - label b157: jump b158; - label b158: jump b159; - label b159: jump b160; - label b160: jump b161; - label b161: jump b162; - label b162: jump b163; - label b163: jump b164; - label b164: jump b165; - label b165: jump b166; - label b166: jump b167; - label b167: jump b168; - label b168: jump b169; - label b169: jump b170; - label b170: jump b171; - label b171: jump b172; - label b172: jump b173; - label b173: jump b174; - label b174: jump b175; - label b175: jump b176; - label b176: jump b177; - label b177: jump b178; - label b178: jump b179; - label b179: jump b180; - label b180: jump b181; - label b181: jump b182; - label b182: jump b183; - label b183: jump b184; - label b184: jump b185; - label b185: jump b186; - label b186: jump b187; - label b187: jump b188; - label b188: jump b189; - label b189: jump b190; - label b190: jump b191; - label b191: jump b192; - label b192: jump b193; - label b193: jump b194; - label b194: jump b195; - label b195: jump b196; - label b196: jump b197; - label b197: jump b198; - label b198: jump b199; - label b199: jump b200; - label b200: jump b201; - label b201: jump b202; - label b202: jump b203; - label b203: jump b204; - label b204: jump b205; - label b205: jump b206; - label b206: jump b207; - label b207: jump b208; - label b208: jump b209; - label b209: jump b210; - label b210: jump b211; - label b211: jump b212; - label b212: jump b213; - label b213: jump b214; - label b214: jump b215; - label b215: jump b216; - label b216: jump b217; - label b217: jump b218; - label b218: jump b219; - label b219: jump b220; - label b220: jump b221; - label b221: jump b222; - label b222: jump b223; - label b223: jump b224; - label b224: jump b225; - label b225: jump b226; - label b226: jump b227; - label b227: jump b228; - label b228: jump b229; - label b229: jump b230; - label b230: jump b231; - label b231: jump b232; - label b232: jump b233; - label b233: jump b234; - label b234: jump b235; - label b235: jump b236; - label b236: jump b237; - label b237: jump b238; - label b238: jump b239; - label b239: jump b240; - label b240: jump b241; - label b241: jump b242; - label b242: jump b243; - label b243: jump b244; - label b244: jump b245; - label b245: jump b246; - label b246: jump b247; - label b247: jump b248; - label b248: jump b249; - label b249: jump b250; - label b250: jump b251; - label b251: jump b252; - label b252: jump b253; - label b253: jump b254; - label b254: jump b255; - label b255: jump b256; - label b256: jump b257; - label b257: jump b258; - label b258: jump b259; - label b259: jump b260; - label b260: jump b261; - label b261: jump b262; - label b262: jump b263; - label b263: jump b264; - label b264: jump b265; - label b265: jump b266; - label b266: jump b267; - label b267: jump b268; - label b268: jump b269; - label b269: jump b270; - label b270: jump b271; - label b271: jump b272; - label b272: jump b273; - label b273: jump b274; - label b274: jump b275; - label b275: jump b276; - label b276: jump b277; - label b277: jump b278; - label b278: jump b279; - label b279: jump b280; - label b280: jump b281; - label b281: jump b282; - label b282: jump b283; - label b283: jump b284; - label b284: jump b285; - label b285: jump b286; - label b286: jump b287; - label b287: jump b288; - label b288: jump b289; - label b289: jump b290; - label b290: jump b291; - label b291: jump b292; - label b292: jump b293; - label b293: jump b294; - label b294: jump b295; - label b295: jump b296; - label b296: jump b297; - label b297: jump b298; - label b298: jump b299; - label b299: jump b300; - label b300: jump b301; - label b301: jump b302; - label b302: jump b303; - label b303: jump b304; - label b304: jump b305; - label b305: jump b306; - label b306: jump b307; - label b307: jump b308; - label b308: jump b309; - label b309: jump b310; - label b310: jump b311; - label b311: jump b312; - label b312: jump b313; - label b313: jump b314; - label b314: jump b315; - label b315: jump b316; - label b316: jump b317; - label b317: jump b318; - label b318: jump b319; - label b319: jump b320; - label b320: jump b321; - label b321: jump b322; - label b322: jump b323; - label b323: jump b324; - label b324: jump b325; - label b325: jump b326; - label b326: jump b327; - label b327: jump b328; - label b328: jump b329; - label b329: jump b330; - label b330: jump b331; - label b331: jump b332; - label b332: jump b333; - label b333: jump b334; - label b334: jump b335; - label b335: jump b336; - label b336: jump b337; - label b337: jump b338; - label b338: jump b339; - label b339: jump b340; - label b340: jump b341; - label b341: jump b342; - label b342: jump b343; - label b343: jump b344; - label b344: jump b345; - label b345: jump b346; - label b346: jump b347; - label b347: jump b348; - label b348: jump b349; - label b349: jump b350; - label b350: jump b351; - label b351: jump b352; - label b352: jump b353; - label b353: jump b354; - label b354: jump b355; - label b355: jump b356; - label b356: jump b357; - label b357: jump b358; - label b358: jump b359; - label b359: jump b360; - label b360: jump b361; - label b361: jump b362; - label b362: jump b363; - label b363: jump b364; - label b364: jump b365; - label b365: jump b366; - label b366: jump b367; - label b367: jump b368; - label b368: jump b369; - label b369: jump b370; - label b370: jump b371; - label b371: jump b372; - label b372: jump b373; - label b373: jump b374; - label b374: jump b375; - label b375: jump b376; - label b376: jump b377; - label b377: jump b378; - label b378: jump b379; - label b379: jump b380; - label b380: jump b381; - label b381: jump b382; - label b382: jump b383; - label b383: jump b384; - label b384: jump b385; - label b385: jump b386; - label b386: jump b387; - label b387: jump b388; - label b388: jump b389; - label b389: jump b390; - label b390: jump b391; - label b391: jump b392; - label b392: jump b393; - label b393: jump b394; - label b394: jump b395; - label b395: jump b396; - label b396: jump b397; - label b397: jump b398; - label b398: jump b399; - label b399: jump b400; - label b400: jump b401; - label b401: jump b402; - label b402: jump b403; - label b403: jump b404; - label b404: jump b405; - label b405: jump b406; - label b406: jump b407; - label b407: jump b408; - label b408: jump b409; - label b409: jump b410; - label b410: jump b411; - label b411: jump b412; - label b412: jump b413; - label b413: jump b414; - label b414: jump b415; - label b415: jump b416; - label b416: jump b417; - label b417: jump b418; - label b418: jump b419; - label b419: jump b420; - label b420: jump b421; - label b421: jump b422; - label b422: jump b423; - label b423: jump b424; - label b424: jump b425; - label b425: jump b426; - label b426: jump b427; - label b427: jump b428; - label b428: jump b429; - label b429: jump b430; - label b430: jump b431; - label b431: jump b432; - label b432: jump b433; - label b433: jump b434; - label b434: jump b435; - label b435: jump b436; - label b436: jump b437; - label b437: jump b438; - label b438: jump b439; - label b439: jump b440; - label b440: jump b441; - label b441: jump b442; - label b442: jump b443; - label b443: jump b444; - label b444: jump b445; - label b445: jump b446; - label b446: jump b447; - label b447: jump b448; - label b448: jump b449; - label b449: jump b450; - label b450: jump b451; - label b451: jump b452; - label b452: jump b453; - label b453: jump b454; - label b454: jump b455; - label b455: jump b456; - label b456: jump b457; - label b457: jump b458; - label b458: jump b459; - label b459: jump b460; - label b460: jump b461; - label b461: jump b462; - label b462: jump b463; - label b463: jump b464; - label b464: jump b465; - label b465: jump b466; - label b466: jump b467; - label b467: jump b468; - label b468: jump b469; - label b469: jump b470; - label b470: jump b471; - label b471: jump b472; - label b472: jump b473; - label b473: jump b474; - label b474: jump b475; - label b475: jump b476; - label b476: jump b477; - label b477: jump b478; - label b478: jump b479; - label b479: jump b480; - label b480: jump b481; - label b481: jump b482; - label b482: jump b483; - label b483: jump b484; - label b484: jump b485; - label b485: jump b486; - label b486: jump b487; - label b487: jump b488; - label b488: jump b489; - label b489: jump b490; - label b490: jump b491; - label b491: jump b492; - label b492: jump b493; - label b493: jump b494; - label b494: jump b495; - label b495: jump b496; - label b496: jump b497; - label b497: jump b498; - label b498: jump b499; - label b499: jump b500; - label b500: jump b501; - label b501: jump b502; - label b502: jump b503; - label b503: jump b504; - label b504: jump b505; - label b505: jump b506; - label b506: jump b507; - label b507: jump b508; - label b508: jump b509; - label b509: jump b510; - label b510: jump b511; - label b511: jump b512; - label b512: jump b513; - label b513: jump b514; - label b514: jump b515; - label b515: jump b516; - label b516: jump b517; - label b517: jump b518; - label b518: jump b519; - label b519: jump b520; - label b520: jump b521; - label b521: jump b522; - label b522: jump b523; - label b523: jump b524; - label b524: jump b525; - label b525: jump b526; - label b526: jump b527; - label b527: jump b528; - label b528: jump b529; - label b529: jump b530; - label b530: jump b531; - label b531: jump b532; - label b532: jump b533; - label b533: jump b534; - label b534: jump b535; - label b535: jump b536; - label b536: jump b537; - label b537: jump b538; - label b538: jump b539; - label b539: jump b540; - label b540: jump b541; - label b541: jump b542; - label b542: jump b543; - label b543: jump b544; - label b544: jump b545; - label b545: jump b546; - label b546: jump b547; - label b547: jump b548; - label b548: jump b549; - label b549: jump b550; - label b550: jump b551; - label b551: jump b552; - label b552: jump b553; - label b553: jump b554; - label b554: jump b555; - label b555: jump b556; - label b556: jump b557; - label b557: jump b558; - label b558: jump b559; - label b559: jump b560; - label b560: jump b561; - label b561: jump b562; - label b562: jump b563; - label b563: jump b564; - label b564: jump b565; - label b565: jump b566; - label b566: jump b567; - label b567: jump b568; - label b568: jump b569; - label b569: jump b570; - label b570: jump b571; - label b571: jump b572; - label b572: jump b573; - label b573: jump b574; - label b574: jump b575; - label b575: jump b576; - label b576: jump b577; - label b577: jump b578; - label b578: jump b579; - label b579: jump b580; - label b580: jump b581; - label b581: jump b582; - label b582: jump b583; - label b583: jump b584; - label b584: jump b585; - label b585: jump b586; - label b586: jump b587; - label b587: jump b588; - label b588: jump b589; - label b589: jump b590; - label b590: jump b591; - label b591: jump b592; - label b592: jump b593; - label b593: jump b594; - label b594: jump b595; - label b595: jump b596; - label b596: jump b597; - label b597: jump b598; - label b598: jump b599; - label b599: jump b600; - label b600: jump b601; - label b601: jump b602; - label b602: jump b603; - label b603: jump b604; - label b604: jump b605; - label b605: jump b606; - label b606: jump b607; - label b607: jump b608; - label b608: jump b609; - label b609: jump b610; - label b610: jump b611; - label b611: jump b612; - label b612: jump b613; - label b613: jump b614; - label b614: jump b615; - label b615: jump b616; - label b616: jump b617; - label b617: jump b618; - label b618: jump b619; - label b619: jump b620; - label b620: jump b621; - label b621: jump b622; - label b622: jump b623; - label b623: jump b624; - label b624: jump b625; - label b625: jump b626; - label b626: jump b627; - label b627: jump b628; - label b628: jump b629; - label b629: jump b630; - label b630: jump b631; - label b631: jump b632; - label b632: jump b633; - label b633: jump b634; - label b634: jump b635; - label b635: jump b636; - label b636: jump b637; - label b637: jump b638; - label b638: jump b639; - label b639: jump b640; - label b640: jump b641; - label b641: jump b642; - label b642: jump b643; - label b643: jump b644; - label b644: jump b645; - label b645: jump b646; - label b646: jump b647; - label b647: jump b648; - label b648: jump b649; - label b649: jump b650; - label b650: jump b651; - label b651: jump b652; - label b652: jump b653; - label b653: jump b654; - label b654: jump b655; - label b655: jump b656; - label b656: jump b657; - label b657: jump b658; - label b658: jump b659; - label b659: jump b660; - label b660: jump b661; - label b661: jump b662; - label b662: jump b663; - label b663: jump b664; - label b664: jump b665; - label b665: jump b666; - label b666: jump b667; - label b667: jump b668; - label b668: jump b669; - label b669: jump b670; - label b670: jump b671; - label b671: jump b672; - label b672: jump b673; - label b673: jump b674; - label b674: jump b675; - label b675: jump b676; - label b676: jump b677; - label b677: jump b678; - label b678: jump b679; - label b679: jump b680; - label b680: jump b681; - label b681: jump b682; - label b682: jump b683; - label b683: jump b684; - label b684: jump b685; - label b685: jump b686; - label b686: jump b687; - label b687: jump b688; - label b688: jump b689; - label b689: jump b690; - label b690: jump b691; - label b691: jump b692; - label b692: jump b693; - label b693: jump b694; - label b694: jump b695; - label b695: jump b696; - label b696: jump b697; - label b697: jump b698; - label b698: jump b699; - label b699: jump b700; - label b700: jump b701; - label b701: jump b702; - label b702: jump b703; - label b703: jump b704; - label b704: jump b705; - label b705: jump b706; - label b706: jump b707; - label b707: jump b708; - label b708: jump b709; - label b709: jump b710; - label b710: jump b711; - label b711: jump b712; - label b712: jump b713; - label b713: jump b714; - label b714: jump b715; - label b715: jump b716; - label b716: jump b717; - label b717: jump b718; - label b718: jump b719; - label b719: jump b720; - label b720: jump b721; - label b721: jump b722; - label b722: jump b723; - label b723: jump b724; - label b724: jump b725; - label b725: jump b726; - label b726: jump b727; - label b727: jump b728; - label b728: jump b729; - label b729: jump b730; - label b730: jump b731; - label b731: jump b732; - label b732: jump b733; - label b733: jump b734; - label b734: jump b735; - label b735: jump b736; - label b736: jump b737; - label b737: jump b738; - label b738: jump b739; - label b739: jump b740; - label b740: jump b741; - label b741: jump b742; - label b742: jump b743; - label b743: jump b744; - label b744: jump b745; - label b745: jump b746; - label b746: jump b747; - label b747: jump b748; - label b748: jump b749; - label b749: jump b750; - label b750: jump b751; - label b751: jump b752; - label b752: jump b753; - label b753: jump b754; - label b754: jump b755; - label b755: jump b756; - label b756: jump b757; - label b757: jump b758; - label b758: jump b759; - label b759: jump b760; - label b760: jump b761; - label b761: jump b762; - label b762: jump b763; - label b763: jump b764; - label b764: jump b765; - label b765: jump b766; - label b766: jump b767; - label b767: jump b768; - label b768: jump b769; - label b769: jump b770; - label b770: jump b771; - label b771: jump b772; - label b772: jump b773; - label b773: jump b774; - label b774: jump b775; - label b775: jump b776; - label b776: jump b777; - label b777: jump b778; - label b778: jump b779; - label b779: jump b780; - label b780: jump b781; - label b781: jump b782; - label b782: jump b783; - label b783: jump b784; - label b784: jump b785; - label b785: jump b786; - label b786: jump b787; - label b787: jump b788; - label b788: jump b789; - label b789: jump b790; - label b790: jump b791; - label b791: jump b792; - label b792: jump b793; - label b793: jump b794; - label b794: jump b795; - label b795: jump b796; - label b796: jump b797; - label b797: jump b798; - label b798: jump b799; - label b799: jump b800; - label b800: jump b801; - label b801: jump b802; - label b802: jump b803; - label b803: jump b804; - label b804: jump b805; - label b805: jump b806; - label b806: jump b807; - label b807: jump b808; - label b808: jump b809; - label b809: jump b810; - label b810: jump b811; - label b811: jump b812; - label b812: jump b813; - label b813: jump b814; - label b814: jump b815; - label b815: jump b816; - label b816: jump b817; - label b817: jump b818; - label b818: jump b819; - label b819: jump b820; - label b820: jump b821; - label b821: jump b822; - label b822: jump b823; - label b823: jump b824; - label b824: jump b825; - label b825: jump b826; - label b826: jump b827; - label b827: jump b828; - label b828: jump b829; - label b829: jump b830; - label b830: jump b831; - label b831: jump b832; - label b832: jump b833; - label b833: jump b834; - label b834: jump b835; - label b835: jump b836; - label b836: jump b837; - label b837: jump b838; - label b838: jump b839; - label b839: jump b840; - label b840: jump b841; - label b841: jump b842; - label b842: jump b843; - label b843: jump b844; - label b844: jump b845; - label b845: jump b846; - label b846: jump b847; - label b847: jump b848; - label b848: jump b849; - label b849: jump b850; - label b850: jump b851; - label b851: jump b852; - label b852: jump b853; - label b853: jump b854; - label b854: jump b855; - label b855: jump b856; - label b856: jump b857; - label b857: jump b858; - label b858: jump b859; - label b859: jump b860; - label b860: jump b861; - label b861: jump b862; - label b862: jump b863; - label b863: jump b864; - label b864: jump b865; - label b865: jump b866; - label b866: jump b867; - label b867: jump b868; - label b868: jump b869; - label b869: jump b870; - label b870: jump b871; - label b871: jump b872; - label b872: jump b873; - label b873: jump b874; - label b874: jump b875; - label b875: jump b876; - label b876: jump b877; - label b877: jump b878; - label b878: jump b879; - label b879: jump b880; - label b880: jump b881; - label b881: jump b882; - label b882: jump b883; - label b883: jump b884; - label b884: jump b885; - label b885: jump b886; - label b886: jump b887; - label b887: jump b888; - label b888: jump b889; - label b889: jump b890; - label b890: jump b891; - label b891: jump b892; - label b892: jump b893; - label b893: jump b894; - label b894: jump b895; - label b895: jump b896; - label b896: jump b897; - label b897: jump b898; - label b898: jump b899; - label b899: jump b900; - label b900: jump b901; - label b901: jump b902; - label b902: jump b903; - label b903: jump b904; - label b904: jump b905; - label b905: jump b906; - label b906: jump b907; - label b907: jump b908; - label b908: jump b909; - label b909: jump b910; - label b910: jump b911; - label b911: jump b912; - label b912: jump b913; - label b913: jump b914; - label b914: jump b915; - label b915: jump b916; - label b916: jump b917; - label b917: jump b918; - label b918: jump b919; - label b919: jump b920; - label b920: jump b921; - label b921: jump b922; - label b922: jump b923; - label b923: jump b924; - label b924: jump b925; - label b925: jump b926; - label b926: jump b927; - label b927: jump b928; - label b928: jump b929; - label b929: jump b930; - label b930: jump b931; - label b931: jump b932; - label b932: jump b933; - label b933: jump b934; - label b934: jump b935; - label b935: jump b936; - label b936: jump b937; - label b937: jump b938; - label b938: jump b939; - label b939: jump b940; - label b940: jump b941; - label b941: jump b942; - label b942: jump b943; - label b943: jump b944; - label b944: jump b945; - label b945: jump b946; - label b946: jump b947; - label b947: jump b948; - label b948: jump b949; - label b949: jump b950; - label b950: jump b951; - label b951: jump b952; - label b952: jump b953; - label b953: jump b954; - label b954: jump b955; - label b955: jump b956; - label b956: jump b957; - label b957: jump b958; - label b958: jump b959; - label b959: jump b960; - label b960: jump b961; - label b961: jump b962; - label b962: jump b963; - label b963: jump b964; - label b964: jump b965; - label b965: jump b966; - label b966: jump b967; - label b967: jump b968; - label b968: jump b969; - label b969: jump b970; - label b970: jump b971; - label b971: jump b972; - label b972: jump b973; - label b973: jump b974; - label b974: jump b975; - label b975: jump b976; - label b976: jump b977; - label b977: jump b978; - label b978: jump b979; - label b979: jump b980; - label b980: jump b981; - label b981: jump b982; - label b982: jump b983; - label b983: jump b984; - label b984: jump b985; - label b985: jump b986; - label b986: jump b987; - label b987: jump b988; - label b988: jump b989; - label b989: jump b990; - label b990: jump b991; - label b991: jump b992; - label b992: jump b993; - label b993: jump b994; - label b994: jump b995; - label b995: jump b996; - label b996: jump b997; - label b997: jump b998; - label b998: jump b999; - label b999: jump b1000; - label b1000: - return; - } - - public entry calibrate_lt_x10() { - label b0: - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - return; - } - - public entry calibrate_lt_x50() { - label b0: - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - return; - } - - public entry calibrate_lt_x100() { - label b0: - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - return; - } - - public entry calibrate_lt_x300() { - label b0: - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - return; - } - - public entry calibrate_lt_x600() { - label b0: - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - _, _, _, _, _, _, _, _, _, _ = (0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10, 0 < 10); - return; - } - - public entry calibrate_copy_loc_u64_x100() { - let v: u64; - label b0: - v = 42; - - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - - return; - } - - public entry calibrate_copy_loc_u64_x500() { - let v: u64; - label b0: - v = 42; - - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - - return; - } - - public entry calibrate_copy_loc_u64_x1000() { - let v: u64; - label b0: - v = 42; - - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - - return; - } - - public entry calibrate_copy_loc_v16_x100() { - let v: vector; - label b0: - v = h"0011223344556677889900aabbccddeeff"; - - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - - return; - } - - public entry calibrate_copy_loc_v64_x100() { - let v: vector; - label b0: - v = h"0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff"; - - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - - return; - } - - public entry calibrate_copy_loc_v256_x100() { - let v: vector; - label b0: - v = h"0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff"; - - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - - return; - } - - public entry calibrate_copy_loc_v1024_x100() { - let v: vector; - label b0: - v = h"0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff"; - - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - - return; - } - - public entry calibrate_copy_loc_v4096_x100() { - let v: vector; - label b0: - v = h"0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff"; - - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - _, _, _, _, _, _, _, _, _, _ = (copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v), copy(v)); - - return; - } -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/bootstrap/core.mvir b/aptos-move/aptos-gas-calibration/samples_ir/bootstrap/core.mvir deleted file mode 100644 index aa8172f4edb68..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/bootstrap/core.mvir +++ /dev/null @@ -1,612 +0,0 @@ -module 0xcafe.BootstrapCore { - // A minimal set of samples that allow us to calibrate these instructions: ld_u64, pop & sub. - // Among these instructions, pop is the most important one, since it is in many cases required - // to maintain stack balance. - // Calibrating pop will allow many other instructions to be calibrated as well. - - public entry calibrate_empty_fun() { - label b0: - return; - } - - public entry calibrate_ldu64_and_pop_x10() { - label b0: - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - return; - } - - public entry_ldu64_and_pop_x50() { - label b0: - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - return; - } - - public entry calibrate_ldu64_and_pop_x100() { - label b0: - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - return; - } - - public entry calibrate_ldu64_and_pop_x300() { - label b0: - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - return; - } - - public entry calibrate_ldu64_and_pop_x600() { - label b0: - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - _,_,_,_,_,_,_,_,_,_ = (1,2,3,4,5,6,7,8,9,10); - return; - } - - public entry calibrate_sub_and_ldu64_10() { - label b0: - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - return; - } - - public entry calibrate_sub_and_ldu64_50() { - label b0: - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - return; - } - - public entry calibrate_sub_and_ldu64_100() { - label b0: - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - return; - } - - public entry calibrate_sub_and_ldu64_300() { - label b0: - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - return; - } - - public entry calibrate_sub_and_ldu64_600() { - label b0: - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - _ = (10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1); - return; - } - - public entry calibrate_ldu64_10_should_error() { - label b0: - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - - _ = (0 - 1); - - _, _, _, _, _, _, _, _, _, _ = (); - - return; - } - - public entry calibrate_ldu64_50_should_error() { - label b0: - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - - _ = (0 - 1); - - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - return; - } - - public entry calibrate_ldu64_100_should_error() { - label b0: - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - - _ = (0 - 1); - - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - return; - } - - public entry calibrate_ldu64_300_should_error() { - label b0: - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - - _ = (0 - 1); - - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - return; - } - - public entry calibrate_ldu64_600_should_error() { - label b0: - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - - _ = (0 - 1); - - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - _, _, _, _, _, _, _, _, _, _ = (); - return; - } - - public entry calibrate_tuning_many_of_all_instr() { - label b0: - (1,2,3,4,5,6,7,8,9,10); - (1,2,3,4,5,6,7,8,9,10); - (1,2,3,4,5,6,7,8,9,10); - (1,2,3,4,5,6,7,8,9,10); - (1,2,3,4,5,6,7,8,9,10); - (1,2,3,4,5,6,7,8,9,10); - (1,2,3,4,5,6,7,8,9,10); - (1,2,3,4,5,6,7,8,9,10); - (1,2,3,4,5,6,7,8,9,10); - (1,2,3,4,5,6,7,8,9,10); - (1,2,3,4,5,6,7,8,9,10); - (1,2,3,4,5,6,7,8,9,10); - (1,2,3,4,5,6,7,8,9,10); - (1,2,3,4,5,6,7,8,9,10); - (1,2,3,4,5,6,7,8,9,10); - (1,2,3,4,5,6,7,8,9,10); - (1,2,3,4,5,6,7,8,9,10); - (1,2,3,4,5,6,7,8,9,10); - (1,2,3,4,5,6,7,8,9,10); - (1,2,3,4,5,6,7,8,9,10); - (1,2,3,4,5,6,7,8,9,10); - (1,2,3,4,5,6,7,8,9,10); - _ = (10000-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1); - _ = (10000-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1); - _ = (10000-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1); - _ = (10000-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1); - _ = (10000-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1); - _ = (10000-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1); - _ = (10000-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1); - _ = (10000-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1); - _ = (10000-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1); - _,_,_,_,_,_,_,_,_,_ = (); - _,_,_,_,_,_,_,_,_,_ = (); - _,_,_,_,_,_,_,_,_,_ = (); - _,_,_,_,_,_,_,_,_,_ = (); - _,_,_,_,_,_,_,_,_,_ = (); - _,_,_,_,_,_,_,_,_,_ = (); - _,_,_,_,_,_,_,_,_,_ = (); - _,_,_,_,_,_,_,_,_,_ = (); - _,_,_,_,_,_,_,_,_,_ = (); - _,_,_,_,_,_,_,_,_,_ = (); - _,_,_,_,_,_,_,_,_,_ = (); - _,_,_,_,_,_,_,_,_,_ = (); - _,_,_,_,_,_,_,_,_,_ = (); - _,_,_,_,_,_,_,_,_,_ = (); - _,_,_,_,_,_,_,_,_,_ = (); - _,_,_,_,_,_,_,_,_,_ = (); - _,_,_,_,_,_,_,_,_,_ = (); - _,_,_,_,_,_,_,_,_,_ = (); - _,_,_,_,_,_,_,_,_,_ = (); - _,_,_,_,_,_,_,_,_,_ = (); - _,_,_,_,_,_,_,_,_,_ = (); - _,_,_,_,_,_,_,_,_,_ = (); - return; - } -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/borrow/freeze_ref.mvir b/aptos-move/aptos-gas-calibration/samples_ir/borrow/freeze_ref.mvir deleted file mode 100644 index 4022edebe29a5..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/borrow/freeze_ref.mvir +++ /dev/null @@ -1,46 +0,0 @@ -module 0xcafe.FreezeRef { - - public calibrate_freeze_ref_impl(n: u64) { - let i: u64; - let a: u64; - label entry: - i = 0; - a = 5; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _ = freeze(&mut a); - _ = freeze(&mut a); - _ = freeze(&mut a); - _ = freeze(&mut a); - _ = freeze(&mut a); - _ = freeze(&mut a); - _ = freeze(&mut a); - _ = freeze(&mut a); - _ = freeze(&mut a); - _ = freeze(&mut a); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_freeze_ref_x100() { - label b0: - Self.calibrate_freeze_ref_impl(10); - return; - } - - public entry calibrate_freeze_ref_x500() { - label b0: - Self.calibrate_freeze_ref_impl(50); - return; - } - - public entry calibrate_freeze_ref_x1000() { - label b0: - Self.calibrate_freeze_ref_impl(100); - return; - } -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/borrow/imm-borrow-loc.mvir b/aptos-move/aptos-gas-calibration/samples_ir/borrow/imm-borrow-loc.mvir deleted file mode 100644 index acecdec32320c..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/borrow/imm-borrow-loc.mvir +++ /dev/null @@ -1,37 +0,0 @@ -module 0xcafe.ImmBorrowLoc { - - public calibrate_imm_borrow_loc_impl(n: u64) { - let i: u64; - let a: u64; - label entry: - i = 0; - a = 5; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _, _, _, _, _, _, _, _, _, _ = (&a, &a, &a, &a, &a, &a, &a, &a, &a, &a); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_imm_borrow_loc_x100() { - label b0: - Self.calibrate_imm_borrow_loc_impl(10); - return; - } - - public entry calibrate_imm_borrow_loc_x500() { - label b0: - Self.calibrate_imm_borrow_loc_impl(50); - return; - } - - public entry calibrate_imm_borrow_loc_x1000() { - label b0: - Self.calibrate_imm_borrow_loc_impl(100); - return; - } -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/borrow/mut-borrow-loc.mvir b/aptos-move/aptos-gas-calibration/samples_ir/borrow/mut-borrow-loc.mvir deleted file mode 100644 index abc70f665c986..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/borrow/mut-borrow-loc.mvir +++ /dev/null @@ -1,37 +0,0 @@ -module 0xcafe.MutBorrowLoc { - - public calibrate_mut_borrow_loc_impl(n: u64) { - let i: u64; - let a: u64; - label entry: - i = 0; - a = 5; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _, _, _, _, _, _, _, _, _, _ = (&mut a, &mut a, &mut a, &mut a, &mut a, &mut a, &mut a, &mut a, &mut a, &mut a); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_mut_borrow_loc_x100() { - label b0: - Self.calibrate_mut_borrow_loc_impl(10); - return; - } - - public entry calibrate_mut_borrow_loc_x500() { - label b0: - Self.calibrate_mut_borrow_loc_impl(50); - return; - } - - public entry calibrate_mut_borrow_loc_x1000() { - label b0: - Self.calibrate_mut_borrow_loc_impl(100); - return; - } -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/borrow/read_ref.mvir b/aptos-move/aptos-gas-calibration/samples_ir/borrow/read_ref.mvir deleted file mode 100644 index 28e8e352a9053..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/borrow/read_ref.mvir +++ /dev/null @@ -1,178 +0,0 @@ -module 0xcafe.ReadRef { - - public calibrate_read_ref_u64_impl(n: u64) { - let i: u64; - let a: u64; - label entry: - i = 0; - a = 5; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _ = *&a; - _ = *&a; - _ = *&a; - _ = *&a; - _ = *&a; - _ = *&a; - _ = *&a; - _ = *&a; - _ = *&a; - _ = *&a; - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_read_ref_u64_x100() { - label b0: - Self.calibrate_read_ref_u64_impl(10); - return; - } - - public entry calibrate_read_ref_u64_x500() { - label b0: - Self.calibrate_read_ref_u64_impl(50); - return; - } - - public entry calibrate_read_ref_u64_x1000() { - label b0: - Self.calibrate_read_ref_u64_impl(100); - return; - } - - public calibrate_read_ref_v256_impl(n: u64) { - let i: u64; - let a: vector; - label entry: - i = 0; - a = h"0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff"; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _ = *&a; - _ = *&a; - _ = *&a; - _ = *&a; - _ = *&a; - _ = *&a; - _ = *&a; - _ = *&a; - _ = *&a; - _ = *&a; - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_read_ref_v256_x100() { - label b0: - Self.calibrate_read_ref_v256_impl(10); - return; - } - - public entry calibrate_read_ref_v256_x500() { - label b0: - Self.calibrate_read_ref_v256_impl(50); - return; - } - - public entry calibrate_read_ref_v256_x1000() { - label b0: - Self.calibrate_read_ref_v256_impl(100); - return; - } - - public calibrate_read_ref_v1024_impl(n: u64) { - let i: u64; - let a: vector; - label entry: - i = 0; - a = h"0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff"; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _ = *&a; - _ = *&a; - _ = *&a; - _ = *&a; - _ = *&a; - _ = *&a; - _ = *&a; - _ = *&a; - _ = *&a; - _ = *&a; - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_read_ref_v1024_x100() { - label b0: - Self.calibrate_read_ref_v1024_impl(10); - return; - } - - public entry calibrate_read_ref_v1024_x500() { - label b0: - Self.calibrate_read_ref_v1024_impl(50); - return; - } - - public entry calibrate_read_ref_v1024_x1000() { - label b0: - Self.calibrate_read_ref_v1024_impl(100); - return; - } - - public calibrate_read_ref_v4096_impl(n: u64) { - let i: u64; - let a: vector; - label entry: - i = 0; - a = h"0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff0011223344556677889900aabbccddeeff"; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _ = *&a; - _ = *&a; - _ = *&a; - _ = *&a; - _ = *&a; - _ = *&a; - _ = *&a; - _ = *&a; - _ = *&a; - _ = *&a; - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_read_ref_v4096_x100() { - label b0: - Self.calibrate_read_ref_v4096_impl(10); - return; - } - - public entry calibrate_read_ref_v4096_x500() { - label b0: - Self.calibrate_read_ref_v4096_impl(50); - return; - } - - public entry calibrate_read_ref_v4096_x1000() { - label b0: - Self.calibrate_read_ref_v4096_impl(100); - return; - } -} diff --git a/aptos-move/aptos-gas-calibration/samples_ir/borrow/write_ref.mvir b/aptos-move/aptos-gas-calibration/samples_ir/borrow/write_ref.mvir deleted file mode 100644 index fd5c220ac1eeb..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/borrow/write_ref.mvir +++ /dev/null @@ -1,49 +0,0 @@ -module 0xcafe.WriteRef { - - public calibrate_write_ref_impl(n: u64) { - let i: u64; - let a: u64; - label entry: - i = 0; - a = 5; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - *(&mut a) = 42; - *(&mut a) = 42; - *(&mut a) = 42; - *(&mut a) = 42; - *(&mut a) = 42; - *(&mut a) = 42; - *(&mut a) = 42; - *(&mut a) = 42; - *(&mut a) = 42; - *(&mut a) = 42; - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_write_ref_x100() { - label b0: - Self.calibrate_write_ref_impl(10); - return; - } - - public entry calibrate_write_ref_x500() { - label b0: - Self.calibrate_write_ref_impl(50); - return; - } - - public entry calibrate_write_ref_x1000() { - label b0: - Self.calibrate_write_ref_impl(100); - return; - } - - // TODO(Gas): add more test cases for vector & struct values, but ideally - // those should not make a difference. -} diff --git a/aptos-move/aptos-gas-calibration/samples_ir/branch/br-false.mvir b/aptos-move/aptos-gas-calibration/samples_ir/branch/br-false.mvir deleted file mode 100644 index 7b533b7bd954f..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/branch/br-false.mvir +++ /dev/null @@ -1,109 +0,0 @@ -module 0xcafe.BrFalse { - // more BrFalse cases - - public entry calibrate_br_false_x100() { - label b0: jump_if_false (false) b1; - label b1: jump_if_false (false) b2; - label b2: jump_if_false (false) b3; - label b3: jump_if_false (false) b4; - label b4: jump_if_false (false) b5; - label b5: jump_if_false (false) b6; - label b6: jump_if_false (false) b7; - label b7: jump_if_false (false) b8; - label b8: jump_if_false (false) b9; - label b9: jump_if_false (false) b10; - label b10: jump_if_false (false) b11; - label b11: jump_if_false (false) b12; - label b12: jump_if_false (false) b13; - label b13: jump_if_false (false) b14; - label b14: jump_if_false (false) b15; - label b15: jump_if_false (false) b16; - label b16: jump_if_false (false) b17; - label b17: jump_if_false (false) b18; - label b18: jump_if_false (false) b19; - label b19: jump_if_false (false) b20; - label b20: jump_if_false (false) b21; - label b21: jump_if_false (false) b22; - label b22: jump_if_false (false) b23; - label b23: jump_if_false (false) b24; - label b24: jump_if_false (false) b25; - label b25: jump_if_false (false) b26; - label b26: jump_if_false (false) b27; - label b27: jump_if_false (false) b28; - label b28: jump_if_false (false) b29; - label b29: jump_if_false (false) b30; - label b30: jump_if_false (false) b31; - label b31: jump_if_false (false) b32; - label b32: jump_if_false (false) b33; - label b33: jump_if_false (false) b34; - label b34: jump_if_false (false) b35; - label b35: jump_if_false (false) b36; - label b36: jump_if_false (false) b37; - label b37: jump_if_false (false) b38; - label b38: jump_if_false (false) b39; - label b39: jump_if_false (false) b40; - label b40: jump_if_false (false) b41; - label b41: jump_if_false (false) b42; - label b42: jump_if_false (false) b43; - label b43: jump_if_false (false) b44; - label b44: jump_if_false (false) b45; - label b45: jump_if_false (false) b46; - label b46: jump_if_false (false) b47; - label b47: jump_if_false (false) b48; - label b48: jump_if_false (false) b49; - label b49: jump_if_false (false) b50; - label b50: jump_if_false (false) b51; - label b51: jump_if_false (false) b52; - label b52: jump_if_false (false) b53; - label b53: jump_if_false (false) b54; - label b54: jump_if_false (false) b55; - label b55: jump_if_false (false) b56; - label b56: jump_if_false (false) b57; - label b57: jump_if_false (false) b58; - label b58: jump_if_false (false) b59; - label b59: jump_if_false (false) b60; - label b60: jump_if_false (false) b61; - label b61: jump_if_false (false) b62; - label b62: jump_if_false (false) b63; - label b63: jump_if_false (false) b64; - label b64: jump_if_false (false) b65; - label b65: jump_if_false (false) b66; - label b66: jump_if_false (false) b67; - label b67: jump_if_false (false) b68; - label b68: jump_if_false (false) b69; - label b69: jump_if_false (false) b70; - label b70: jump_if_false (false) b71; - label b71: jump_if_false (false) b72; - label b72: jump_if_false (false) b73; - label b73: jump_if_false (false) b74; - label b74: jump_if_false (false) b75; - label b75: jump_if_false (false) b76; - label b76: jump_if_false (false) b77; - label b77: jump_if_false (false) b78; - label b78: jump_if_false (false) b79; - label b79: jump_if_false (false) b80; - label b80: jump_if_false (false) b81; - label b81: jump_if_false (false) b82; - label b82: jump_if_false (false) b83; - label b83: jump_if_false (false) b84; - label b84: jump_if_false (false) b85; - label b85: jump_if_false (false) b86; - label b86: jump_if_false (false) b87; - label b87: jump_if_false (false) b88; - label b88: jump_if_false (false) b89; - label b89: jump_if_false (false) b90; - label b90: jump_if_false (false) b91; - label b91: jump_if_false (false) b92; - label b92: jump_if_false (false) b93; - label b93: jump_if_false (false) b94; - label b94: jump_if_false (false) b95; - label b95: jump_if_false (false) b96; - label b96: jump_if_false (false) b97; - label b97: jump_if_false (false) b98; - label b98: jump_if_false (false) b99; - label b99: jump_if_false (false) b100; - label b100: - return; - } - -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/branch/br-true.mvir b/aptos-move/aptos-gas-calibration/samples_ir/branch/br-true.mvir deleted file mode 100644 index a22348f1ee979..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/branch/br-true.mvir +++ /dev/null @@ -1,1687 +0,0 @@ -module 0xcafe.BrTrue { - public entry calibrate_br_true_x10() { - label b0: jump_if (true) b1; - label b1: jump_if (true) b2; - label b2: jump_if (true) b3; - label b3: jump_if (true) b4; - label b4: jump_if (true) b5; - label b5: jump_if (true) b6; - label b6: jump_if (true) b7; - label b7: jump_if (true) b8; - label b8: jump_if (true) b9; - label b9: jump_if (true) b10; - label b10: - return; - } - - public entry calibrate_br_true_x50() { - label b0: jump_if (true) b1; - label b1: jump_if (true) b2; - label b2: jump_if (true) b3; - label b3: jump_if (true) b4; - label b4: jump_if (true) b5; - label b5: jump_if (true) b6; - label b6: jump_if (true) b7; - label b7: jump_if (true) b8; - label b8: jump_if (true) b9; - label b9: jump_if (true) b10; - label b10: jump_if (true) b11; - label b11: jump_if (true) b12; - label b12: jump_if (true) b13; - label b13: jump_if (true) b14; - label b14: jump_if (true) b15; - label b15: jump_if (true) b16; - label b16: jump_if (true) b17; - label b17: jump_if (true) b18; - label b18: jump_if (true) b19; - label b19: jump_if (true) b20; - label b20: jump_if (true) b21; - label b21: jump_if (true) b22; - label b22: jump_if (true) b23; - label b23: jump_if (true) b24; - label b24: jump_if (true) b25; - label b25: jump_if (true) b26; - label b26: jump_if (true) b27; - label b27: jump_if (true) b28; - label b28: jump_if (true) b29; - label b29: jump_if (true) b30; - label b30: jump_if (true) b31; - label b31: jump_if (true) b32; - label b32: jump_if (true) b33; - label b33: jump_if (true) b34; - label b34: jump_if (true) b35; - label b35: jump_if (true) b36; - label b36: jump_if (true) b37; - label b37: jump_if (true) b38; - label b38: jump_if (true) b39; - label b39: jump_if (true) b40; - label b40: jump_if (true) b41; - label b41: jump_if (true) b42; - label b42: jump_if (true) b43; - label b43: jump_if (true) b44; - label b44: jump_if (true) b45; - label b45: jump_if (true) b46; - label b46: jump_if (true) b47; - label b47: jump_if (true) b48; - label b48: jump_if (true) b49; - label b49: jump_if (true) b50; - label b50: - return; - } - - public entry calibrate_br_true_x100() { - label b0: jump_if (true) b1; - label b1: jump_if (true) b2; - label b2: jump_if (true) b3; - label b3: jump_if (true) b4; - label b4: jump_if (true) b5; - label b5: jump_if (true) b6; - label b6: jump_if (true) b7; - label b7: jump_if (true) b8; - label b8: jump_if (true) b9; - label b9: jump_if (true) b10; - label b10: jump_if (true) b11; - label b11: jump_if (true) b12; - label b12: jump_if (true) b13; - label b13: jump_if (true) b14; - label b14: jump_if (true) b15; - label b15: jump_if (true) b16; - label b16: jump_if (true) b17; - label b17: jump_if (true) b18; - label b18: jump_if (true) b19; - label b19: jump_if (true) b20; - label b20: jump_if (true) b21; - label b21: jump_if (true) b22; - label b22: jump_if (true) b23; - label b23: jump_if (true) b24; - label b24: jump_if (true) b25; - label b25: jump_if (true) b26; - label b26: jump_if (true) b27; - label b27: jump_if (true) b28; - label b28: jump_if (true) b29; - label b29: jump_if (true) b30; - label b30: jump_if (true) b31; - label b31: jump_if (true) b32; - label b32: jump_if (true) b33; - label b33: jump_if (true) b34; - label b34: jump_if (true) b35; - label b35: jump_if (true) b36; - label b36: jump_if (true) b37; - label b37: jump_if (true) b38; - label b38: jump_if (true) b39; - label b39: jump_if (true) b40; - label b40: jump_if (true) b41; - label b41: jump_if (true) b42; - label b42: jump_if (true) b43; - label b43: jump_if (true) b44; - label b44: jump_if (true) b45; - label b45: jump_if (true) b46; - label b46: jump_if (true) b47; - label b47: jump_if (true) b48; - label b48: jump_if (true) b49; - label b49: jump_if (true) b50; - label b50: jump_if (true) b51; - label b51: jump_if (true) b52; - label b52: jump_if (true) b53; - label b53: jump_if (true) b54; - label b54: jump_if (true) b55; - label b55: jump_if (true) b56; - label b56: jump_if (true) b57; - label b57: jump_if (true) b58; - label b58: jump_if (true) b59; - label b59: jump_if (true) b60; - label b60: jump_if (true) b61; - label b61: jump_if (true) b62; - label b62: jump_if (true) b63; - label b63: jump_if (true) b64; - label b64: jump_if (true) b65; - label b65: jump_if (true) b66; - label b66: jump_if (true) b67; - label b67: jump_if (true) b68; - label b68: jump_if (true) b69; - label b69: jump_if (true) b70; - label b70: jump_if (true) b71; - label b71: jump_if (true) b72; - label b72: jump_if (true) b73; - label b73: jump_if (true) b74; - label b74: jump_if (true) b75; - label b75: jump_if (true) b76; - label b76: jump_if (true) b77; - label b77: jump_if (true) b78; - label b78: jump_if (true) b79; - label b79: jump_if (true) b80; - label b80: jump_if (true) b81; - label b81: jump_if (true) b82; - label b82: jump_if (true) b83; - label b83: jump_if (true) b84; - label b84: jump_if (true) b85; - label b85: jump_if (true) b86; - label b86: jump_if (true) b87; - label b87: jump_if (true) b88; - label b88: jump_if (true) b89; - label b89: jump_if (true) b90; - label b90: jump_if (true) b91; - label b91: jump_if (true) b92; - label b92: jump_if (true) b93; - label b93: jump_if (true) b94; - label b94: jump_if (true) b95; - label b95: jump_if (true) b96; - label b96: jump_if (true) b97; - label b97: jump_if (true) b98; - label b98: jump_if (true) b99; - label b99: jump_if (true) b100; - label b100: - return; - } - - public entry calibrate_br_true_x500() { - label b0: jump_if (true) b1; - label b1: jump_if (true) b2; - label b2: jump_if (true) b3; - label b3: jump_if (true) b4; - label b4: jump_if (true) b5; - label b5: jump_if (true) b6; - label b6: jump_if (true) b7; - label b7: jump_if (true) b8; - label b8: jump_if (true) b9; - label b9: jump_if (true) b10; - label b10: jump_if (true) b11; - label b11: jump_if (true) b12; - label b12: jump_if (true) b13; - label b13: jump_if (true) b14; - label b14: jump_if (true) b15; - label b15: jump_if (true) b16; - label b16: jump_if (true) b17; - label b17: jump_if (true) b18; - label b18: jump_if (true) b19; - label b19: jump_if (true) b20; - label b20: jump_if (true) b21; - label b21: jump_if (true) b22; - label b22: jump_if (true) b23; - label b23: jump_if (true) b24; - label b24: jump_if (true) b25; - label b25: jump_if (true) b26; - label b26: jump_if (true) b27; - label b27: jump_if (true) b28; - label b28: jump_if (true) b29; - label b29: jump_if (true) b30; - label b30: jump_if (true) b31; - label b31: jump_if (true) b32; - label b32: jump_if (true) b33; - label b33: jump_if (true) b34; - label b34: jump_if (true) b35; - label b35: jump_if (true) b36; - label b36: jump_if (true) b37; - label b37: jump_if (true) b38; - label b38: jump_if (true) b39; - label b39: jump_if (true) b40; - label b40: jump_if (true) b41; - label b41: jump_if (true) b42; - label b42: jump_if (true) b43; - label b43: jump_if (true) b44; - label b44: jump_if (true) b45; - label b45: jump_if (true) b46; - label b46: jump_if (true) b47; - label b47: jump_if (true) b48; - label b48: jump_if (true) b49; - label b49: jump_if (true) b50; - label b50: jump_if (true) b51; - label b51: jump_if (true) b52; - label b52: jump_if (true) b53; - label b53: jump_if (true) b54; - label b54: jump_if (true) b55; - label b55: jump_if (true) b56; - label b56: jump_if (true) b57; - label b57: jump_if (true) b58; - label b58: jump_if (true) b59; - label b59: jump_if (true) b60; - label b60: jump_if (true) b61; - label b61: jump_if (true) b62; - label b62: jump_if (true) b63; - label b63: jump_if (true) b64; - label b64: jump_if (true) b65; - label b65: jump_if (true) b66; - label b66: jump_if (true) b67; - label b67: jump_if (true) b68; - label b68: jump_if (true) b69; - label b69: jump_if (true) b70; - label b70: jump_if (true) b71; - label b71: jump_if (true) b72; - label b72: jump_if (true) b73; - label b73: jump_if (true) b74; - label b74: jump_if (true) b75; - label b75: jump_if (true) b76; - label b76: jump_if (true) b77; - label b77: jump_if (true) b78; - label b78: jump_if (true) b79; - label b79: jump_if (true) b80; - label b80: jump_if (true) b81; - label b81: jump_if (true) b82; - label b82: jump_if (true) b83; - label b83: jump_if (true) b84; - label b84: jump_if (true) b85; - label b85: jump_if (true) b86; - label b86: jump_if (true) b87; - label b87: jump_if (true) b88; - label b88: jump_if (true) b89; - label b89: jump_if (true) b90; - label b90: jump_if (true) b91; - label b91: jump_if (true) b92; - label b92: jump_if (true) b93; - label b93: jump_if (true) b94; - label b94: jump_if (true) b95; - label b95: jump_if (true) b96; - label b96: jump_if (true) b97; - label b97: jump_if (true) b98; - label b98: jump_if (true) b99; - label b99: jump_if (true) b100; - label b100: jump_if (true) b101; - label b101: jump_if (true) b102; - label b102: jump_if (true) b103; - label b103: jump_if (true) b104; - label b104: jump_if (true) b105; - label b105: jump_if (true) b106; - label b106: jump_if (true) b107; - label b107: jump_if (true) b108; - label b108: jump_if (true) b109; - label b109: jump_if (true) b110; - label b110: jump_if (true) b111; - label b111: jump_if (true) b112; - label b112: jump_if (true) b113; - label b113: jump_if (true) b114; - label b114: jump_if (true) b115; - label b115: jump_if (true) b116; - label b116: jump_if (true) b117; - label b117: jump_if (true) b118; - label b118: jump_if (true) b119; - label b119: jump_if (true) b120; - label b120: jump_if (true) b121; - label b121: jump_if (true) b122; - label b122: jump_if (true) b123; - label b123: jump_if (true) b124; - label b124: jump_if (true) b125; - label b125: jump_if (true) b126; - label b126: jump_if (true) b127; - label b127: jump_if (true) b128; - label b128: jump_if (true) b129; - label b129: jump_if (true) b130; - label b130: jump_if (true) b131; - label b131: jump_if (true) b132; - label b132: jump_if (true) b133; - label b133: jump_if (true) b134; - label b134: jump_if (true) b135; - label b135: jump_if (true) b136; - label b136: jump_if (true) b137; - label b137: jump_if (true) b138; - label b138: jump_if (true) b139; - label b139: jump_if (true) b140; - label b140: jump_if (true) b141; - label b141: jump_if (true) b142; - label b142: jump_if (true) b143; - label b143: jump_if (true) b144; - label b144: jump_if (true) b145; - label b145: jump_if (true) b146; - label b146: jump_if (true) b147; - label b147: jump_if (true) b148; - label b148: jump_if (true) b149; - label b149: jump_if (true) b150; - label b150: jump_if (true) b151; - label b151: jump_if (true) b152; - label b152: jump_if (true) b153; - label b153: jump_if (true) b154; - label b154: jump_if (true) b155; - label b155: jump_if (true) b156; - label b156: jump_if (true) b157; - label b157: jump_if (true) b158; - label b158: jump_if (true) b159; - label b159: jump_if (true) b160; - label b160: jump_if (true) b161; - label b161: jump_if (true) b162; - label b162: jump_if (true) b163; - label b163: jump_if (true) b164; - label b164: jump_if (true) b165; - label b165: jump_if (true) b166; - label b166: jump_if (true) b167; - label b167: jump_if (true) b168; - label b168: jump_if (true) b169; - label b169: jump_if (true) b170; - label b170: jump_if (true) b171; - label b171: jump_if (true) b172; - label b172: jump_if (true) b173; - label b173: jump_if (true) b174; - label b174: jump_if (true) b175; - label b175: jump_if (true) b176; - label b176: jump_if (true) b177; - label b177: jump_if (true) b178; - label b178: jump_if (true) b179; - label b179: jump_if (true) b180; - label b180: jump_if (true) b181; - label b181: jump_if (true) b182; - label b182: jump_if (true) b183; - label b183: jump_if (true) b184; - label b184: jump_if (true) b185; - label b185: jump_if (true) b186; - label b186: jump_if (true) b187; - label b187: jump_if (true) b188; - label b188: jump_if (true) b189; - label b189: jump_if (true) b190; - label b190: jump_if (true) b191; - label b191: jump_if (true) b192; - label b192: jump_if (true) b193; - label b193: jump_if (true) b194; - label b194: jump_if (true) b195; - label b195: jump_if (true) b196; - label b196: jump_if (true) b197; - label b197: jump_if (true) b198; - label b198: jump_if (true) b199; - label b199: jump_if (true) b200; - label b200: jump_if (true) b201; - label b201: jump_if (true) b202; - label b202: jump_if (true) b203; - label b203: jump_if (true) b204; - label b204: jump_if (true) b205; - label b205: jump_if (true) b206; - label b206: jump_if (true) b207; - label b207: jump_if (true) b208; - label b208: jump_if (true) b209; - label b209: jump_if (true) b210; - label b210: jump_if (true) b211; - label b211: jump_if (true) b212; - label b212: jump_if (true) b213; - label b213: jump_if (true) b214; - label b214: jump_if (true) b215; - label b215: jump_if (true) b216; - label b216: jump_if (true) b217; - label b217: jump_if (true) b218; - label b218: jump_if (true) b219; - label b219: jump_if (true) b220; - label b220: jump_if (true) b221; - label b221: jump_if (true) b222; - label b222: jump_if (true) b223; - label b223: jump_if (true) b224; - label b224: jump_if (true) b225; - label b225: jump_if (true) b226; - label b226: jump_if (true) b227; - label b227: jump_if (true) b228; - label b228: jump_if (true) b229; - label b229: jump_if (true) b230; - label b230: jump_if (true) b231; - label b231: jump_if (true) b232; - label b232: jump_if (true) b233; - label b233: jump_if (true) b234; - label b234: jump_if (true) b235; - label b235: jump_if (true) b236; - label b236: jump_if (true) b237; - label b237: jump_if (true) b238; - label b238: jump_if (true) b239; - label b239: jump_if (true) b240; - label b240: jump_if (true) b241; - label b241: jump_if (true) b242; - label b242: jump_if (true) b243; - label b243: jump_if (true) b244; - label b244: jump_if (true) b245; - label b245: jump_if (true) b246; - label b246: jump_if (true) b247; - label b247: jump_if (true) b248; - label b248: jump_if (true) b249; - label b249: jump_if (true) b250; - label b250: jump_if (true) b251; - label b251: jump_if (true) b252; - label b252: jump_if (true) b253; - label b253: jump_if (true) b254; - label b254: jump_if (true) b255; - label b255: jump_if (true) b256; - label b256: jump_if (true) b257; - label b257: jump_if (true) b258; - label b258: jump_if (true) b259; - label b259: jump_if (true) b260; - label b260: jump_if (true) b261; - label b261: jump_if (true) b262; - label b262: jump_if (true) b263; - label b263: jump_if (true) b264; - label b264: jump_if (true) b265; - label b265: jump_if (true) b266; - label b266: jump_if (true) b267; - label b267: jump_if (true) b268; - label b268: jump_if (true) b269; - label b269: jump_if (true) b270; - label b270: jump_if (true) b271; - label b271: jump_if (true) b272; - label b272: jump_if (true) b273; - label b273: jump_if (true) b274; - label b274: jump_if (true) b275; - label b275: jump_if (true) b276; - label b276: jump_if (true) b277; - label b277: jump_if (true) b278; - label b278: jump_if (true) b279; - label b279: jump_if (true) b280; - label b280: jump_if (true) b281; - label b281: jump_if (true) b282; - label b282: jump_if (true) b283; - label b283: jump_if (true) b284; - label b284: jump_if (true) b285; - label b285: jump_if (true) b286; - label b286: jump_if (true) b287; - label b287: jump_if (true) b288; - label b288: jump_if (true) b289; - label b289: jump_if (true) b290; - label b290: jump_if (true) b291; - label b291: jump_if (true) b292; - label b292: jump_if (true) b293; - label b293: jump_if (true) b294; - label b294: jump_if (true) b295; - label b295: jump_if (true) b296; - label b296: jump_if (true) b297; - label b297: jump_if (true) b298; - label b298: jump_if (true) b299; - label b299: jump_if (true) b300; - label b300: jump_if (true) b301; - label b301: jump_if (true) b302; - label b302: jump_if (true) b303; - label b303: jump_if (true) b304; - label b304: jump_if (true) b305; - label b305: jump_if (true) b306; - label b306: jump_if (true) b307; - label b307: jump_if (true) b308; - label b308: jump_if (true) b309; - label b309: jump_if (true) b310; - label b310: jump_if (true) b311; - label b311: jump_if (true) b312; - label b312: jump_if (true) b313; - label b313: jump_if (true) b314; - label b314: jump_if (true) b315; - label b315: jump_if (true) b316; - label b316: jump_if (true) b317; - label b317: jump_if (true) b318; - label b318: jump_if (true) b319; - label b319: jump_if (true) b320; - label b320: jump_if (true) b321; - label b321: jump_if (true) b322; - label b322: jump_if (true) b323; - label b323: jump_if (true) b324; - label b324: jump_if (true) b325; - label b325: jump_if (true) b326; - label b326: jump_if (true) b327; - label b327: jump_if (true) b328; - label b328: jump_if (true) b329; - label b329: jump_if (true) b330; - label b330: jump_if (true) b331; - label b331: jump_if (true) b332; - label b332: jump_if (true) b333; - label b333: jump_if (true) b334; - label b334: jump_if (true) b335; - label b335: jump_if (true) b336; - label b336: jump_if (true) b337; - label b337: jump_if (true) b338; - label b338: jump_if (true) b339; - label b339: jump_if (true) b340; - label b340: jump_if (true) b341; - label b341: jump_if (true) b342; - label b342: jump_if (true) b343; - label b343: jump_if (true) b344; - label b344: jump_if (true) b345; - label b345: jump_if (true) b346; - label b346: jump_if (true) b347; - label b347: jump_if (true) b348; - label b348: jump_if (true) b349; - label b349: jump_if (true) b350; - label b350: jump_if (true) b351; - label b351: jump_if (true) b352; - label b352: jump_if (true) b353; - label b353: jump_if (true) b354; - label b354: jump_if (true) b355; - label b355: jump_if (true) b356; - label b356: jump_if (true) b357; - label b357: jump_if (true) b358; - label b358: jump_if (true) b359; - label b359: jump_if (true) b360; - label b360: jump_if (true) b361; - label b361: jump_if (true) b362; - label b362: jump_if (true) b363; - label b363: jump_if (true) b364; - label b364: jump_if (true) b365; - label b365: jump_if (true) b366; - label b366: jump_if (true) b367; - label b367: jump_if (true) b368; - label b368: jump_if (true) b369; - label b369: jump_if (true) b370; - label b370: jump_if (true) b371; - label b371: jump_if (true) b372; - label b372: jump_if (true) b373; - label b373: jump_if (true) b374; - label b374: jump_if (true) b375; - label b375: jump_if (true) b376; - label b376: jump_if (true) b377; - label b377: jump_if (true) b378; - label b378: jump_if (true) b379; - label b379: jump_if (true) b380; - label b380: jump_if (true) b381; - label b381: jump_if (true) b382; - label b382: jump_if (true) b383; - label b383: jump_if (true) b384; - label b384: jump_if (true) b385; - label b385: jump_if (true) b386; - label b386: jump_if (true) b387; - label b387: jump_if (true) b388; - label b388: jump_if (true) b389; - label b389: jump_if (true) b390; - label b390: jump_if (true) b391; - label b391: jump_if (true) b392; - label b392: jump_if (true) b393; - label b393: jump_if (true) b394; - label b394: jump_if (true) b395; - label b395: jump_if (true) b396; - label b396: jump_if (true) b397; - label b397: jump_if (true) b398; - label b398: jump_if (true) b399; - label b399: jump_if (true) b400; - label b400: jump_if (true) b401; - label b401: jump_if (true) b402; - label b402: jump_if (true) b403; - label b403: jump_if (true) b404; - label b404: jump_if (true) b405; - label b405: jump_if (true) b406; - label b406: jump_if (true) b407; - label b407: jump_if (true) b408; - label b408: jump_if (true) b409; - label b409: jump_if (true) b410; - label b410: jump_if (true) b411; - label b411: jump_if (true) b412; - label b412: jump_if (true) b413; - label b413: jump_if (true) b414; - label b414: jump_if (true) b415; - label b415: jump_if (true) b416; - label b416: jump_if (true) b417; - label b417: jump_if (true) b418; - label b418: jump_if (true) b419; - label b419: jump_if (true) b420; - label b420: jump_if (true) b421; - label b421: jump_if (true) b422; - label b422: jump_if (true) b423; - label b423: jump_if (true) b424; - label b424: jump_if (true) b425; - label b425: jump_if (true) b426; - label b426: jump_if (true) b427; - label b427: jump_if (true) b428; - label b428: jump_if (true) b429; - label b429: jump_if (true) b430; - label b430: jump_if (true) b431; - label b431: jump_if (true) b432; - label b432: jump_if (true) b433; - label b433: jump_if (true) b434; - label b434: jump_if (true) b435; - label b435: jump_if (true) b436; - label b436: jump_if (true) b437; - label b437: jump_if (true) b438; - label b438: jump_if (true) b439; - label b439: jump_if (true) b440; - label b440: jump_if (true) b441; - label b441: jump_if (true) b442; - label b442: jump_if (true) b443; - label b443: jump_if (true) b444; - label b444: jump_if (true) b445; - label b445: jump_if (true) b446; - label b446: jump_if (true) b447; - label b447: jump_if (true) b448; - label b448: jump_if (true) b449; - label b449: jump_if (true) b450; - label b450: jump_if (true) b451; - label b451: jump_if (true) b452; - label b452: jump_if (true) b453; - label b453: jump_if (true) b454; - label b454: jump_if (true) b455; - label b455: jump_if (true) b456; - label b456: jump_if (true) b457; - label b457: jump_if (true) b458; - label b458: jump_if (true) b459; - label b459: jump_if (true) b460; - label b460: jump_if (true) b461; - label b461: jump_if (true) b462; - label b462: jump_if (true) b463; - label b463: jump_if (true) b464; - label b464: jump_if (true) b465; - label b465: jump_if (true) b466; - label b466: jump_if (true) b467; - label b467: jump_if (true) b468; - label b468: jump_if (true) b469; - label b469: jump_if (true) b470; - label b470: jump_if (true) b471; - label b471: jump_if (true) b472; - label b472: jump_if (true) b473; - label b473: jump_if (true) b474; - label b474: jump_if (true) b475; - label b475: jump_if (true) b476; - label b476: jump_if (true) b477; - label b477: jump_if (true) b478; - label b478: jump_if (true) b479; - label b479: jump_if (true) b480; - label b480: jump_if (true) b481; - label b481: jump_if (true) b482; - label b482: jump_if (true) b483; - label b483: jump_if (true) b484; - label b484: jump_if (true) b485; - label b485: jump_if (true) b486; - label b486: jump_if (true) b487; - label b487: jump_if (true) b488; - label b488: jump_if (true) b489; - label b489: jump_if (true) b490; - label b490: jump_if (true) b491; - label b491: jump_if (true) b492; - label b492: jump_if (true) b493; - label b493: jump_if (true) b494; - label b494: jump_if (true) b495; - label b495: jump_if (true) b496; - label b496: jump_if (true) b497; - label b497: jump_if (true) b498; - label b498: jump_if (true) b499; - label b499: jump_if (true) b500; - label b500: - return; - } - - public entry calibrate_br_true_x1000() { - label b0: jump_if (true) b1; - label b1: jump_if (true) b2; - label b2: jump_if (true) b3; - label b3: jump_if (true) b4; - label b4: jump_if (true) b5; - label b5: jump_if (true) b6; - label b6: jump_if (true) b7; - label b7: jump_if (true) b8; - label b8: jump_if (true) b9; - label b9: jump_if (true) b10; - label b10: jump_if (true) b11; - label b11: jump_if (true) b12; - label b12: jump_if (true) b13; - label b13: jump_if (true) b14; - label b14: jump_if (true) b15; - label b15: jump_if (true) b16; - label b16: jump_if (true) b17; - label b17: jump_if (true) b18; - label b18: jump_if (true) b19; - label b19: jump_if (true) b20; - label b20: jump_if (true) b21; - label b21: jump_if (true) b22; - label b22: jump_if (true) b23; - label b23: jump_if (true) b24; - label b24: jump_if (true) b25; - label b25: jump_if (true) b26; - label b26: jump_if (true) b27; - label b27: jump_if (true) b28; - label b28: jump_if (true) b29; - label b29: jump_if (true) b30; - label b30: jump_if (true) b31; - label b31: jump_if (true) b32; - label b32: jump_if (true) b33; - label b33: jump_if (true) b34; - label b34: jump_if (true) b35; - label b35: jump_if (true) b36; - label b36: jump_if (true) b37; - label b37: jump_if (true) b38; - label b38: jump_if (true) b39; - label b39: jump_if (true) b40; - label b40: jump_if (true) b41; - label b41: jump_if (true) b42; - label b42: jump_if (true) b43; - label b43: jump_if (true) b44; - label b44: jump_if (true) b45; - label b45: jump_if (true) b46; - label b46: jump_if (true) b47; - label b47: jump_if (true) b48; - label b48: jump_if (true) b49; - label b49: jump_if (true) b50; - label b50: jump_if (true) b51; - label b51: jump_if (true) b52; - label b52: jump_if (true) b53; - label b53: jump_if (true) b54; - label b54: jump_if (true) b55; - label b55: jump_if (true) b56; - label b56: jump_if (true) b57; - label b57: jump_if (true) b58; - label b58: jump_if (true) b59; - label b59: jump_if (true) b60; - label b60: jump_if (true) b61; - label b61: jump_if (true) b62; - label b62: jump_if (true) b63; - label b63: jump_if (true) b64; - label b64: jump_if (true) b65; - label b65: jump_if (true) b66; - label b66: jump_if (true) b67; - label b67: jump_if (true) b68; - label b68: jump_if (true) b69; - label b69: jump_if (true) b70; - label b70: jump_if (true) b71; - label b71: jump_if (true) b72; - label b72: jump_if (true) b73; - label b73: jump_if (true) b74; - label b74: jump_if (true) b75; - label b75: jump_if (true) b76; - label b76: jump_if (true) b77; - label b77: jump_if (true) b78; - label b78: jump_if (true) b79; - label b79: jump_if (true) b80; - label b80: jump_if (true) b81; - label b81: jump_if (true) b82; - label b82: jump_if (true) b83; - label b83: jump_if (true) b84; - label b84: jump_if (true) b85; - label b85: jump_if (true) b86; - label b86: jump_if (true) b87; - label b87: jump_if (true) b88; - label b88: jump_if (true) b89; - label b89: jump_if (true) b90; - label b90: jump_if (true) b91; - label b91: jump_if (true) b92; - label b92: jump_if (true) b93; - label b93: jump_if (true) b94; - label b94: jump_if (true) b95; - label b95: jump_if (true) b96; - label b96: jump_if (true) b97; - label b97: jump_if (true) b98; - label b98: jump_if (true) b99; - label b99: jump_if (true) b100; - label b100: jump_if (true) b101; - label b101: jump_if (true) b102; - label b102: jump_if (true) b103; - label b103: jump_if (true) b104; - label b104: jump_if (true) b105; - label b105: jump_if (true) b106; - label b106: jump_if (true) b107; - label b107: jump_if (true) b108; - label b108: jump_if (true) b109; - label b109: jump_if (true) b110; - label b110: jump_if (true) b111; - label b111: jump_if (true) b112; - label b112: jump_if (true) b113; - label b113: jump_if (true) b114; - label b114: jump_if (true) b115; - label b115: jump_if (true) b116; - label b116: jump_if (true) b117; - label b117: jump_if (true) b118; - label b118: jump_if (true) b119; - label b119: jump_if (true) b120; - label b120: jump_if (true) b121; - label b121: jump_if (true) b122; - label b122: jump_if (true) b123; - label b123: jump_if (true) b124; - label b124: jump_if (true) b125; - label b125: jump_if (true) b126; - label b126: jump_if (true) b127; - label b127: jump_if (true) b128; - label b128: jump_if (true) b129; - label b129: jump_if (true) b130; - label b130: jump_if (true) b131; - label b131: jump_if (true) b132; - label b132: jump_if (true) b133; - label b133: jump_if (true) b134; - label b134: jump_if (true) b135; - label b135: jump_if (true) b136; - label b136: jump_if (true) b137; - label b137: jump_if (true) b138; - label b138: jump_if (true) b139; - label b139: jump_if (true) b140; - label b140: jump_if (true) b141; - label b141: jump_if (true) b142; - label b142: jump_if (true) b143; - label b143: jump_if (true) b144; - label b144: jump_if (true) b145; - label b145: jump_if (true) b146; - label b146: jump_if (true) b147; - label b147: jump_if (true) b148; - label b148: jump_if (true) b149; - label b149: jump_if (true) b150; - label b150: jump_if (true) b151; - label b151: jump_if (true) b152; - label b152: jump_if (true) b153; - label b153: jump_if (true) b154; - label b154: jump_if (true) b155; - label b155: jump_if (true) b156; - label b156: jump_if (true) b157; - label b157: jump_if (true) b158; - label b158: jump_if (true) b159; - label b159: jump_if (true) b160; - label b160: jump_if (true) b161; - label b161: jump_if (true) b162; - label b162: jump_if (true) b163; - label b163: jump_if (true) b164; - label b164: jump_if (true) b165; - label b165: jump_if (true) b166; - label b166: jump_if (true) b167; - label b167: jump_if (true) b168; - label b168: jump_if (true) b169; - label b169: jump_if (true) b170; - label b170: jump_if (true) b171; - label b171: jump_if (true) b172; - label b172: jump_if (true) b173; - label b173: jump_if (true) b174; - label b174: jump_if (true) b175; - label b175: jump_if (true) b176; - label b176: jump_if (true) b177; - label b177: jump_if (true) b178; - label b178: jump_if (true) b179; - label b179: jump_if (true) b180; - label b180: jump_if (true) b181; - label b181: jump_if (true) b182; - label b182: jump_if (true) b183; - label b183: jump_if (true) b184; - label b184: jump_if (true) b185; - label b185: jump_if (true) b186; - label b186: jump_if (true) b187; - label b187: jump_if (true) b188; - label b188: jump_if (true) b189; - label b189: jump_if (true) b190; - label b190: jump_if (true) b191; - label b191: jump_if (true) b192; - label b192: jump_if (true) b193; - label b193: jump_if (true) b194; - label b194: jump_if (true) b195; - label b195: jump_if (true) b196; - label b196: jump_if (true) b197; - label b197: jump_if (true) b198; - label b198: jump_if (true) b199; - label b199: jump_if (true) b200; - label b200: jump_if (true) b201; - label b201: jump_if (true) b202; - label b202: jump_if (true) b203; - label b203: jump_if (true) b204; - label b204: jump_if (true) b205; - label b205: jump_if (true) b206; - label b206: jump_if (true) b207; - label b207: jump_if (true) b208; - label b208: jump_if (true) b209; - label b209: jump_if (true) b210; - label b210: jump_if (true) b211; - label b211: jump_if (true) b212; - label b212: jump_if (true) b213; - label b213: jump_if (true) b214; - label b214: jump_if (true) b215; - label b215: jump_if (true) b216; - label b216: jump_if (true) b217; - label b217: jump_if (true) b218; - label b218: jump_if (true) b219; - label b219: jump_if (true) b220; - label b220: jump_if (true) b221; - label b221: jump_if (true) b222; - label b222: jump_if (true) b223; - label b223: jump_if (true) b224; - label b224: jump_if (true) b225; - label b225: jump_if (true) b226; - label b226: jump_if (true) b227; - label b227: jump_if (true) b228; - label b228: jump_if (true) b229; - label b229: jump_if (true) b230; - label b230: jump_if (true) b231; - label b231: jump_if (true) b232; - label b232: jump_if (true) b233; - label b233: jump_if (true) b234; - label b234: jump_if (true) b235; - label b235: jump_if (true) b236; - label b236: jump_if (true) b237; - label b237: jump_if (true) b238; - label b238: jump_if (true) b239; - label b239: jump_if (true) b240; - label b240: jump_if (true) b241; - label b241: jump_if (true) b242; - label b242: jump_if (true) b243; - label b243: jump_if (true) b244; - label b244: jump_if (true) b245; - label b245: jump_if (true) b246; - label b246: jump_if (true) b247; - label b247: jump_if (true) b248; - label b248: jump_if (true) b249; - label b249: jump_if (true) b250; - label b250: jump_if (true) b251; - label b251: jump_if (true) b252; - label b252: jump_if (true) b253; - label b253: jump_if (true) b254; - label b254: jump_if (true) b255; - label b255: jump_if (true) b256; - label b256: jump_if (true) b257; - label b257: jump_if (true) b258; - label b258: jump_if (true) b259; - label b259: jump_if (true) b260; - label b260: jump_if (true) b261; - label b261: jump_if (true) b262; - label b262: jump_if (true) b263; - label b263: jump_if (true) b264; - label b264: jump_if (true) b265; - label b265: jump_if (true) b266; - label b266: jump_if (true) b267; - label b267: jump_if (true) b268; - label b268: jump_if (true) b269; - label b269: jump_if (true) b270; - label b270: jump_if (true) b271; - label b271: jump_if (true) b272; - label b272: jump_if (true) b273; - label b273: jump_if (true) b274; - label b274: jump_if (true) b275; - label b275: jump_if (true) b276; - label b276: jump_if (true) b277; - label b277: jump_if (true) b278; - label b278: jump_if (true) b279; - label b279: jump_if (true) b280; - label b280: jump_if (true) b281; - label b281: jump_if (true) b282; - label b282: jump_if (true) b283; - label b283: jump_if (true) b284; - label b284: jump_if (true) b285; - label b285: jump_if (true) b286; - label b286: jump_if (true) b287; - label b287: jump_if (true) b288; - label b288: jump_if (true) b289; - label b289: jump_if (true) b290; - label b290: jump_if (true) b291; - label b291: jump_if (true) b292; - label b292: jump_if (true) b293; - label b293: jump_if (true) b294; - label b294: jump_if (true) b295; - label b295: jump_if (true) b296; - label b296: jump_if (true) b297; - label b297: jump_if (true) b298; - label b298: jump_if (true) b299; - label b299: jump_if (true) b300; - label b300: jump_if (true) b301; - label b301: jump_if (true) b302; - label b302: jump_if (true) b303; - label b303: jump_if (true) b304; - label b304: jump_if (true) b305; - label b305: jump_if (true) b306; - label b306: jump_if (true) b307; - label b307: jump_if (true) b308; - label b308: jump_if (true) b309; - label b309: jump_if (true) b310; - label b310: jump_if (true) b311; - label b311: jump_if (true) b312; - label b312: jump_if (true) b313; - label b313: jump_if (true) b314; - label b314: jump_if (true) b315; - label b315: jump_if (true) b316; - label b316: jump_if (true) b317; - label b317: jump_if (true) b318; - label b318: jump_if (true) b319; - label b319: jump_if (true) b320; - label b320: jump_if (true) b321; - label b321: jump_if (true) b322; - label b322: jump_if (true) b323; - label b323: jump_if (true) b324; - label b324: jump_if (true) b325; - label b325: jump_if (true) b326; - label b326: jump_if (true) b327; - label b327: jump_if (true) b328; - label b328: jump_if (true) b329; - label b329: jump_if (true) b330; - label b330: jump_if (true) b331; - label b331: jump_if (true) b332; - label b332: jump_if (true) b333; - label b333: jump_if (true) b334; - label b334: jump_if (true) b335; - label b335: jump_if (true) b336; - label b336: jump_if (true) b337; - label b337: jump_if (true) b338; - label b338: jump_if (true) b339; - label b339: jump_if (true) b340; - label b340: jump_if (true) b341; - label b341: jump_if (true) b342; - label b342: jump_if (true) b343; - label b343: jump_if (true) b344; - label b344: jump_if (true) b345; - label b345: jump_if (true) b346; - label b346: jump_if (true) b347; - label b347: jump_if (true) b348; - label b348: jump_if (true) b349; - label b349: jump_if (true) b350; - label b350: jump_if (true) b351; - label b351: jump_if (true) b352; - label b352: jump_if (true) b353; - label b353: jump_if (true) b354; - label b354: jump_if (true) b355; - label b355: jump_if (true) b356; - label b356: jump_if (true) b357; - label b357: jump_if (true) b358; - label b358: jump_if (true) b359; - label b359: jump_if (true) b360; - label b360: jump_if (true) b361; - label b361: jump_if (true) b362; - label b362: jump_if (true) b363; - label b363: jump_if (true) b364; - label b364: jump_if (true) b365; - label b365: jump_if (true) b366; - label b366: jump_if (true) b367; - label b367: jump_if (true) b368; - label b368: jump_if (true) b369; - label b369: jump_if (true) b370; - label b370: jump_if (true) b371; - label b371: jump_if (true) b372; - label b372: jump_if (true) b373; - label b373: jump_if (true) b374; - label b374: jump_if (true) b375; - label b375: jump_if (true) b376; - label b376: jump_if (true) b377; - label b377: jump_if (true) b378; - label b378: jump_if (true) b379; - label b379: jump_if (true) b380; - label b380: jump_if (true) b381; - label b381: jump_if (true) b382; - label b382: jump_if (true) b383; - label b383: jump_if (true) b384; - label b384: jump_if (true) b385; - label b385: jump_if (true) b386; - label b386: jump_if (true) b387; - label b387: jump_if (true) b388; - label b388: jump_if (true) b389; - label b389: jump_if (true) b390; - label b390: jump_if (true) b391; - label b391: jump_if (true) b392; - label b392: jump_if (true) b393; - label b393: jump_if (true) b394; - label b394: jump_if (true) b395; - label b395: jump_if (true) b396; - label b396: jump_if (true) b397; - label b397: jump_if (true) b398; - label b398: jump_if (true) b399; - label b399: jump_if (true) b400; - label b400: jump_if (true) b401; - label b401: jump_if (true) b402; - label b402: jump_if (true) b403; - label b403: jump_if (true) b404; - label b404: jump_if (true) b405; - label b405: jump_if (true) b406; - label b406: jump_if (true) b407; - label b407: jump_if (true) b408; - label b408: jump_if (true) b409; - label b409: jump_if (true) b410; - label b410: jump_if (true) b411; - label b411: jump_if (true) b412; - label b412: jump_if (true) b413; - label b413: jump_if (true) b414; - label b414: jump_if (true) b415; - label b415: jump_if (true) b416; - label b416: jump_if (true) b417; - label b417: jump_if (true) b418; - label b418: jump_if (true) b419; - label b419: jump_if (true) b420; - label b420: jump_if (true) b421; - label b421: jump_if (true) b422; - label b422: jump_if (true) b423; - label b423: jump_if (true) b424; - label b424: jump_if (true) b425; - label b425: jump_if (true) b426; - label b426: jump_if (true) b427; - label b427: jump_if (true) b428; - label b428: jump_if (true) b429; - label b429: jump_if (true) b430; - label b430: jump_if (true) b431; - label b431: jump_if (true) b432; - label b432: jump_if (true) b433; - label b433: jump_if (true) b434; - label b434: jump_if (true) b435; - label b435: jump_if (true) b436; - label b436: jump_if (true) b437; - label b437: jump_if (true) b438; - label b438: jump_if (true) b439; - label b439: jump_if (true) b440; - label b440: jump_if (true) b441; - label b441: jump_if (true) b442; - label b442: jump_if (true) b443; - label b443: jump_if (true) b444; - label b444: jump_if (true) b445; - label b445: jump_if (true) b446; - label b446: jump_if (true) b447; - label b447: jump_if (true) b448; - label b448: jump_if (true) b449; - label b449: jump_if (true) b450; - label b450: jump_if (true) b451; - label b451: jump_if (true) b452; - label b452: jump_if (true) b453; - label b453: jump_if (true) b454; - label b454: jump_if (true) b455; - label b455: jump_if (true) b456; - label b456: jump_if (true) b457; - label b457: jump_if (true) b458; - label b458: jump_if (true) b459; - label b459: jump_if (true) b460; - label b460: jump_if (true) b461; - label b461: jump_if (true) b462; - label b462: jump_if (true) b463; - label b463: jump_if (true) b464; - label b464: jump_if (true) b465; - label b465: jump_if (true) b466; - label b466: jump_if (true) b467; - label b467: jump_if (true) b468; - label b468: jump_if (true) b469; - label b469: jump_if (true) b470; - label b470: jump_if (true) b471; - label b471: jump_if (true) b472; - label b472: jump_if (true) b473; - label b473: jump_if (true) b474; - label b474: jump_if (true) b475; - label b475: jump_if (true) b476; - label b476: jump_if (true) b477; - label b477: jump_if (true) b478; - label b478: jump_if (true) b479; - label b479: jump_if (true) b480; - label b480: jump_if (true) b481; - label b481: jump_if (true) b482; - label b482: jump_if (true) b483; - label b483: jump_if (true) b484; - label b484: jump_if (true) b485; - label b485: jump_if (true) b486; - label b486: jump_if (true) b487; - label b487: jump_if (true) b488; - label b488: jump_if (true) b489; - label b489: jump_if (true) b490; - label b490: jump_if (true) b491; - label b491: jump_if (true) b492; - label b492: jump_if (true) b493; - label b493: jump_if (true) b494; - label b494: jump_if (true) b495; - label b495: jump_if (true) b496; - label b496: jump_if (true) b497; - label b497: jump_if (true) b498; - label b498: jump_if (true) b499; - label b499: jump_if (true) b500; - label b500: jump_if (true) b501; - label b501: jump_if (true) b502; - label b502: jump_if (true) b503; - label b503: jump_if (true) b504; - label b504: jump_if (true) b505; - label b505: jump_if (true) b506; - label b506: jump_if (true) b507; - label b507: jump_if (true) b508; - label b508: jump_if (true) b509; - label b509: jump_if (true) b510; - label b510: jump_if (true) b511; - label b511: jump_if (true) b512; - label b512: jump_if (true) b513; - label b513: jump_if (true) b514; - label b514: jump_if (true) b515; - label b515: jump_if (true) b516; - label b516: jump_if (true) b517; - label b517: jump_if (true) b518; - label b518: jump_if (true) b519; - label b519: jump_if (true) b520; - label b520: jump_if (true) b521; - label b521: jump_if (true) b522; - label b522: jump_if (true) b523; - label b523: jump_if (true) b524; - label b524: jump_if (true) b525; - label b525: jump_if (true) b526; - label b526: jump_if (true) b527; - label b527: jump_if (true) b528; - label b528: jump_if (true) b529; - label b529: jump_if (true) b530; - label b530: jump_if (true) b531; - label b531: jump_if (true) b532; - label b532: jump_if (true) b533; - label b533: jump_if (true) b534; - label b534: jump_if (true) b535; - label b535: jump_if (true) b536; - label b536: jump_if (true) b537; - label b537: jump_if (true) b538; - label b538: jump_if (true) b539; - label b539: jump_if (true) b540; - label b540: jump_if (true) b541; - label b541: jump_if (true) b542; - label b542: jump_if (true) b543; - label b543: jump_if (true) b544; - label b544: jump_if (true) b545; - label b545: jump_if (true) b546; - label b546: jump_if (true) b547; - label b547: jump_if (true) b548; - label b548: jump_if (true) b549; - label b549: jump_if (true) b550; - label b550: jump_if (true) b551; - label b551: jump_if (true) b552; - label b552: jump_if (true) b553; - label b553: jump_if (true) b554; - label b554: jump_if (true) b555; - label b555: jump_if (true) b556; - label b556: jump_if (true) b557; - label b557: jump_if (true) b558; - label b558: jump_if (true) b559; - label b559: jump_if (true) b560; - label b560: jump_if (true) b561; - label b561: jump_if (true) b562; - label b562: jump_if (true) b563; - label b563: jump_if (true) b564; - label b564: jump_if (true) b565; - label b565: jump_if (true) b566; - label b566: jump_if (true) b567; - label b567: jump_if (true) b568; - label b568: jump_if (true) b569; - label b569: jump_if (true) b570; - label b570: jump_if (true) b571; - label b571: jump_if (true) b572; - label b572: jump_if (true) b573; - label b573: jump_if (true) b574; - label b574: jump_if (true) b575; - label b575: jump_if (true) b576; - label b576: jump_if (true) b577; - label b577: jump_if (true) b578; - label b578: jump_if (true) b579; - label b579: jump_if (true) b580; - label b580: jump_if (true) b581; - label b581: jump_if (true) b582; - label b582: jump_if (true) b583; - label b583: jump_if (true) b584; - label b584: jump_if (true) b585; - label b585: jump_if (true) b586; - label b586: jump_if (true) b587; - label b587: jump_if (true) b588; - label b588: jump_if (true) b589; - label b589: jump_if (true) b590; - label b590: jump_if (true) b591; - label b591: jump_if (true) b592; - label b592: jump_if (true) b593; - label b593: jump_if (true) b594; - label b594: jump_if (true) b595; - label b595: jump_if (true) b596; - label b596: jump_if (true) b597; - label b597: jump_if (true) b598; - label b598: jump_if (true) b599; - label b599: jump_if (true) b600; - label b600: jump_if (true) b601; - label b601: jump_if (true) b602; - label b602: jump_if (true) b603; - label b603: jump_if (true) b604; - label b604: jump_if (true) b605; - label b605: jump_if (true) b606; - label b606: jump_if (true) b607; - label b607: jump_if (true) b608; - label b608: jump_if (true) b609; - label b609: jump_if (true) b610; - label b610: jump_if (true) b611; - label b611: jump_if (true) b612; - label b612: jump_if (true) b613; - label b613: jump_if (true) b614; - label b614: jump_if (true) b615; - label b615: jump_if (true) b616; - label b616: jump_if (true) b617; - label b617: jump_if (true) b618; - label b618: jump_if (true) b619; - label b619: jump_if (true) b620; - label b620: jump_if (true) b621; - label b621: jump_if (true) b622; - label b622: jump_if (true) b623; - label b623: jump_if (true) b624; - label b624: jump_if (true) b625; - label b625: jump_if (true) b626; - label b626: jump_if (true) b627; - label b627: jump_if (true) b628; - label b628: jump_if (true) b629; - label b629: jump_if (true) b630; - label b630: jump_if (true) b631; - label b631: jump_if (true) b632; - label b632: jump_if (true) b633; - label b633: jump_if (true) b634; - label b634: jump_if (true) b635; - label b635: jump_if (true) b636; - label b636: jump_if (true) b637; - label b637: jump_if (true) b638; - label b638: jump_if (true) b639; - label b639: jump_if (true) b640; - label b640: jump_if (true) b641; - label b641: jump_if (true) b642; - label b642: jump_if (true) b643; - label b643: jump_if (true) b644; - label b644: jump_if (true) b645; - label b645: jump_if (true) b646; - label b646: jump_if (true) b647; - label b647: jump_if (true) b648; - label b648: jump_if (true) b649; - label b649: jump_if (true) b650; - label b650: jump_if (true) b651; - label b651: jump_if (true) b652; - label b652: jump_if (true) b653; - label b653: jump_if (true) b654; - label b654: jump_if (true) b655; - label b655: jump_if (true) b656; - label b656: jump_if (true) b657; - label b657: jump_if (true) b658; - label b658: jump_if (true) b659; - label b659: jump_if (true) b660; - label b660: jump_if (true) b661; - label b661: jump_if (true) b662; - label b662: jump_if (true) b663; - label b663: jump_if (true) b664; - label b664: jump_if (true) b665; - label b665: jump_if (true) b666; - label b666: jump_if (true) b667; - label b667: jump_if (true) b668; - label b668: jump_if (true) b669; - label b669: jump_if (true) b670; - label b670: jump_if (true) b671; - label b671: jump_if (true) b672; - label b672: jump_if (true) b673; - label b673: jump_if (true) b674; - label b674: jump_if (true) b675; - label b675: jump_if (true) b676; - label b676: jump_if (true) b677; - label b677: jump_if (true) b678; - label b678: jump_if (true) b679; - label b679: jump_if (true) b680; - label b680: jump_if (true) b681; - label b681: jump_if (true) b682; - label b682: jump_if (true) b683; - label b683: jump_if (true) b684; - label b684: jump_if (true) b685; - label b685: jump_if (true) b686; - label b686: jump_if (true) b687; - label b687: jump_if (true) b688; - label b688: jump_if (true) b689; - label b689: jump_if (true) b690; - label b690: jump_if (true) b691; - label b691: jump_if (true) b692; - label b692: jump_if (true) b693; - label b693: jump_if (true) b694; - label b694: jump_if (true) b695; - label b695: jump_if (true) b696; - label b696: jump_if (true) b697; - label b697: jump_if (true) b698; - label b698: jump_if (true) b699; - label b699: jump_if (true) b700; - label b700: jump_if (true) b701; - label b701: jump_if (true) b702; - label b702: jump_if (true) b703; - label b703: jump_if (true) b704; - label b704: jump_if (true) b705; - label b705: jump_if (true) b706; - label b706: jump_if (true) b707; - label b707: jump_if (true) b708; - label b708: jump_if (true) b709; - label b709: jump_if (true) b710; - label b710: jump_if (true) b711; - label b711: jump_if (true) b712; - label b712: jump_if (true) b713; - label b713: jump_if (true) b714; - label b714: jump_if (true) b715; - label b715: jump_if (true) b716; - label b716: jump_if (true) b717; - label b717: jump_if (true) b718; - label b718: jump_if (true) b719; - label b719: jump_if (true) b720; - label b720: jump_if (true) b721; - label b721: jump_if (true) b722; - label b722: jump_if (true) b723; - label b723: jump_if (true) b724; - label b724: jump_if (true) b725; - label b725: jump_if (true) b726; - label b726: jump_if (true) b727; - label b727: jump_if (true) b728; - label b728: jump_if (true) b729; - label b729: jump_if (true) b730; - label b730: jump_if (true) b731; - label b731: jump_if (true) b732; - label b732: jump_if (true) b733; - label b733: jump_if (true) b734; - label b734: jump_if (true) b735; - label b735: jump_if (true) b736; - label b736: jump_if (true) b737; - label b737: jump_if (true) b738; - label b738: jump_if (true) b739; - label b739: jump_if (true) b740; - label b740: jump_if (true) b741; - label b741: jump_if (true) b742; - label b742: jump_if (true) b743; - label b743: jump_if (true) b744; - label b744: jump_if (true) b745; - label b745: jump_if (true) b746; - label b746: jump_if (true) b747; - label b747: jump_if (true) b748; - label b748: jump_if (true) b749; - label b749: jump_if (true) b750; - label b750: jump_if (true) b751; - label b751: jump_if (true) b752; - label b752: jump_if (true) b753; - label b753: jump_if (true) b754; - label b754: jump_if (true) b755; - label b755: jump_if (true) b756; - label b756: jump_if (true) b757; - label b757: jump_if (true) b758; - label b758: jump_if (true) b759; - label b759: jump_if (true) b760; - label b760: jump_if (true) b761; - label b761: jump_if (true) b762; - label b762: jump_if (true) b763; - label b763: jump_if (true) b764; - label b764: jump_if (true) b765; - label b765: jump_if (true) b766; - label b766: jump_if (true) b767; - label b767: jump_if (true) b768; - label b768: jump_if (true) b769; - label b769: jump_if (true) b770; - label b770: jump_if (true) b771; - label b771: jump_if (true) b772; - label b772: jump_if (true) b773; - label b773: jump_if (true) b774; - label b774: jump_if (true) b775; - label b775: jump_if (true) b776; - label b776: jump_if (true) b777; - label b777: jump_if (true) b778; - label b778: jump_if (true) b779; - label b779: jump_if (true) b780; - label b780: jump_if (true) b781; - label b781: jump_if (true) b782; - label b782: jump_if (true) b783; - label b783: jump_if (true) b784; - label b784: jump_if (true) b785; - label b785: jump_if (true) b786; - label b786: jump_if (true) b787; - label b787: jump_if (true) b788; - label b788: jump_if (true) b789; - label b789: jump_if (true) b790; - label b790: jump_if (true) b791; - label b791: jump_if (true) b792; - label b792: jump_if (true) b793; - label b793: jump_if (true) b794; - label b794: jump_if (true) b795; - label b795: jump_if (true) b796; - label b796: jump_if (true) b797; - label b797: jump_if (true) b798; - label b798: jump_if (true) b799; - label b799: jump_if (true) b800; - label b800: jump_if (true) b801; - label b801: jump_if (true) b802; - label b802: jump_if (true) b803; - label b803: jump_if (true) b804; - label b804: jump_if (true) b805; - label b805: jump_if (true) b806; - label b806: jump_if (true) b807; - label b807: jump_if (true) b808; - label b808: jump_if (true) b809; - label b809: jump_if (true) b810; - label b810: jump_if (true) b811; - label b811: jump_if (true) b812; - label b812: jump_if (true) b813; - label b813: jump_if (true) b814; - label b814: jump_if (true) b815; - label b815: jump_if (true) b816; - label b816: jump_if (true) b817; - label b817: jump_if (true) b818; - label b818: jump_if (true) b819; - label b819: jump_if (true) b820; - label b820: jump_if (true) b821; - label b821: jump_if (true) b822; - label b822: jump_if (true) b823; - label b823: jump_if (true) b824; - label b824: jump_if (true) b825; - label b825: jump_if (true) b826; - label b826: jump_if (true) b827; - label b827: jump_if (true) b828; - label b828: jump_if (true) b829; - label b829: jump_if (true) b830; - label b830: jump_if (true) b831; - label b831: jump_if (true) b832; - label b832: jump_if (true) b833; - label b833: jump_if (true) b834; - label b834: jump_if (true) b835; - label b835: jump_if (true) b836; - label b836: jump_if (true) b837; - label b837: jump_if (true) b838; - label b838: jump_if (true) b839; - label b839: jump_if (true) b840; - label b840: jump_if (true) b841; - label b841: jump_if (true) b842; - label b842: jump_if (true) b843; - label b843: jump_if (true) b844; - label b844: jump_if (true) b845; - label b845: jump_if (true) b846; - label b846: jump_if (true) b847; - label b847: jump_if (true) b848; - label b848: jump_if (true) b849; - label b849: jump_if (true) b850; - label b850: jump_if (true) b851; - label b851: jump_if (true) b852; - label b852: jump_if (true) b853; - label b853: jump_if (true) b854; - label b854: jump_if (true) b855; - label b855: jump_if (true) b856; - label b856: jump_if (true) b857; - label b857: jump_if (true) b858; - label b858: jump_if (true) b859; - label b859: jump_if (true) b860; - label b860: jump_if (true) b861; - label b861: jump_if (true) b862; - label b862: jump_if (true) b863; - label b863: jump_if (true) b864; - label b864: jump_if (true) b865; - label b865: jump_if (true) b866; - label b866: jump_if (true) b867; - label b867: jump_if (true) b868; - label b868: jump_if (true) b869; - label b869: jump_if (true) b870; - label b870: jump_if (true) b871; - label b871: jump_if (true) b872; - label b872: jump_if (true) b873; - label b873: jump_if (true) b874; - label b874: jump_if (true) b875; - label b875: jump_if (true) b876; - label b876: jump_if (true) b877; - label b877: jump_if (true) b878; - label b878: jump_if (true) b879; - label b879: jump_if (true) b880; - label b880: jump_if (true) b881; - label b881: jump_if (true) b882; - label b882: jump_if (true) b883; - label b883: jump_if (true) b884; - label b884: jump_if (true) b885; - label b885: jump_if (true) b886; - label b886: jump_if (true) b887; - label b887: jump_if (true) b888; - label b888: jump_if (true) b889; - label b889: jump_if (true) b890; - label b890: jump_if (true) b891; - label b891: jump_if (true) b892; - label b892: jump_if (true) b893; - label b893: jump_if (true) b894; - label b894: jump_if (true) b895; - label b895: jump_if (true) b896; - label b896: jump_if (true) b897; - label b897: jump_if (true) b898; - label b898: jump_if (true) b899; - label b899: jump_if (true) b900; - label b900: jump_if (true) b901; - label b901: jump_if (true) b902; - label b902: jump_if (true) b903; - label b903: jump_if (true) b904; - label b904: jump_if (true) b905; - label b905: jump_if (true) b906; - label b906: jump_if (true) b907; - label b907: jump_if (true) b908; - label b908: jump_if (true) b909; - label b909: jump_if (true) b910; - label b910: jump_if (true) b911; - label b911: jump_if (true) b912; - label b912: jump_if (true) b913; - label b913: jump_if (true) b914; - label b914: jump_if (true) b915; - label b915: jump_if (true) b916; - label b916: jump_if (true) b917; - label b917: jump_if (true) b918; - label b918: jump_if (true) b919; - label b919: jump_if (true) b920; - label b920: jump_if (true) b921; - label b921: jump_if (true) b922; - label b922: jump_if (true) b923; - label b923: jump_if (true) b924; - label b924: jump_if (true) b925; - label b925: jump_if (true) b926; - label b926: jump_if (true) b927; - label b927: jump_if (true) b928; - label b928: jump_if (true) b929; - label b929: jump_if (true) b930; - label b930: jump_if (true) b931; - label b931: jump_if (true) b932; - label b932: jump_if (true) b933; - label b933: jump_if (true) b934; - label b934: jump_if (true) b935; - label b935: jump_if (true) b936; - label b936: jump_if (true) b937; - label b937: jump_if (true) b938; - label b938: jump_if (true) b939; - label b939: jump_if (true) b940; - label b940: jump_if (true) b941; - label b941: jump_if (true) b942; - label b942: jump_if (true) b943; - label b943: jump_if (true) b944; - label b944: jump_if (true) b945; - label b945: jump_if (true) b946; - label b946: jump_if (true) b947; - label b947: jump_if (true) b948; - label b948: jump_if (true) b949; - label b949: jump_if (true) b950; - label b950: jump_if (true) b951; - label b951: jump_if (true) b952; - label b952: jump_if (true) b953; - label b953: jump_if (true) b954; - label b954: jump_if (true) b955; - label b955: jump_if (true) b956; - label b956: jump_if (true) b957; - label b957: jump_if (true) b958; - label b958: jump_if (true) b959; - label b959: jump_if (true) b960; - label b960: jump_if (true) b961; - label b961: jump_if (true) b962; - label b962: jump_if (true) b963; - label b963: jump_if (true) b964; - label b964: jump_if (true) b965; - label b965: jump_if (true) b966; - label b966: jump_if (true) b967; - label b967: jump_if (true) b968; - label b968: jump_if (true) b969; - label b969: jump_if (true) b970; - label b970: jump_if (true) b971; - label b971: jump_if (true) b972; - label b972: jump_if (true) b973; - label b973: jump_if (true) b974; - label b974: jump_if (true) b975; - label b975: jump_if (true) b976; - label b976: jump_if (true) b977; - label b977: jump_if (true) b978; - label b978: jump_if (true) b979; - label b979: jump_if (true) b980; - label b980: jump_if (true) b981; - label b981: jump_if (true) b982; - label b982: jump_if (true) b983; - label b983: jump_if (true) b984; - label b984: jump_if (true) b985; - label b985: jump_if (true) b986; - label b986: jump_if (true) b987; - label b987: jump_if (true) b988; - label b988: jump_if (true) b989; - label b989: jump_if (true) b990; - label b990: jump_if (true) b991; - label b991: jump_if (true) b992; - label b992: jump_if (true) b993; - label b993: jump_if (true) b994; - label b994: jump_if (true) b995; - label b995: jump_if (true) b996; - label b996: jump_if (true) b997; - label b997: jump_if (true) b998; - label b998: jump_if (true) b999; - label b999: jump_if (true) b1000; - label b1000: - return; - } - -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/cast/castu128.mvir b/aptos-move/aptos-gas-calibration/samples_ir/cast/castu128.mvir deleted file mode 100644 index d7b8038da19f5..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/cast/castu128.mvir +++ /dev/null @@ -1,45 +0,0 @@ -module 0xcafe.CastU128 { - - public calibrate_castu128_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _ = to_u128(0u8); - _ = to_u128(0u64); - _ = to_u128(0u128); - - _ = to_u128(21u8); - _ = to_u128(21u64); - _ = to_u128(21u128); - - _ = to_u128(255u8); - _ = to_u128(18446744073709551615u64); - _ = to_u128(340282366920938463463374607431768211455u128); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_castu128_x100() { - label b0: - Self.calibrate_castu128_impl(10); - return; - } - - public entry calibrate_castu128_x500() { - label b0: - Self.calibrate_castu128_impl(50); - return; - } - - public entry calibrate_castu128_x1000() { - label b0: - Self.calibrate_castu128_impl(100); - return; - } -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/cast/castu16.mvir b/aptos-move/aptos-gas-calibration/samples_ir/cast/castu16.mvir deleted file mode 100644 index 0cec61b037635..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/cast/castu16.mvir +++ /dev/null @@ -1,54 +0,0 @@ -module 0xcafe.CastU16 { - - public calibrate_castu16_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _ = to_u16(0u8); - _ = to_u16(0u64); - _ = to_u16(0u128); - _ = to_u16(0u16); - _ = to_u16(0u32); - _ = to_u16(0u256); - - _ = to_u16(21u8); - _ = to_u16(21u64); - _ = to_u16(21u128); - _ = to_u16(21u16); - _ = to_u16(21u32); - _ = to_u16(21u256); - - _ = to_u16(255u8); - _ = to_u16(65535u64); - _ = to_u16(65535u128); - _ = to_u16(65535u16); - _ = to_u16(65535u32); - _ = to_u16(65535u256); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_castu16_x100() { - label b0: - Self.calibrate_castu16_impl(10); - return; - } - - public entry calibrate_castu16_x500() { - label b0: - Self.calibrate_castu16_impl(50); - return; - } - - public entry calibrate_castu16_x1000() { - label b0: - Self.calibrate_castu16_impl(100); - return; - } -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/cast/castu256.mvir b/aptos-move/aptos-gas-calibration/samples_ir/cast/castu256.mvir deleted file mode 100644 index bc7cea67a74ab..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/cast/castu256.mvir +++ /dev/null @@ -1,54 +0,0 @@ -module 0xcafe.CastU256 { - - public calibrate_castu256_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _ = to_u256(0u8); - _ = to_u256(0u64); - _ = to_u256(0u128); - _ = to_u256(0u16); - _ = to_u256(0u32); - _ = to_u256(0u256); - - _ = to_u256(21u8); - _ = to_u256(21u64); - _ = to_u256(21u128); - _ = to_u256(21u16); - _ = to_u256(21u32); - _ = to_u256(21u256); - - _ = to_u256(255u8); - _ = to_u256(18446744073709551615u64); - _ = to_u256(340282366920938463463374607431768211455u128); - _ = to_u256(65535u16); - _ = to_u256(4294967295u32); - _ = to_u256(115792089237316195423570985008687907853269984665640564039457584007913129639935u256); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_castu256_x100() { - label b0: - Self.calibrate_castu256_impl(10); - return; - } - - public entry calibrate_castu256_x500() { - label b0: - Self.calibrate_castu256_impl(50); - return; - } - - public entry calibrate_castu256_x1000() { - label b0: - Self.calibrate_castu256_impl(100); - return; - } -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/cast/castu32.mvir b/aptos-move/aptos-gas-calibration/samples_ir/cast/castu32.mvir deleted file mode 100644 index f476162107cda..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/cast/castu32.mvir +++ /dev/null @@ -1,56 +0,0 @@ -module 0xcafe.CastU32 { - - public calibrate_castu32_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _ = to_u32(0u8); - _ = to_u32(0u64); - _ = to_u32(0u128); - _ = to_u32(0u16); - _ = to_u32(0u32); - _ = to_u32(0u256); - - // Random small number unchanged. - _ = to_u32(21u8); - _ = to_u32(21u64); - _ = to_u32(21u128); - _ = to_u32(21u16); - _ = to_u32(21u32); - _ = to_u32(21u256); - - // Max representable values remain unchanged. - _ = to_u32(255u8); - _ = to_u32(4294967295u64); - _ = to_u32(4294967295u128); - _ = to_u32(65535u16); - _ = to_u32(4294967295u32); - _ = to_u32(4294967295u256); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_castu32_x100() { - label b0: - Self.calibrate_castu32_impl(10); - return; - } - - public entry calibrate_castu32_x500() { - label b0: - Self.calibrate_castu32_impl(50); - return; - } - - public entry calibrate_castu32_x1000() { - label b0: - Self.calibrate_castu32_impl(100); - return; - } -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/cast/castu64.mvir b/aptos-move/aptos-gas-calibration/samples_ir/cast/castu64.mvir deleted file mode 100644 index 46a26489f3a11..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/cast/castu64.mvir +++ /dev/null @@ -1,45 +0,0 @@ -module 0xcafe.CastU64 { - - public calibrate_castu64_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _ = to_u64(0u8); - _ = to_u64(0u64); - _ = to_u64(0u128); - - _ = to_u64(21u8); - _ = to_u64(21u64); - _ = to_u64(21u128); - - _ = to_u64(255u8); - _ = to_u64(18446744073709551615u64); - _ = to_u64(18446744073709551615u128); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_castu64_x100() { - label b0: - Self.calibrate_castu64_impl(10); - return; - } - - public entry calibrate_castu64_x500() { - label b0: - Self.calibrate_castu64_impl(50); - return; - } - - public entry calibrate_castu64_x1000() { - label b0: - Self.calibrate_castu64_impl(100); - return; - } -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/cast/castu8.mvir b/aptos-move/aptos-gas-calibration/samples_ir/cast/castu8.mvir deleted file mode 100644 index cab5ce72bec8c..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/cast/castu8.mvir +++ /dev/null @@ -1,54 +0,0 @@ -module 0xcafe.CastU8 { - - public calibrate_castu8_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _ = to_u8(0u8); - _ = to_u8(0u64); - _ = to_u8(0u128); - _ = to_u8(0u16); - _ = to_u8(0u32); - _ = to_u8(0u256); - - _ = to_u8(21u8); - _ = to_u8(21u64); - _ = to_u8(21u128); - _ = to_u8(21u16); - _ = to_u8(21u32); - _ = to_u8(21u256); - - _ = to_u8(255u8); - _ = to_u8(255u64); - _ = to_u8(255u128); - _ = to_u8(255u16); - _ = to_u8(255u32); - _ = to_u8(255u256); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_castu8_x100() { - label b0: - Self.calibrate_castu8_impl(10); - return; - } - - public entry calibrate_castu8_x500() { - label b0: - Self.calibrate_castu8_impl(50); - return; - } - - public entry calibrate_castu8_x1000() { - label b0: - Self.calibrate_castu8_impl(100); - return; - } -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/function/call.mvir b/aptos-move/aptos-gas-calibration/samples_ir/function/call.mvir deleted file mode 100644 index 9ab1c6ffda186..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/function/call.mvir +++ /dev/null @@ -1,363 +0,0 @@ -// !!! GENERATED FILE -- DO NOT EDIT MANUALLY !!! -module 0xcafe.Call { - // Calling function with 0 args & 0 locals. - a0_l0() { - - label b0: - return; - } - - public calibrate_call_a0_l0_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - Self.a0_l0(); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_call_a0_l0_x100() { - label b0: - Self.calibrate_call_a0_l0_impl(10); - return; - } - - public entry calibrate_a0_l0_x500() { - label b0: - Self.calibrate_call_a0_l0_impl(50); - return; - } - - public entry calibrate_a0_l0_x1000() { - label b0: - Self.calibrate_call_a0_l0_impl(100); - return; - } - - // Calling function with 4 args & 0 locals. - a4_l0(a0: u64, a1: u64, a2: u64, a3: u64) { - - label b0: - return; - } - - public calibrate_call_a4_l0_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - Self.a4_l0(0, 0, 0, 0); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_call_a4_l0_x100() { - label b0: - Self.calibrate_call_a4_l0_impl(10); - return; - } - - public entry calibrate_a4_l0_x500() { - label b0: - Self.calibrate_call_a4_l0_impl(50); - return; - } - - public entry calibrate_a4_l0_x1000() { - label b0: - Self.calibrate_call_a4_l0_impl(100); - return; - } - - // Calling function with 16 args & 0 locals. - a16_l0(a0: u64, a1: u64, a2: u64, a3: u64, a4: u64, a5: u64, a6: u64, a7: u64, a8: u64, a9: u64, a10: u64, a11: u64, a12: u64, a13: u64, a14: u64, a15: u64) { - - label b0: - return; - } - - public calibrate_call_a16_l0_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - Self.a16_l0(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_call_a16_l0_x100() { - label b0: - Self.calibrate_call_a16_l0_impl(10); - return; - } - - public entry calibrate_a16_l0_x500() { - label b0: - Self.calibrate_call_a16_l0_impl(50); - return; - } - - public entry calibrate_a16_l0_x1000() { - label b0: - Self.calibrate_call_a16_l0_impl(100); - return; - } - - // Calling function with 64 args & 0 locals. - a64_l0(a0: u64, a1: u64, a2: u64, a3: u64, a4: u64, a5: u64, a6: u64, a7: u64, a8: u64, a9: u64, a10: u64, a11: u64, a12: u64, a13: u64, a14: u64, a15: u64, a16: u64, a17: u64, a18: u64, a19: u64, a20: u64, a21: u64, a22: u64, a23: u64, a24: u64, a25: u64, a26: u64, a27: u64, a28: u64, a29: u64, a30: u64, a31: u64, a32: u64, a33: u64, a34: u64, a35: u64, a36: u64, a37: u64, a38: u64, a39: u64, a40: u64, a41: u64, a42: u64, a43: u64, a44: u64, a45: u64, a46: u64, a47: u64, a48: u64, a49: u64, a50: u64, a51: u64, a52: u64, a53: u64, a54: u64, a55: u64, a56: u64, a57: u64, a58: u64, a59: u64, a60: u64, a61: u64, a62: u64, a63: u64) { - - label b0: - return; - } - - public calibrate_call_a64_l0_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - Self.a64_l0(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_call_a64_l0_x100() { - label b0: - Self.calibrate_call_a64_l0_impl(10); - return; - } - - public entry calibrate_a64_l0_x500() { - label b0: - Self.calibrate_call_a64_l0_impl(50); - return; - } - - public entry calibrate_a64_l0_x1000() { - label b0: - Self.calibrate_call_a64_l0_impl(100); - return; - } - - // Calling function with 0 args & 4 locals. - a0_l4() { - let l0: u64; - let l1: u64; - let l2: u64; - let l3: u64; - label b0: - return; - } - - public calibrate_call_a0_l4_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - Self.a0_l4(); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_call_a0_l4_x100() { - label b0: - Self.calibrate_call_a0_l4_impl(10); - return; - } - - public entry calibrate_a0_l4_x500() { - label b0: - Self.calibrate_call_a0_l4_impl(50); - return; - } - - public entry calibrate_a0_l4_x1000() { - label b0: - Self.calibrate_call_a0_l4_impl(100); - return; - } - - // Calling function with 0 args & 16 locals. - a0_l16() { - let l0: u64; - let l1: u64; - let l2: u64; - let l3: u64; - let l4: u64; - let l5: u64; - let l6: u64; - let l7: u64; - let l8: u64; - let l9: u64; - let l10: u64; - let l11: u64; - let l12: u64; - let l13: u64; - let l14: u64; - let l15: u64; - label b0: - return; - } - - public calibrate_call_a0_l16_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - Self.a0_l16(); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_call_a0_l16_x100() { - label b0: - Self.calibrate_call_a0_l16_impl(10); - return; - } - - public entry calibrate_a0_l16_x500() { - label b0: - Self.calibrate_call_a0_l16_impl(50); - return; - } - - public entry calibrate_a0_l16_x1000() { - label b0: - Self.calibrate_call_a0_l16_impl(100); - return; - } - - // Calling function with 0 args & 64 locals. - a0_l64() { - let l0: u64; - let l1: u64; - let l2: u64; - let l3: u64; - let l4: u64; - let l5: u64; - let l6: u64; - let l7: u64; - let l8: u64; - let l9: u64; - let l10: u64; - let l11: u64; - let l12: u64; - let l13: u64; - let l14: u64; - let l15: u64; - let l16: u64; - let l17: u64; - let l18: u64; - let l19: u64; - let l20: u64; - let l21: u64; - let l22: u64; - let l23: u64; - let l24: u64; - let l25: u64; - let l26: u64; - let l27: u64; - let l28: u64; - let l29: u64; - let l30: u64; - let l31: u64; - let l32: u64; - let l33: u64; - let l34: u64; - let l35: u64; - let l36: u64; - let l37: u64; - let l38: u64; - let l39: u64; - let l40: u64; - let l41: u64; - let l42: u64; - let l43: u64; - let l44: u64; - let l45: u64; - let l46: u64; - let l47: u64; - let l48: u64; - let l49: u64; - let l50: u64; - let l51: u64; - let l52: u64; - let l53: u64; - let l54: u64; - let l55: u64; - let l56: u64; - let l57: u64; - let l58: u64; - let l59: u64; - let l60: u64; - let l61: u64; - let l62: u64; - let l63: u64; - label b0: - return; - } - - public calibrate_call_a0_l64_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - Self.a0_l64(); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_call_a0_l64_x100() { - label b0: - Self.calibrate_call_a0_l64_impl(10); - return; - } - - public entry calibrate_a0_l64_x500() { - label b0: - Self.calibrate_call_a0_l64_impl(50); - return; - } - - public entry calibrate_a0_l64_x1000() { - label b0: - Self.calibrate_call_a0_l64_impl(100); - return; - } -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/function/call_recursive.mvir b/aptos-move/aptos-gas-calibration/samples_ir/function/call_recursive.mvir deleted file mode 100644 index 57eea1b6c3062..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/function/call_recursive.mvir +++ /dev/null @@ -1,91 +0,0 @@ -module 0xcafe.CallRecrusive { - ///////////////////////////////////////////////// - // INSTRUCTIONS: - // * `CALL_BASE` - // * `CALL_PER_ARG` - // * `CALL_PER_LOCAL` - // * `UNPACK_BASE` - // * `UNPACK_PER_FIELD` - - f1(n: u64) { - label b0: - jump_if_false (0 < copy(n)) end; - Self.f1(move(n) - 1); - label end: - return; - } - - public entry calibrate_f1() { - label b0: - Self.f1(100); - return; - } - - f2(n: u64, a: u64) { - label b0: - jump_if_false (0 < copy(n)) end; - Self.f2(move(n) - 1, move(a)); - label end: - return; - } - - public entry calibrate_f2() { - label b0: - Self.f2(1000, 50); - return; - } - - f3(n: u64) { - let l1: u64; - let l2: u64; - let l3: u64; - label b0: - jump_if_false (0 < copy(n)) end; - Self.f3(move(n) - 1); - label end: - return; - } - - public entry calibrate_f3() { - label b0: - Self.f3(200); - return; - } - - f4() { - label b0: - return; - } - - public entry calibrate_f4_loop() { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < 1000) loop_end; - i = move(i) + 1; - - Self.f4(); - - jump loop_start; - label loop_end: - return; - } - - f5(n: u64) { - label b0: - jump_if_false (0 < copy(n)) end; - Self.f5(move(n) - 1); - jump true_end; - label end: - _ = (1 - 2); - label true_end: - return; - } - - public entry calibrate_f5_should_error() { - label b0: - Self.f5(100); - return; - } -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/function/gen.py b/aptos-move/aptos-gas-calibration/samples_ir/function/gen.py deleted file mode 100644 index 94a0d8b62156e..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/function/gen.py +++ /dev/null @@ -1,65 +0,0 @@ -import os - -template = """ - // Calling function with {num_args} args & {num_locals} locals. - {name}({params}) {{ - {ls} - label b0: - return; - }} - - public calibrate_call_{name}_impl(n: u64) {{ - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - Self.{name}({args}); - - jump loop_start; - label loop_end: - return; - }} - - public entry calibrate_call_{name}_x100() {{ - label b0: - Self.calibrate_call_{name}_impl(10); - return; - }} - - public entry calibrate_{name}_x500() {{ - label b0: - Self.calibrate_call_{name}_impl(50); - return; - }} - - public entry calibrate_{name}_x1000() {{ - label b0: - Self.calibrate_call_{name}_impl(100); - return; - }} -""" - -def gen_calibration_sample(num_args, num_locals): - name = "a{}_l{}".format(num_args, num_locals) - ls = '\n '.join(['let l{}: u64;'.format(i) for i in range(num_locals)]) - params = ', '.join(['a{}: u64'.format(i) for i in range(num_args)]) - args = ', '.join(['0'] * num_args) - return template.format(num_args = num_args, num_locals = num_locals, name = name, params = params, args = args, ls = ls) - -with open(os.path.dirname(__file__) + "/call.mvir", "w") as f: - f.write("// !!! GENERATED FILE -- DO NOT EDIT MANUALLY !!!\n") - f.write("module 0xcafe.Call {") - - f.write(gen_calibration_sample(0, 0)) - - f.write(gen_calibration_sample(4, 0)) - f.write(gen_calibration_sample(16, 0)) - f.write(gen_calibration_sample(64, 0)) - - f.write(gen_calibration_sample(0, 4)) - f.write(gen_calibration_sample(0, 16)) - f.write(gen_calibration_sample(0, 64)) - f.write("}") diff --git a/aptos-move/aptos-gas-calibration/samples_ir/generics/call_generic.mvir b/aptos-move/aptos-gas-calibration/samples_ir/generics/call_generic.mvir deleted file mode 100644 index 31fcc32e34a70..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/generics/call_generic.mvir +++ /dev/null @@ -1,483 +0,0 @@ -// !!! GENERATED FILE -- DO NOT EDIT MANUALLY !!! -module 0xcafe.CallGeneric { - // Calling function with 1 type args, 0 args & 0 locals. - t1_a0_l0() { - - label b0: - return; - } - - public calibrate_call_generic_t1_a0_l0_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - Self.t1_a0_l0(); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_call_generic_t1_a0_l0_x100() { - label b0: - Self.calibrate_call_generic_t1_a0_l0_impl(10); - return; - } - - public entry calibrate_call_generic_t1_a0_l0_x500() { - label b0: - Self.calibrate_call_generic_t1_a0_l0_impl(50); - return; - } - - public entry calibrate_call_generic_t1_a0_l0_x1000() { - label b0: - Self.calibrate_call_generic_t1_a0_l0_impl(100); - return; - } - - // Calling function with 1 type args, 4 args & 0 locals. - t1_a4_l0(a0: u64, a1: u64, a2: u64, a3: u64) { - - label b0: - return; - } - - public calibrate_call_generic_t1_a4_l0_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - Self.t1_a4_l0(0, 0, 0, 0); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_call_generic_t1_a4_l0_x100() { - label b0: - Self.calibrate_call_generic_t1_a4_l0_impl(10); - return; - } - - public entry calibrate_call_generic_t1_a4_l0_x500() { - label b0: - Self.calibrate_call_generic_t1_a4_l0_impl(50); - return; - } - - public entry calibrate_call_generic_t1_a4_l0_x1000() { - label b0: - Self.calibrate_call_generic_t1_a4_l0_impl(100); - return; - } - - // Calling function with 1 type args, 16 args & 0 locals. - t1_a16_l0(a0: u64, a1: u64, a2: u64, a3: u64, a4: u64, a5: u64, a6: u64, a7: u64, a8: u64, a9: u64, a10: u64, a11: u64, a12: u64, a13: u64, a14: u64, a15: u64) { - - label b0: - return; - } - - public calibrate_call_generic_t1_a16_l0_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - Self.t1_a16_l0(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_call_generic_t1_a16_l0_x100() { - label b0: - Self.calibrate_call_generic_t1_a16_l0_impl(10); - return; - } - - public entry calibrate_call_generic_t1_a16_l0_x500() { - label b0: - Self.calibrate_call_generic_t1_a16_l0_impl(50); - return; - } - - public entry calibrate_call_generic_t1_a16_l0_x1000() { - label b0: - Self.calibrate_call_generic_t1_a16_l0_impl(100); - return; - } - - // Calling function with 1 type args, 64 args & 0 locals. - t1_a64_l0(a0: u64, a1: u64, a2: u64, a3: u64, a4: u64, a5: u64, a6: u64, a7: u64, a8: u64, a9: u64, a10: u64, a11: u64, a12: u64, a13: u64, a14: u64, a15: u64, a16: u64, a17: u64, a18: u64, a19: u64, a20: u64, a21: u64, a22: u64, a23: u64, a24: u64, a25: u64, a26: u64, a27: u64, a28: u64, a29: u64, a30: u64, a31: u64, a32: u64, a33: u64, a34: u64, a35: u64, a36: u64, a37: u64, a38: u64, a39: u64, a40: u64, a41: u64, a42: u64, a43: u64, a44: u64, a45: u64, a46: u64, a47: u64, a48: u64, a49: u64, a50: u64, a51: u64, a52: u64, a53: u64, a54: u64, a55: u64, a56: u64, a57: u64, a58: u64, a59: u64, a60: u64, a61: u64, a62: u64, a63: u64) { - - label b0: - return; - } - - public calibrate_call_generic_t1_a64_l0_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - Self.t1_a64_l0(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_call_generic_t1_a64_l0_x100() { - label b0: - Self.calibrate_call_generic_t1_a64_l0_impl(10); - return; - } - - public entry calibrate_call_generic_t1_a64_l0_x500() { - label b0: - Self.calibrate_call_generic_t1_a64_l0_impl(50); - return; - } - - public entry calibrate_call_generic_t1_a64_l0_x1000() { - label b0: - Self.calibrate_call_generic_t1_a64_l0_impl(100); - return; - } - - // Calling function with 1 type args, 0 args & 4 locals. - t1_a0_l4() { - let l0: u64; - let l1: u64; - let l2: u64; - let l3: u64; - label b0: - return; - } - - public calibrate_call_generic_t1_a0_l4_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - Self.t1_a0_l4(); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_call_generic_t1_a0_l4_x100() { - label b0: - Self.calibrate_call_generic_t1_a0_l4_impl(10); - return; - } - - public entry calibrate_call_generic_t1_a0_l4_x500() { - label b0: - Self.calibrate_call_generic_t1_a0_l4_impl(50); - return; - } - - public entry calibrate_call_generic_t1_a0_l4_x1000() { - label b0: - Self.calibrate_call_generic_t1_a0_l4_impl(100); - return; - } - - // Calling function with 1 type args, 0 args & 16 locals. - t1_a0_l16() { - let l0: u64; - let l1: u64; - let l2: u64; - let l3: u64; - let l4: u64; - let l5: u64; - let l6: u64; - let l7: u64; - let l8: u64; - let l9: u64; - let l10: u64; - let l11: u64; - let l12: u64; - let l13: u64; - let l14: u64; - let l15: u64; - label b0: - return; - } - - public calibrate_call_generic_t1_a0_l16_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - Self.t1_a0_l16(); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_call_generic_t1_a0_l16_x100() { - label b0: - Self.calibrate_call_generic_t1_a0_l16_impl(10); - return; - } - - public entry calibrate_call_generic_t1_a0_l16_x500() { - label b0: - Self.calibrate_call_generic_t1_a0_l16_impl(50); - return; - } - - public entry calibrate_call_generic_t1_a0_l16_x1000() { - label b0: - Self.calibrate_call_generic_t1_a0_l16_impl(100); - return; - } - - // Calling function with 1 type args, 0 args & 64 locals. - t1_a0_l64() { - let l0: u64; - let l1: u64; - let l2: u64; - let l3: u64; - let l4: u64; - let l5: u64; - let l6: u64; - let l7: u64; - let l8: u64; - let l9: u64; - let l10: u64; - let l11: u64; - let l12: u64; - let l13: u64; - let l14: u64; - let l15: u64; - let l16: u64; - let l17: u64; - let l18: u64; - let l19: u64; - let l20: u64; - let l21: u64; - let l22: u64; - let l23: u64; - let l24: u64; - let l25: u64; - let l26: u64; - let l27: u64; - let l28: u64; - let l29: u64; - let l30: u64; - let l31: u64; - let l32: u64; - let l33: u64; - let l34: u64; - let l35: u64; - let l36: u64; - let l37: u64; - let l38: u64; - let l39: u64; - let l40: u64; - let l41: u64; - let l42: u64; - let l43: u64; - let l44: u64; - let l45: u64; - let l46: u64; - let l47: u64; - let l48: u64; - let l49: u64; - let l50: u64; - let l51: u64; - let l52: u64; - let l53: u64; - let l54: u64; - let l55: u64; - let l56: u64; - let l57: u64; - let l58: u64; - let l59: u64; - let l60: u64; - let l61: u64; - let l62: u64; - let l63: u64; - label b0: - return; - } - - public calibrate_call_generic_t1_a0_l64_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - Self.t1_a0_l64(); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_call_generic_t1_a0_l64_x100() { - label b0: - Self.calibrate_call_generic_t1_a0_l64_impl(10); - return; - } - - public entry calibrate_call_generic_t1_a0_l64_x500() { - label b0: - Self.calibrate_call_generic_t1_a0_l64_impl(50); - return; - } - - public entry calibrate_call_generic_t1_a0_l64_x1000() { - label b0: - Self.calibrate_call_generic_t1_a0_l64_impl(100); - return; - } - - // Calling function with 4 type args, 0 args & 0 locals. - t4_a0_l0() { - - label b0: - return; - } - - public calibrate_call_generic_t4_a0_l0_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - Self.t4_a0_l0(); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_call_generic_t4_a0_l0_x100() { - label b0: - Self.calibrate_call_generic_t4_a0_l0_impl(10); - return; - } - - public entry calibrate_call_generic_t4_a0_l0_x500() { - label b0: - Self.calibrate_call_generic_t4_a0_l0_impl(50); - return; - } - - public entry calibrate_call_generic_t4_a0_l0_x1000() { - label b0: - Self.calibrate_call_generic_t4_a0_l0_impl(100); - return; - } - - // Calling function with 16 type args, 0 args & 0 locals. - t16_a0_l0() { - - label b0: - return; - } - - public calibrate_call_generic_t16_a0_l0_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - Self.t16_a0_l0(); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_call_generic_t16_a0_l0_x100() { - label b0: - Self.calibrate_call_generic_t16_a0_l0_impl(10); - return; - } - - public entry calibrate_call_generic_t16_a0_l0_x500() { - label b0: - Self.calibrate_call_generic_t16_a0_l0_impl(50); - return; - } - - public entry calibrate_call_generic_t16_a0_l0_x1000() { - label b0: - Self.calibrate_call_generic_t16_a0_l0_impl(100); - return; - } - - // Calling function with 32 type args, 0 args & 0 locals. - t32_a0_l0() { - - label b0: - return; - } - - public calibrate_call_generic_t32_a0_l0_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - Self.t32_a0_l0(); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_call_generic_t32_a0_l0_x100() { - label b0: - Self.calibrate_call_generic_t32_a0_l0_impl(10); - return; - } - - public entry calibrate_call_generic_t32_a0_l0_x500() { - label b0: - Self.calibrate_call_generic_t32_a0_l0_impl(50); - return; - } - - public entry calibrate_call_generic_t32_a0_l0_x1000() { - label b0: - Self.calibrate_call_generic_t32_a0_l0_impl(100); - return; - } -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/generics/gen.py b/aptos-move/aptos-gas-calibration/samples_ir/generics/gen.py deleted file mode 100644 index ae34dddbf814e..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/generics/gen.py +++ /dev/null @@ -1,73 +0,0 @@ -import os - -template = """ - // Calling function with {num_types} type args, {num_args} args & {num_locals} locals. - {name}<{ty_params}>({params}) {{ - {ls} - label b0: - return; - }} - - public calibrate_call_generic_{name}_impl(n: u64) {{ - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - Self.{name}<{ty_args}>({args}); - - jump loop_start; - label loop_end: - return; - }} - - public entry calibrate_call_generic_{name}_x100() {{ - label b0: - Self.calibrate_call_generic_{name}_impl(10); - return; - }} - - public entry calibrate_call_generic_{name}_x500() {{ - label b0: - Self.calibrate_call_generic_{name}_impl(50); - return; - }} - - public entry calibrate_call_generic_{name}_x1000() {{ - label b0: - Self.calibrate_call_generic_{name}_impl(100); - return; - }} -""" - -def gen_calibration_sample(num_types, num_args, num_locals): - name = "t{}_a{}_l{}".format(num_types, num_args, num_locals) - ls = '\n '.join(['let l{}: u64;'.format(i) for i in range(num_locals)]) - params = ', '.join(['a{}: u64'.format(i) for i in range(num_args)]) - args = ', '.join(['0'] * num_args) - ty_params = ','.join('T{}'.format(i) for i in range(num_types)) - ty_args = ', '.join(['u64'] * num_types) - return template.format(num_types=num_types, num_args = num_args, num_locals = num_locals, name = name, params = params, args = args, ls = ls, ty_params=ty_params, ty_args=ty_args) - -with open(os.path.dirname(__file__) + "/call_generic.mvir", "w") as f: - f.write("// !!! GENERATED FILE -- DO NOT EDIT MANUALLY !!!\n") - f.write("module 0xcafe.CallGeneric {") - - # The number of type parameters must be at least 1 here. - # Otherwise, the IR compiler will emit regular calls, which are unwanted. - f.write(gen_calibration_sample(1, 0, 0)) - - f.write(gen_calibration_sample(1, 4, 0)) - f.write(gen_calibration_sample(1, 16, 0)) - f.write(gen_calibration_sample(1, 64, 0)) - - f.write(gen_calibration_sample(1, 0, 4)) - f.write(gen_calibration_sample(1, 0, 16)) - f.write(gen_calibration_sample(1, 0, 64)) - - f.write(gen_calibration_sample(4, 0, 0)) - f.write(gen_calibration_sample(16, 0, 0)) - f.write(gen_calibration_sample(32, 0, 0)) - f.write("}") diff --git a/aptos-move/aptos-gas-calibration/samples_ir/generics/imm-borrow-field-generic.mvir b/aptos-move/aptos-gas-calibration/samples_ir/generics/imm-borrow-field-generic.mvir deleted file mode 100644 index 0d069ad04006b..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/generics/imm-borrow-field-generic.mvir +++ /dev/null @@ -1,42 +0,0 @@ -module 0xcafe.ImmBorrowFieldGeneric { - - struct Foo has drop { u: T } - - public calibrate_imm_borrow_field_generic_foo_impl(n: u64) { - let i: u64; - let a: Self.Foo; - let b: &Self.Foo; - label entry: - i = 0; - a = Foo { u: 0 }; - b = &a; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _,_,_,_,_,_,_,_,_,_ = (©(b).Foo::u,©(b).Foo::u,©(b).Foo::u,©(b).Foo::u,©(b).Foo::u,©(b).Foo::u,©(b).Foo::u,©(b).Foo::u,©(b).Foo::u,©(b).Foo::u); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_imm_borrow_field_generic_foo_x100() { - label b0: - Self.calibrate_imm_borrow_field_generic_foo_impl(10); - return; - } - - public entry calibrate_imm_borrow_field_generic_foo_x500() { - label b0: - Self.calibrate_imm_borrow_field_generic_foo_impl(50); - return; - } - - public entry calibrate_imm_borrow_field_generic_foo_x1000() { - label b0: - Self.calibrate_imm_borrow_field_generic_foo_impl(100); - return; - } - -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/generics/mut-borrow-field-generic.mvir b/aptos-move/aptos-gas-calibration/samples_ir/generics/mut-borrow-field-generic.mvir deleted file mode 100644 index 7a4a1cf1ba98a..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/generics/mut-borrow-field-generic.mvir +++ /dev/null @@ -1,42 +0,0 @@ -module 0xcafe.MutBorrowFieldGeneric { - - struct Foo has drop { u: T } - - public calibrate_mut_borrow_field_generic_foo_impl(n: u64) { - let i: u64; - let a: Self.Foo; - let b: &mut Self.Foo; - label entry: - i = 0; - a = Foo { u: 0 }; - b = &mut a; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _,_,_,_,_,_,_,_,_,_ = (&mut copy(b).Foo::u,&mut copy(b).Foo::u,&mut copy(b).Foo::u,&mut copy(b).Foo::u,&mut copy(b).Foo::u,&mut copy(b).Foo::u,&mut copy(b).Foo::u,&mut copy(b).Foo::u,&mut copy(b).Foo::u,&mut copy(b).Foo::u); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_mut_borrow_field_generic_foo_x100() { - label b0: - Self.calibrate_mut_borrow_field_generic_foo_impl(10); - return; - } - - public entry calibrate_mut_borrow_field_generic_foo_x500() { - label b0: - Self.calibrate_mut_borrow_field_generic_foo_impl(50); - return; - } - - public entry calibrate_mut_borrow_field_generic_foo_x1000() { - label b0: - Self.calibrate_mut_borrow_field_generic_foo_impl(100); - return; - } - -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/generics/pack-generic.mvir b/aptos-move/aptos-gas-calibration/samples_ir/generics/pack-generic.mvir deleted file mode 100644 index 842bf1a0bdf43..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/generics/pack-generic.mvir +++ /dev/null @@ -1,138 +0,0 @@ -module 0xcafe.PackGeneric { - struct S1 has drop { x1: T } - struct S2 has drop { x1: T, x2: T, x3: T, x4: T, x5: T, x6: T, x7: T, x8: T } - struct S3 has drop { x1: T, x2: T, x3: T, x4: T, x5: T, x6: T, x7: T, x8: T, x9: T, x10: T, x11: T, x12: T, x13: T, x14: T, x15: T, x16: T, x17: T, x18: T, x19: T, x20: T, x21: T, x22: T, x23: T, x24: T, x25: T, x26: T, x27: T, x28: T, x29: T, x30: T, x31: T, x32: T} - struct S4 has drop { x1: T, x2: T, x3: T, x4: T, x5: T, x6: T, x7: T, x8: T, x9: T, x10: T, x11: T, x12: T, x13: T, x14: T, x15: T, x16: T, x17: T, x18: T, x19: T, x20: T, x21: T, x22: T, x23: T, x24: T, x25: T, x26: T, x27: T, x28: T, x29: T, x30: T, x31: T, x32: T, x33: T, x34: T, x35: T, x36: T, x37: T, x38: T, x39: T, x40: T, x41: T, x42: T, x43: T, x44: T, x45: T, x46: T, x47: T, x48: T, x49: T, x50: T, x51: T, x52: T, x53: T, x54: T, x55: T, x56: T, x57: T, x58: T, x59: T, x60: T, x61: T, x62: T, x63: T, x64: T } - - public calibrate_pack_s1_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _, _, _, _, _, _, _, _, _, _ = (S1{x1: 0}, S1{x1: 0}, S1{x1: 0}, S1{x1: 0}, S1{x1: 0}, S1{x1: 0}, S1{x1: 0}, S1{x1: 0}, S1{x1: 0}, S1{x1: 0}); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_pack_s1_x100() { - label b0: - Self.calibrate_pack_s1_impl(10); - return; - } - - public entry calibrate_pack_s1_x500() { - label b0: - Self.calibrate_pack_s1_impl(50); - return; - } - - public entry calibrate_pack_s1_x1000() { - label b0: - Self.calibrate_pack_s1_impl(100); - return; - } - - public calibrate_pack_s2_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _, _, _, _, _, _, _, _, _, _ = (S2{x1: 0, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0}, S2{x1: 0, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0}, S2{x1: 0, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0}, S2{x1: 0, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0}, S2{x1: 0, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0}, S2{x1: 0, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0}, S2{x1: 0, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0}, S2{x1: 0, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0}, S2{x1: 0, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0}, S2{x1: 0, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0}); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_pack_s2_x100() { - label b0: - Self.calibrate_pack_s2_impl(10); - return; - } - - public entry calibrate_pack_s2_x500() { - label b0: - Self.calibrate_pack_s2_impl(50); - return; - } - - public entry calibrate_pack_s2_x1000() { - label b0: - Self.calibrate_pack_s2_impl(100); - return; - } - - public calibrate_pack_s3_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _, _, _, _, _, _, _, _, _, _ = (S3{x1: 0, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0, x9: 0, x10: 0, x11: 0, x12: 0, x13: 0, x14: 0, x15: 0, x16: 0, x17: 0, x18: 0, x19: 0, x20: 0, x21: 0, x22: 0, x23: 0, x24: 0, x25: 0, x26: 0, x27: 0, x28: 0, x29: 0, x30: 0, x31: 0, x32: 0}, S3{x1: 0, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0, x9: 0, x10: 0, x11: 0, x12: 0, x13: 0, x14: 0, x15: 0, x16: 0, x17: 0, x18: 0, x19: 0, x20: 0, x21: 0, x22: 0, x23: 0, x24: 0, x25: 0, x26: 0, x27: 0, x28: 0, x29: 0, x30: 0, x31: 0, x32: 0}, S3{x1: 0, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0, x9: 0, x10: 0, x11: 0, x12: 0, x13: 0, x14: 0, x15: 0, x16: 0, x17: 0, x18: 0, x19: 0, x20: 0, x21: 0, x22: 0, x23: 0, x24: 0, x25: 0, x26: 0, x27: 0, x28: 0, x29: 0, x30: 0, x31: 0, x32: 0}, S3{x1: 0, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0, x9: 0, x10: 0, x11: 0, x12: 0, x13: 0, x14: 0, x15: 0, x16: 0, x17: 0, x18: 0, x19: 0, x20: 0, x21: 0, x22: 0, x23: 0, x24: 0, x25: 0, x26: 0, x27: 0, x28: 0, x29: 0, x30: 0, x31: 0, x32: 0}, S3{x1: 0, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0, x9: 0, x10: 0, x11: 0, x12: 0, x13: 0, x14: 0, x15: 0, x16: 0, x17: 0, x18: 0, x19: 0, x20: 0, x21: 0, x22: 0, x23: 0, x24: 0, x25: 0, x26: 0, x27: 0, x28: 0, x29: 0, x30: 0, x31: 0, x32: 0}, S3{x1: 0, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0, x9: 0, x10: 0, x11: 0, x12: 0, x13: 0, x14: 0, x15: 0, x16: 0, x17: 0, x18: 0, x19: 0, x20: 0, x21: 0, x22: 0, x23: 0, x24: 0, x25: 0, x26: 0, x27: 0, x28: 0, x29: 0, x30: 0, x31: 0, x32: 0}, S3{x1: 0, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0, x9: 0, x10: 0, x11: 0, x12: 0, x13: 0, x14: 0, x15: 0, x16: 0, x17: 0, x18: 0, x19: 0, x20: 0, x21: 0, x22: 0, x23: 0, x24: 0, x25: 0, x26: 0, x27: 0, x28: 0, x29: 0, x30: 0, x31: 0, x32: 0}, S3{x1: 0, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0, x9: 0, x10: 0, x11: 0, x12: 0, x13: 0, x14: 0, x15: 0, x16: 0, x17: 0, x18: 0, x19: 0, x20: 0, x21: 0, x22: 0, x23: 0, x24: 0, x25: 0, x26: 0, x27: 0, x28: 0, x29: 0, x30: 0, x31: 0, x32: 0}, S3{x1: 0, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0, x9: 0, x10: 0, x11: 0, x12: 0, x13: 0, x14: 0, x15: 0, x16: 0, x17: 0, x18: 0, x19: 0, x20: 0, x21: 0, x22: 0, x23: 0, x24: 0, x25: 0, x26: 0, x27: 0, x28: 0, x29: 0, x30: 0, x31: 0, x32: 0}, S3{x1: 0, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0, x9: 0, x10: 0, x11: 0, x12: 0, x13: 0, x14: 0, x15: 0, x16: 0, x17: 0, x18: 0, x19: 0, x20: 0, x21: 0, x22: 0, x23: 0, x24: 0, x25: 0, x26: 0, x27: 0, x28: 0, x29: 0, x30: 0, x31: 0, x32: 0}); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_pack_s3_x100() { - label b0: - Self.calibrate_pack_s3_impl(10); - return; - } - - public entry calibrate_pack_s3_x500() { - label b0: - Self.calibrate_pack_s3_impl(50); - return; - } - - public entry calibrate_pack_s3_x1000() { - label b0: - Self.calibrate_pack_s3_impl(100); - return; - } - - public calibrate_pack_s4_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _, _, _, _, _, _, _, _, _, _ = (S4{x1: 0, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0, x9: 0, x10: 0, x11: 0, x12: 0, x13: 0, x14: 0, x15: 0, x16: 0, x17: 0, x18: 0, x19: 0, x20: 0, x21: 0, x22: 0, x23: 0, x24: 0, x25: 0, x26: 0, x27: 0, x28: 0, x29: 0, x30: 0, x31: 0, x32: 0, x33: 0, x34: 0, x35: 0, x36: 0, x37: 0, x38: 0, x39: 0, x40: 0, x41: 0, x42: 0, x43: 0, x44: 0, x45: 0, x46: 0, x47: 0, x48: 0, x49: 0, x50: 0, x51: 0, x52: 0, x53: 0, x54: 0, x55: 0, x56: 0, x57: 0, x58: 0, x59: 0, x60: 0, x61: 0, x62: 0, x63: 0, x64: 0}, S4{x1: 0, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0, x9: 0, x10: 0, x11: 0, x12: 0, x13: 0, x14: 0, x15: 0, x16: 0, x17: 0, x18: 0, x19: 0, x20: 0, x21: 0, x22: 0, x23: 0, x24: 0, x25: 0, x26: 0, x27: 0, x28: 0, x29: 0, x30: 0, x31: 0, x32: 0, x33: 0, x34: 0, x35: 0, x36: 0, x37: 0, x38: 0, x39: 0, x40: 0, x41: 0, x42: 0, x43: 0, x44: 0, x45: 0, x46: 0, x47: 0, x48: 0, x49: 0, x50: 0, x51: 0, x52: 0, x53: 0, x54: 0, x55: 0, x56: 0, x57: 0, x58: 0, x59: 0, x60: 0, x61: 0, x62: 0, x63: 0, x64: 0}, S4{x1: 0, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0, x9: 0, x10: 0, x11: 0, x12: 0, x13: 0, x14: 0, x15: 0, x16: 0, x17: 0, x18: 0, x19: 0, x20: 0, x21: 0, x22: 0, x23: 0, x24: 0, x25: 0, x26: 0, x27: 0, x28: 0, x29: 0, x30: 0, x31: 0, x32: 0, x33: 0, x34: 0, x35: 0, x36: 0, x37: 0, x38: 0, x39: 0, x40: 0, x41: 0, x42: 0, x43: 0, x44: 0, x45: 0, x46: 0, x47: 0, x48: 0, x49: 0, x50: 0, x51: 0, x52: 0, x53: 0, x54: 0, x55: 0, x56: 0, x57: 0, x58: 0, x59: 0, x60: 0, x61: 0, x62: 0, x63: 0, x64: 0}, S4{x1: 0, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0, x9: 0, x10: 0, x11: 0, x12: 0, x13: 0, x14: 0, x15: 0, x16: 0, x17: 0, x18: 0, x19: 0, x20: 0, x21: 0, x22: 0, x23: 0, x24: 0, x25: 0, x26: 0, x27: 0, x28: 0, x29: 0, x30: 0, x31: 0, x32: 0, x33: 0, x34: 0, x35: 0, x36: 0, x37: 0, x38: 0, x39: 0, x40: 0, x41: 0, x42: 0, x43: 0, x44: 0, x45: 0, x46: 0, x47: 0, x48: 0, x49: 0, x50: 0, x51: 0, x52: 0, x53: 0, x54: 0, x55: 0, x56: 0, x57: 0, x58: 0, x59: 0, x60: 0, x61: 0, x62: 0, x63: 0, x64: 0}, S4{x1: 0, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0, x9: 0, x10: 0, x11: 0, x12: 0, x13: 0, x14: 0, x15: 0, x16: 0, x17: 0, x18: 0, x19: 0, x20: 0, x21: 0, x22: 0, x23: 0, x24: 0, x25: 0, x26: 0, x27: 0, x28: 0, x29: 0, x30: 0, x31: 0, x32: 0, x33: 0, x34: 0, x35: 0, x36: 0, x37: 0, x38: 0, x39: 0, x40: 0, x41: 0, x42: 0, x43: 0, x44: 0, x45: 0, x46: 0, x47: 0, x48: 0, x49: 0, x50: 0, x51: 0, x52: 0, x53: 0, x54: 0, x55: 0, x56: 0, x57: 0, x58: 0, x59: 0, x60: 0, x61: 0, x62: 0, x63: 0, x64: 0}, S4{x1: 0, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0, x9: 0, x10: 0, x11: 0, x12: 0, x13: 0, x14: 0, x15: 0, x16: 0, x17: 0, x18: 0, x19: 0, x20: 0, x21: 0, x22: 0, x23: 0, x24: 0, x25: 0, x26: 0, x27: 0, x28: 0, x29: 0, x30: 0, x31: 0, x32: 0, x33: 0, x34: 0, x35: 0, x36: 0, x37: 0, x38: 0, x39: 0, x40: 0, x41: 0, x42: 0, x43: 0, x44: 0, x45: 0, x46: 0, x47: 0, x48: 0, x49: 0, x50: 0, x51: 0, x52: 0, x53: 0, x54: 0, x55: 0, x56: 0, x57: 0, x58: 0, x59: 0, x60: 0, x61: 0, x62: 0, x63: 0, x64: 0}, S4{x1: 0, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0, x9: 0, x10: 0, x11: 0, x12: 0, x13: 0, x14: 0, x15: 0, x16: 0, x17: 0, x18: 0, x19: 0, x20: 0, x21: 0, x22: 0, x23: 0, x24: 0, x25: 0, x26: 0, x27: 0, x28: 0, x29: 0, x30: 0, x31: 0, x32: 0, x33: 0, x34: 0, x35: 0, x36: 0, x37: 0, x38: 0, x39: 0, x40: 0, x41: 0, x42: 0, x43: 0, x44: 0, x45: 0, x46: 0, x47: 0, x48: 0, x49: 0, x50: 0, x51: 0, x52: 0, x53: 0, x54: 0, x55: 0, x56: 0, x57: 0, x58: 0, x59: 0, x60: 0, x61: 0, x62: 0, x63: 0, x64: 0}, S4{x1: 0, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0, x9: 0, x10: 0, x11: 0, x12: 0, x13: 0, x14: 0, x15: 0, x16: 0, x17: 0, x18: 0, x19: 0, x20: 0, x21: 0, x22: 0, x23: 0, x24: 0, x25: 0, x26: 0, x27: 0, x28: 0, x29: 0, x30: 0, x31: 0, x32: 0, x33: 0, x34: 0, x35: 0, x36: 0, x37: 0, x38: 0, x39: 0, x40: 0, x41: 0, x42: 0, x43: 0, x44: 0, x45: 0, x46: 0, x47: 0, x48: 0, x49: 0, x50: 0, x51: 0, x52: 0, x53: 0, x54: 0, x55: 0, x56: 0, x57: 0, x58: 0, x59: 0, x60: 0, x61: 0, x62: 0, x63: 0, x64: 0}, S4{x1: 0, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0, x9: 0, x10: 0, x11: 0, x12: 0, x13: 0, x14: 0, x15: 0, x16: 0, x17: 0, x18: 0, x19: 0, x20: 0, x21: 0, x22: 0, x23: 0, x24: 0, x25: 0, x26: 0, x27: 0, x28: 0, x29: 0, x30: 0, x31: 0, x32: 0, x33: 0, x34: 0, x35: 0, x36: 0, x37: 0, x38: 0, x39: 0, x40: 0, x41: 0, x42: 0, x43: 0, x44: 0, x45: 0, x46: 0, x47: 0, x48: 0, x49: 0, x50: 0, x51: 0, x52: 0, x53: 0, x54: 0, x55: 0, x56: 0, x57: 0, x58: 0, x59: 0, x60: 0, x61: 0, x62: 0, x63: 0, x64: 0}, S4{x1: 0, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0, x9: 0, x10: 0, x11: 0, x12: 0, x13: 0, x14: 0, x15: 0, x16: 0, x17: 0, x18: 0, x19: 0, x20: 0, x21: 0, x22: 0, x23: 0, x24: 0, x25: 0, x26: 0, x27: 0, x28: 0, x29: 0, x30: 0, x31: 0, x32: 0, x33: 0, x34: 0, x35: 0, x36: 0, x37: 0, x38: 0, x39: 0, x40: 0, x41: 0, x42: 0, x43: 0, x44: 0, x45: 0, x46: 0, x47: 0, x48: 0, x49: 0, x50: 0, x51: 0, x52: 0, x53: 0, x54: 0, x55: 0, x56: 0, x57: 0, x58: 0, x59: 0, x60: 0, x61: 0, x62: 0, x63: 0, x64: 0}, ); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_pack_s4_x100() { - label b0: - Self.calibrate_pack_s4_impl(10); - return; - } - - public entry calibrate_pack_s4_x500() { - label b0: - Self.calibrate_pack_s4_impl(50); - return; - } - - public entry calibrate_pack_s4_x1000() { - label b0: - Self.calibrate_pack_s4_impl(100); - return; - } -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/generics/unpack-generic.mvir b/aptos-move/aptos-gas-calibration/samples_ir/generics/unpack-generic.mvir deleted file mode 100644 index 7d037e7d93d97..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/generics/unpack-generic.mvir +++ /dev/null @@ -1,360 +0,0 @@ -module 0xcafe.UnpackGeneric { - struct S1 has drop { x1: T } - struct S2 has drop { x1: T, x2: T, x3: T, x4: T, x5: T, x6: T, x7: T, x8: T } - struct S3 has drop { x1: T, x2: T, x3: T, x4: T, x5: T, x6: T, x7: T, x8: T, x9: T, x10: T, x11: T, x12: T, x13: T, x14: T, x15: T, x16: T, x17: T, x18: T, x19: T, x20: T, x21: T, x22: T, x23: T, x24: T, x25: T, x26: T, x27: T, x28: T, x29: T, x30: T, x31: T, x32: T} - struct S4 has drop { x1: T, x2: T, x3: T, x4: T, x5: T, x6: T, x7: T, x8: T, x9: T, x10: T, x11: T, x12: T, x13: T, x14: T, x15: T, x16: T, x17: T, x18: T, x19: T, x20: T, x21: T, x22: T, x23: T, x24: T, x25: T, x26: T, x27: T, x28: T, x29: T, x30: T, x31: T, x32: T, x33: T, x34: T, x35: T, x36: T, x37: T, x38: T, x39: T, x40: T, x41: T, x42: T, x43: T, x44: T, x45: T, x46: T, x47: T, x48: T, x49: T, x50: T, x51: T, x52: T, x53: T, x54: T, x55: T, x56: T, x57: T, x58: T, x59: T, x60: T, x61: T, x62: T, x63: T, x64: T } - - public calibrate_unpack_s1_impl(n: u64) { - let i: u64; - let t: Self.S1; - let x1: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - t = S1{x1: 0}; - S1{x1} = move(t); - - t = S1{x1: 0}; - S1{x1} = move(t); - - t = S1{x1: 0}; - S1{x1} = move(t); - - t = S1{x1: 0}; - S1{x1} = move(t); - - t = S1{x1: 0}; - S1{x1} = move(t); - - t = S1{x1: 0}; - S1{x1} = move(t); - - t = S1{x1: 0}; - S1{x1} = move(t); - - t = S1{x1: 0}; - S1{x1} = move(t); - - t = S1{x1: 0}; - S1{x1} = move(t); - - t = S1{x1: 0}; - S1{x1} = move(t); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_unpack_s1_x100() { - label b0: - Self.calibrate_unpack_s1_impl(10); - return; - } - - public entry calibrate_unpack_s1_x500() { - label b0: - Self.calibrate_unpack_s1_impl(50); - return; - } - - public entry calibrate_unpack_s1_x1000() { - label b0: - Self.calibrate_unpack_s1_impl(100); - return; - } - - public calibrate_unpack_s2_impl(n: u64) { - let i: u64; - let t: Self.S2; - let x1: u64; - let x2: u64; - let x3: u64; - let x4: u64; - let x5: u64; - let x6: u64; - let x7: u64; - let x8: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - t = S2{x1: 0, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0}; - S2{x1,x2,x3,x4,x5,x6,x7,x8} = move(t); - - t = S2{x1: 0, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0}; - S2{x1,x2,x3,x4,x5,x6,x7,x8} = move(t); - - t = S2{x1: 0, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0}; - S2{x1,x2,x3,x4,x5,x6,x7,x8} = move(t); - - t = S2{x1: 0, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0}; - S2{x1,x2,x3,x4,x5,x6,x7,x8} = move(t); - - t = S2{x1: 0, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0}; - S2{x1,x2,x3,x4,x5,x6,x7,x8} = move(t); - - t = S2{x1: 0, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0}; - S2{x1,x2,x3,x4,x5,x6,x7,x8} = move(t); - - t = S2{x1: 0, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0}; - S2{x1,x2,x3,x4,x5,x6,x7,x8} = move(t); - - t = S2{x1: 0, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0}; - S2{x1,x2,x3,x4,x5,x6,x7,x8} = move(t); - - t = S2{x1: 0, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0}; - S2{x1,x2,x3,x4,x5,x6,x7,x8} = move(t); - - t = S2{x1: 0, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0}; - S2{x1,x2,x3,x4,x5,x6,x7,x8} = move(t); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_unpack_s2_x100() { - label b0: - Self.calibrate_unpack_s2_impl(10); - return; - } - - public entry calibrate_unpack_s2_x500() { - label b0: - Self.calibrate_unpack_s2_impl(50); - return; - } - - public entry calibrate_unpack_s2_x1000() { - label b0: - Self.calibrate_unpack_s2_impl(100); - return; - } - - public calibrate_unpack_s3_impl(n: u64) { - let i: u64; - let t: Self.S3; - let x1: u64; - let x2: u64; - let x3: u64; - let x4: u64; - let x5: u64; - let x6: u64; - let x7: u64; - let x8: u64; - let x9: u64; - let x10: u64; - let x11: u64; - let x12: u64; - let x13: u64; - let x14: u64; - let x15: u64; - let x16: u64; - let x17: u64; - let x18: u64; - let x19: u64; - let x20: u64; - let x21: u64; - let x22: u64; - let x23: u64; - let x24: u64; - let x25: u64; - let x26: u64; - let x27: u64; - let x28: u64; - let x29: u64; - let x30: u64; - let x31: u64; - let x32: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - t = S3{x1: 0, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0, x9: 0, x10: 0, x11: 0, x12: 0, x13: 0, x14: 0, x15: 0, x16: 0, x17: 0, x18: 0, x19: 0, x20: 0, x21: 0, x22: 0, x23: 0, x24: 0, x25: 0, x26: 0, x27: 0, x28: 0, x29: 0, x30: 0, x31: 0, x32: 0}; - S3{x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32} = move(t); - - t = S3{x1: 0, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0, x9: 0, x10: 0, x11: 0, x12: 0, x13: 0, x14: 0, x15: 0, x16: 0, x17: 0, x18: 0, x19: 0, x20: 0, x21: 0, x22: 0, x23: 0, x24: 0, x25: 0, x26: 0, x27: 0, x28: 0, x29: 0, x30: 0, x31: 0, x32: 0}; - S3{x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32} = move(t); - - t = S3{x1: 0, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0, x9: 0, x10: 0, x11: 0, x12: 0, x13: 0, x14: 0, x15: 0, x16: 0, x17: 0, x18: 0, x19: 0, x20: 0, x21: 0, x22: 0, x23: 0, x24: 0, x25: 0, x26: 0, x27: 0, x28: 0, x29: 0, x30: 0, x31: 0, x32: 0}; - S3{x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32} = move(t); - - t = S3{x1: 0, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0, x9: 0, x10: 0, x11: 0, x12: 0, x13: 0, x14: 0, x15: 0, x16: 0, x17: 0, x18: 0, x19: 0, x20: 0, x21: 0, x22: 0, x23: 0, x24: 0, x25: 0, x26: 0, x27: 0, x28: 0, x29: 0, x30: 0, x31: 0, x32: 0}; - S3{x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32} = move(t); - - t = S3{x1: 0, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0, x9: 0, x10: 0, x11: 0, x12: 0, x13: 0, x14: 0, x15: 0, x16: 0, x17: 0, x18: 0, x19: 0, x20: 0, x21: 0, x22: 0, x23: 0, x24: 0, x25: 0, x26: 0, x27: 0, x28: 0, x29: 0, x30: 0, x31: 0, x32: 0}; - S3{x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32} = move(t); - - t = S3{x1: 0, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0, x9: 0, x10: 0, x11: 0, x12: 0, x13: 0, x14: 0, x15: 0, x16: 0, x17: 0, x18: 0, x19: 0, x20: 0, x21: 0, x22: 0, x23: 0, x24: 0, x25: 0, x26: 0, x27: 0, x28: 0, x29: 0, x30: 0, x31: 0, x32: 0}; - S3{x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32} = move(t); - - t = S3{x1: 0, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0, x9: 0, x10: 0, x11: 0, x12: 0, x13: 0, x14: 0, x15: 0, x16: 0, x17: 0, x18: 0, x19: 0, x20: 0, x21: 0, x22: 0, x23: 0, x24: 0, x25: 0, x26: 0, x27: 0, x28: 0, x29: 0, x30: 0, x31: 0, x32: 0}; - S3{x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32} = move(t); - - t = S3{x1: 0, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0, x9: 0, x10: 0, x11: 0, x12: 0, x13: 0, x14: 0, x15: 0, x16: 0, x17: 0, x18: 0, x19: 0, x20: 0, x21: 0, x22: 0, x23: 0, x24: 0, x25: 0, x26: 0, x27: 0, x28: 0, x29: 0, x30: 0, x31: 0, x32: 0}; - S3{x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32} = move(t); - - t = S3{x1: 0, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0, x9: 0, x10: 0, x11: 0, x12: 0, x13: 0, x14: 0, x15: 0, x16: 0, x17: 0, x18: 0, x19: 0, x20: 0, x21: 0, x22: 0, x23: 0, x24: 0, x25: 0, x26: 0, x27: 0, x28: 0, x29: 0, x30: 0, x31: 0, x32: 0}; - S3{x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32} = move(t); - - t = S3{x1: 0, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0, x9: 0, x10: 0, x11: 0, x12: 0, x13: 0, x14: 0, x15: 0, x16: 0, x17: 0, x18: 0, x19: 0, x20: 0, x21: 0, x22: 0, x23: 0, x24: 0, x25: 0, x26: 0, x27: 0, x28: 0, x29: 0, x30: 0, x31: 0, x32: 0}; - S3{x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32} = move(t); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_unpack_s3_x100() { - label b0: - Self.calibrate_unpack_s3_impl(10); - return; - } - - public entry calibrate_unpack_s3_x500() { - label b0: - Self.calibrate_unpack_s3_impl(50); - return; - } - - public entry calibrate_unpack_s3_x1000() { - label b0: - Self.calibrate_unpack_s3_impl(100); - return; - } - - public calibrate_unpack_s4_impl(n: u64) { - let i: u64; - let t: Self.S4; - let x1: u64; - let x2: u64; - let x3: u64; - let x4: u64; - let x5: u64; - let x6: u64; - let x7: u64; - let x8: u64; - let x9: u64; - let x10: u64; - let x11: u64; - let x12: u64; - let x13: u64; - let x14: u64; - let x15: u64; - let x16: u64; - let x17: u64; - let x18: u64; - let x19: u64; - let x20: u64; - let x21: u64; - let x22: u64; - let x23: u64; - let x24: u64; - let x25: u64; - let x26: u64; - let x27: u64; - let x28: u64; - let x29: u64; - let x30: u64; - let x31: u64; - let x32: u64; - let x33: u64; - let x34: u64; - let x35: u64; - let x36: u64; - let x37: u64; - let x38: u64; - let x39: u64; - let x40: u64; - let x41: u64; - let x42: u64; - let x43: u64; - let x44: u64; - let x45: u64; - let x46: u64; - let x47: u64; - let x48: u64; - let x49: u64; - let x50: u64; - let x51: u64; - let x52: u64; - let x53: u64; - let x54: u64; - let x55: u64; - let x56: u64; - let x57: u64; - let x58: u64; - let x59: u64; - let x60: u64; - let x61: u64; - let x62: u64; - let x63: u64; - let x64: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - t = S4{x1: 0, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0, x9: 0, x10: 0, x11: 0, x12: 0, x13: 0, x14: 0, x15: 0, x16: 0, x17: 0, x18: 0, x19: 0, x20: 0, x21: 0, x22: 0, x23: 0, x24: 0, x25: 0, x26: 0, x27: 0, x28: 0, x29: 0, x30: 0, x31: 0, x32: 0, x33: 0, x34: 0, x35: 0, x36: 0, x37: 0, x38: 0, x39: 0, x40: 0, x41: 0, x42: 0, x43: 0, x44: 0, x45: 0, x46: 0, x47: 0, x48: 0, x49: 0, x50: 0, x51: 0, x52: 0, x53: 0, x54: 0, x55: 0, x56: 0, x57: 0, x58: 0, x59: 0, x60: 0, x61: 0, x62: 0, x63: 0, x64: 0}; - S4{x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36,x37,x38,x39,x40,x41,x42,x43,x44,x45,x46,x47,x48,x49,x50,x51,x52,x53,x54,x55,x56,x57,x58,x59,x60,x61,x62,x63,x64} = move(t); - - t = S4{x1: 0, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0, x9: 0, x10: 0, x11: 0, x12: 0, x13: 0, x14: 0, x15: 0, x16: 0, x17: 0, x18: 0, x19: 0, x20: 0, x21: 0, x22: 0, x23: 0, x24: 0, x25: 0, x26: 0, x27: 0, x28: 0, x29: 0, x30: 0, x31: 0, x32: 0, x33: 0, x34: 0, x35: 0, x36: 0, x37: 0, x38: 0, x39: 0, x40: 0, x41: 0, x42: 0, x43: 0, x44: 0, x45: 0, x46: 0, x47: 0, x48: 0, x49: 0, x50: 0, x51: 0, x52: 0, x53: 0, x54: 0, x55: 0, x56: 0, x57: 0, x58: 0, x59: 0, x60: 0, x61: 0, x62: 0, x63: 0, x64: 0}; - S4{x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36,x37,x38,x39,x40,x41,x42,x43,x44,x45,x46,x47,x48,x49,x50,x51,x52,x53,x54,x55,x56,x57,x58,x59,x60,x61,x62,x63,x64} = move(t); - - t = S4{x1: 0, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0, x9: 0, x10: 0, x11: 0, x12: 0, x13: 0, x14: 0, x15: 0, x16: 0, x17: 0, x18: 0, x19: 0, x20: 0, x21: 0, x22: 0, x23: 0, x24: 0, x25: 0, x26: 0, x27: 0, x28: 0, x29: 0, x30: 0, x31: 0, x32: 0, x33: 0, x34: 0, x35: 0, x36: 0, x37: 0, x38: 0, x39: 0, x40: 0, x41: 0, x42: 0, x43: 0, x44: 0, x45: 0, x46: 0, x47: 0, x48: 0, x49: 0, x50: 0, x51: 0, x52: 0, x53: 0, x54: 0, x55: 0, x56: 0, x57: 0, x58: 0, x59: 0, x60: 0, x61: 0, x62: 0, x63: 0, x64: 0}; - S4{x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36,x37,x38,x39,x40,x41,x42,x43,x44,x45,x46,x47,x48,x49,x50,x51,x52,x53,x54,x55,x56,x57,x58,x59,x60,x61,x62,x63,x64} = move(t); - - t = S4{x1: 0, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0, x9: 0, x10: 0, x11: 0, x12: 0, x13: 0, x14: 0, x15: 0, x16: 0, x17: 0, x18: 0, x19: 0, x20: 0, x21: 0, x22: 0, x23: 0, x24: 0, x25: 0, x26: 0, x27: 0, x28: 0, x29: 0, x30: 0, x31: 0, x32: 0, x33: 0, x34: 0, x35: 0, x36: 0, x37: 0, x38: 0, x39: 0, x40: 0, x41: 0, x42: 0, x43: 0, x44: 0, x45: 0, x46: 0, x47: 0, x48: 0, x49: 0, x50: 0, x51: 0, x52: 0, x53: 0, x54: 0, x55: 0, x56: 0, x57: 0, x58: 0, x59: 0, x60: 0, x61: 0, x62: 0, x63: 0, x64: 0}; - S4{x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36,x37,x38,x39,x40,x41,x42,x43,x44,x45,x46,x47,x48,x49,x50,x51,x52,x53,x54,x55,x56,x57,x58,x59,x60,x61,x62,x63,x64} = move(t); - - t = S4{x1: 0, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0, x9: 0, x10: 0, x11: 0, x12: 0, x13: 0, x14: 0, x15: 0, x16: 0, x17: 0, x18: 0, x19: 0, x20: 0, x21: 0, x22: 0, x23: 0, x24: 0, x25: 0, x26: 0, x27: 0, x28: 0, x29: 0, x30: 0, x31: 0, x32: 0, x33: 0, x34: 0, x35: 0, x36: 0, x37: 0, x38: 0, x39: 0, x40: 0, x41: 0, x42: 0, x43: 0, x44: 0, x45: 0, x46: 0, x47: 0, x48: 0, x49: 0, x50: 0, x51: 0, x52: 0, x53: 0, x54: 0, x55: 0, x56: 0, x57: 0, x58: 0, x59: 0, x60: 0, x61: 0, x62: 0, x63: 0, x64: 0}; - S4{x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36,x37,x38,x39,x40,x41,x42,x43,x44,x45,x46,x47,x48,x49,x50,x51,x52,x53,x54,x55,x56,x57,x58,x59,x60,x61,x62,x63,x64} = move(t); - - t = S4{x1: 0, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0, x9: 0, x10: 0, x11: 0, x12: 0, x13: 0, x14: 0, x15: 0, x16: 0, x17: 0, x18: 0, x19: 0, x20: 0, x21: 0, x22: 0, x23: 0, x24: 0, x25: 0, x26: 0, x27: 0, x28: 0, x29: 0, x30: 0, x31: 0, x32: 0, x33: 0, x34: 0, x35: 0, x36: 0, x37: 0, x38: 0, x39: 0, x40: 0, x41: 0, x42: 0, x43: 0, x44: 0, x45: 0, x46: 0, x47: 0, x48: 0, x49: 0, x50: 0, x51: 0, x52: 0, x53: 0, x54: 0, x55: 0, x56: 0, x57: 0, x58: 0, x59: 0, x60: 0, x61: 0, x62: 0, x63: 0, x64: 0}; - S4{x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36,x37,x38,x39,x40,x41,x42,x43,x44,x45,x46,x47,x48,x49,x50,x51,x52,x53,x54,x55,x56,x57,x58,x59,x60,x61,x62,x63,x64} = move(t); - - t = S4{x1: 0, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0, x9: 0, x10: 0, x11: 0, x12: 0, x13: 0, x14: 0, x15: 0, x16: 0, x17: 0, x18: 0, x19: 0, x20: 0, x21: 0, x22: 0, x23: 0, x24: 0, x25: 0, x26: 0, x27: 0, x28: 0, x29: 0, x30: 0, x31: 0, x32: 0, x33: 0, x34: 0, x35: 0, x36: 0, x37: 0, x38: 0, x39: 0, x40: 0, x41: 0, x42: 0, x43: 0, x44: 0, x45: 0, x46: 0, x47: 0, x48: 0, x49: 0, x50: 0, x51: 0, x52: 0, x53: 0, x54: 0, x55: 0, x56: 0, x57: 0, x58: 0, x59: 0, x60: 0, x61: 0, x62: 0, x63: 0, x64: 0}; - S4{x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36,x37,x38,x39,x40,x41,x42,x43,x44,x45,x46,x47,x48,x49,x50,x51,x52,x53,x54,x55,x56,x57,x58,x59,x60,x61,x62,x63,x64} = move(t); - - t = S4{x1: 0, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0, x9: 0, x10: 0, x11: 0, x12: 0, x13: 0, x14: 0, x15: 0, x16: 0, x17: 0, x18: 0, x19: 0, x20: 0, x21: 0, x22: 0, x23: 0, x24: 0, x25: 0, x26: 0, x27: 0, x28: 0, x29: 0, x30: 0, x31: 0, x32: 0, x33: 0, x34: 0, x35: 0, x36: 0, x37: 0, x38: 0, x39: 0, x40: 0, x41: 0, x42: 0, x43: 0, x44: 0, x45: 0, x46: 0, x47: 0, x48: 0, x49: 0, x50: 0, x51: 0, x52: 0, x53: 0, x54: 0, x55: 0, x56: 0, x57: 0, x58: 0, x59: 0, x60: 0, x61: 0, x62: 0, x63: 0, x64: 0}; - S4{x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36,x37,x38,x39,x40,x41,x42,x43,x44,x45,x46,x47,x48,x49,x50,x51,x52,x53,x54,x55,x56,x57,x58,x59,x60,x61,x62,x63,x64} = move(t); - - t = S4{x1: 0, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0, x9: 0, x10: 0, x11: 0, x12: 0, x13: 0, x14: 0, x15: 0, x16: 0, x17: 0, x18: 0, x19: 0, x20: 0, x21: 0, x22: 0, x23: 0, x24: 0, x25: 0, x26: 0, x27: 0, x28: 0, x29: 0, x30: 0, x31: 0, x32: 0, x33: 0, x34: 0, x35: 0, x36: 0, x37: 0, x38: 0, x39: 0, x40: 0, x41: 0, x42: 0, x43: 0, x44: 0, x45: 0, x46: 0, x47: 0, x48: 0, x49: 0, x50: 0, x51: 0, x52: 0, x53: 0, x54: 0, x55: 0, x56: 0, x57: 0, x58: 0, x59: 0, x60: 0, x61: 0, x62: 0, x63: 0, x64: 0}; - S4{x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36,x37,x38,x39,x40,x41,x42,x43,x44,x45,x46,x47,x48,x49,x50,x51,x52,x53,x54,x55,x56,x57,x58,x59,x60,x61,x62,x63,x64} = move(t); - - t = S4{x1: 0, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0, x9: 0, x10: 0, x11: 0, x12: 0, x13: 0, x14: 0, x15: 0, x16: 0, x17: 0, x18: 0, x19: 0, x20: 0, x21: 0, x22: 0, x23: 0, x24: 0, x25: 0, x26: 0, x27: 0, x28: 0, x29: 0, x30: 0, x31: 0, x32: 0, x33: 0, x34: 0, x35: 0, x36: 0, x37: 0, x38: 0, x39: 0, x40: 0, x41: 0, x42: 0, x43: 0, x44: 0, x45: 0, x46: 0, x47: 0, x48: 0, x49: 0, x50: 0, x51: 0, x52: 0, x53: 0, x54: 0, x55: 0, x56: 0, x57: 0, x58: 0, x59: 0, x60: 0, x61: 0, x62: 0, x63: 0, x64: 0}; - S4{x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36,x37,x38,x39,x40,x41,x42,x43,x44,x45,x46,x47,x48,x49,x50,x51,x52,x53,x54,x55,x56,x57,x58,x59,x60,x61,x62,x63,x64} = move(t); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_unpack_s4_x100() { - label b0: - Self.calibrate_unpack_s4_impl(10); - return; - } - - public entry calibrate_unpack_s4_x500() { - label b0: - Self.calibrate_unpack_s4_impl(50); - return; - } - - public entry calibrate_unpack_s4_x1000() { - label b0: - Self.calibrate_unpack_s4_impl(100); - return; - } - -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/global-operations-generic/exists-generic.mvir b/aptos-move/aptos-gas-calibration/samples_ir/global-operations-generic/exists-generic.mvir deleted file mode 100644 index ea7a9fc7d61d2..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/global-operations-generic/exists-generic.mvir +++ /dev/null @@ -1,138 +0,0 @@ -module 0xcafe.ExistsGeneric { - struct S1 has key, drop { x1: T } - struct S2 has key, drop { x1: T, x2: T, x3: T, x4: T, x5: T, x6: T, x7: T, x8: T } - struct S3 has key, drop { x1: T, x2: T, x3: T, x4: T, x5: T, x6: T, x7: T, x8: T, x9: T, x10: T, x11: T, x12: T, x13: T, x14: T, x15: T, x16: T, x17: T, x18: T, x19: T, x20: T, x21: T, x22: T, x23: T, x24: T, x25: T, x26: T, x27: T, x28: T, x29: T, x30: T, x31: T, x32: T} - struct S4 has key, drop { x1: T, x2: T, x3: T, x4: T, x5: T, x6: T, x7: T, x8: T, x9: T, x10: T, x11: T, x12: T, x13: T, x14: T, x15: T, x16: T, x17: T, x18: T, x19: T, x20: T, x21: T, x22: T, x23: T, x24: T, x25: T, x26: T, x27: T, x28: T, x29: T, x30: T, x31: T, x32: T, x33: T, x34: T, x35: T, x36: T, x37: T, x38: T, x39: T, x40: T, x41: T, x42: T, x43: T, x44: T, x45: T, x46: T, x47: T, x48: T, x49: T, x50: T, x51: T, x52: T, x53: T, x54: T, x55: T, x56: T, x57: T, x58: T, x59: T, x60: T, x61: T, x62: T, x63: T, x64: T } - - public calibrate_exists_generic_s1_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _, _, _, _, _, _, _, _, _, _ = (exists>(0xcafe), exists>(0xcafe), exists>(0xcafe), exists>(0xcafe), exists>(0xcafe), exists>(0xcafe), exists>(0xcafe), exists>(0xcafe), exists>(0xcafe), exists>(0xcafe)); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_exists_generic_s1_x100() { - label b0: - Self.calibrate_exists_generic_s1_impl(10); - return; - } - - public entry calibrate_exists_generic_s1_x1000() { - label b0: - Self.calibrate_exists_generic_s1_impl(100); - return; - } - - public entry calibrate_exists_generic_s1_x5000() { - label b0: - Self.calibrate_exists_generic_s1_impl(500); - return; - } - - public calibrate_exists_generic_s2_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _, _, _, _, _, _, _, _, _, _ = (exists>(0xcafe), exists>(0xcafe), exists>(0xcafe), exists>(0xcafe), exists>(0xcafe), exists>(0xcafe), exists>(0xcafe), exists>(0xcafe), exists>(0xcafe), exists>(0xcafe)); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_exists_generic_s2_x100() { - label b0: - Self.calibrate_exists_generic_s2_impl(10); - return; - } - - public entry calibrate_exists_generic_s2_x1000() { - label b0: - Self.calibrate_exists_generic_s2_impl(100); - return; - } - - public entry calibrate_exists_generic_s2_x5000() { - label b0: - Self.calibrate_exists_generic_s2_impl(500); - return; - } - - public calibrate_exists_generic_s3_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _, _, _, _, _, _, _, _, _, _ = (exists>(0xcafe), exists>(0xcafe), exists>(0xcafe), exists>(0xcafe), exists>(0xcafe), exists>(0xcafe), exists>(0xcafe), exists>(0xcafe), exists>(0xcafe), exists>(0xcafe)); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_exists_generic_s3_x100() { - label b0: - Self.calibrate_exists_generic_s3_impl(10); - return; - } - - public entry calibrate_exists_generic_s3_x1000() { - label b0: - Self.calibrate_exists_generic_s3_impl(100); - return; - } - - public entry calibrate_exists_generic_s3_x5000() { - label b0: - Self.calibrate_exists_generic_s3_impl(500); - return; - } - - public calibrate_exists_generic_s4_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _, _, _, _, _, _, _, _, _, _ = (exists>(0xcafe), exists>(0xcafe), exists>(0xcafe), exists>(0xcafe), exists>(0xcafe), exists>(0xcafe), exists>(0xcafe), exists>(0xcafe), exists>(0xcafe), exists>(0xcafe)); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_exists_generic_s4_x100() { - label b0: - Self.calibrate_exists_generic_s4_impl(10); - return; - } - - public entry calibrate_exists_generic_s4_x1000() { - label b0: - Self.calibrate_exists_generic_s4_impl(100); - return; - } - - public entry calibrate_exists_generic_s4_x5000() { - label b0: - Self.calibrate_exists_generic_s4_impl(500); - return; - } -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/global-operations-generic/imm-borrow-global-generic.mvir b/aptos-move/aptos-gas-calibration/samples_ir/global-operations-generic/imm-borrow-global-generic.mvir deleted file mode 100644 index 10fbdd31d3364..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/global-operations-generic/imm-borrow-global-generic.mvir +++ /dev/null @@ -1,53 +0,0 @@ -module 0xcafe.ImmBorrowGlobalGeneric { - struct S1 has key, drop { x: T } - struct S2 has key, drop { x: T } - struct S3 has key, drop { x: T } - - public entry calibrate_imm_borrow_global_generic_x100(s: signer) acquires S1 { - let i: u64; - label entry: - i = 0; - move_to>(&s, S1{x:0}); - label loop_start: - jump_if_false (copy(i) < 100) loop_end; - i = move(i) + 1; - - _, _, _, _, _, _, _, _, _, _ = (borrow_global>(0xcafe), borrow_global>(0xcafe), borrow_global>(0xcafe), borrow_global>(0xcafe), borrow_global>(0xcafe), borrow_global>(0xcafe), borrow_global>(0xcafe), borrow_global>(0xcafe), borrow_global>(0xcafe), borrow_global>(0xcafe)); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_imm_borrow_global_generic_x500(s: signer) acquires S2 { - let i: u64; - label entry: - i = 0; - move_to>(&s, S2{x:0}); - label loop_start: - jump_if_false (copy(i) < 500) loop_end; - i = move(i) + 1; - - _, _, _, _, _, _, _, _, _, _ = (borrow_global>(0xcafe), borrow_global>(0xcafe), borrow_global>(0xcafe), borrow_global>(0xcafe), borrow_global>(0xcafe), borrow_global>(0xcafe), borrow_global>(0xcafe), borrow_global>(0xcafe), borrow_global>(0xcafe), borrow_global>(0xcafe)); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_imm_borrow_global_generic_x1000(s: signer) acquires S3 { - let i: u64; - label entry: - i = 0; - move_to>(&s, S3{x:0}); - label loop_start: - jump_if_false (copy(i) < 1000) loop_end; - i = move(i) + 1; - - _, _, _, _, _, _, _, _, _, _ = (borrow_global>(0xcafe), borrow_global>(0xcafe), borrow_global>(0xcafe), borrow_global>(0xcafe), borrow_global>(0xcafe), borrow_global>(0xcafe), borrow_global>(0xcafe), borrow_global>(0xcafe), borrow_global>(0xcafe), borrow_global>(0xcafe)); - - jump loop_start; - label loop_end: - return; - } -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/global-operations-generic/move-from-generic.mvir b/aptos-move/aptos-gas-calibration/samples_ir/global-operations-generic/move-from-generic.mvir deleted file mode 100644 index 50e691ffa3bd1..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/global-operations-generic/move-from-generic.mvir +++ /dev/null @@ -1,132 +0,0 @@ -module 0xcafe.MoveFromGeneric { - struct S1 has key, drop { x: T } - - public entry calibrate_move_from_generic_x100(s: signer) acquires S1 { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < 100) loop_end; - i = move(i) + 1; - - move_to>(&s, S1{ x: 0 }); - _ = move_from>(0xcafe); - - move_to>(&s, S1{ x: 0 }); - _ = move_from>(0xcafe); - - move_to>(&s, S1{ x: 0 }); - _ = move_from>(0xcafe); - - move_to>(&s, S1{ x: 0 }); - _ = move_from>(0xcafe); - - move_to>(&s, S1{ x: 0 }); - _ = move_from>(0xcafe); - - move_to>(&s, S1{ x: 0 }); - _ = move_from>(0xcafe); - - move_to>(&s, S1{ x: 0 }); - _ = move_from>(0xcafe); - - move_to>(&s, S1{ x: 0 }); - _ = move_from>(0xcafe); - - move_to>(&s, S1{ x: 0 }); - _ = move_from>(0xcafe); - - move_to>(&s, S1{ x: 0 }); - _ = move_from>(0xcafe); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_move_from_generic_x1000(s: signer) acquires S1 { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < 1000) loop_end; - i = move(i) + 1; - - move_to>(&s, S1{ x: 0 }); - _ = move_from>(0xcafe); - - move_to>(&s, S1{ x: 0 }); - _ = move_from>(0xcafe); - - move_to>(&s, S1{ x: 0 }); - _ = move_from>(0xcafe); - - move_to>(&s, S1{ x: 0 }); - _ = move_from>(0xcafe); - - move_to>(&s, S1{ x: 0 }); - _ = move_from>(0xcafe); - - move_to>(&s, S1{ x: 0 }); - _ = move_from>(0xcafe); - - move_to>(&s, S1{ x: 0 }); - _ = move_from>(0xcafe); - - move_to>(&s, S1{ x: 0 }); - _ = move_from>(0xcafe); - - move_to>(&s, S1{ x: 0 }); - _ = move_from>(0xcafe); - - move_to>(&s, S1{ x: 0 }); - _ = move_from>(0xcafe); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_move_from_generic_x5000(s: signer) acquires S1 { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < 5000) loop_end; - i = move(i) + 1; - - move_to>(&s, S1{ x: 0 }); - _ = move_from>(0xcafe); - - move_to>(&s, S1{ x: 0 }); - _ = move_from>(0xcafe); - - move_to>(&s, S1{ x: 0 }); - _ = move_from>(0xcafe); - - move_to>(&s, S1{ x: 0 }); - _ = move_from>(0xcafe); - - move_to>(&s, S1{ x: 0 }); - _ = move_from>(0xcafe); - - move_to>(&s, S1{ x: 0 }); - _ = move_from>(0xcafe); - - move_to>(&s, S1{ x: 0 }); - _ = move_from>(0xcafe); - - move_to>(&s, S1{ x: 0 }); - _ = move_from>(0xcafe); - - move_to>(&s, S1{ x: 0 }); - _ = move_from>(0xcafe); - - move_to>(&s, S1{ x: 0 }); - _ = move_from>(0xcafe); - - jump loop_start; - label loop_end: - return; - } -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/global-operations-generic/move-to-generic.mvir b/aptos-move/aptos-gas-calibration/samples_ir/global-operations-generic/move-to-generic.mvir deleted file mode 100644 index 2b5feedb9611d..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/global-operations-generic/move-to-generic.mvir +++ /dev/null @@ -1,3217 +0,0 @@ -module 0xcafe.MoveToGeneric { - struct S1 has key, drop { x: T } - struct S2 has key, drop { x: T } - struct S3 has key, drop { x: T } - struct S4 has key, drop { x: T } - struct S5 has key, drop { x: T } - struct S6 has key, drop { x: T } - struct S7 has key, drop { x: T } - struct S8 has key, drop { x: T } - struct S9 has key, drop { x: T } - struct S10 has key, drop { x: T } - struct S11 has key, drop { x: T } - struct S12 has key, drop { x: T } - struct S13 has key, drop { x: T } - struct S14 has key, drop { x: T } - struct S15 has key, drop { x: T } - struct S16 has key, drop { x: T } - struct S17 has key, drop { x: T } - struct S18 has key, drop { x: T } - struct S19 has key, drop { x: T } - struct S20 has key, drop { x: T } - struct S21 has key, drop { x: T } - struct S22 has key, drop { x: T } - struct S23 has key, drop { x: T } - struct S24 has key, drop { x: T } - struct S25 has key, drop { x: T } - struct S26 has key, drop { x: T } - struct S27 has key, drop { x: T } - struct S28 has key, drop { x: T } - struct S29 has key, drop { x: T } - struct S30 has key, drop { x: T } - struct S31 has key, drop { x: T } - struct S32 has key, drop { x: T } - struct S33 has key, drop { x: T } - struct S34 has key, drop { x: T } - struct S35 has key, drop { x: T } - struct S36 has key, drop { x: T } - struct S37 has key, drop { x: T } - struct S38 has key, drop { x: T } - struct S39 has key, drop { x: T } - struct S40 has key, drop { x: T } - struct S41 has key, drop { x: T } - struct S42 has key, drop { x: T } - struct S43 has key, drop { x: T } - struct S44 has key, drop { x: T } - struct S45 has key, drop { x: T } - struct S46 has key, drop { x: T } - struct S47 has key, drop { x: T } - struct S48 has key, drop { x: T } - struct S49 has key, drop { x: T } - struct S50 has key, drop { x: T } - struct S51 has key, drop { x: T } - struct S52 has key, drop { x: T } - struct S53 has key, drop { x: T } - struct S54 has key, drop { x: T } - struct S55 has key, drop { x: T } - struct S56 has key, drop { x: T } - struct S57 has key, drop { x: T } - struct S58 has key, drop { x: T } - struct S59 has key, drop { x: T } - struct S60 has key, drop { x: T } - struct S61 has key, drop { x: T } - struct S62 has key, drop { x: T } - struct S63 has key, drop { x: T } - struct S64 has key, drop { x: T } - struct S65 has key, drop { x: T } - struct S66 has key, drop { x: T } - struct S67 has key, drop { x: T } - struct S68 has key, drop { x: T } - struct S69 has key, drop { x: T } - struct S70 has key, drop { x: T } - struct S71 has key, drop { x: T } - struct S72 has key, drop { x: T } - struct S73 has key, drop { x: T } - struct S74 has key, drop { x: T } - struct S75 has key, drop { x: T } - struct S76 has key, drop { x: T } - struct S77 has key, drop { x: T } - struct S78 has key, drop { x: T } - struct S79 has key, drop { x: T } - struct S80 has key, drop { x: T } - struct S81 has key, drop { x: T } - struct S82 has key, drop { x: T } - struct S83 has key, drop { x: T } - struct S84 has key, drop { x: T } - struct S85 has key, drop { x: T } - struct S86 has key, drop { x: T } - struct S87 has key, drop { x: T } - struct S88 has key, drop { x: T } - struct S89 has key, drop { x: T } - struct S90 has key, drop { x: T } - struct S91 has key, drop { x: T } - struct S92 has key, drop { x: T } - struct S93 has key, drop { x: T } - struct S94 has key, drop { x: T } - struct S95 has key, drop { x: T } - struct S96 has key, drop { x: T } - struct S97 has key, drop { x: T } - struct S98 has key, drop { x: T } - struct S99 has key, drop { x: T } - struct S100 has key, drop { x: T } - struct S101 has key, drop { x: T } - struct S102 has key, drop { x: T } - struct S103 has key, drop { x: T } - struct S104 has key, drop { x: T } - struct S105 has key, drop { x: T } - struct S106 has key, drop { x: T } - struct S107 has key, drop { x: T } - struct S108 has key, drop { x: T } - struct S109 has key, drop { x: T } - struct S110 has key, drop { x: T } - struct S111 has key, drop { x: T } - struct S112 has key, drop { x: T } - struct S113 has key, drop { x: T } - struct S114 has key, drop { x: T } - struct S115 has key, drop { x: T } - struct S116 has key, drop { x: T } - struct S117 has key, drop { x: T } - struct S118 has key, drop { x: T } - struct S119 has key, drop { x: T } - struct S120 has key, drop { x: T } - struct S121 has key, drop { x: T } - struct S122 has key, drop { x: T } - struct S123 has key, drop { x: T } - struct S124 has key, drop { x: T } - struct S125 has key, drop { x: T } - struct S126 has key, drop { x: T } - struct S127 has key, drop { x: T } - struct S128 has key, drop { x: T } - struct S129 has key, drop { x: T } - struct S130 has key, drop { x: T } - struct S131 has key, drop { x: T } - struct S132 has key, drop { x: T } - struct S133 has key, drop { x: T } - struct S134 has key, drop { x: T } - struct S135 has key, drop { x: T } - struct S136 has key, drop { x: T } - struct S137 has key, drop { x: T } - struct S138 has key, drop { x: T } - struct S139 has key, drop { x: T } - struct S140 has key, drop { x: T } - struct S141 has key, drop { x: T } - struct S142 has key, drop { x: T } - struct S143 has key, drop { x: T } - struct S144 has key, drop { x: T } - struct S145 has key, drop { x: T } - struct S146 has key, drop { x: T } - struct S147 has key, drop { x: T } - struct S148 has key, drop { x: T } - struct S149 has key, drop { x: T } - struct S150 has key, drop { x: T } - struct S151 has key, drop { x: T } - struct S152 has key, drop { x: T } - struct S153 has key, drop { x: T } - struct S154 has key, drop { x: T } - struct S155 has key, drop { x: T } - struct S156 has key, drop { x: T } - struct S157 has key, drop { x: T } - struct S158 has key, drop { x: T } - struct S159 has key, drop { x: T } - struct S160 has key, drop { x: T } - struct S161 has key, drop { x: T } - struct S162 has key, drop { x: T } - struct S163 has key, drop { x: T } - struct S164 has key, drop { x: T } - struct S165 has key, drop { x: T } - struct S166 has key, drop { x: T } - struct S167 has key, drop { x: T } - struct S168 has key, drop { x: T } - struct S169 has key, drop { x: T } - struct S170 has key, drop { x: T } - struct S171 has key, drop { x: T } - struct S172 has key, drop { x: T } - struct S173 has key, drop { x: T } - struct S174 has key, drop { x: T } - struct S175 has key, drop { x: T } - struct S176 has key, drop { x: T } - struct S177 has key, drop { x: T } - struct S178 has key, drop { x: T } - struct S179 has key, drop { x: T } - struct S180 has key, drop { x: T } - struct S181 has key, drop { x: T } - struct S182 has key, drop { x: T } - struct S183 has key, drop { x: T } - struct S184 has key, drop { x: T } - struct S185 has key, drop { x: T } - struct S186 has key, drop { x: T } - struct S187 has key, drop { x: T } - struct S188 has key, drop { x: T } - struct S189 has key, drop { x: T } - struct S190 has key, drop { x: T } - struct S191 has key, drop { x: T } - struct S192 has key, drop { x: T } - struct S193 has key, drop { x: T } - struct S194 has key, drop { x: T } - struct S195 has key, drop { x: T } - struct S196 has key, drop { x: T } - struct S197 has key, drop { x: T } - struct S198 has key, drop { x: T } - struct S199 has key, drop { x: T } - struct S200 has key, drop { x: T } - struct S201 has key, drop { x: T } - struct S202 has key, drop { x: T } - struct S203 has key, drop { x: T } - struct S204 has key, drop { x: T } - struct S205 has key, drop { x: T } - struct S206 has key, drop { x: T } - struct S207 has key, drop { x: T } - struct S208 has key, drop { x: T } - struct S209 has key, drop { x: T } - struct S210 has key, drop { x: T } - struct S211 has key, drop { x: T } - struct S212 has key, drop { x: T } - struct S213 has key, drop { x: T } - struct S214 has key, drop { x: T } - struct S215 has key, drop { x: T } - struct S216 has key, drop { x: T } - struct S217 has key, drop { x: T } - struct S218 has key, drop { x: T } - struct S219 has key, drop { x: T } - struct S220 has key, drop { x: T } - struct S221 has key, drop { x: T } - struct S222 has key, drop { x: T } - struct S223 has key, drop { x: T } - struct S224 has key, drop { x: T } - struct S225 has key, drop { x: T } - struct S226 has key, drop { x: T } - struct S227 has key, drop { x: T } - struct S228 has key, drop { x: T } - struct S229 has key, drop { x: T } - struct S230 has key, drop { x: T } - struct S231 has key, drop { x: T } - struct S232 has key, drop { x: T } - struct S233 has key, drop { x: T } - struct S234 has key, drop { x: T } - struct S235 has key, drop { x: T } - struct S236 has key, drop { x: T } - struct S237 has key, drop { x: T } - struct S238 has key, drop { x: T } - struct S239 has key, drop { x: T } - struct S240 has key, drop { x: T } - struct S241 has key, drop { x: T } - struct S242 has key, drop { x: T } - struct S243 has key, drop { x: T } - struct S244 has key, drop { x: T } - struct S245 has key, drop { x: T } - struct S246 has key, drop { x: T } - struct S247 has key, drop { x: T } - struct S248 has key, drop { x: T } - struct S249 has key, drop { x: T } - struct S250 has key, drop { x: T } - struct S251 has key, drop { x: T } - struct S252 has key, drop { x: T } - struct S253 has key, drop { x: T } - struct S254 has key, drop { x: T } - struct S255 has key, drop { x: T } - struct S256 has key, drop { x: T } - struct S257 has key, drop { x: T } - struct S258 has key, drop { x: T } - struct S259 has key, drop { x: T } - struct S260 has key, drop { x: T } - struct S261 has key, drop { x: T } - struct S262 has key, drop { x: T } - struct S263 has key, drop { x: T } - struct S264 has key, drop { x: T } - struct S265 has key, drop { x: T } - struct S266 has key, drop { x: T } - struct S267 has key, drop { x: T } - struct S268 has key, drop { x: T } - struct S269 has key, drop { x: T } - struct S270 has key, drop { x: T } - struct S271 has key, drop { x: T } - struct S272 has key, drop { x: T } - struct S273 has key, drop { x: T } - struct S274 has key, drop { x: T } - struct S275 has key, drop { x: T } - struct S276 has key, drop { x: T } - struct S277 has key, drop { x: T } - struct S278 has key, drop { x: T } - struct S279 has key, drop { x: T } - struct S280 has key, drop { x: T } - struct S281 has key, drop { x: T } - struct S282 has key, drop { x: T } - struct S283 has key, drop { x: T } - struct S284 has key, drop { x: T } - struct S285 has key, drop { x: T } - struct S286 has key, drop { x: T } - struct S287 has key, drop { x: T } - struct S288 has key, drop { x: T } - struct S289 has key, drop { x: T } - struct S290 has key, drop { x: T } - struct S291 has key, drop { x: T } - struct S292 has key, drop { x: T } - struct S293 has key, drop { x: T } - struct S294 has key, drop { x: T } - struct S295 has key, drop { x: T } - struct S296 has key, drop { x: T } - struct S297 has key, drop { x: T } - struct S298 has key, drop { x: T } - struct S299 has key, drop { x: T } - struct S300 has key, drop { x: T } - struct S301 has key, drop { x: T } - struct S302 has key, drop { x: T } - struct S303 has key, drop { x: T } - struct S304 has key, drop { x: T } - struct S305 has key, drop { x: T } - struct S306 has key, drop { x: T } - struct S307 has key, drop { x: T } - struct S308 has key, drop { x: T } - struct S309 has key, drop { x: T } - struct S310 has key, drop { x: T } - struct S311 has key, drop { x: T } - struct S312 has key, drop { x: T } - struct S313 has key, drop { x: T } - struct S314 has key, drop { x: T } - struct S315 has key, drop { x: T } - struct S316 has key, drop { x: T } - struct S317 has key, drop { x: T } - struct S318 has key, drop { x: T } - struct S319 has key, drop { x: T } - struct S320 has key, drop { x: T } - struct S321 has key, drop { x: T } - struct S322 has key, drop { x: T } - struct S323 has key, drop { x: T } - struct S324 has key, drop { x: T } - struct S325 has key, drop { x: T } - struct S326 has key, drop { x: T } - struct S327 has key, drop { x: T } - struct S328 has key, drop { x: T } - struct S329 has key, drop { x: T } - struct S330 has key, drop { x: T } - struct S331 has key, drop { x: T } - struct S332 has key, drop { x: T } - struct S333 has key, drop { x: T } - struct S334 has key, drop { x: T } - struct S335 has key, drop { x: T } - struct S336 has key, drop { x: T } - struct S337 has key, drop { x: T } - struct S338 has key, drop { x: T } - struct S339 has key, drop { x: T } - struct S340 has key, drop { x: T } - struct S341 has key, drop { x: T } - struct S342 has key, drop { x: T } - struct S343 has key, drop { x: T } - struct S344 has key, drop { x: T } - struct S345 has key, drop { x: T } - struct S346 has key, drop { x: T } - struct S347 has key, drop { x: T } - struct S348 has key, drop { x: T } - struct S349 has key, drop { x: T } - struct S350 has key, drop { x: T } - struct S351 has key, drop { x: T } - struct S352 has key, drop { x: T } - struct S353 has key, drop { x: T } - struct S354 has key, drop { x: T } - struct S355 has key, drop { x: T } - struct S356 has key, drop { x: T } - struct S357 has key, drop { x: T } - struct S358 has key, drop { x: T } - struct S359 has key, drop { x: T } - struct S360 has key, drop { x: T } - struct S361 has key, drop { x: T } - struct S362 has key, drop { x: T } - struct S363 has key, drop { x: T } - struct S364 has key, drop { x: T } - struct S365 has key, drop { x: T } - struct S366 has key, drop { x: T } - struct S367 has key, drop { x: T } - struct S368 has key, drop { x: T } - struct S369 has key, drop { x: T } - struct S370 has key, drop { x: T } - struct S371 has key, drop { x: T } - struct S372 has key, drop { x: T } - struct S373 has key, drop { x: T } - struct S374 has key, drop { x: T } - struct S375 has key, drop { x: T } - struct S376 has key, drop { x: T } - struct S377 has key, drop { x: T } - struct S378 has key, drop { x: T } - struct S379 has key, drop { x: T } - struct S380 has key, drop { x: T } - struct S381 has key, drop { x: T } - struct S382 has key, drop { x: T } - struct S383 has key, drop { x: T } - struct S384 has key, drop { x: T } - struct S385 has key, drop { x: T } - struct S386 has key, drop { x: T } - struct S387 has key, drop { x: T } - struct S388 has key, drop { x: T } - struct S389 has key, drop { x: T } - struct S390 has key, drop { x: T } - struct S391 has key, drop { x: T } - struct S392 has key, drop { x: T } - struct S393 has key, drop { x: T } - struct S394 has key, drop { x: T } - struct S395 has key, drop { x: T } - struct S396 has key, drop { x: T } - struct S397 has key, drop { x: T } - struct S398 has key, drop { x: T } - struct S399 has key, drop { x: T } - struct S400 has key, drop { x: T } - struct S401 has key, drop { x: T } - struct S402 has key, drop { x: T } - struct S403 has key, drop { x: T } - struct S404 has key, drop { x: T } - struct S405 has key, drop { x: T } - struct S406 has key, drop { x: T } - struct S407 has key, drop { x: T } - struct S408 has key, drop { x: T } - struct S409 has key, drop { x: T } - struct S410 has key, drop { x: T } - struct S411 has key, drop { x: T } - struct S412 has key, drop { x: T } - struct S413 has key, drop { x: T } - struct S414 has key, drop { x: T } - struct S415 has key, drop { x: T } - struct S416 has key, drop { x: T } - struct S417 has key, drop { x: T } - struct S418 has key, drop { x: T } - struct S419 has key, drop { x: T } - struct S420 has key, drop { x: T } - struct S421 has key, drop { x: T } - struct S422 has key, drop { x: T } - struct S423 has key, drop { x: T } - struct S424 has key, drop { x: T } - struct S425 has key, drop { x: T } - struct S426 has key, drop { x: T } - struct S427 has key, drop { x: T } - struct S428 has key, drop { x: T } - struct S429 has key, drop { x: T } - struct S430 has key, drop { x: T } - struct S431 has key, drop { x: T } - struct S432 has key, drop { x: T } - struct S433 has key, drop { x: T } - struct S434 has key, drop { x: T } - struct S435 has key, drop { x: T } - struct S436 has key, drop { x: T } - struct S437 has key, drop { x: T } - struct S438 has key, drop { x: T } - struct S439 has key, drop { x: T } - struct S440 has key, drop { x: T } - struct S441 has key, drop { x: T } - struct S442 has key, drop { x: T } - struct S443 has key, drop { x: T } - struct S444 has key, drop { x: T } - struct S445 has key, drop { x: T } - struct S446 has key, drop { x: T } - struct S447 has key, drop { x: T } - struct S448 has key, drop { x: T } - struct S449 has key, drop { x: T } - struct S450 has key, drop { x: T } - struct S451 has key, drop { x: T } - struct S452 has key, drop { x: T } - struct S453 has key, drop { x: T } - struct S454 has key, drop { x: T } - struct S455 has key, drop { x: T } - struct S456 has key, drop { x: T } - struct S457 has key, drop { x: T } - struct S458 has key, drop { x: T } - struct S459 has key, drop { x: T } - struct S460 has key, drop { x: T } - struct S461 has key, drop { x: T } - struct S462 has key, drop { x: T } - struct S463 has key, drop { x: T } - struct S464 has key, drop { x: T } - struct S465 has key, drop { x: T } - struct S466 has key, drop { x: T } - struct S467 has key, drop { x: T } - struct S468 has key, drop { x: T } - struct S469 has key, drop { x: T } - struct S470 has key, drop { x: T } - struct S471 has key, drop { x: T } - struct S472 has key, drop { x: T } - struct S473 has key, drop { x: T } - struct S474 has key, drop { x: T } - struct S475 has key, drop { x: T } - struct S476 has key, drop { x: T } - struct S477 has key, drop { x: T } - struct S478 has key, drop { x: T } - struct S479 has key, drop { x: T } - struct S480 has key, drop { x: T } - struct S481 has key, drop { x: T } - struct S482 has key, drop { x: T } - struct S483 has key, drop { x: T } - struct S484 has key, drop { x: T } - struct S485 has key, drop { x: T } - struct S486 has key, drop { x: T } - struct S487 has key, drop { x: T } - struct S488 has key, drop { x: T } - struct S489 has key, drop { x: T } - struct S490 has key, drop { x: T } - struct S491 has key, drop { x: T } - struct S492 has key, drop { x: T } - struct S493 has key, drop { x: T } - struct S494 has key, drop { x: T } - struct S495 has key, drop { x: T } - struct S496 has key, drop { x: T } - struct S497 has key, drop { x: T } - struct S498 has key, drop { x: T } - struct S499 has key, drop { x: T } - struct S500 has key, drop { x: T } - struct S501 has key, drop { x: T } - struct S502 has key, drop { x: T } - struct S503 has key, drop { x: T } - struct S504 has key, drop { x: T } - struct S505 has key, drop { x: T } - struct S506 has key, drop { x: T } - struct S507 has key, drop { x: T } - struct S508 has key, drop { x: T } - struct S509 has key, drop { x: T } - struct S510 has key, drop { x: T } - struct S511 has key, drop { x: T } - struct S512 has key, drop { x: T } - struct S513 has key, drop { x: T } - struct S514 has key, drop { x: T } - struct S515 has key, drop { x: T } - struct S516 has key, drop { x: T } - struct S517 has key, drop { x: T } - struct S518 has key, drop { x: T } - struct S519 has key, drop { x: T } - struct S520 has key, drop { x: T } - struct S521 has key, drop { x: T } - struct S522 has key, drop { x: T } - struct S523 has key, drop { x: T } - struct S524 has key, drop { x: T } - struct S525 has key, drop { x: T } - struct S526 has key, drop { x: T } - struct S527 has key, drop { x: T } - struct S528 has key, drop { x: T } - struct S529 has key, drop { x: T } - struct S530 has key, drop { x: T } - struct S531 has key, drop { x: T } - struct S532 has key, drop { x: T } - struct S533 has key, drop { x: T } - struct S534 has key, drop { x: T } - struct S535 has key, drop { x: T } - struct S536 has key, drop { x: T } - struct S537 has key, drop { x: T } - struct S538 has key, drop { x: T } - struct S539 has key, drop { x: T } - struct S540 has key, drop { x: T } - struct S541 has key, drop { x: T } - struct S542 has key, drop { x: T } - struct S543 has key, drop { x: T } - struct S544 has key, drop { x: T } - struct S545 has key, drop { x: T } - struct S546 has key, drop { x: T } - struct S547 has key, drop { x: T } - struct S548 has key, drop { x: T } - struct S549 has key, drop { x: T } - struct S550 has key, drop { x: T } - struct S551 has key, drop { x: T } - struct S552 has key, drop { x: T } - struct S553 has key, drop { x: T } - struct S554 has key, drop { x: T } - struct S555 has key, drop { x: T } - struct S556 has key, drop { x: T } - struct S557 has key, drop { x: T } - struct S558 has key, drop { x: T } - struct S559 has key, drop { x: T } - struct S560 has key, drop { x: T } - struct S561 has key, drop { x: T } - struct S562 has key, drop { x: T } - struct S563 has key, drop { x: T } - struct S564 has key, drop { x: T } - struct S565 has key, drop { x: T } - struct S566 has key, drop { x: T } - struct S567 has key, drop { x: T } - struct S568 has key, drop { x: T } - struct S569 has key, drop { x: T } - struct S570 has key, drop { x: T } - struct S571 has key, drop { x: T } - struct S572 has key, drop { x: T } - struct S573 has key, drop { x: T } - struct S574 has key, drop { x: T } - struct S575 has key, drop { x: T } - struct S576 has key, drop { x: T } - struct S577 has key, drop { x: T } - struct S578 has key, drop { x: T } - struct S579 has key, drop { x: T } - struct S580 has key, drop { x: T } - struct S581 has key, drop { x: T } - struct S582 has key, drop { x: T } - struct S583 has key, drop { x: T } - struct S584 has key, drop { x: T } - struct S585 has key, drop { x: T } - struct S586 has key, drop { x: T } - struct S587 has key, drop { x: T } - struct S588 has key, drop { x: T } - struct S589 has key, drop { x: T } - struct S590 has key, drop { x: T } - struct S591 has key, drop { x: T } - struct S592 has key, drop { x: T } - struct S593 has key, drop { x: T } - struct S594 has key, drop { x: T } - struct S595 has key, drop { x: T } - struct S596 has key, drop { x: T } - struct S597 has key, drop { x: T } - struct S598 has key, drop { x: T } - struct S599 has key, drop { x: T } - struct S600 has key, drop { x: T } - struct S601 has key, drop { x: T } - struct S602 has key, drop { x: T } - struct S603 has key, drop { x: T } - struct S604 has key, drop { x: T } - struct S605 has key, drop { x: T } - struct S606 has key, drop { x: T } - struct S607 has key, drop { x: T } - struct S608 has key, drop { x: T } - struct S609 has key, drop { x: T } - struct S610 has key, drop { x: T } - struct S611 has key, drop { x: T } - struct S612 has key, drop { x: T } - struct S613 has key, drop { x: T } - struct S614 has key, drop { x: T } - struct S615 has key, drop { x: T } - struct S616 has key, drop { x: T } - struct S617 has key, drop { x: T } - struct S618 has key, drop { x: T } - struct S619 has key, drop { x: T } - struct S620 has key, drop { x: T } - struct S621 has key, drop { x: T } - struct S622 has key, drop { x: T } - struct S623 has key, drop { x: T } - struct S624 has key, drop { x: T } - struct S625 has key, drop { x: T } - struct S626 has key, drop { x: T } - struct S627 has key, drop { x: T } - struct S628 has key, drop { x: T } - struct S629 has key, drop { x: T } - struct S630 has key, drop { x: T } - struct S631 has key, drop { x: T } - struct S632 has key, drop { x: T } - struct S633 has key, drop { x: T } - struct S634 has key, drop { x: T } - struct S635 has key, drop { x: T } - struct S636 has key, drop { x: T } - struct S637 has key, drop { x: T } - struct S638 has key, drop { x: T } - struct S639 has key, drop { x: T } - struct S640 has key, drop { x: T } - struct S641 has key, drop { x: T } - struct S642 has key, drop { x: T } - struct S643 has key, drop { x: T } - struct S644 has key, drop { x: T } - struct S645 has key, drop { x: T } - struct S646 has key, drop { x: T } - struct S647 has key, drop { x: T } - struct S648 has key, drop { x: T } - struct S649 has key, drop { x: T } - struct S650 has key, drop { x: T } - struct S651 has key, drop { x: T } - struct S652 has key, drop { x: T } - struct S653 has key, drop { x: T } - struct S654 has key, drop { x: T } - struct S655 has key, drop { x: T } - struct S656 has key, drop { x: T } - struct S657 has key, drop { x: T } - struct S658 has key, drop { x: T } - struct S659 has key, drop { x: T } - struct S660 has key, drop { x: T } - struct S661 has key, drop { x: T } - struct S662 has key, drop { x: T } - struct S663 has key, drop { x: T } - struct S664 has key, drop { x: T } - struct S665 has key, drop { x: T } - struct S666 has key, drop { x: T } - struct S667 has key, drop { x: T } - struct S668 has key, drop { x: T } - struct S669 has key, drop { x: T } - struct S670 has key, drop { x: T } - struct S671 has key, drop { x: T } - struct S672 has key, drop { x: T } - struct S673 has key, drop { x: T } - struct S674 has key, drop { x: T } - struct S675 has key, drop { x: T } - struct S676 has key, drop { x: T } - struct S677 has key, drop { x: T } - struct S678 has key, drop { x: T } - struct S679 has key, drop { x: T } - struct S680 has key, drop { x: T } - struct S681 has key, drop { x: T } - struct S682 has key, drop { x: T } - struct S683 has key, drop { x: T } - struct S684 has key, drop { x: T } - struct S685 has key, drop { x: T } - struct S686 has key, drop { x: T } - struct S687 has key, drop { x: T } - struct S688 has key, drop { x: T } - struct S689 has key, drop { x: T } - struct S690 has key, drop { x: T } - struct S691 has key, drop { x: T } - struct S692 has key, drop { x: T } - struct S693 has key, drop { x: T } - struct S694 has key, drop { x: T } - struct S695 has key, drop { x: T } - struct S696 has key, drop { x: T } - struct S697 has key, drop { x: T } - struct S698 has key, drop { x: T } - struct S699 has key, drop { x: T } - struct S700 has key, drop { x: T } - struct S701 has key, drop { x: T } - struct S702 has key, drop { x: T } - struct S703 has key, drop { x: T } - struct S704 has key, drop { x: T } - struct S705 has key, drop { x: T } - struct S706 has key, drop { x: T } - struct S707 has key, drop { x: T } - struct S708 has key, drop { x: T } - struct S709 has key, drop { x: T } - struct S710 has key, drop { x: T } - struct S711 has key, drop { x: T } - struct S712 has key, drop { x: T } - struct S713 has key, drop { x: T } - struct S714 has key, drop { x: T } - struct S715 has key, drop { x: T } - struct S716 has key, drop { x: T } - struct S717 has key, drop { x: T } - struct S718 has key, drop { x: T } - struct S719 has key, drop { x: T } - struct S720 has key, drop { x: T } - struct S721 has key, drop { x: T } - struct S722 has key, drop { x: T } - struct S723 has key, drop { x: T } - struct S724 has key, drop { x: T } - struct S725 has key, drop { x: T } - struct S726 has key, drop { x: T } - struct S727 has key, drop { x: T } - struct S728 has key, drop { x: T } - struct S729 has key, drop { x: T } - struct S730 has key, drop { x: T } - struct S731 has key, drop { x: T } - struct S732 has key, drop { x: T } - struct S733 has key, drop { x: T } - struct S734 has key, drop { x: T } - struct S735 has key, drop { x: T } - struct S736 has key, drop { x: T } - struct S737 has key, drop { x: T } - struct S738 has key, drop { x: T } - struct S739 has key, drop { x: T } - struct S740 has key, drop { x: T } - struct S741 has key, drop { x: T } - struct S742 has key, drop { x: T } - struct S743 has key, drop { x: T } - struct S744 has key, drop { x: T } - struct S745 has key, drop { x: T } - struct S746 has key, drop { x: T } - struct S747 has key, drop { x: T } - struct S748 has key, drop { x: T } - struct S749 has key, drop { x: T } - struct S750 has key, drop { x: T } - struct S751 has key, drop { x: T } - struct S752 has key, drop { x: T } - struct S753 has key, drop { x: T } - struct S754 has key, drop { x: T } - struct S755 has key, drop { x: T } - struct S756 has key, drop { x: T } - struct S757 has key, drop { x: T } - struct S758 has key, drop { x: T } - struct S759 has key, drop { x: T } - struct S760 has key, drop { x: T } - struct S761 has key, drop { x: T } - struct S762 has key, drop { x: T } - struct S763 has key, drop { x: T } - struct S764 has key, drop { x: T } - struct S765 has key, drop { x: T } - struct S766 has key, drop { x: T } - struct S767 has key, drop { x: T } - struct S768 has key, drop { x: T } - struct S769 has key, drop { x: T } - struct S770 has key, drop { x: T } - struct S771 has key, drop { x: T } - struct S772 has key, drop { x: T } - struct S773 has key, drop { x: T } - struct S774 has key, drop { x: T } - struct S775 has key, drop { x: T } - struct S776 has key, drop { x: T } - struct S777 has key, drop { x: T } - struct S778 has key, drop { x: T } - struct S779 has key, drop { x: T } - struct S780 has key, drop { x: T } - struct S781 has key, drop { x: T } - struct S782 has key, drop { x: T } - struct S783 has key, drop { x: T } - struct S784 has key, drop { x: T } - struct S785 has key, drop { x: T } - struct S786 has key, drop { x: T } - struct S787 has key, drop { x: T } - struct S788 has key, drop { x: T } - struct S789 has key, drop { x: T } - struct S790 has key, drop { x: T } - struct S791 has key, drop { x: T } - struct S792 has key, drop { x: T } - struct S793 has key, drop { x: T } - struct S794 has key, drop { x: T } - struct S795 has key, drop { x: T } - struct S796 has key, drop { x: T } - struct S797 has key, drop { x: T } - struct S798 has key, drop { x: T } - struct S799 has key, drop { x: T } - struct S800 has key, drop { x: T } - struct S801 has key, drop { x: T } - struct S802 has key, drop { x: T } - struct S803 has key, drop { x: T } - struct S804 has key, drop { x: T } - struct S805 has key, drop { x: T } - struct S806 has key, drop { x: T } - struct S807 has key, drop { x: T } - struct S808 has key, drop { x: T } - struct S809 has key, drop { x: T } - struct S810 has key, drop { x: T } - struct S811 has key, drop { x: T } - struct S812 has key, drop { x: T } - struct S813 has key, drop { x: T } - struct S814 has key, drop { x: T } - struct S815 has key, drop { x: T } - struct S816 has key, drop { x: T } - struct S817 has key, drop { x: T } - struct S818 has key, drop { x: T } - struct S819 has key, drop { x: T } - struct S820 has key, drop { x: T } - struct S821 has key, drop { x: T } - struct S822 has key, drop { x: T } - struct S823 has key, drop { x: T } - struct S824 has key, drop { x: T } - struct S825 has key, drop { x: T } - struct S826 has key, drop { x: T } - struct S827 has key, drop { x: T } - struct S828 has key, drop { x: T } - struct S829 has key, drop { x: T } - struct S830 has key, drop { x: T } - struct S831 has key, drop { x: T } - struct S832 has key, drop { x: T } - struct S833 has key, drop { x: T } - struct S834 has key, drop { x: T } - struct S835 has key, drop { x: T } - struct S836 has key, drop { x: T } - struct S837 has key, drop { x: T } - struct S838 has key, drop { x: T } - struct S839 has key, drop { x: T } - struct S840 has key, drop { x: T } - struct S841 has key, drop { x: T } - struct S842 has key, drop { x: T } - struct S843 has key, drop { x: T } - struct S844 has key, drop { x: T } - struct S845 has key, drop { x: T } - struct S846 has key, drop { x: T } - struct S847 has key, drop { x: T } - struct S848 has key, drop { x: T } - struct S849 has key, drop { x: T } - struct S850 has key, drop { x: T } - struct S851 has key, drop { x: T } - struct S852 has key, drop { x: T } - struct S853 has key, drop { x: T } - struct S854 has key, drop { x: T } - struct S855 has key, drop { x: T } - struct S856 has key, drop { x: T } - struct S857 has key, drop { x: T } - struct S858 has key, drop { x: T } - struct S859 has key, drop { x: T } - struct S860 has key, drop { x: T } - struct S861 has key, drop { x: T } - struct S862 has key, drop { x: T } - struct S863 has key, drop { x: T } - struct S864 has key, drop { x: T } - struct S865 has key, drop { x: T } - struct S866 has key, drop { x: T } - struct S867 has key, drop { x: T } - struct S868 has key, drop { x: T } - struct S869 has key, drop { x: T } - struct S870 has key, drop { x: T } - struct S871 has key, drop { x: T } - struct S872 has key, drop { x: T } - struct S873 has key, drop { x: T } - struct S874 has key, drop { x: T } - struct S875 has key, drop { x: T } - struct S876 has key, drop { x: T } - struct S877 has key, drop { x: T } - struct S878 has key, drop { x: T } - struct S879 has key, drop { x: T } - struct S880 has key, drop { x: T } - struct S881 has key, drop { x: T } - struct S882 has key, drop { x: T } - struct S883 has key, drop { x: T } - struct S884 has key, drop { x: T } - struct S885 has key, drop { x: T } - struct S886 has key, drop { x: T } - struct S887 has key, drop { x: T } - struct S888 has key, drop { x: T } - struct S889 has key, drop { x: T } - struct S890 has key, drop { x: T } - struct S891 has key, drop { x: T } - struct S892 has key, drop { x: T } - struct S893 has key, drop { x: T } - struct S894 has key, drop { x: T } - struct S895 has key, drop { x: T } - struct S896 has key, drop { x: T } - struct S897 has key, drop { x: T } - struct S898 has key, drop { x: T } - struct S899 has key, drop { x: T } - struct S900 has key, drop { x: T } - struct S901 has key, drop { x: T } - struct S902 has key, drop { x: T } - struct S903 has key, drop { x: T } - struct S904 has key, drop { x: T } - struct S905 has key, drop { x: T } - struct S906 has key, drop { x: T } - struct S907 has key, drop { x: T } - struct S908 has key, drop { x: T } - struct S909 has key, drop { x: T } - struct S910 has key, drop { x: T } - struct S911 has key, drop { x: T } - struct S912 has key, drop { x: T } - struct S913 has key, drop { x: T } - struct S914 has key, drop { x: T } - struct S915 has key, drop { x: T } - struct S916 has key, drop { x: T } - struct S917 has key, drop { x: T } - struct S918 has key, drop { x: T } - struct S919 has key, drop { x: T } - struct S920 has key, drop { x: T } - struct S921 has key, drop { x: T } - struct S922 has key, drop { x: T } - struct S923 has key, drop { x: T } - struct S924 has key, drop { x: T } - struct S925 has key, drop { x: T } - struct S926 has key, drop { x: T } - struct S927 has key, drop { x: T } - struct S928 has key, drop { x: T } - struct S929 has key, drop { x: T } - struct S930 has key, drop { x: T } - struct S931 has key, drop { x: T } - struct S932 has key, drop { x: T } - struct S933 has key, drop { x: T } - struct S934 has key, drop { x: T } - struct S935 has key, drop { x: T } - struct S936 has key, drop { x: T } - struct S937 has key, drop { x: T } - struct S938 has key, drop { x: T } - struct S939 has key, drop { x: T } - struct S940 has key, drop { x: T } - struct S941 has key, drop { x: T } - struct S942 has key, drop { x: T } - struct S943 has key, drop { x: T } - struct S944 has key, drop { x: T } - struct S945 has key, drop { x: T } - struct S946 has key, drop { x: T } - struct S947 has key, drop { x: T } - struct S948 has key, drop { x: T } - struct S949 has key, drop { x: T } - struct S950 has key, drop { x: T } - struct S951 has key, drop { x: T } - struct S952 has key, drop { x: T } - struct S953 has key, drop { x: T } - struct S954 has key, drop { x: T } - struct S955 has key, drop { x: T } - struct S956 has key, drop { x: T } - struct S957 has key, drop { x: T } - struct S958 has key, drop { x: T } - struct S959 has key, drop { x: T } - struct S960 has key, drop { x: T } - struct S961 has key, drop { x: T } - struct S962 has key, drop { x: T } - struct S963 has key, drop { x: T } - struct S964 has key, drop { x: T } - struct S965 has key, drop { x: T } - struct S966 has key, drop { x: T } - struct S967 has key, drop { x: T } - struct S968 has key, drop { x: T } - struct S969 has key, drop { x: T } - struct S970 has key, drop { x: T } - struct S971 has key, drop { x: T } - struct S972 has key, drop { x: T } - struct S973 has key, drop { x: T } - struct S974 has key, drop { x: T } - struct S975 has key, drop { x: T } - struct S976 has key, drop { x: T } - struct S977 has key, drop { x: T } - struct S978 has key, drop { x: T } - struct S979 has key, drop { x: T } - struct S980 has key, drop { x: T } - struct S981 has key, drop { x: T } - struct S982 has key, drop { x: T } - struct S983 has key, drop { x: T } - struct S984 has key, drop { x: T } - struct S985 has key, drop { x: T } - struct S986 has key, drop { x: T } - struct S987 has key, drop { x: T } - struct S988 has key, drop { x: T } - struct S989 has key, drop { x: T } - struct S990 has key, drop { x: T } - struct S991 has key, drop { x: T } - struct S992 has key, drop { x: T } - struct S993 has key, drop { x: T } - struct S994 has key, drop { x: T } - struct S995 has key, drop { x: T } - struct S996 has key, drop { x: T } - struct S997 has key, drop { x: T } - struct S998 has key, drop { x: T } - struct S999 has key, drop { x: T } - struct S1000 has key, drop { x: T } - struct S1001 has key, drop { x: T } - struct S1002 has key, drop { x: T } - struct S1003 has key, drop { x: T } - struct S1004 has key, drop { x: T } - struct S1005 has key, drop { x: T } - struct S1006 has key, drop { x: T } - struct S1007 has key, drop { x: T } - struct S1008 has key, drop { x: T } - struct S1009 has key, drop { x: T } - struct S1010 has key, drop { x: T } - struct S1011 has key, drop { x: T } - struct S1012 has key, drop { x: T } - struct S1013 has key, drop { x: T } - struct S1014 has key, drop { x: T } - struct S1015 has key, drop { x: T } - struct S1016 has key, drop { x: T } - struct S1017 has key, drop { x: T } - struct S1018 has key, drop { x: T } - struct S1019 has key, drop { x: T } - struct S1020 has key, drop { x: T } - struct S1021 has key, drop { x: T } - struct S1022 has key, drop { x: T } - struct S1023 has key, drop { x: T } - struct S1024 has key, drop { x: T } - struct S1025 has key, drop { x: T } - struct S1026 has key, drop { x: T } - struct S1027 has key, drop { x: T } - struct S1028 has key, drop { x: T } - struct S1029 has key, drop { x: T } - struct S1030 has key, drop { x: T } - struct S1031 has key, drop { x: T } - struct S1032 has key, drop { x: T } - struct S1033 has key, drop { x: T } - struct S1034 has key, drop { x: T } - struct S1035 has key, drop { x: T } - struct S1036 has key, drop { x: T } - struct S1037 has key, drop { x: T } - struct S1038 has key, drop { x: T } - struct S1039 has key, drop { x: T } - struct S1040 has key, drop { x: T } - struct S1041 has key, drop { x: T } - struct S1042 has key, drop { x: T } - struct S1043 has key, drop { x: T } - struct S1044 has key, drop { x: T } - struct S1045 has key, drop { x: T } - struct S1046 has key, drop { x: T } - struct S1047 has key, drop { x: T } - struct S1048 has key, drop { x: T } - struct S1049 has key, drop { x: T } - struct S1050 has key, drop { x: T } - struct S1051 has key, drop { x: T } - struct S1052 has key, drop { x: T } - struct S1053 has key, drop { x: T } - struct S1054 has key, drop { x: T } - struct S1055 has key, drop { x: T } - struct S1056 has key, drop { x: T } - struct S1057 has key, drop { x: T } - struct S1058 has key, drop { x: T } - struct S1059 has key, drop { x: T } - struct S1060 has key, drop { x: T } - struct S1061 has key, drop { x: T } - struct S1062 has key, drop { x: T } - struct S1063 has key, drop { x: T } - struct S1064 has key, drop { x: T } - struct S1065 has key, drop { x: T } - struct S1066 has key, drop { x: T } - struct S1067 has key, drop { x: T } - struct S1068 has key, drop { x: T } - struct S1069 has key, drop { x: T } - struct S1070 has key, drop { x: T } - struct S1071 has key, drop { x: T } - struct S1072 has key, drop { x: T } - struct S1073 has key, drop { x: T } - struct S1074 has key, drop { x: T } - struct S1075 has key, drop { x: T } - struct S1076 has key, drop { x: T } - struct S1077 has key, drop { x: T } - struct S1078 has key, drop { x: T } - struct S1079 has key, drop { x: T } - struct S1080 has key, drop { x: T } - struct S1081 has key, drop { x: T } - struct S1082 has key, drop { x: T } - struct S1083 has key, drop { x: T } - struct S1084 has key, drop { x: T } - struct S1085 has key, drop { x: T } - struct S1086 has key, drop { x: T } - struct S1087 has key, drop { x: T } - struct S1088 has key, drop { x: T } - struct S1089 has key, drop { x: T } - struct S1090 has key, drop { x: T } - struct S1091 has key, drop { x: T } - struct S1092 has key, drop { x: T } - struct S1093 has key, drop { x: T } - struct S1094 has key, drop { x: T } - struct S1095 has key, drop { x: T } - struct S1096 has key, drop { x: T } - struct S1097 has key, drop { x: T } - struct S1098 has key, drop { x: T } - struct S1099 has key, drop { x: T } - struct S1100 has key, drop { x: T } - struct S1101 has key, drop { x: T } - struct S1102 has key, drop { x: T } - struct S1103 has key, drop { x: T } - struct S1104 has key, drop { x: T } - struct S1105 has key, drop { x: T } - struct S1106 has key, drop { x: T } - struct S1107 has key, drop { x: T } - struct S1108 has key, drop { x: T } - struct S1109 has key, drop { x: T } - struct S1110 has key, drop { x: T } - struct S1111 has key, drop { x: T } - struct S1112 has key, drop { x: T } - struct S1113 has key, drop { x: T } - struct S1114 has key, drop { x: T } - struct S1115 has key, drop { x: T } - struct S1116 has key, drop { x: T } - struct S1117 has key, drop { x: T } - struct S1118 has key, drop { x: T } - struct S1119 has key, drop { x: T } - struct S1120 has key, drop { x: T } - struct S1121 has key, drop { x: T } - struct S1122 has key, drop { x: T } - struct S1123 has key, drop { x: T } - struct S1124 has key, drop { x: T } - struct S1125 has key, drop { x: T } - struct S1126 has key, drop { x: T } - struct S1127 has key, drop { x: T } - struct S1128 has key, drop { x: T } - struct S1129 has key, drop { x: T } - struct S1130 has key, drop { x: T } - struct S1131 has key, drop { x: T } - struct S1132 has key, drop { x: T } - struct S1133 has key, drop { x: T } - struct S1134 has key, drop { x: T } - struct S1135 has key, drop { x: T } - struct S1136 has key, drop { x: T } - struct S1137 has key, drop { x: T } - struct S1138 has key, drop { x: T } - struct S1139 has key, drop { x: T } - struct S1140 has key, drop { x: T } - struct S1141 has key, drop { x: T } - struct S1142 has key, drop { x: T } - struct S1143 has key, drop { x: T } - struct S1144 has key, drop { x: T } - struct S1145 has key, drop { x: T } - struct S1146 has key, drop { x: T } - struct S1147 has key, drop { x: T } - struct S1148 has key, drop { x: T } - struct S1149 has key, drop { x: T } - struct S1150 has key, drop { x: T } - struct S1151 has key, drop { x: T } - struct S1152 has key, drop { x: T } - struct S1153 has key, drop { x: T } - struct S1154 has key, drop { x: T } - struct S1155 has key, drop { x: T } - struct S1156 has key, drop { x: T } - struct S1157 has key, drop { x: T } - struct S1158 has key, drop { x: T } - struct S1159 has key, drop { x: T } - struct S1160 has key, drop { x: T } - struct S1161 has key, drop { x: T } - struct S1162 has key, drop { x: T } - struct S1163 has key, drop { x: T } - struct S1164 has key, drop { x: T } - struct S1165 has key, drop { x: T } - struct S1166 has key, drop { x: T } - struct S1167 has key, drop { x: T } - struct S1168 has key, drop { x: T } - struct S1169 has key, drop { x: T } - struct S1170 has key, drop { x: T } - struct S1171 has key, drop { x: T } - struct S1172 has key, drop { x: T } - struct S1173 has key, drop { x: T } - struct S1174 has key, drop { x: T } - struct S1175 has key, drop { x: T } - struct S1176 has key, drop { x: T } - struct S1177 has key, drop { x: T } - struct S1178 has key, drop { x: T } - struct S1179 has key, drop { x: T } - struct S1180 has key, drop { x: T } - struct S1181 has key, drop { x: T } - struct S1182 has key, drop { x: T } - struct S1183 has key, drop { x: T } - struct S1184 has key, drop { x: T } - struct S1185 has key, drop { x: T } - struct S1186 has key, drop { x: T } - struct S1187 has key, drop { x: T } - struct S1188 has key, drop { x: T } - struct S1189 has key, drop { x: T } - struct S1190 has key, drop { x: T } - struct S1191 has key, drop { x: T } - struct S1192 has key, drop { x: T } - struct S1193 has key, drop { x: T } - struct S1194 has key, drop { x: T } - struct S1195 has key, drop { x: T } - struct S1196 has key, drop { x: T } - struct S1197 has key, drop { x: T } - struct S1198 has key, drop { x: T } - struct S1199 has key, drop { x: T } - struct S1200 has key, drop { x: T } - struct S1201 has key, drop { x: T } - struct S1202 has key, drop { x: T } - struct S1203 has key, drop { x: T } - struct S1204 has key, drop { x: T } - struct S1205 has key, drop { x: T } - struct S1206 has key, drop { x: T } - struct S1207 has key, drop { x: T } - struct S1208 has key, drop { x: T } - struct S1209 has key, drop { x: T } - struct S1210 has key, drop { x: T } - struct S1211 has key, drop { x: T } - struct S1212 has key, drop { x: T } - struct S1213 has key, drop { x: T } - struct S1214 has key, drop { x: T } - struct S1215 has key, drop { x: T } - struct S1216 has key, drop { x: T } - struct S1217 has key, drop { x: T } - struct S1218 has key, drop { x: T } - struct S1219 has key, drop { x: T } - struct S1220 has key, drop { x: T } - struct S1221 has key, drop { x: T } - struct S1222 has key, drop { x: T } - struct S1223 has key, drop { x: T } - struct S1224 has key, drop { x: T } - struct S1225 has key, drop { x: T } - struct S1226 has key, drop { x: T } - struct S1227 has key, drop { x: T } - struct S1228 has key, drop { x: T } - struct S1229 has key, drop { x: T } - struct S1230 has key, drop { x: T } - struct S1231 has key, drop { x: T } - struct S1232 has key, drop { x: T } - struct S1233 has key, drop { x: T } - struct S1234 has key, drop { x: T } - struct S1235 has key, drop { x: T } - struct S1236 has key, drop { x: T } - struct S1237 has key, drop { x: T } - struct S1238 has key, drop { x: T } - struct S1239 has key, drop { x: T } - struct S1240 has key, drop { x: T } - struct S1241 has key, drop { x: T } - struct S1242 has key, drop { x: T } - struct S1243 has key, drop { x: T } - struct S1244 has key, drop { x: T } - struct S1245 has key, drop { x: T } - struct S1246 has key, drop { x: T } - struct S1247 has key, drop { x: T } - struct S1248 has key, drop { x: T } - struct S1249 has key, drop { x: T } - struct S1250 has key, drop { x: T } - struct S1251 has key, drop { x: T } - struct S1252 has key, drop { x: T } - struct S1253 has key, drop { x: T } - struct S1254 has key, drop { x: T } - struct S1255 has key, drop { x: T } - struct S1256 has key, drop { x: T } - struct S1257 has key, drop { x: T } - struct S1258 has key, drop { x: T } - struct S1259 has key, drop { x: T } - struct S1260 has key, drop { x: T } - struct S1261 has key, drop { x: T } - struct S1262 has key, drop { x: T } - struct S1263 has key, drop { x: T } - struct S1264 has key, drop { x: T } - struct S1265 has key, drop { x: T } - struct S1266 has key, drop { x: T } - struct S1267 has key, drop { x: T } - struct S1268 has key, drop { x: T } - struct S1269 has key, drop { x: T } - struct S1270 has key, drop { x: T } - struct S1271 has key, drop { x: T } - struct S1272 has key, drop { x: T } - struct S1273 has key, drop { x: T } - struct S1274 has key, drop { x: T } - struct S1275 has key, drop { x: T } - struct S1276 has key, drop { x: T } - struct S1277 has key, drop { x: T } - struct S1278 has key, drop { x: T } - struct S1279 has key, drop { x: T } - struct S1280 has key, drop { x: T } - struct S1281 has key, drop { x: T } - struct S1282 has key, drop { x: T } - struct S1283 has key, drop { x: T } - struct S1284 has key, drop { x: T } - struct S1285 has key, drop { x: T } - struct S1286 has key, drop { x: T } - struct S1287 has key, drop { x: T } - struct S1288 has key, drop { x: T } - struct S1289 has key, drop { x: T } - struct S1290 has key, drop { x: T } - struct S1291 has key, drop { x: T } - struct S1292 has key, drop { x: T } - struct S1293 has key, drop { x: T } - struct S1294 has key, drop { x: T } - struct S1295 has key, drop { x: T } - struct S1296 has key, drop { x: T } - struct S1297 has key, drop { x: T } - struct S1298 has key, drop { x: T } - struct S1299 has key, drop { x: T } - struct S1300 has key, drop { x: T } - struct S1301 has key, drop { x: T } - struct S1302 has key, drop { x: T } - struct S1303 has key, drop { x: T } - struct S1304 has key, drop { x: T } - struct S1305 has key, drop { x: T } - struct S1306 has key, drop { x: T } - struct S1307 has key, drop { x: T } - struct S1308 has key, drop { x: T } - struct S1309 has key, drop { x: T } - struct S1310 has key, drop { x: T } - struct S1311 has key, drop { x: T } - struct S1312 has key, drop { x: T } - struct S1313 has key, drop { x: T } - struct S1314 has key, drop { x: T } - struct S1315 has key, drop { x: T } - struct S1316 has key, drop { x: T } - struct S1317 has key, drop { x: T } - struct S1318 has key, drop { x: T } - struct S1319 has key, drop { x: T } - struct S1320 has key, drop { x: T } - struct S1321 has key, drop { x: T } - struct S1322 has key, drop { x: T } - struct S1323 has key, drop { x: T } - struct S1324 has key, drop { x: T } - struct S1325 has key, drop { x: T } - struct S1326 has key, drop { x: T } - struct S1327 has key, drop { x: T } - struct S1328 has key, drop { x: T } - struct S1329 has key, drop { x: T } - struct S1330 has key, drop { x: T } - struct S1331 has key, drop { x: T } - struct S1332 has key, drop { x: T } - struct S1333 has key, drop { x: T } - struct S1334 has key, drop { x: T } - struct S1335 has key, drop { x: T } - struct S1336 has key, drop { x: T } - struct S1337 has key, drop { x: T } - struct S1338 has key, drop { x: T } - struct S1339 has key, drop { x: T } - struct S1340 has key, drop { x: T } - struct S1341 has key, drop { x: T } - struct S1342 has key, drop { x: T } - struct S1343 has key, drop { x: T } - struct S1344 has key, drop { x: T } - struct S1345 has key, drop { x: T } - struct S1346 has key, drop { x: T } - struct S1347 has key, drop { x: T } - struct S1348 has key, drop { x: T } - struct S1349 has key, drop { x: T } - struct S1350 has key, drop { x: T } - struct S1351 has key, drop { x: T } - struct S1352 has key, drop { x: T } - struct S1353 has key, drop { x: T } - struct S1354 has key, drop { x: T } - struct S1355 has key, drop { x: T } - struct S1356 has key, drop { x: T } - struct S1357 has key, drop { x: T } - struct S1358 has key, drop { x: T } - struct S1359 has key, drop { x: T } - struct S1360 has key, drop { x: T } - struct S1361 has key, drop { x: T } - struct S1362 has key, drop { x: T } - struct S1363 has key, drop { x: T } - struct S1364 has key, drop { x: T } - struct S1365 has key, drop { x: T } - struct S1366 has key, drop { x: T } - struct S1367 has key, drop { x: T } - struct S1368 has key, drop { x: T } - struct S1369 has key, drop { x: T } - struct S1370 has key, drop { x: T } - struct S1371 has key, drop { x: T } - struct S1372 has key, drop { x: T } - struct S1373 has key, drop { x: T } - struct S1374 has key, drop { x: T } - struct S1375 has key, drop { x: T } - struct S1376 has key, drop { x: T } - struct S1377 has key, drop { x: T } - struct S1378 has key, drop { x: T } - struct S1379 has key, drop { x: T } - struct S1380 has key, drop { x: T } - struct S1381 has key, drop { x: T } - struct S1382 has key, drop { x: T } - struct S1383 has key, drop { x: T } - struct S1384 has key, drop { x: T } - struct S1385 has key, drop { x: T } - struct S1386 has key, drop { x: T } - struct S1387 has key, drop { x: T } - struct S1388 has key, drop { x: T } - struct S1389 has key, drop { x: T } - struct S1390 has key, drop { x: T } - struct S1391 has key, drop { x: T } - struct S1392 has key, drop { x: T } - struct S1393 has key, drop { x: T } - struct S1394 has key, drop { x: T } - struct S1395 has key, drop { x: T } - struct S1396 has key, drop { x: T } - struct S1397 has key, drop { x: T } - struct S1398 has key, drop { x: T } - struct S1399 has key, drop { x: T } - struct S1400 has key, drop { x: T } - struct S1401 has key, drop { x: T } - struct S1402 has key, drop { x: T } - struct S1403 has key, drop { x: T } - struct S1404 has key, drop { x: T } - struct S1405 has key, drop { x: T } - struct S1406 has key, drop { x: T } - struct S1407 has key, drop { x: T } - struct S1408 has key, drop { x: T } - struct S1409 has key, drop { x: T } - struct S1410 has key, drop { x: T } - struct S1411 has key, drop { x: T } - struct S1412 has key, drop { x: T } - struct S1413 has key, drop { x: T } - struct S1414 has key, drop { x: T } - struct S1415 has key, drop { x: T } - struct S1416 has key, drop { x: T } - struct S1417 has key, drop { x: T } - struct S1418 has key, drop { x: T } - struct S1419 has key, drop { x: T } - struct S1420 has key, drop { x: T } - struct S1421 has key, drop { x: T } - struct S1422 has key, drop { x: T } - struct S1423 has key, drop { x: T } - struct S1424 has key, drop { x: T } - struct S1425 has key, drop { x: T } - struct S1426 has key, drop { x: T } - struct S1427 has key, drop { x: T } - struct S1428 has key, drop { x: T } - struct S1429 has key, drop { x: T } - struct S1430 has key, drop { x: T } - struct S1431 has key, drop { x: T } - struct S1432 has key, drop { x: T } - struct S1433 has key, drop { x: T } - struct S1434 has key, drop { x: T } - struct S1435 has key, drop { x: T } - struct S1436 has key, drop { x: T } - struct S1437 has key, drop { x: T } - struct S1438 has key, drop { x: T } - struct S1439 has key, drop { x: T } - struct S1440 has key, drop { x: T } - struct S1441 has key, drop { x: T } - struct S1442 has key, drop { x: T } - struct S1443 has key, drop { x: T } - struct S1444 has key, drop { x: T } - struct S1445 has key, drop { x: T } - struct S1446 has key, drop { x: T } - struct S1447 has key, drop { x: T } - struct S1448 has key, drop { x: T } - struct S1449 has key, drop { x: T } - struct S1450 has key, drop { x: T } - struct S1451 has key, drop { x: T } - struct S1452 has key, drop { x: T } - struct S1453 has key, drop { x: T } - struct S1454 has key, drop { x: T } - struct S1455 has key, drop { x: T } - struct S1456 has key, drop { x: T } - struct S1457 has key, drop { x: T } - struct S1458 has key, drop { x: T } - struct S1459 has key, drop { x: T } - struct S1460 has key, drop { x: T } - struct S1461 has key, drop { x: T } - struct S1462 has key, drop { x: T } - struct S1463 has key, drop { x: T } - struct S1464 has key, drop { x: T } - struct S1465 has key, drop { x: T } - struct S1466 has key, drop { x: T } - struct S1467 has key, drop { x: T } - struct S1468 has key, drop { x: T } - struct S1469 has key, drop { x: T } - struct S1470 has key, drop { x: T } - struct S1471 has key, drop { x: T } - struct S1472 has key, drop { x: T } - struct S1473 has key, drop { x: T } - struct S1474 has key, drop { x: T } - struct S1475 has key, drop { x: T } - struct S1476 has key, drop { x: T } - struct S1477 has key, drop { x: T } - struct S1478 has key, drop { x: T } - struct S1479 has key, drop { x: T } - struct S1480 has key, drop { x: T } - struct S1481 has key, drop { x: T } - struct S1482 has key, drop { x: T } - struct S1483 has key, drop { x: T } - struct S1484 has key, drop { x: T } - struct S1485 has key, drop { x: T } - struct S1486 has key, drop { x: T } - struct S1487 has key, drop { x: T } - struct S1488 has key, drop { x: T } - struct S1489 has key, drop { x: T } - struct S1490 has key, drop { x: T } - struct S1491 has key, drop { x: T } - struct S1492 has key, drop { x: T } - struct S1493 has key, drop { x: T } - struct S1494 has key, drop { x: T } - struct S1495 has key, drop { x: T } - struct S1496 has key, drop { x: T } - struct S1497 has key, drop { x: T } - struct S1498 has key, drop { x: T } - struct S1499 has key, drop { x: T } - struct S1500 has key, drop { x: T } - struct S1501 has key, drop { x: T } - struct S1502 has key, drop { x: T } - struct S1503 has key, drop { x: T } - struct S1504 has key, drop { x: T } - struct S1505 has key, drop { x: T } - struct S1506 has key, drop { x: T } - struct S1507 has key, drop { x: T } - struct S1508 has key, drop { x: T } - struct S1509 has key, drop { x: T } - struct S1510 has key, drop { x: T } - struct S1511 has key, drop { x: T } - struct S1512 has key, drop { x: T } - struct S1513 has key, drop { x: T } - struct S1514 has key, drop { x: T } - struct S1515 has key, drop { x: T } - struct S1516 has key, drop { x: T } - struct S1517 has key, drop { x: T } - struct S1518 has key, drop { x: T } - struct S1519 has key, drop { x: T } - struct S1520 has key, drop { x: T } - struct S1521 has key, drop { x: T } - struct S1522 has key, drop { x: T } - struct S1523 has key, drop { x: T } - struct S1524 has key, drop { x: T } - struct S1525 has key, drop { x: T } - struct S1526 has key, drop { x: T } - struct S1527 has key, drop { x: T } - struct S1528 has key, drop { x: T } - struct S1529 has key, drop { x: T } - struct S1530 has key, drop { x: T } - struct S1531 has key, drop { x: T } - struct S1532 has key, drop { x: T } - struct S1533 has key, drop { x: T } - struct S1534 has key, drop { x: T } - struct S1535 has key, drop { x: T } - struct S1536 has key, drop { x: T } - struct S1537 has key, drop { x: T } - struct S1538 has key, drop { x: T } - struct S1539 has key, drop { x: T } - struct S1540 has key, drop { x: T } - struct S1541 has key, drop { x: T } - struct S1542 has key, drop { x: T } - struct S1543 has key, drop { x: T } - struct S1544 has key, drop { x: T } - struct S1545 has key, drop { x: T } - struct S1546 has key, drop { x: T } - struct S1547 has key, drop { x: T } - struct S1548 has key, drop { x: T } - struct S1549 has key, drop { x: T } - struct S1550 has key, drop { x: T } - struct S1551 has key, drop { x: T } - struct S1552 has key, drop { x: T } - struct S1553 has key, drop { x: T } - struct S1554 has key, drop { x: T } - struct S1555 has key, drop { x: T } - struct S1556 has key, drop { x: T } - struct S1557 has key, drop { x: T } - struct S1558 has key, drop { x: T } - struct S1559 has key, drop { x: T } - struct S1560 has key, drop { x: T } - struct S1561 has key, drop { x: T } - struct S1562 has key, drop { x: T } - struct S1563 has key, drop { x: T } - struct S1564 has key, drop { x: T } - struct S1565 has key, drop { x: T } - struct S1566 has key, drop { x: T } - struct S1567 has key, drop { x: T } - struct S1568 has key, drop { x: T } - struct S1569 has key, drop { x: T } - struct S1570 has key, drop { x: T } - struct S1571 has key, drop { x: T } - struct S1572 has key, drop { x: T } - struct S1573 has key, drop { x: T } - struct S1574 has key, drop { x: T } - struct S1575 has key, drop { x: T } - struct S1576 has key, drop { x: T } - struct S1577 has key, drop { x: T } - struct S1578 has key, drop { x: T } - struct S1579 has key, drop { x: T } - struct S1580 has key, drop { x: T } - struct S1581 has key, drop { x: T } - struct S1582 has key, drop { x: T } - struct S1583 has key, drop { x: T } - struct S1584 has key, drop { x: T } - struct S1585 has key, drop { x: T } - struct S1586 has key, drop { x: T } - struct S1587 has key, drop { x: T } - struct S1588 has key, drop { x: T } - struct S1589 has key, drop { x: T } - struct S1590 has key, drop { x: T } - struct S1591 has key, drop { x: T } - struct S1592 has key, drop { x: T } - struct S1593 has key, drop { x: T } - struct S1594 has key, drop { x: T } - struct S1595 has key, drop { x: T } - struct S1596 has key, drop { x: T } - struct S1597 has key, drop { x: T } - struct S1598 has key, drop { x: T } - struct S1599 has key, drop { x: T } - struct S1600 has key, drop { x: T } - - public entry calibrate_move_to_generic_x100(s: signer) { - label b0: - move_to>(&s, S1{ x: 0 }); - move_to>(&s, S2{ x: 0 }); - move_to>(&s, S3{ x: 0 }); - move_to>(&s, S4{ x: 0 }); - move_to>(&s, S5{ x: 0 }); - move_to>(&s, S6{ x: 0 }); - move_to>(&s, S7{ x: 0 }); - move_to>(&s, S8{ x: 0 }); - move_to>(&s, S9{ x: 0 }); - move_to>(&s, S10{ x: 0 }); - move_to>(&s, S11{ x: 0 }); - move_to>(&s, S12{ x: 0 }); - move_to>(&s, S13{ x: 0 }); - move_to>(&s, S14{ x: 0 }); - move_to>(&s, S15{ x: 0 }); - move_to>(&s, S16{ x: 0 }); - move_to>(&s, S17{ x: 0 }); - move_to>(&s, S18{ x: 0 }); - move_to>(&s, S19{ x: 0 }); - move_to>(&s, S20{ x: 0 }); - move_to>(&s, S21{ x: 0 }); - move_to>(&s, S22{ x: 0 }); - move_to>(&s, S23{ x: 0 }); - move_to>(&s, S24{ x: 0 }); - move_to>(&s, S25{ x: 0 }); - move_to>(&s, S26{ x: 0 }); - move_to>(&s, S27{ x: 0 }); - move_to>(&s, S28{ x: 0 }); - move_to>(&s, S29{ x: 0 }); - move_to>(&s, S30{ x: 0 }); - move_to>(&s, S31{ x: 0 }); - move_to>(&s, S32{ x: 0 }); - move_to>(&s, S33{ x: 0 }); - move_to>(&s, S34{ x: 0 }); - move_to>(&s, S35{ x: 0 }); - move_to>(&s, S36{ x: 0 }); - move_to>(&s, S37{ x: 0 }); - move_to>(&s, S38{ x: 0 }); - move_to>(&s, S39{ x: 0 }); - move_to>(&s, S40{ x: 0 }); - move_to>(&s, S41{ x: 0 }); - move_to>(&s, S42{ x: 0 }); - move_to>(&s, S43{ x: 0 }); - move_to>(&s, S44{ x: 0 }); - move_to>(&s, S45{ x: 0 }); - move_to>(&s, S46{ x: 0 }); - move_to>(&s, S47{ x: 0 }); - move_to>(&s, S48{ x: 0 }); - move_to>(&s, S49{ x: 0 }); - move_to>(&s, S50{ x: 0 }); - move_to>(&s, S51{ x: 0 }); - move_to>(&s, S52{ x: 0 }); - move_to>(&s, S53{ x: 0 }); - move_to>(&s, S54{ x: 0 }); - move_to>(&s, S55{ x: 0 }); - move_to>(&s, S56{ x: 0 }); - move_to>(&s, S57{ x: 0 }); - move_to>(&s, S58{ x: 0 }); - move_to>(&s, S59{ x: 0 }); - move_to>(&s, S60{ x: 0 }); - move_to>(&s, S61{ x: 0 }); - move_to>(&s, S62{ x: 0 }); - move_to>(&s, S63{ x: 0 }); - move_to>(&s, S64{ x: 0 }); - move_to>(&s, S65{ x: 0 }); - move_to>(&s, S66{ x: 0 }); - move_to>(&s, S67{ x: 0 }); - move_to>(&s, S68{ x: 0 }); - move_to>(&s, S69{ x: 0 }); - move_to>(&s, S70{ x: 0 }); - move_to>(&s, S71{ x: 0 }); - move_to>(&s, S72{ x: 0 }); - move_to>(&s, S73{ x: 0 }); - move_to>(&s, S74{ x: 0 }); - move_to>(&s, S75{ x: 0 }); - move_to>(&s, S76{ x: 0 }); - move_to>(&s, S77{ x: 0 }); - move_to>(&s, S78{ x: 0 }); - move_to>(&s, S79{ x: 0 }); - move_to>(&s, S80{ x: 0 }); - move_to>(&s, S81{ x: 0 }); - move_to>(&s, S82{ x: 0 }); - move_to>(&s, S83{ x: 0 }); - move_to>(&s, S84{ x: 0 }); - move_to>(&s, S85{ x: 0 }); - move_to>(&s, S86{ x: 0 }); - move_to>(&s, S87{ x: 0 }); - move_to>(&s, S88{ x: 0 }); - move_to>(&s, S89{ x: 0 }); - move_to>(&s, S90{ x: 0 }); - move_to>(&s, S91{ x: 0 }); - move_to>(&s, S92{ x: 0 }); - move_to>(&s, S93{ x: 0 }); - move_to>(&s, S94{ x: 0 }); - move_to>(&s, S95{ x: 0 }); - move_to>(&s, S96{ x: 0 }); - move_to>(&s, S97{ x: 0 }); - move_to>(&s, S98{ x: 0 }); - move_to>(&s, S99{ x: 0 }); - move_to>(&s, S100{ x: 0 }); - return; - } - - public entry calibrate_move_to_generic_x500(s: signer) { - label b0: - move_to>(&s, S101{ x: 0 }); - move_to>(&s, S102{ x: 0 }); - move_to>(&s, S103{ x: 0 }); - move_to>(&s, S104{ x: 0 }); - move_to>(&s, S105{ x: 0 }); - move_to>(&s, S106{ x: 0 }); - move_to>(&s, S107{ x: 0 }); - move_to>(&s, S108{ x: 0 }); - move_to>(&s, S109{ x: 0 }); - move_to>(&s, S110{ x: 0 }); - move_to>(&s, S111{ x: 0 }); - move_to>(&s, S112{ x: 0 }); - move_to>(&s, S113{ x: 0 }); - move_to>(&s, S114{ x: 0 }); - move_to>(&s, S115{ x: 0 }); - move_to>(&s, S116{ x: 0 }); - move_to>(&s, S117{ x: 0 }); - move_to>(&s, S118{ x: 0 }); - move_to>(&s, S119{ x: 0 }); - move_to>(&s, S120{ x: 0 }); - move_to>(&s, S121{ x: 0 }); - move_to>(&s, S122{ x: 0 }); - move_to>(&s, S123{ x: 0 }); - move_to>(&s, S124{ x: 0 }); - move_to>(&s, S125{ x: 0 }); - move_to>(&s, S126{ x: 0 }); - move_to>(&s, S127{ x: 0 }); - move_to>(&s, S128{ x: 0 }); - move_to>(&s, S129{ x: 0 }); - move_to>(&s, S130{ x: 0 }); - move_to>(&s, S131{ x: 0 }); - move_to>(&s, S132{ x: 0 }); - move_to>(&s, S133{ x: 0 }); - move_to>(&s, S134{ x: 0 }); - move_to>(&s, S135{ x: 0 }); - move_to>(&s, S136{ x: 0 }); - move_to>(&s, S137{ x: 0 }); - move_to>(&s, S138{ x: 0 }); - move_to>(&s, S139{ x: 0 }); - move_to>(&s, S140{ x: 0 }); - move_to>(&s, S141{ x: 0 }); - move_to>(&s, S142{ x: 0 }); - move_to>(&s, S143{ x: 0 }); - move_to>(&s, S144{ x: 0 }); - move_to>(&s, S145{ x: 0 }); - move_to>(&s, S146{ x: 0 }); - move_to>(&s, S147{ x: 0 }); - move_to>(&s, S148{ x: 0 }); - move_to>(&s, S149{ x: 0 }); - move_to>(&s, S150{ x: 0 }); - move_to>(&s, S151{ x: 0 }); - move_to>(&s, S152{ x: 0 }); - move_to>(&s, S153{ x: 0 }); - move_to>(&s, S154{ x: 0 }); - move_to>(&s, S155{ x: 0 }); - move_to>(&s, S156{ x: 0 }); - move_to>(&s, S157{ x: 0 }); - move_to>(&s, S158{ x: 0 }); - move_to>(&s, S159{ x: 0 }); - move_to>(&s, S160{ x: 0 }); - move_to>(&s, S161{ x: 0 }); - move_to>(&s, S162{ x: 0 }); - move_to>(&s, S163{ x: 0 }); - move_to>(&s, S164{ x: 0 }); - move_to>(&s, S165{ x: 0 }); - move_to>(&s, S166{ x: 0 }); - move_to>(&s, S167{ x: 0 }); - move_to>(&s, S168{ x: 0 }); - move_to>(&s, S169{ x: 0 }); - move_to>(&s, S170{ x: 0 }); - move_to>(&s, S171{ x: 0 }); - move_to>(&s, S172{ x: 0 }); - move_to>(&s, S173{ x: 0 }); - move_to>(&s, S174{ x: 0 }); - move_to>(&s, S175{ x: 0 }); - move_to>(&s, S176{ x: 0 }); - move_to>(&s, S177{ x: 0 }); - move_to>(&s, S178{ x: 0 }); - move_to>(&s, S179{ x: 0 }); - move_to>(&s, S180{ x: 0 }); - move_to>(&s, S181{ x: 0 }); - move_to>(&s, S182{ x: 0 }); - move_to>(&s, S183{ x: 0 }); - move_to>(&s, S184{ x: 0 }); - move_to>(&s, S185{ x: 0 }); - move_to>(&s, S186{ x: 0 }); - move_to>(&s, S187{ x: 0 }); - move_to>(&s, S188{ x: 0 }); - move_to>(&s, S189{ x: 0 }); - move_to>(&s, S190{ x: 0 }); - move_to>(&s, S191{ x: 0 }); - move_to>(&s, S192{ x: 0 }); - move_to>(&s, S193{ x: 0 }); - move_to>(&s, S194{ x: 0 }); - move_to>(&s, S195{ x: 0 }); - move_to>(&s, S196{ x: 0 }); - move_to>(&s, S197{ x: 0 }); - move_to>(&s, S198{ x: 0 }); - move_to>(&s, S199{ x: 0 }); - move_to>(&s, S200{ x: 0 }); - move_to>(&s, S201{ x: 0 }); - move_to>(&s, S202{ x: 0 }); - move_to>(&s, S203{ x: 0 }); - move_to>(&s, S204{ x: 0 }); - move_to>(&s, S205{ x: 0 }); - move_to>(&s, S206{ x: 0 }); - move_to>(&s, S207{ x: 0 }); - move_to>(&s, S208{ x: 0 }); - move_to>(&s, S209{ x: 0 }); - move_to>(&s, S210{ x: 0 }); - move_to>(&s, S211{ x: 0 }); - move_to>(&s, S212{ x: 0 }); - move_to>(&s, S213{ x: 0 }); - move_to>(&s, S214{ x: 0 }); - move_to>(&s, S215{ x: 0 }); - move_to>(&s, S216{ x: 0 }); - move_to>(&s, S217{ x: 0 }); - move_to>(&s, S218{ x: 0 }); - move_to>(&s, S219{ x: 0 }); - move_to>(&s, S220{ x: 0 }); - move_to>(&s, S221{ x: 0 }); - move_to>(&s, S222{ x: 0 }); - move_to>(&s, S223{ x: 0 }); - move_to>(&s, S224{ x: 0 }); - move_to>(&s, S225{ x: 0 }); - move_to>(&s, S226{ x: 0 }); - move_to>(&s, S227{ x: 0 }); - move_to>(&s, S228{ x: 0 }); - move_to>(&s, S229{ x: 0 }); - move_to>(&s, S230{ x: 0 }); - move_to>(&s, S231{ x: 0 }); - move_to>(&s, S232{ x: 0 }); - move_to>(&s, S233{ x: 0 }); - move_to>(&s, S234{ x: 0 }); - move_to>(&s, S235{ x: 0 }); - move_to>(&s, S236{ x: 0 }); - move_to>(&s, S237{ x: 0 }); - move_to>(&s, S238{ x: 0 }); - move_to>(&s, S239{ x: 0 }); - move_to>(&s, S240{ x: 0 }); - move_to>(&s, S241{ x: 0 }); - move_to>(&s, S242{ x: 0 }); - move_to>(&s, S243{ x: 0 }); - move_to>(&s, S244{ x: 0 }); - move_to>(&s, S245{ x: 0 }); - move_to>(&s, S246{ x: 0 }); - move_to>(&s, S247{ x: 0 }); - move_to>(&s, S248{ x: 0 }); - move_to>(&s, S249{ x: 0 }); - move_to>(&s, S250{ x: 0 }); - move_to>(&s, S251{ x: 0 }); - move_to>(&s, S252{ x: 0 }); - move_to>(&s, S253{ x: 0 }); - move_to>(&s, S254{ x: 0 }); - move_to>(&s, S255{ x: 0 }); - move_to>(&s, S256{ x: 0 }); - move_to>(&s, S257{ x: 0 }); - move_to>(&s, S258{ x: 0 }); - move_to>(&s, S259{ x: 0 }); - move_to>(&s, S260{ x: 0 }); - move_to>(&s, S261{ x: 0 }); - move_to>(&s, S262{ x: 0 }); - move_to>(&s, S263{ x: 0 }); - move_to>(&s, S264{ x: 0 }); - move_to>(&s, S265{ x: 0 }); - move_to>(&s, S266{ x: 0 }); - move_to>(&s, S267{ x: 0 }); - move_to>(&s, S268{ x: 0 }); - move_to>(&s, S269{ x: 0 }); - move_to>(&s, S270{ x: 0 }); - move_to>(&s, S271{ x: 0 }); - move_to>(&s, S272{ x: 0 }); - move_to>(&s, S273{ x: 0 }); - move_to>(&s, S274{ x: 0 }); - move_to>(&s, S275{ x: 0 }); - move_to>(&s, S276{ x: 0 }); - move_to>(&s, S277{ x: 0 }); - move_to>(&s, S278{ x: 0 }); - move_to>(&s, S279{ x: 0 }); - move_to>(&s, S280{ x: 0 }); - move_to>(&s, S281{ x: 0 }); - move_to>(&s, S282{ x: 0 }); - move_to>(&s, S283{ x: 0 }); - move_to>(&s, S284{ x: 0 }); - move_to>(&s, S285{ x: 0 }); - move_to>(&s, S286{ x: 0 }); - move_to>(&s, S287{ x: 0 }); - move_to>(&s, S288{ x: 0 }); - move_to>(&s, S289{ x: 0 }); - move_to>(&s, S290{ x: 0 }); - move_to>(&s, S291{ x: 0 }); - move_to>(&s, S292{ x: 0 }); - move_to>(&s, S293{ x: 0 }); - move_to>(&s, S294{ x: 0 }); - move_to>(&s, S295{ x: 0 }); - move_to>(&s, S296{ x: 0 }); - move_to>(&s, S297{ x: 0 }); - move_to>(&s, S298{ x: 0 }); - move_to>(&s, S299{ x: 0 }); - move_to>(&s, S300{ x: 0 }); - move_to>(&s, S301{ x: 0 }); - move_to>(&s, S302{ x: 0 }); - move_to>(&s, S303{ x: 0 }); - move_to>(&s, S304{ x: 0 }); - move_to>(&s, S305{ x: 0 }); - move_to>(&s, S306{ x: 0 }); - move_to>(&s, S307{ x: 0 }); - move_to>(&s, S308{ x: 0 }); - move_to>(&s, S309{ x: 0 }); - move_to>(&s, S310{ x: 0 }); - move_to>(&s, S311{ x: 0 }); - move_to>(&s, S312{ x: 0 }); - move_to>(&s, S313{ x: 0 }); - move_to>(&s, S314{ x: 0 }); - move_to>(&s, S315{ x: 0 }); - move_to>(&s, S316{ x: 0 }); - move_to>(&s, S317{ x: 0 }); - move_to>(&s, S318{ x: 0 }); - move_to>(&s, S319{ x: 0 }); - move_to>(&s, S320{ x: 0 }); - move_to>(&s, S321{ x: 0 }); - move_to>(&s, S322{ x: 0 }); - move_to>(&s, S323{ x: 0 }); - move_to>(&s, S324{ x: 0 }); - move_to>(&s, S325{ x: 0 }); - move_to>(&s, S326{ x: 0 }); - move_to>(&s, S327{ x: 0 }); - move_to>(&s, S328{ x: 0 }); - move_to>(&s, S329{ x: 0 }); - move_to>(&s, S330{ x: 0 }); - move_to>(&s, S331{ x: 0 }); - move_to>(&s, S332{ x: 0 }); - move_to>(&s, S333{ x: 0 }); - move_to>(&s, S334{ x: 0 }); - move_to>(&s, S335{ x: 0 }); - move_to>(&s, S336{ x: 0 }); - move_to>(&s, S337{ x: 0 }); - move_to>(&s, S338{ x: 0 }); - move_to>(&s, S339{ x: 0 }); - move_to>(&s, S340{ x: 0 }); - move_to>(&s, S341{ x: 0 }); - move_to>(&s, S342{ x: 0 }); - move_to>(&s, S343{ x: 0 }); - move_to>(&s, S344{ x: 0 }); - move_to>(&s, S345{ x: 0 }); - move_to>(&s, S346{ x: 0 }); - move_to>(&s, S347{ x: 0 }); - move_to>(&s, S348{ x: 0 }); - move_to>(&s, S349{ x: 0 }); - move_to>(&s, S350{ x: 0 }); - move_to>(&s, S351{ x: 0 }); - move_to>(&s, S352{ x: 0 }); - move_to>(&s, S353{ x: 0 }); - move_to>(&s, S354{ x: 0 }); - move_to>(&s, S355{ x: 0 }); - move_to>(&s, S356{ x: 0 }); - move_to>(&s, S357{ x: 0 }); - move_to>(&s, S358{ x: 0 }); - move_to>(&s, S359{ x: 0 }); - move_to>(&s, S360{ x: 0 }); - move_to>(&s, S361{ x: 0 }); - move_to>(&s, S362{ x: 0 }); - move_to>(&s, S363{ x: 0 }); - move_to>(&s, S364{ x: 0 }); - move_to>(&s, S365{ x: 0 }); - move_to>(&s, S366{ x: 0 }); - move_to>(&s, S367{ x: 0 }); - move_to>(&s, S368{ x: 0 }); - move_to>(&s, S369{ x: 0 }); - move_to>(&s, S370{ x: 0 }); - move_to>(&s, S371{ x: 0 }); - move_to>(&s, S372{ x: 0 }); - move_to>(&s, S373{ x: 0 }); - move_to>(&s, S374{ x: 0 }); - move_to>(&s, S375{ x: 0 }); - move_to>(&s, S376{ x: 0 }); - move_to>(&s, S377{ x: 0 }); - move_to>(&s, S378{ x: 0 }); - move_to>(&s, S379{ x: 0 }); - move_to>(&s, S380{ x: 0 }); - move_to>(&s, S381{ x: 0 }); - move_to>(&s, S382{ x: 0 }); - move_to>(&s, S383{ x: 0 }); - move_to>(&s, S384{ x: 0 }); - move_to>(&s, S385{ x: 0 }); - move_to>(&s, S386{ x: 0 }); - move_to>(&s, S387{ x: 0 }); - move_to>(&s, S388{ x: 0 }); - move_to>(&s, S389{ x: 0 }); - move_to>(&s, S390{ x: 0 }); - move_to>(&s, S391{ x: 0 }); - move_to>(&s, S392{ x: 0 }); - move_to>(&s, S393{ x: 0 }); - move_to>(&s, S394{ x: 0 }); - move_to>(&s, S395{ x: 0 }); - move_to>(&s, S396{ x: 0 }); - move_to>(&s, S397{ x: 0 }); - move_to>(&s, S398{ x: 0 }); - move_to>(&s, S399{ x: 0 }); - move_to>(&s, S400{ x: 0 }); - move_to>(&s, S401{ x: 0 }); - move_to>(&s, S402{ x: 0 }); - move_to>(&s, S403{ x: 0 }); - move_to>(&s, S404{ x: 0 }); - move_to>(&s, S405{ x: 0 }); - move_to>(&s, S406{ x: 0 }); - move_to>(&s, S407{ x: 0 }); - move_to>(&s, S408{ x: 0 }); - move_to>(&s, S409{ x: 0 }); - move_to>(&s, S410{ x: 0 }); - move_to>(&s, S411{ x: 0 }); - move_to>(&s, S412{ x: 0 }); - move_to>(&s, S413{ x: 0 }); - move_to>(&s, S414{ x: 0 }); - move_to>(&s, S415{ x: 0 }); - move_to>(&s, S416{ x: 0 }); - move_to>(&s, S417{ x: 0 }); - move_to>(&s, S418{ x: 0 }); - move_to>(&s, S419{ x: 0 }); - move_to>(&s, S420{ x: 0 }); - move_to>(&s, S421{ x: 0 }); - move_to>(&s, S422{ x: 0 }); - move_to>(&s, S423{ x: 0 }); - move_to>(&s, S424{ x: 0 }); - move_to>(&s, S425{ x: 0 }); - move_to>(&s, S426{ x: 0 }); - move_to>(&s, S427{ x: 0 }); - move_to>(&s, S428{ x: 0 }); - move_to>(&s, S429{ x: 0 }); - move_to>(&s, S430{ x: 0 }); - move_to>(&s, S431{ x: 0 }); - move_to>(&s, S432{ x: 0 }); - move_to>(&s, S433{ x: 0 }); - move_to>(&s, S434{ x: 0 }); - move_to>(&s, S435{ x: 0 }); - move_to>(&s, S436{ x: 0 }); - move_to>(&s, S437{ x: 0 }); - move_to>(&s, S438{ x: 0 }); - move_to>(&s, S439{ x: 0 }); - move_to>(&s, S440{ x: 0 }); - move_to>(&s, S441{ x: 0 }); - move_to>(&s, S442{ x: 0 }); - move_to>(&s, S443{ x: 0 }); - move_to>(&s, S444{ x: 0 }); - move_to>(&s, S445{ x: 0 }); - move_to>(&s, S446{ x: 0 }); - move_to>(&s, S447{ x: 0 }); - move_to>(&s, S448{ x: 0 }); - move_to>(&s, S449{ x: 0 }); - move_to>(&s, S450{ x: 0 }); - move_to>(&s, S451{ x: 0 }); - move_to>(&s, S452{ x: 0 }); - move_to>(&s, S453{ x: 0 }); - move_to>(&s, S454{ x: 0 }); - move_to>(&s, S455{ x: 0 }); - move_to>(&s, S456{ x: 0 }); - move_to>(&s, S457{ x: 0 }); - move_to>(&s, S458{ x: 0 }); - move_to>(&s, S459{ x: 0 }); - move_to>(&s, S460{ x: 0 }); - move_to>(&s, S461{ x: 0 }); - move_to>(&s, S462{ x: 0 }); - move_to>(&s, S463{ x: 0 }); - move_to>(&s, S464{ x: 0 }); - move_to>(&s, S465{ x: 0 }); - move_to>(&s, S466{ x: 0 }); - move_to>(&s, S467{ x: 0 }); - move_to>(&s, S468{ x: 0 }); - move_to>(&s, S469{ x: 0 }); - move_to>(&s, S470{ x: 0 }); - move_to>(&s, S471{ x: 0 }); - move_to>(&s, S472{ x: 0 }); - move_to>(&s, S473{ x: 0 }); - move_to>(&s, S474{ x: 0 }); - move_to>(&s, S475{ x: 0 }); - move_to>(&s, S476{ x: 0 }); - move_to>(&s, S477{ x: 0 }); - move_to>(&s, S478{ x: 0 }); - move_to>(&s, S479{ x: 0 }); - move_to>(&s, S480{ x: 0 }); - move_to>(&s, S481{ x: 0 }); - move_to>(&s, S482{ x: 0 }); - move_to>(&s, S483{ x: 0 }); - move_to>(&s, S484{ x: 0 }); - move_to>(&s, S485{ x: 0 }); - move_to>(&s, S486{ x: 0 }); - move_to>(&s, S487{ x: 0 }); - move_to>(&s, S488{ x: 0 }); - move_to>(&s, S489{ x: 0 }); - move_to>(&s, S490{ x: 0 }); - move_to>(&s, S491{ x: 0 }); - move_to>(&s, S492{ x: 0 }); - move_to>(&s, S493{ x: 0 }); - move_to>(&s, S494{ x: 0 }); - move_to>(&s, S495{ x: 0 }); - move_to>(&s, S496{ x: 0 }); - move_to>(&s, S497{ x: 0 }); - move_to>(&s, S498{ x: 0 }); - move_to>(&s, S499{ x: 0 }); - move_to>(&s, S500{ x: 0 }); - move_to>(&s, S501{ x: 0 }); - move_to>(&s, S502{ x: 0 }); - move_to>(&s, S503{ x: 0 }); - move_to>(&s, S504{ x: 0 }); - move_to>(&s, S505{ x: 0 }); - move_to>(&s, S506{ x: 0 }); - move_to>(&s, S507{ x: 0 }); - move_to>(&s, S508{ x: 0 }); - move_to>(&s, S509{ x: 0 }); - move_to>(&s, S510{ x: 0 }); - move_to>(&s, S511{ x: 0 }); - move_to>(&s, S512{ x: 0 }); - move_to>(&s, S513{ x: 0 }); - move_to>(&s, S514{ x: 0 }); - move_to>(&s, S515{ x: 0 }); - move_to>(&s, S516{ x: 0 }); - move_to>(&s, S517{ x: 0 }); - move_to>(&s, S518{ x: 0 }); - move_to>(&s, S519{ x: 0 }); - move_to>(&s, S520{ x: 0 }); - move_to>(&s, S521{ x: 0 }); - move_to>(&s, S522{ x: 0 }); - move_to>(&s, S523{ x: 0 }); - move_to>(&s, S524{ x: 0 }); - move_to>(&s, S525{ x: 0 }); - move_to>(&s, S526{ x: 0 }); - move_to>(&s, S527{ x: 0 }); - move_to>(&s, S528{ x: 0 }); - move_to>(&s, S529{ x: 0 }); - move_to>(&s, S530{ x: 0 }); - move_to>(&s, S531{ x: 0 }); - move_to>(&s, S532{ x: 0 }); - move_to>(&s, S533{ x: 0 }); - move_to>(&s, S534{ x: 0 }); - move_to>(&s, S535{ x: 0 }); - move_to>(&s, S536{ x: 0 }); - move_to>(&s, S537{ x: 0 }); - move_to>(&s, S538{ x: 0 }); - move_to>(&s, S539{ x: 0 }); - move_to>(&s, S540{ x: 0 }); - move_to>(&s, S541{ x: 0 }); - move_to>(&s, S542{ x: 0 }); - move_to>(&s, S543{ x: 0 }); - move_to>(&s, S544{ x: 0 }); - move_to>(&s, S545{ x: 0 }); - move_to>(&s, S546{ x: 0 }); - move_to>(&s, S547{ x: 0 }); - move_to>(&s, S548{ x: 0 }); - move_to>(&s, S549{ x: 0 }); - move_to>(&s, S550{ x: 0 }); - move_to>(&s, S551{ x: 0 }); - move_to>(&s, S552{ x: 0 }); - move_to>(&s, S553{ x: 0 }); - move_to>(&s, S554{ x: 0 }); - move_to>(&s, S555{ x: 0 }); - move_to>(&s, S556{ x: 0 }); - move_to>(&s, S557{ x: 0 }); - move_to>(&s, S558{ x: 0 }); - move_to>(&s, S559{ x: 0 }); - move_to>(&s, S560{ x: 0 }); - move_to>(&s, S561{ x: 0 }); - move_to>(&s, S562{ x: 0 }); - move_to>(&s, S563{ x: 0 }); - move_to>(&s, S564{ x: 0 }); - move_to>(&s, S565{ x: 0 }); - move_to>(&s, S566{ x: 0 }); - move_to>(&s, S567{ x: 0 }); - move_to>(&s, S568{ x: 0 }); - move_to>(&s, S569{ x: 0 }); - move_to>(&s, S570{ x: 0 }); - move_to>(&s, S571{ x: 0 }); - move_to>(&s, S572{ x: 0 }); - move_to>(&s, S573{ x: 0 }); - move_to>(&s, S574{ x: 0 }); - move_to>(&s, S575{ x: 0 }); - move_to>(&s, S576{ x: 0 }); - move_to>(&s, S577{ x: 0 }); - move_to>(&s, S578{ x: 0 }); - move_to>(&s, S579{ x: 0 }); - move_to>(&s, S580{ x: 0 }); - move_to>(&s, S581{ x: 0 }); - move_to>(&s, S582{ x: 0 }); - move_to>(&s, S583{ x: 0 }); - move_to>(&s, S584{ x: 0 }); - move_to>(&s, S585{ x: 0 }); - move_to>(&s, S586{ x: 0 }); - move_to>(&s, S587{ x: 0 }); - move_to>(&s, S588{ x: 0 }); - move_to>(&s, S589{ x: 0 }); - move_to>(&s, S590{ x: 0 }); - move_to>(&s, S591{ x: 0 }); - move_to>(&s, S592{ x: 0 }); - move_to>(&s, S593{ x: 0 }); - move_to>(&s, S594{ x: 0 }); - move_to>(&s, S595{ x: 0 }); - move_to>(&s, S596{ x: 0 }); - move_to>(&s, S597{ x: 0 }); - move_to>(&s, S598{ x: 0 }); - move_to>(&s, S599{ x: 0 }); - move_to>(&s, S600{ x: 0 }); - return; - } - - public entry calibrate_move_to_generic_x1000(s: signer) { - label b0: - move_to>(&s, S601{ x: 0 }); - move_to>(&s, S602{ x: 0 }); - move_to>(&s, S603{ x: 0 }); - move_to>(&s, S604{ x: 0 }); - move_to>(&s, S605{ x: 0 }); - move_to>(&s, S606{ x: 0 }); - move_to>(&s, S607{ x: 0 }); - move_to>(&s, S608{ x: 0 }); - move_to>(&s, S609{ x: 0 }); - move_to>(&s, S610{ x: 0 }); - move_to>(&s, S611{ x: 0 }); - move_to>(&s, S612{ x: 0 }); - move_to>(&s, S613{ x: 0 }); - move_to>(&s, S614{ x: 0 }); - move_to>(&s, S615{ x: 0 }); - move_to>(&s, S616{ x: 0 }); - move_to>(&s, S617{ x: 0 }); - move_to>(&s, S618{ x: 0 }); - move_to>(&s, S619{ x: 0 }); - move_to>(&s, S620{ x: 0 }); - move_to>(&s, S621{ x: 0 }); - move_to>(&s, S622{ x: 0 }); - move_to>(&s, S623{ x: 0 }); - move_to>(&s, S624{ x: 0 }); - move_to>(&s, S625{ x: 0 }); - move_to>(&s, S626{ x: 0 }); - move_to>(&s, S627{ x: 0 }); - move_to>(&s, S628{ x: 0 }); - move_to>(&s, S629{ x: 0 }); - move_to>(&s, S630{ x: 0 }); - move_to>(&s, S631{ x: 0 }); - move_to>(&s, S632{ x: 0 }); - move_to>(&s, S633{ x: 0 }); - move_to>(&s, S634{ x: 0 }); - move_to>(&s, S635{ x: 0 }); - move_to>(&s, S636{ x: 0 }); - move_to>(&s, S637{ x: 0 }); - move_to>(&s, S638{ x: 0 }); - move_to>(&s, S639{ x: 0 }); - move_to>(&s, S640{ x: 0 }); - move_to>(&s, S641{ x: 0 }); - move_to>(&s, S642{ x: 0 }); - move_to>(&s, S643{ x: 0 }); - move_to>(&s, S644{ x: 0 }); - move_to>(&s, S645{ x: 0 }); - move_to>(&s, S646{ x: 0 }); - move_to>(&s, S647{ x: 0 }); - move_to>(&s, S648{ x: 0 }); - move_to>(&s, S649{ x: 0 }); - move_to>(&s, S650{ x: 0 }); - move_to>(&s, S651{ x: 0 }); - move_to>(&s, S652{ x: 0 }); - move_to>(&s, S653{ x: 0 }); - move_to>(&s, S654{ x: 0 }); - move_to>(&s, S655{ x: 0 }); - move_to>(&s, S656{ x: 0 }); - move_to>(&s, S657{ x: 0 }); - move_to>(&s, S658{ x: 0 }); - move_to>(&s, S659{ x: 0 }); - move_to>(&s, S660{ x: 0 }); - move_to>(&s, S661{ x: 0 }); - move_to>(&s, S662{ x: 0 }); - move_to>(&s, S663{ x: 0 }); - move_to>(&s, S664{ x: 0 }); - move_to>(&s, S665{ x: 0 }); - move_to>(&s, S666{ x: 0 }); - move_to>(&s, S667{ x: 0 }); - move_to>(&s, S668{ x: 0 }); - move_to>(&s, S669{ x: 0 }); - move_to>(&s, S670{ x: 0 }); - move_to>(&s, S671{ x: 0 }); - move_to>(&s, S672{ x: 0 }); - move_to>(&s, S673{ x: 0 }); - move_to>(&s, S674{ x: 0 }); - move_to>(&s, S675{ x: 0 }); - move_to>(&s, S676{ x: 0 }); - move_to>(&s, S677{ x: 0 }); - move_to>(&s, S678{ x: 0 }); - move_to>(&s, S679{ x: 0 }); - move_to>(&s, S680{ x: 0 }); - move_to>(&s, S681{ x: 0 }); - move_to>(&s, S682{ x: 0 }); - move_to>(&s, S683{ x: 0 }); - move_to>(&s, S684{ x: 0 }); - move_to>(&s, S685{ x: 0 }); - move_to>(&s, S686{ x: 0 }); - move_to>(&s, S687{ x: 0 }); - move_to>(&s, S688{ x: 0 }); - move_to>(&s, S689{ x: 0 }); - move_to>(&s, S690{ x: 0 }); - move_to>(&s, S691{ x: 0 }); - move_to>(&s, S692{ x: 0 }); - move_to>(&s, S693{ x: 0 }); - move_to>(&s, S694{ x: 0 }); - move_to>(&s, S695{ x: 0 }); - move_to>(&s, S696{ x: 0 }); - move_to>(&s, S697{ x: 0 }); - move_to>(&s, S698{ x: 0 }); - move_to>(&s, S699{ x: 0 }); - move_to>(&s, S700{ x: 0 }); - move_to>(&s, S701{ x: 0 }); - move_to>(&s, S702{ x: 0 }); - move_to>(&s, S703{ x: 0 }); - move_to>(&s, S704{ x: 0 }); - move_to>(&s, S705{ x: 0 }); - move_to>(&s, S706{ x: 0 }); - move_to>(&s, S707{ x: 0 }); - move_to>(&s, S708{ x: 0 }); - move_to>(&s, S709{ x: 0 }); - move_to>(&s, S710{ x: 0 }); - move_to>(&s, S711{ x: 0 }); - move_to>(&s, S712{ x: 0 }); - move_to>(&s, S713{ x: 0 }); - move_to>(&s, S714{ x: 0 }); - move_to>(&s, S715{ x: 0 }); - move_to>(&s, S716{ x: 0 }); - move_to>(&s, S717{ x: 0 }); - move_to>(&s, S718{ x: 0 }); - move_to>(&s, S719{ x: 0 }); - move_to>(&s, S720{ x: 0 }); - move_to>(&s, S721{ x: 0 }); - move_to>(&s, S722{ x: 0 }); - move_to>(&s, S723{ x: 0 }); - move_to>(&s, S724{ x: 0 }); - move_to>(&s, S725{ x: 0 }); - move_to>(&s, S726{ x: 0 }); - move_to>(&s, S727{ x: 0 }); - move_to>(&s, S728{ x: 0 }); - move_to>(&s, S729{ x: 0 }); - move_to>(&s, S730{ x: 0 }); - move_to>(&s, S731{ x: 0 }); - move_to>(&s, S732{ x: 0 }); - move_to>(&s, S733{ x: 0 }); - move_to>(&s, S734{ x: 0 }); - move_to>(&s, S735{ x: 0 }); - move_to>(&s, S736{ x: 0 }); - move_to>(&s, S737{ x: 0 }); - move_to>(&s, S738{ x: 0 }); - move_to>(&s, S739{ x: 0 }); - move_to>(&s, S740{ x: 0 }); - move_to>(&s, S741{ x: 0 }); - move_to>(&s, S742{ x: 0 }); - move_to>(&s, S743{ x: 0 }); - move_to>(&s, S744{ x: 0 }); - move_to>(&s, S745{ x: 0 }); - move_to>(&s, S746{ x: 0 }); - move_to>(&s, S747{ x: 0 }); - move_to>(&s, S748{ x: 0 }); - move_to>(&s, S749{ x: 0 }); - move_to>(&s, S750{ x: 0 }); - move_to>(&s, S751{ x: 0 }); - move_to>(&s, S752{ x: 0 }); - move_to>(&s, S753{ x: 0 }); - move_to>(&s, S754{ x: 0 }); - move_to>(&s, S755{ x: 0 }); - move_to>(&s, S756{ x: 0 }); - move_to>(&s, S757{ x: 0 }); - move_to>(&s, S758{ x: 0 }); - move_to>(&s, S759{ x: 0 }); - move_to>(&s, S760{ x: 0 }); - move_to>(&s, S761{ x: 0 }); - move_to>(&s, S762{ x: 0 }); - move_to>(&s, S763{ x: 0 }); - move_to>(&s, S764{ x: 0 }); - move_to>(&s, S765{ x: 0 }); - move_to>(&s, S766{ x: 0 }); - move_to>(&s, S767{ x: 0 }); - move_to>(&s, S768{ x: 0 }); - move_to>(&s, S769{ x: 0 }); - move_to>(&s, S770{ x: 0 }); - move_to>(&s, S771{ x: 0 }); - move_to>(&s, S772{ x: 0 }); - move_to>(&s, S773{ x: 0 }); - move_to>(&s, S774{ x: 0 }); - move_to>(&s, S775{ x: 0 }); - move_to>(&s, S776{ x: 0 }); - move_to>(&s, S777{ x: 0 }); - move_to>(&s, S778{ x: 0 }); - move_to>(&s, S779{ x: 0 }); - move_to>(&s, S780{ x: 0 }); - move_to>(&s, S781{ x: 0 }); - move_to>(&s, S782{ x: 0 }); - move_to>(&s, S783{ x: 0 }); - move_to>(&s, S784{ x: 0 }); - move_to>(&s, S785{ x: 0 }); - move_to>(&s, S786{ x: 0 }); - move_to>(&s, S787{ x: 0 }); - move_to>(&s, S788{ x: 0 }); - move_to>(&s, S789{ x: 0 }); - move_to>(&s, S790{ x: 0 }); - move_to>(&s, S791{ x: 0 }); - move_to>(&s, S792{ x: 0 }); - move_to>(&s, S793{ x: 0 }); - move_to>(&s, S794{ x: 0 }); - move_to>(&s, S795{ x: 0 }); - move_to>(&s, S796{ x: 0 }); - move_to>(&s, S797{ x: 0 }); - move_to>(&s, S798{ x: 0 }); - move_to>(&s, S799{ x: 0 }); - move_to>(&s, S800{ x: 0 }); - move_to>(&s, S801{ x: 0 }); - move_to>(&s, S802{ x: 0 }); - move_to>(&s, S803{ x: 0 }); - move_to>(&s, S804{ x: 0 }); - move_to>(&s, S805{ x: 0 }); - move_to>(&s, S806{ x: 0 }); - move_to>(&s, S807{ x: 0 }); - move_to>(&s, S808{ x: 0 }); - move_to>(&s, S809{ x: 0 }); - move_to>(&s, S810{ x: 0 }); - move_to>(&s, S811{ x: 0 }); - move_to>(&s, S812{ x: 0 }); - move_to>(&s, S813{ x: 0 }); - move_to>(&s, S814{ x: 0 }); - move_to>(&s, S815{ x: 0 }); - move_to>(&s, S816{ x: 0 }); - move_to>(&s, S817{ x: 0 }); - move_to>(&s, S818{ x: 0 }); - move_to>(&s, S819{ x: 0 }); - move_to>(&s, S820{ x: 0 }); - move_to>(&s, S821{ x: 0 }); - move_to>(&s, S822{ x: 0 }); - move_to>(&s, S823{ x: 0 }); - move_to>(&s, S824{ x: 0 }); - move_to>(&s, S825{ x: 0 }); - move_to>(&s, S826{ x: 0 }); - move_to>(&s, S827{ x: 0 }); - move_to>(&s, S828{ x: 0 }); - move_to>(&s, S829{ x: 0 }); - move_to>(&s, S830{ x: 0 }); - move_to>(&s, S831{ x: 0 }); - move_to>(&s, S832{ x: 0 }); - move_to>(&s, S833{ x: 0 }); - move_to>(&s, S834{ x: 0 }); - move_to>(&s, S835{ x: 0 }); - move_to>(&s, S836{ x: 0 }); - move_to>(&s, S837{ x: 0 }); - move_to>(&s, S838{ x: 0 }); - move_to>(&s, S839{ x: 0 }); - move_to>(&s, S840{ x: 0 }); - move_to>(&s, S841{ x: 0 }); - move_to>(&s, S842{ x: 0 }); - move_to>(&s, S843{ x: 0 }); - move_to>(&s, S844{ x: 0 }); - move_to>(&s, S845{ x: 0 }); - move_to>(&s, S846{ x: 0 }); - move_to>(&s, S847{ x: 0 }); - move_to>(&s, S848{ x: 0 }); - move_to>(&s, S849{ x: 0 }); - move_to>(&s, S850{ x: 0 }); - move_to>(&s, S851{ x: 0 }); - move_to>(&s, S852{ x: 0 }); - move_to>(&s, S853{ x: 0 }); - move_to>(&s, S854{ x: 0 }); - move_to>(&s, S855{ x: 0 }); - move_to>(&s, S856{ x: 0 }); - move_to>(&s, S857{ x: 0 }); - move_to>(&s, S858{ x: 0 }); - move_to>(&s, S859{ x: 0 }); - move_to>(&s, S860{ x: 0 }); - move_to>(&s, S861{ x: 0 }); - move_to>(&s, S862{ x: 0 }); - move_to>(&s, S863{ x: 0 }); - move_to>(&s, S864{ x: 0 }); - move_to>(&s, S865{ x: 0 }); - move_to>(&s, S866{ x: 0 }); - move_to>(&s, S867{ x: 0 }); - move_to>(&s, S868{ x: 0 }); - move_to>(&s, S869{ x: 0 }); - move_to>(&s, S870{ x: 0 }); - move_to>(&s, S871{ x: 0 }); - move_to>(&s, S872{ x: 0 }); - move_to>(&s, S873{ x: 0 }); - move_to>(&s, S874{ x: 0 }); - move_to>(&s, S875{ x: 0 }); - move_to>(&s, S876{ x: 0 }); - move_to>(&s, S877{ x: 0 }); - move_to>(&s, S878{ x: 0 }); - move_to>(&s, S879{ x: 0 }); - move_to>(&s, S880{ x: 0 }); - move_to>(&s, S881{ x: 0 }); - move_to>(&s, S882{ x: 0 }); - move_to>(&s, S883{ x: 0 }); - move_to>(&s, S884{ x: 0 }); - move_to>(&s, S885{ x: 0 }); - move_to>(&s, S886{ x: 0 }); - move_to>(&s, S887{ x: 0 }); - move_to>(&s, S888{ x: 0 }); - move_to>(&s, S889{ x: 0 }); - move_to>(&s, S890{ x: 0 }); - move_to>(&s, S891{ x: 0 }); - move_to>(&s, S892{ x: 0 }); - move_to>(&s, S893{ x: 0 }); - move_to>(&s, S894{ x: 0 }); - move_to>(&s, S895{ x: 0 }); - move_to>(&s, S896{ x: 0 }); - move_to>(&s, S897{ x: 0 }); - move_to>(&s, S898{ x: 0 }); - move_to>(&s, S899{ x: 0 }); - move_to>(&s, S900{ x: 0 }); - move_to>(&s, S901{ x: 0 }); - move_to>(&s, S902{ x: 0 }); - move_to>(&s, S903{ x: 0 }); - move_to>(&s, S904{ x: 0 }); - move_to>(&s, S905{ x: 0 }); - move_to>(&s, S906{ x: 0 }); - move_to>(&s, S907{ x: 0 }); - move_to>(&s, S908{ x: 0 }); - move_to>(&s, S909{ x: 0 }); - move_to>(&s, S910{ x: 0 }); - move_to>(&s, S911{ x: 0 }); - move_to>(&s, S912{ x: 0 }); - move_to>(&s, S913{ x: 0 }); - move_to>(&s, S914{ x: 0 }); - move_to>(&s, S915{ x: 0 }); - move_to>(&s, S916{ x: 0 }); - move_to>(&s, S917{ x: 0 }); - move_to>(&s, S918{ x: 0 }); - move_to>(&s, S919{ x: 0 }); - move_to>(&s, S920{ x: 0 }); - move_to>(&s, S921{ x: 0 }); - move_to>(&s, S922{ x: 0 }); - move_to>(&s, S923{ x: 0 }); - move_to>(&s, S924{ x: 0 }); - move_to>(&s, S925{ x: 0 }); - move_to>(&s, S926{ x: 0 }); - move_to>(&s, S927{ x: 0 }); - move_to>(&s, S928{ x: 0 }); - move_to>(&s, S929{ x: 0 }); - move_to>(&s, S930{ x: 0 }); - move_to>(&s, S931{ x: 0 }); - move_to>(&s, S932{ x: 0 }); - move_to>(&s, S933{ x: 0 }); - move_to>(&s, S934{ x: 0 }); - move_to>(&s, S935{ x: 0 }); - move_to>(&s, S936{ x: 0 }); - move_to>(&s, S937{ x: 0 }); - move_to>(&s, S938{ x: 0 }); - move_to>(&s, S939{ x: 0 }); - move_to>(&s, S940{ x: 0 }); - move_to>(&s, S941{ x: 0 }); - move_to>(&s, S942{ x: 0 }); - move_to>(&s, S943{ x: 0 }); - move_to>(&s, S944{ x: 0 }); - move_to>(&s, S945{ x: 0 }); - move_to>(&s, S946{ x: 0 }); - move_to>(&s, S947{ x: 0 }); - move_to>(&s, S948{ x: 0 }); - move_to>(&s, S949{ x: 0 }); - move_to>(&s, S950{ x: 0 }); - move_to>(&s, S951{ x: 0 }); - move_to>(&s, S952{ x: 0 }); - move_to>(&s, S953{ x: 0 }); - move_to>(&s, S954{ x: 0 }); - move_to>(&s, S955{ x: 0 }); - move_to>(&s, S956{ x: 0 }); - move_to>(&s, S957{ x: 0 }); - move_to>(&s, S958{ x: 0 }); - move_to>(&s, S959{ x: 0 }); - move_to>(&s, S960{ x: 0 }); - move_to>(&s, S961{ x: 0 }); - move_to>(&s, S962{ x: 0 }); - move_to>(&s, S963{ x: 0 }); - move_to>(&s, S964{ x: 0 }); - move_to>(&s, S965{ x: 0 }); - move_to>(&s, S966{ x: 0 }); - move_to>(&s, S967{ x: 0 }); - move_to>(&s, S968{ x: 0 }); - move_to>(&s, S969{ x: 0 }); - move_to>(&s, S970{ x: 0 }); - move_to>(&s, S971{ x: 0 }); - move_to>(&s, S972{ x: 0 }); - move_to>(&s, S973{ x: 0 }); - move_to>(&s, S974{ x: 0 }); - move_to>(&s, S975{ x: 0 }); - move_to>(&s, S976{ x: 0 }); - move_to>(&s, S977{ x: 0 }); - move_to>(&s, S978{ x: 0 }); - move_to>(&s, S979{ x: 0 }); - move_to>(&s, S980{ x: 0 }); - move_to>(&s, S981{ x: 0 }); - move_to>(&s, S982{ x: 0 }); - move_to>(&s, S983{ x: 0 }); - move_to>(&s, S984{ x: 0 }); - move_to>(&s, S985{ x: 0 }); - move_to>(&s, S986{ x: 0 }); - move_to>(&s, S987{ x: 0 }); - move_to>(&s, S988{ x: 0 }); - move_to>(&s, S989{ x: 0 }); - move_to>(&s, S990{ x: 0 }); - move_to>(&s, S991{ x: 0 }); - move_to>(&s, S992{ x: 0 }); - move_to>(&s, S993{ x: 0 }); - move_to>(&s, S994{ x: 0 }); - move_to>(&s, S995{ x: 0 }); - move_to>(&s, S996{ x: 0 }); - move_to>(&s, S997{ x: 0 }); - move_to>(&s, S998{ x: 0 }); - move_to>(&s, S999{ x: 0 }); - move_to>(&s, S1000{ x: 0 }); - move_to>(&s, S1001{ x: 0 }); - move_to>(&s, S1002{ x: 0 }); - move_to>(&s, S1003{ x: 0 }); - move_to>(&s, S1004{ x: 0 }); - move_to>(&s, S1005{ x: 0 }); - move_to>(&s, S1006{ x: 0 }); - move_to>(&s, S1007{ x: 0 }); - move_to>(&s, S1008{ x: 0 }); - move_to>(&s, S1009{ x: 0 }); - move_to>(&s, S1010{ x: 0 }); - move_to>(&s, S1011{ x: 0 }); - move_to>(&s, S1012{ x: 0 }); - move_to>(&s, S1013{ x: 0 }); - move_to>(&s, S1014{ x: 0 }); - move_to>(&s, S1015{ x: 0 }); - move_to>(&s, S1016{ x: 0 }); - move_to>(&s, S1017{ x: 0 }); - move_to>(&s, S1018{ x: 0 }); - move_to>(&s, S1019{ x: 0 }); - move_to>(&s, S1020{ x: 0 }); - move_to>(&s, S1021{ x: 0 }); - move_to>(&s, S1022{ x: 0 }); - move_to>(&s, S1023{ x: 0 }); - move_to>(&s, S1024{ x: 0 }); - move_to>(&s, S1025{ x: 0 }); - move_to>(&s, S1026{ x: 0 }); - move_to>(&s, S1027{ x: 0 }); - move_to>(&s, S1028{ x: 0 }); - move_to>(&s, S1029{ x: 0 }); - move_to>(&s, S1030{ x: 0 }); - move_to>(&s, S1031{ x: 0 }); - move_to>(&s, S1032{ x: 0 }); - move_to>(&s, S1033{ x: 0 }); - move_to>(&s, S1034{ x: 0 }); - move_to>(&s, S1035{ x: 0 }); - move_to>(&s, S1036{ x: 0 }); - move_to>(&s, S1037{ x: 0 }); - move_to>(&s, S1038{ x: 0 }); - move_to>(&s, S1039{ x: 0 }); - move_to>(&s, S1040{ x: 0 }); - move_to>(&s, S1041{ x: 0 }); - move_to>(&s, S1042{ x: 0 }); - move_to>(&s, S1043{ x: 0 }); - move_to>(&s, S1044{ x: 0 }); - move_to>(&s, S1045{ x: 0 }); - move_to>(&s, S1046{ x: 0 }); - move_to>(&s, S1047{ x: 0 }); - move_to>(&s, S1048{ x: 0 }); - move_to>(&s, S1049{ x: 0 }); - move_to>(&s, S1050{ x: 0 }); - move_to>(&s, S1051{ x: 0 }); - move_to>(&s, S1052{ x: 0 }); - move_to>(&s, S1053{ x: 0 }); - move_to>(&s, S1054{ x: 0 }); - move_to>(&s, S1055{ x: 0 }); - move_to>(&s, S1056{ x: 0 }); - move_to>(&s, S1057{ x: 0 }); - move_to>(&s, S1058{ x: 0 }); - move_to>(&s, S1059{ x: 0 }); - move_to>(&s, S1060{ x: 0 }); - move_to>(&s, S1061{ x: 0 }); - move_to>(&s, S1062{ x: 0 }); - move_to>(&s, S1063{ x: 0 }); - move_to>(&s, S1064{ x: 0 }); - move_to>(&s, S1065{ x: 0 }); - move_to>(&s, S1066{ x: 0 }); - move_to>(&s, S1067{ x: 0 }); - move_to>(&s, S1068{ x: 0 }); - move_to>(&s, S1069{ x: 0 }); - move_to>(&s, S1070{ x: 0 }); - move_to>(&s, S1071{ x: 0 }); - move_to>(&s, S1072{ x: 0 }); - move_to>(&s, S1073{ x: 0 }); - move_to>(&s, S1074{ x: 0 }); - move_to>(&s, S1075{ x: 0 }); - move_to>(&s, S1076{ x: 0 }); - move_to>(&s, S1077{ x: 0 }); - move_to>(&s, S1078{ x: 0 }); - move_to>(&s, S1079{ x: 0 }); - move_to>(&s, S1080{ x: 0 }); - move_to>(&s, S1081{ x: 0 }); - move_to>(&s, S1082{ x: 0 }); - move_to>(&s, S1083{ x: 0 }); - move_to>(&s, S1084{ x: 0 }); - move_to>(&s, S1085{ x: 0 }); - move_to>(&s, S1086{ x: 0 }); - move_to>(&s, S1087{ x: 0 }); - move_to>(&s, S1088{ x: 0 }); - move_to>(&s, S1089{ x: 0 }); - move_to>(&s, S1090{ x: 0 }); - move_to>(&s, S1091{ x: 0 }); - move_to>(&s, S1092{ x: 0 }); - move_to>(&s, S1093{ x: 0 }); - move_to>(&s, S1094{ x: 0 }); - move_to>(&s, S1095{ x: 0 }); - move_to>(&s, S1096{ x: 0 }); - move_to>(&s, S1097{ x: 0 }); - move_to>(&s, S1098{ x: 0 }); - move_to>(&s, S1099{ x: 0 }); - move_to>(&s, S1100{ x: 0 }); - move_to>(&s, S1101{ x: 0 }); - move_to>(&s, S1102{ x: 0 }); - move_to>(&s, S1103{ x: 0 }); - move_to>(&s, S1104{ x: 0 }); - move_to>(&s, S1105{ x: 0 }); - move_to>(&s, S1106{ x: 0 }); - move_to>(&s, S1107{ x: 0 }); - move_to>(&s, S1108{ x: 0 }); - move_to>(&s, S1109{ x: 0 }); - move_to>(&s, S1110{ x: 0 }); - move_to>(&s, S1111{ x: 0 }); - move_to>(&s, S1112{ x: 0 }); - move_to>(&s, S1113{ x: 0 }); - move_to>(&s, S1114{ x: 0 }); - move_to>(&s, S1115{ x: 0 }); - move_to>(&s, S1116{ x: 0 }); - move_to>(&s, S1117{ x: 0 }); - move_to>(&s, S1118{ x: 0 }); - move_to>(&s, S1119{ x: 0 }); - move_to>(&s, S1120{ x: 0 }); - move_to>(&s, S1121{ x: 0 }); - move_to>(&s, S1122{ x: 0 }); - move_to>(&s, S1123{ x: 0 }); - move_to>(&s, S1124{ x: 0 }); - move_to>(&s, S1125{ x: 0 }); - move_to>(&s, S1126{ x: 0 }); - move_to>(&s, S1127{ x: 0 }); - move_to>(&s, S1128{ x: 0 }); - move_to>(&s, S1129{ x: 0 }); - move_to>(&s, S1130{ x: 0 }); - move_to>(&s, S1131{ x: 0 }); - move_to>(&s, S1132{ x: 0 }); - move_to>(&s, S1133{ x: 0 }); - move_to>(&s, S1134{ x: 0 }); - move_to>(&s, S1135{ x: 0 }); - move_to>(&s, S1136{ x: 0 }); - move_to>(&s, S1137{ x: 0 }); - move_to>(&s, S1138{ x: 0 }); - move_to>(&s, S1139{ x: 0 }); - move_to>(&s, S1140{ x: 0 }); - move_to>(&s, S1141{ x: 0 }); - move_to>(&s, S1142{ x: 0 }); - move_to>(&s, S1143{ x: 0 }); - move_to>(&s, S1144{ x: 0 }); - move_to>(&s, S1145{ x: 0 }); - move_to>(&s, S1146{ x: 0 }); - move_to>(&s, S1147{ x: 0 }); - move_to>(&s, S1148{ x: 0 }); - move_to>(&s, S1149{ x: 0 }); - move_to>(&s, S1150{ x: 0 }); - move_to>(&s, S1151{ x: 0 }); - move_to>(&s, S1152{ x: 0 }); - move_to>(&s, S1153{ x: 0 }); - move_to>(&s, S1154{ x: 0 }); - move_to>(&s, S1155{ x: 0 }); - move_to>(&s, S1156{ x: 0 }); - move_to>(&s, S1157{ x: 0 }); - move_to>(&s, S1158{ x: 0 }); - move_to>(&s, S1159{ x: 0 }); - move_to>(&s, S1160{ x: 0 }); - move_to>(&s, S1161{ x: 0 }); - move_to>(&s, S1162{ x: 0 }); - move_to>(&s, S1163{ x: 0 }); - move_to>(&s, S1164{ x: 0 }); - move_to>(&s, S1165{ x: 0 }); - move_to>(&s, S1166{ x: 0 }); - move_to>(&s, S1167{ x: 0 }); - move_to>(&s, S1168{ x: 0 }); - move_to>(&s, S1169{ x: 0 }); - move_to>(&s, S1170{ x: 0 }); - move_to>(&s, S1171{ x: 0 }); - move_to>(&s, S1172{ x: 0 }); - move_to>(&s, S1173{ x: 0 }); - move_to>(&s, S1174{ x: 0 }); - move_to>(&s, S1175{ x: 0 }); - move_to>(&s, S1176{ x: 0 }); - move_to>(&s, S1177{ x: 0 }); - move_to>(&s, S1178{ x: 0 }); - move_to>(&s, S1179{ x: 0 }); - move_to>(&s, S1180{ x: 0 }); - move_to>(&s, S1181{ x: 0 }); - move_to>(&s, S1182{ x: 0 }); - move_to>(&s, S1183{ x: 0 }); - move_to>(&s, S1184{ x: 0 }); - move_to>(&s, S1185{ x: 0 }); - move_to>(&s, S1186{ x: 0 }); - move_to>(&s, S1187{ x: 0 }); - move_to>(&s, S1188{ x: 0 }); - move_to>(&s, S1189{ x: 0 }); - move_to>(&s, S1190{ x: 0 }); - move_to>(&s, S1191{ x: 0 }); - move_to>(&s, S1192{ x: 0 }); - move_to>(&s, S1193{ x: 0 }); - move_to>(&s, S1194{ x: 0 }); - move_to>(&s, S1195{ x: 0 }); - move_to>(&s, S1196{ x: 0 }); - move_to>(&s, S1197{ x: 0 }); - move_to>(&s, S1198{ x: 0 }); - move_to>(&s, S1199{ x: 0 }); - move_to>(&s, S1200{ x: 0 }); - move_to>(&s, S1201{ x: 0 }); - move_to>(&s, S1202{ x: 0 }); - move_to>(&s, S1203{ x: 0 }); - move_to>(&s, S1204{ x: 0 }); - move_to>(&s, S1205{ x: 0 }); - move_to>(&s, S1206{ x: 0 }); - move_to>(&s, S1207{ x: 0 }); - move_to>(&s, S1208{ x: 0 }); - move_to>(&s, S1209{ x: 0 }); - move_to>(&s, S1210{ x: 0 }); - move_to>(&s, S1211{ x: 0 }); - move_to>(&s, S1212{ x: 0 }); - move_to>(&s, S1213{ x: 0 }); - move_to>(&s, S1214{ x: 0 }); - move_to>(&s, S1215{ x: 0 }); - move_to>(&s, S1216{ x: 0 }); - move_to>(&s, S1217{ x: 0 }); - move_to>(&s, S1218{ x: 0 }); - move_to>(&s, S1219{ x: 0 }); - move_to>(&s, S1220{ x: 0 }); - move_to>(&s, S1221{ x: 0 }); - move_to>(&s, S1222{ x: 0 }); - move_to>(&s, S1223{ x: 0 }); - move_to>(&s, S1224{ x: 0 }); - move_to>(&s, S1225{ x: 0 }); - move_to>(&s, S1226{ x: 0 }); - move_to>(&s, S1227{ x: 0 }); - move_to>(&s, S1228{ x: 0 }); - move_to>(&s, S1229{ x: 0 }); - move_to>(&s, S1230{ x: 0 }); - move_to>(&s, S1231{ x: 0 }); - move_to>(&s, S1232{ x: 0 }); - move_to>(&s, S1233{ x: 0 }); - move_to>(&s, S1234{ x: 0 }); - move_to>(&s, S1235{ x: 0 }); - move_to>(&s, S1236{ x: 0 }); - move_to>(&s, S1237{ x: 0 }); - move_to>(&s, S1238{ x: 0 }); - move_to>(&s, S1239{ x: 0 }); - move_to>(&s, S1240{ x: 0 }); - move_to>(&s, S1241{ x: 0 }); - move_to>(&s, S1242{ x: 0 }); - move_to>(&s, S1243{ x: 0 }); - move_to>(&s, S1244{ x: 0 }); - move_to>(&s, S1245{ x: 0 }); - move_to>(&s, S1246{ x: 0 }); - move_to>(&s, S1247{ x: 0 }); - move_to>(&s, S1248{ x: 0 }); - move_to>(&s, S1249{ x: 0 }); - move_to>(&s, S1250{ x: 0 }); - move_to>(&s, S1251{ x: 0 }); - move_to>(&s, S1252{ x: 0 }); - move_to>(&s, S1253{ x: 0 }); - move_to>(&s, S1254{ x: 0 }); - move_to>(&s, S1255{ x: 0 }); - move_to>(&s, S1256{ x: 0 }); - move_to>(&s, S1257{ x: 0 }); - move_to>(&s, S1258{ x: 0 }); - move_to>(&s, S1259{ x: 0 }); - move_to>(&s, S1260{ x: 0 }); - move_to>(&s, S1261{ x: 0 }); - move_to>(&s, S1262{ x: 0 }); - move_to>(&s, S1263{ x: 0 }); - move_to>(&s, S1264{ x: 0 }); - move_to>(&s, S1265{ x: 0 }); - move_to>(&s, S1266{ x: 0 }); - move_to>(&s, S1267{ x: 0 }); - move_to>(&s, S1268{ x: 0 }); - move_to>(&s, S1269{ x: 0 }); - move_to>(&s, S1270{ x: 0 }); - move_to>(&s, S1271{ x: 0 }); - move_to>(&s, S1272{ x: 0 }); - move_to>(&s, S1273{ x: 0 }); - move_to>(&s, S1274{ x: 0 }); - move_to>(&s, S1275{ x: 0 }); - move_to>(&s, S1276{ x: 0 }); - move_to>(&s, S1277{ x: 0 }); - move_to>(&s, S1278{ x: 0 }); - move_to>(&s, S1279{ x: 0 }); - move_to>(&s, S1280{ x: 0 }); - move_to>(&s, S1281{ x: 0 }); - move_to>(&s, S1282{ x: 0 }); - move_to>(&s, S1283{ x: 0 }); - move_to>(&s, S1284{ x: 0 }); - move_to>(&s, S1285{ x: 0 }); - move_to>(&s, S1286{ x: 0 }); - move_to>(&s, S1287{ x: 0 }); - move_to>(&s, S1288{ x: 0 }); - move_to>(&s, S1289{ x: 0 }); - move_to>(&s, S1290{ x: 0 }); - move_to>(&s, S1291{ x: 0 }); - move_to>(&s, S1292{ x: 0 }); - move_to>(&s, S1293{ x: 0 }); - move_to>(&s, S1294{ x: 0 }); - move_to>(&s, S1295{ x: 0 }); - move_to>(&s, S1296{ x: 0 }); - move_to>(&s, S1297{ x: 0 }); - move_to>(&s, S1298{ x: 0 }); - move_to>(&s, S1299{ x: 0 }); - move_to>(&s, S1300{ x: 0 }); - move_to>(&s, S1301{ x: 0 }); - move_to>(&s, S1302{ x: 0 }); - move_to>(&s, S1303{ x: 0 }); - move_to>(&s, S1304{ x: 0 }); - move_to>(&s, S1305{ x: 0 }); - move_to>(&s, S1306{ x: 0 }); - move_to>(&s, S1307{ x: 0 }); - move_to>(&s, S1308{ x: 0 }); - move_to>(&s, S1309{ x: 0 }); - move_to>(&s, S1310{ x: 0 }); - move_to>(&s, S1311{ x: 0 }); - move_to>(&s, S1312{ x: 0 }); - move_to>(&s, S1313{ x: 0 }); - move_to>(&s, S1314{ x: 0 }); - move_to>(&s, S1315{ x: 0 }); - move_to>(&s, S1316{ x: 0 }); - move_to>(&s, S1317{ x: 0 }); - move_to>(&s, S1318{ x: 0 }); - move_to>(&s, S1319{ x: 0 }); - move_to>(&s, S1320{ x: 0 }); - move_to>(&s, S1321{ x: 0 }); - move_to>(&s, S1322{ x: 0 }); - move_to>(&s, S1323{ x: 0 }); - move_to>(&s, S1324{ x: 0 }); - move_to>(&s, S1325{ x: 0 }); - move_to>(&s, S1326{ x: 0 }); - move_to>(&s, S1327{ x: 0 }); - move_to>(&s, S1328{ x: 0 }); - move_to>(&s, S1329{ x: 0 }); - move_to>(&s, S1330{ x: 0 }); - move_to>(&s, S1331{ x: 0 }); - move_to>(&s, S1332{ x: 0 }); - move_to>(&s, S1333{ x: 0 }); - move_to>(&s, S1334{ x: 0 }); - move_to>(&s, S1335{ x: 0 }); - move_to>(&s, S1336{ x: 0 }); - move_to>(&s, S1337{ x: 0 }); - move_to>(&s, S1338{ x: 0 }); - move_to>(&s, S1339{ x: 0 }); - move_to>(&s, S1340{ x: 0 }); - move_to>(&s, S1341{ x: 0 }); - move_to>(&s, S1342{ x: 0 }); - move_to>(&s, S1343{ x: 0 }); - move_to>(&s, S1344{ x: 0 }); - move_to>(&s, S1345{ x: 0 }); - move_to>(&s, S1346{ x: 0 }); - move_to>(&s, S1347{ x: 0 }); - move_to>(&s, S1348{ x: 0 }); - move_to>(&s, S1349{ x: 0 }); - move_to>(&s, S1350{ x: 0 }); - move_to>(&s, S1351{ x: 0 }); - move_to>(&s, S1352{ x: 0 }); - move_to>(&s, S1353{ x: 0 }); - move_to>(&s, S1354{ x: 0 }); - move_to>(&s, S1355{ x: 0 }); - move_to>(&s, S1356{ x: 0 }); - move_to>(&s, S1357{ x: 0 }); - move_to>(&s, S1358{ x: 0 }); - move_to>(&s, S1359{ x: 0 }); - move_to>(&s, S1360{ x: 0 }); - move_to>(&s, S1361{ x: 0 }); - move_to>(&s, S1362{ x: 0 }); - move_to>(&s, S1363{ x: 0 }); - move_to>(&s, S1364{ x: 0 }); - move_to>(&s, S1365{ x: 0 }); - move_to>(&s, S1366{ x: 0 }); - move_to>(&s, S1367{ x: 0 }); - move_to>(&s, S1368{ x: 0 }); - move_to>(&s, S1369{ x: 0 }); - move_to>(&s, S1370{ x: 0 }); - move_to>(&s, S1371{ x: 0 }); - move_to>(&s, S1372{ x: 0 }); - move_to>(&s, S1373{ x: 0 }); - move_to>(&s, S1374{ x: 0 }); - move_to>(&s, S1375{ x: 0 }); - move_to>(&s, S1376{ x: 0 }); - move_to>(&s, S1377{ x: 0 }); - move_to>(&s, S1378{ x: 0 }); - move_to>(&s, S1379{ x: 0 }); - move_to>(&s, S1380{ x: 0 }); - move_to>(&s, S1381{ x: 0 }); - move_to>(&s, S1382{ x: 0 }); - move_to>(&s, S1383{ x: 0 }); - move_to>(&s, S1384{ x: 0 }); - move_to>(&s, S1385{ x: 0 }); - move_to>(&s, S1386{ x: 0 }); - move_to>(&s, S1387{ x: 0 }); - move_to>(&s, S1388{ x: 0 }); - move_to>(&s, S1389{ x: 0 }); - move_to>(&s, S1390{ x: 0 }); - move_to>(&s, S1391{ x: 0 }); - move_to>(&s, S1392{ x: 0 }); - move_to>(&s, S1393{ x: 0 }); - move_to>(&s, S1394{ x: 0 }); - move_to>(&s, S1395{ x: 0 }); - move_to>(&s, S1396{ x: 0 }); - move_to>(&s, S1397{ x: 0 }); - move_to>(&s, S1398{ x: 0 }); - move_to>(&s, S1399{ x: 0 }); - move_to>(&s, S1400{ x: 0 }); - move_to>(&s, S1401{ x: 0 }); - move_to>(&s, S1402{ x: 0 }); - move_to>(&s, S1403{ x: 0 }); - move_to>(&s, S1404{ x: 0 }); - move_to>(&s, S1405{ x: 0 }); - move_to>(&s, S1406{ x: 0 }); - move_to>(&s, S1407{ x: 0 }); - move_to>(&s, S1408{ x: 0 }); - move_to>(&s, S1409{ x: 0 }); - move_to>(&s, S1410{ x: 0 }); - move_to>(&s, S1411{ x: 0 }); - move_to>(&s, S1412{ x: 0 }); - move_to>(&s, S1413{ x: 0 }); - move_to>(&s, S1414{ x: 0 }); - move_to>(&s, S1415{ x: 0 }); - move_to>(&s, S1416{ x: 0 }); - move_to>(&s, S1417{ x: 0 }); - move_to>(&s, S1418{ x: 0 }); - move_to>(&s, S1419{ x: 0 }); - move_to>(&s, S1420{ x: 0 }); - move_to>(&s, S1421{ x: 0 }); - move_to>(&s, S1422{ x: 0 }); - move_to>(&s, S1423{ x: 0 }); - move_to>(&s, S1424{ x: 0 }); - move_to>(&s, S1425{ x: 0 }); - move_to>(&s, S1426{ x: 0 }); - move_to>(&s, S1427{ x: 0 }); - move_to>(&s, S1428{ x: 0 }); - move_to>(&s, S1429{ x: 0 }); - move_to>(&s, S1430{ x: 0 }); - move_to>(&s, S1431{ x: 0 }); - move_to>(&s, S1432{ x: 0 }); - move_to>(&s, S1433{ x: 0 }); - move_to>(&s, S1434{ x: 0 }); - move_to>(&s, S1435{ x: 0 }); - move_to>(&s, S1436{ x: 0 }); - move_to>(&s, S1437{ x: 0 }); - move_to>(&s, S1438{ x: 0 }); - move_to>(&s, S1439{ x: 0 }); - move_to>(&s, S1440{ x: 0 }); - move_to>(&s, S1441{ x: 0 }); - move_to>(&s, S1442{ x: 0 }); - move_to>(&s, S1443{ x: 0 }); - move_to>(&s, S1444{ x: 0 }); - move_to>(&s, S1445{ x: 0 }); - move_to>(&s, S1446{ x: 0 }); - move_to>(&s, S1447{ x: 0 }); - move_to>(&s, S1448{ x: 0 }); - move_to>(&s, S1449{ x: 0 }); - move_to>(&s, S1450{ x: 0 }); - move_to>(&s, S1451{ x: 0 }); - move_to>(&s, S1452{ x: 0 }); - move_to>(&s, S1453{ x: 0 }); - move_to>(&s, S1454{ x: 0 }); - move_to>(&s, S1455{ x: 0 }); - move_to>(&s, S1456{ x: 0 }); - move_to>(&s, S1457{ x: 0 }); - move_to>(&s, S1458{ x: 0 }); - move_to>(&s, S1459{ x: 0 }); - move_to>(&s, S1460{ x: 0 }); - move_to>(&s, S1461{ x: 0 }); - move_to>(&s, S1462{ x: 0 }); - move_to>(&s, S1463{ x: 0 }); - move_to>(&s, S1464{ x: 0 }); - move_to>(&s, S1465{ x: 0 }); - move_to>(&s, S1466{ x: 0 }); - move_to>(&s, S1467{ x: 0 }); - move_to>(&s, S1468{ x: 0 }); - move_to>(&s, S1469{ x: 0 }); - move_to>(&s, S1470{ x: 0 }); - move_to>(&s, S1471{ x: 0 }); - move_to>(&s, S1472{ x: 0 }); - move_to>(&s, S1473{ x: 0 }); - move_to>(&s, S1474{ x: 0 }); - move_to>(&s, S1475{ x: 0 }); - move_to>(&s, S1476{ x: 0 }); - move_to>(&s, S1477{ x: 0 }); - move_to>(&s, S1478{ x: 0 }); - move_to>(&s, S1479{ x: 0 }); - move_to>(&s, S1480{ x: 0 }); - move_to>(&s, S1481{ x: 0 }); - move_to>(&s, S1482{ x: 0 }); - move_to>(&s, S1483{ x: 0 }); - move_to>(&s, S1484{ x: 0 }); - move_to>(&s, S1485{ x: 0 }); - move_to>(&s, S1486{ x: 0 }); - move_to>(&s, S1487{ x: 0 }); - move_to>(&s, S1488{ x: 0 }); - move_to>(&s, S1489{ x: 0 }); - move_to>(&s, S1490{ x: 0 }); - move_to>(&s, S1491{ x: 0 }); - move_to>(&s, S1492{ x: 0 }); - move_to>(&s, S1493{ x: 0 }); - move_to>(&s, S1494{ x: 0 }); - move_to>(&s, S1495{ x: 0 }); - move_to>(&s, S1496{ x: 0 }); - move_to>(&s, S1497{ x: 0 }); - move_to>(&s, S1498{ x: 0 }); - move_to>(&s, S1499{ x: 0 }); - move_to>(&s, S1500{ x: 0 }); - move_to>(&s, S1501{ x: 0 }); - move_to>(&s, S1502{ x: 0 }); - move_to>(&s, S1503{ x: 0 }); - move_to>(&s, S1504{ x: 0 }); - move_to>(&s, S1505{ x: 0 }); - move_to>(&s, S1506{ x: 0 }); - move_to>(&s, S1507{ x: 0 }); - move_to>(&s, S1508{ x: 0 }); - move_to>(&s, S1509{ x: 0 }); - move_to>(&s, S1510{ x: 0 }); - move_to>(&s, S1511{ x: 0 }); - move_to>(&s, S1512{ x: 0 }); - move_to>(&s, S1513{ x: 0 }); - move_to>(&s, S1514{ x: 0 }); - move_to>(&s, S1515{ x: 0 }); - move_to>(&s, S1516{ x: 0 }); - move_to>(&s, S1517{ x: 0 }); - move_to>(&s, S1518{ x: 0 }); - move_to>(&s, S1519{ x: 0 }); - move_to>(&s, S1520{ x: 0 }); - move_to>(&s, S1521{ x: 0 }); - move_to>(&s, S1522{ x: 0 }); - move_to>(&s, S1523{ x: 0 }); - move_to>(&s, S1524{ x: 0 }); - move_to>(&s, S1525{ x: 0 }); - move_to>(&s, S1526{ x: 0 }); - move_to>(&s, S1527{ x: 0 }); - move_to>(&s, S1528{ x: 0 }); - move_to>(&s, S1529{ x: 0 }); - move_to>(&s, S1530{ x: 0 }); - move_to>(&s, S1531{ x: 0 }); - move_to>(&s, S1532{ x: 0 }); - move_to>(&s, S1533{ x: 0 }); - move_to>(&s, S1534{ x: 0 }); - move_to>(&s, S1535{ x: 0 }); - move_to>(&s, S1536{ x: 0 }); - move_to>(&s, S1537{ x: 0 }); - move_to>(&s, S1538{ x: 0 }); - move_to>(&s, S1539{ x: 0 }); - move_to>(&s, S1540{ x: 0 }); - move_to>(&s, S1541{ x: 0 }); - move_to>(&s, S1542{ x: 0 }); - move_to>(&s, S1543{ x: 0 }); - move_to>(&s, S1544{ x: 0 }); - move_to>(&s, S1545{ x: 0 }); - move_to>(&s, S1546{ x: 0 }); - move_to>(&s, S1547{ x: 0 }); - move_to>(&s, S1548{ x: 0 }); - move_to>(&s, S1549{ x: 0 }); - move_to>(&s, S1550{ x: 0 }); - move_to>(&s, S1551{ x: 0 }); - move_to>(&s, S1552{ x: 0 }); - move_to>(&s, S1553{ x: 0 }); - move_to>(&s, S1554{ x: 0 }); - move_to>(&s, S1555{ x: 0 }); - move_to>(&s, S1556{ x: 0 }); - move_to>(&s, S1557{ x: 0 }); - move_to>(&s, S1558{ x: 0 }); - move_to>(&s, S1559{ x: 0 }); - move_to>(&s, S1560{ x: 0 }); - move_to>(&s, S1561{ x: 0 }); - move_to>(&s, S1562{ x: 0 }); - move_to>(&s, S1563{ x: 0 }); - move_to>(&s, S1564{ x: 0 }); - move_to>(&s, S1565{ x: 0 }); - move_to>(&s, S1566{ x: 0 }); - move_to>(&s, S1567{ x: 0 }); - move_to>(&s, S1568{ x: 0 }); - move_to>(&s, S1569{ x: 0 }); - move_to>(&s, S1570{ x: 0 }); - move_to>(&s, S1571{ x: 0 }); - move_to>(&s, S1572{ x: 0 }); - move_to>(&s, S1573{ x: 0 }); - move_to>(&s, S1574{ x: 0 }); - move_to>(&s, S1575{ x: 0 }); - move_to>(&s, S1576{ x: 0 }); - move_to>(&s, S1577{ x: 0 }); - move_to>(&s, S1578{ x: 0 }); - move_to>(&s, S1579{ x: 0 }); - move_to>(&s, S1580{ x: 0 }); - move_to>(&s, S1581{ x: 0 }); - move_to>(&s, S1582{ x: 0 }); - move_to>(&s, S1583{ x: 0 }); - move_to>(&s, S1584{ x: 0 }); - move_to>(&s, S1585{ x: 0 }); - move_to>(&s, S1586{ x: 0 }); - move_to>(&s, S1587{ x: 0 }); - move_to>(&s, S1588{ x: 0 }); - move_to>(&s, S1589{ x: 0 }); - move_to>(&s, S1590{ x: 0 }); - move_to>(&s, S1591{ x: 0 }); - move_to>(&s, S1592{ x: 0 }); - move_to>(&s, S1593{ x: 0 }); - move_to>(&s, S1594{ x: 0 }); - move_to>(&s, S1595{ x: 0 }); - move_to>(&s, S1596{ x: 0 }); - move_to>(&s, S1597{ x: 0 }); - move_to>(&s, S1598{ x: 0 }); - move_to>(&s, S1599{ x: 0 }); - move_to>(&s, S1600{ x: 0 }); - return; - } -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/global-operations-generic/mut-borrow-global-generic.mvir b/aptos-move/aptos-gas-calibration/samples_ir/global-operations-generic/mut-borrow-global-generic.mvir deleted file mode 100644 index 9c81ad70524b1..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/global-operations-generic/mut-borrow-global-generic.mvir +++ /dev/null @@ -1,134 +0,0 @@ -module 0xcafe.MutBorrowGlobalGeneric { - struct S1 has key, drop { x: T } - struct S2 has key, drop { x: T } - struct S3 has key, drop { x: T } - struct S4 has key, drop { x: T } - struct S5 has key, drop { x: T } - struct S6 has key, drop { x: T } - struct S7 has key, drop { x: T } - struct S8 has key, drop { x: T } - struct S9 has key, drop { x: T } - struct S10 has key, drop { x: T } - struct S11 has key, drop { x: T } - struct S12 has key, drop { x: T } - struct S13 has key, drop { x: T } - struct S14 has key, drop { x: T } - struct S15 has key, drop { x: T } - struct S16 has key, drop { x: T } - struct S17 has key, drop { x: T } - struct S18 has key, drop { x: T } - struct S19 has key, drop { x: T } - struct S20 has key, drop { x: T } - struct S21 has key, drop { x: T } - struct S22 has key, drop { x: T } - struct S23 has key, drop { x: T } - struct S24 has key, drop { x: T } - struct S25 has key, drop { x: T } - struct S26 has key, drop { x: T } - struct S27 has key, drop { x: T } - struct S28 has key, drop { x: T } - struct S29 has key, drop { x: T } - struct S30 has key, drop { x: T } - - public entry calibrate_mut_borrow_global_generic_x100(s: signer) acquires S1, S2, S3, S4, S5, S6, S7, S8, S9, S10 { - let i: u64; - label entry: - i = 0; - move_to>(&s, S1{ x: 0 }); - move_to>(&s, S2{ x: 0 }); - move_to>(&s, S3{ x: 0 }); - move_to>(&s, S4{ x: 0 }); - move_to>(&s, S5{ x: 0 }); - move_to>(&s, S6{ x: 0 }); - move_to>(&s, S7{ x: 0 }); - move_to>(&s, S8{ x: 0 }); - move_to>(&s, S9{ x: 0 }); - move_to>(&s, S10{ x: 0 }); - label loop_start: - jump_if_false (copy(i) < 100) loop_end; - i = move(i) + 1; - - _ = borrow_global_mut>(0xcafe); - _ = borrow_global_mut>(0xcafe); - _ = borrow_global_mut>(0xcafe); - _ = borrow_global_mut>(0xcafe); - _ = borrow_global_mut>(0xcafe); - _ = borrow_global_mut>(0xcafe); - _ = borrow_global_mut>(0xcafe); - _ = borrow_global_mut>(0xcafe); - _ = borrow_global_mut>(0xcafe); - _ = borrow_global_mut>(0xcafe); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_mut_borrow_global_generic_x500(s: signer) acquires S11, S12, S13, S14, S15, S16, S17, S18, S19, S20 { - let i: u64; - label entry: - i = 0; - move_to>(&s, S11{ x: 0 }); - move_to>(&s, S12{ x: 0 }); - move_to>(&s, S13{ x: 0 }); - move_to>(&s, S14{ x: 0 }); - move_to>(&s, S15{ x: 0 }); - move_to>(&s, S16{ x: 0 }); - move_to>(&s, S17{ x: 0 }); - move_to>(&s, S18{ x: 0 }); - move_to>(&s, S19{ x: 0 }); - move_to>(&s, S20{ x: 0 }); - label loop_start: - jump_if_false (copy(i) < 500) loop_end; - i = move(i) + 1; - - _ = borrow_global_mut>(0xcafe); - _ = borrow_global_mut>(0xcafe); - _ = borrow_global_mut>(0xcafe); - _ = borrow_global_mut>(0xcafe); - _ = borrow_global_mut>(0xcafe); - _ = borrow_global_mut>(0xcafe); - _ = borrow_global_mut>(0xcafe); - _ = borrow_global_mut>(0xcafe); - _ = borrow_global_mut>(0xcafe); - _ = borrow_global_mut>(0xcafe); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_mut_borrow_global_generic_x1500(s: signer) acquires S21, S22, S23, S24, S25, S26, S27, S28, S29, S30 { - let i: u64; - label entry: - i = 0; - move_to>(&s, S21{ x: 0 }); - move_to>(&s, S22{ x: 0 }); - move_to>(&s, S23{ x: 0 }); - move_to>(&s, S24{ x: 0 }); - move_to>(&s, S25{ x: 0 }); - move_to>(&s, S26{ x: 0 }); - move_to>(&s, S27{ x: 0 }); - move_to>(&s, S28{ x: 0 }); - move_to>(&s, S29{ x: 0 }); - move_to>(&s, S30{ x: 0 }); - label loop_start: - jump_if_false (copy(i) < 1500) loop_end; - i = move(i) + 1; - - _ = borrow_global_mut>(0xcafe); - _ = borrow_global_mut>(0xcafe); - _ = borrow_global_mut>(0xcafe); - _ = borrow_global_mut>(0xcafe); - _ = borrow_global_mut>(0xcafe); - _ = borrow_global_mut>(0xcafe); - _ = borrow_global_mut>(0xcafe); - _ = borrow_global_mut>(0xcafe); - _ = borrow_global_mut>(0xcafe); - _ = borrow_global_mut>(0xcafe); - - jump loop_start; - label loop_end: - return; - } -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/global-operations/exists.mvir b/aptos-move/aptos-gas-calibration/samples_ir/global-operations/exists.mvir deleted file mode 100644 index 6a9df4d904bd5..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/global-operations/exists.mvir +++ /dev/null @@ -1,138 +0,0 @@ -module 0xcafe.Exists { - struct S1 has key, drop { x1: u64 } - struct S2 has key, drop { x1: u64, x2: u64, x3: u64, x4: u64, x5: u64, x6: u64, x7: u64, x8: u64 } - struct S3 has key, drop { x1: u64, x2: u64, x3: u64, x4: u64, x5: u64, x6: u64, x7: u64, x8: u64, x9: u64, x10: u64, x11: u64, x12: u64, x13: u64, x14: u64, x15: u64, x16: u64, x17: u64, x18: u64, x19: u64, x20: u64, x21: u64, x22: u64, x23: u64, x24: u64, x25: u64, x26: u64, x27: u64, x28: u64, x29: u64, x30: u64, x31: u64, x32: u64} - struct S4 has key, drop { x1: u64, x2: u64, x3: u64, x4: u64, x5: u64, x6: u64, x7: u64, x8: u64, x9: u64, x10: u64, x11: u64, x12: u64, x13: u64, x14: u64, x15: u64, x16: u64, x17: u64, x18: u64, x19: u64, x20: u64, x21: u64, x22: u64, x23: u64, x24: u64, x25: u64, x26: u64, x27: u64, x28: u64, x29: u64, x30: u64, x31: u64, x32: u64, x33: u64, x34: u64, x35: u64, x36: u64, x37: u64, x38: u64, x39: u64, x40: u64, x41: u64, x42: u64, x43: u64, x44: u64, x45: u64, x46: u64, x47: u64, x48: u64, x49: u64, x50: u64, x51: u64, x52: u64, x53: u64, x54: u64, x55: u64, x56: u64, x57: u64, x58: u64, x59: u64, x60: u64, x61: u64, x62: u64, x63: u64, x64: u64 } - - public calibrate_exists_s1_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _, _, _, _, _, _, _, _, _, _ = (exists(0xcafe), exists(0xcafe), exists(0xcafe), exists(0xcafe), exists(0xcafe), exists(0xcafe), exists(0xcafe), exists(0xcafe), exists(0xcafe), exists(0xcafe)); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_exists_s1_x100() { - label b0: - Self.calibrate_exists_s1_impl(10); - return; - } - - public entry calibrate_exists_s1_x1000() { - label b0: - Self.calibrate_exists_s1_impl(100); - return; - } - - public entry calibrate_exists_s1_x5000() { - label b0: - Self.calibrate_exists_s1_impl(500); - return; - } - - public calibrate_exists_s2_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _, _, _, _, _, _, _, _, _, _ = (exists(0xcafe), exists(0xcafe), exists(0xcafe), exists(0xcafe), exists(0xcafe), exists(0xcafe), exists(0xcafe), exists(0xcafe), exists(0xcafe), exists(0xcafe)); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_exists_s2_x100() { - label b0: - Self.calibrate_exists_s2_impl(10); - return; - } - - public entry calibrate_exists_s2_x1000() { - label b0: - Self.calibrate_exists_s2_impl(100); - return; - } - - public entry calibrate_exists_s2_x5000() { - label b0: - Self.calibrate_exists_s2_impl(500); - return; - } - - public calibrate_exists_s3_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _, _, _, _, _, _, _, _, _, _ = (exists(0xcafe), exists(0xcafe), exists(0xcafe), exists(0xcafe), exists(0xcafe), exists(0xcafe), exists(0xcafe), exists(0xcafe), exists(0xcafe), exists(0xcafe)); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_exists_s3_x100() { - label b0: - Self.calibrate_exists_s3_impl(10); - return; - } - - public entry calibrate_exists_s3_x1000() { - label b0: - Self.calibrate_exists_s3_impl(100); - return; - } - - public entry calibrate_exists_s3_x5000() { - label b0: - Self.calibrate_exists_s3_impl(500); - return; - } - - public calibrate_exists_s4_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _, _, _, _, _, _, _, _, _, _ = (exists(0xcafe), exists(0xcafe), exists(0xcafe), exists(0xcafe), exists(0xcafe), exists(0xcafe), exists(0xcafe), exists(0xcafe), exists(0xcafe), exists(0xcafe)); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_exists_s4_x100() { - label b0: - Self.calibrate_exists_s4_impl(10); - return; - } - - public entry calibrate_exists_s4_x1000() { - label b0: - Self.calibrate_exists_s4_impl(100); - return; - } - - public entry calibrate_exists_s4_x5000() { - label b0: - Self.calibrate_exists_s4_impl(500); - return; - } -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/global-operations/imm-borrow-global.mvir b/aptos-move/aptos-gas-calibration/samples_ir/global-operations/imm-borrow-global.mvir deleted file mode 100644 index 2c13060cbc2a5..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/global-operations/imm-borrow-global.mvir +++ /dev/null @@ -1,53 +0,0 @@ -module 0xcafe.ImmBorrowGlobal { - struct S1 has key, drop { x: u64 } - struct S2 has key, drop { x: u64 } - struct S3 has key, drop { x: u64 } - - public entry calibrate_imm_borrow_global_x100(s: signer) acquires S1 { - let i: u64; - label entry: - i = 0; - move_to(&s, S1{x:0}); - label loop_start: - jump_if_false (copy(i) < 100) loop_end; - i = move(i) + 1; - - _, _, _, _, _, _, _, _, _, _ = (borrow_global(0xcafe), borrow_global(0xcafe), borrow_global(0xcafe), borrow_global(0xcafe), borrow_global(0xcafe), borrow_global(0xcafe), borrow_global(0xcafe), borrow_global(0xcafe), borrow_global(0xcafe), borrow_global(0xcafe)); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_imm_borrow_global_x500(s: signer) acquires S2 { - let i: u64; - label entry: - i = 0; - move_to(&s, S2{x:0}); - label loop_start: - jump_if_false (copy(i) < 500) loop_end; - i = move(i) + 1; - - _, _, _, _, _, _, _, _, _, _ = (borrow_global(0xcafe), borrow_global(0xcafe), borrow_global(0xcafe), borrow_global(0xcafe), borrow_global(0xcafe), borrow_global(0xcafe), borrow_global(0xcafe), borrow_global(0xcafe), borrow_global(0xcafe), borrow_global(0xcafe)); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_imm_borrow_global_x1000(s: signer) acquires S3 { - let i: u64; - label entry: - i = 0; - move_to(&s, S3{x:0}); - label loop_start: - jump_if_false (copy(i) < 1000) loop_end; - i = move(i) + 1; - - _, _, _, _, _, _, _, _, _, _ = (borrow_global(0xcafe), borrow_global(0xcafe), borrow_global(0xcafe), borrow_global(0xcafe), borrow_global(0xcafe), borrow_global(0xcafe), borrow_global(0xcafe), borrow_global(0xcafe), borrow_global(0xcafe), borrow_global(0xcafe)); - - jump loop_start; - label loop_end: - return; - } -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/global-operations/move-from.mvir b/aptos-move/aptos-gas-calibration/samples_ir/global-operations/move-from.mvir deleted file mode 100644 index 77ac6e6b8c7fb..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/global-operations/move-from.mvir +++ /dev/null @@ -1,132 +0,0 @@ -module 0xcafe.MoveFrom { - struct S1 has key, drop { x: u64 } - - public entry calibrate_move_from_x100(s: signer) acquires S1 { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < 100) loop_end; - i = move(i) + 1; - - move_to(&s, S1{ x: 0 }); - _ = move_from(0xcafe); - - move_to(&s, S1{ x: 0 }); - _ = move_from(0xcafe); - - move_to(&s, S1{ x: 0 }); - _ = move_from(0xcafe); - - move_to(&s, S1{ x: 0 }); - _ = move_from(0xcafe); - - move_to(&s, S1{ x: 0 }); - _ = move_from(0xcafe); - - move_to(&s, S1{ x: 0 }); - _ = move_from(0xcafe); - - move_to(&s, S1{ x: 0 }); - _ = move_from(0xcafe); - - move_to(&s, S1{ x: 0 }); - _ = move_from(0xcafe); - - move_to(&s, S1{ x: 0 }); - _ = move_from(0xcafe); - - move_to(&s, S1{ x: 0 }); - _ = move_from(0xcafe); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_move_from_x1000(s: signer) acquires S1 { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < 1000) loop_end; - i = move(i) + 1; - - move_to(&s, S1{ x: 0 }); - _ = move_from(0xcafe); - - move_to(&s, S1{ x: 0 }); - _ = move_from(0xcafe); - - move_to(&s, S1{ x: 0 }); - _ = move_from(0xcafe); - - move_to(&s, S1{ x: 0 }); - _ = move_from(0xcafe); - - move_to(&s, S1{ x: 0 }); - _ = move_from(0xcafe); - - move_to(&s, S1{ x: 0 }); - _ = move_from(0xcafe); - - move_to(&s, S1{ x: 0 }); - _ = move_from(0xcafe); - - move_to(&s, S1{ x: 0 }); - _ = move_from(0xcafe); - - move_to(&s, S1{ x: 0 }); - _ = move_from(0xcafe); - - move_to(&s, S1{ x: 0 }); - _ = move_from(0xcafe); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_move_from_x5000(s: signer) acquires S1 { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < 5000) loop_end; - i = move(i) + 1; - - move_to(&s, S1{ x: 0 }); - _ = move_from(0xcafe); - - move_to(&s, S1{ x: 0 }); - _ = move_from(0xcafe); - - move_to(&s, S1{ x: 0 }); - _ = move_from(0xcafe); - - move_to(&s, S1{ x: 0 }); - _ = move_from(0xcafe); - - move_to(&s, S1{ x: 0 }); - _ = move_from(0xcafe); - - move_to(&s, S1{ x: 0 }); - _ = move_from(0xcafe); - - move_to(&s, S1{ x: 0 }); - _ = move_from(0xcafe); - - move_to(&s, S1{ x: 0 }); - _ = move_from(0xcafe); - - move_to(&s, S1{ x: 0 }); - _ = move_from(0xcafe); - - move_to(&s, S1{ x: 0 }); - _ = move_from(0xcafe); - - jump loop_start; - label loop_end: - return; - } -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/global-operations/move-to.mvir b/aptos-move/aptos-gas-calibration/samples_ir/global-operations/move-to.mvir deleted file mode 100644 index 3cb0f87f0629b..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/global-operations/move-to.mvir +++ /dev/null @@ -1,3217 +0,0 @@ -module 0xcafe.MoveTo { - struct S1 has key, drop { x: u64 } - struct S2 has key, drop { x: u64 } - struct S3 has key, drop { x: u64 } - struct S4 has key, drop { x: u64 } - struct S5 has key, drop { x: u64 } - struct S6 has key, drop { x: u64 } - struct S7 has key, drop { x: u64 } - struct S8 has key, drop { x: u64 } - struct S9 has key, drop { x: u64 } - struct S10 has key, drop { x: u64 } - struct S11 has key, drop { x: u64 } - struct S12 has key, drop { x: u64 } - struct S13 has key, drop { x: u64 } - struct S14 has key, drop { x: u64 } - struct S15 has key, drop { x: u64 } - struct S16 has key, drop { x: u64 } - struct S17 has key, drop { x: u64 } - struct S18 has key, drop { x: u64 } - struct S19 has key, drop { x: u64 } - struct S20 has key, drop { x: u64 } - struct S21 has key, drop { x: u64 } - struct S22 has key, drop { x: u64 } - struct S23 has key, drop { x: u64 } - struct S24 has key, drop { x: u64 } - struct S25 has key, drop { x: u64 } - struct S26 has key, drop { x: u64 } - struct S27 has key, drop { x: u64 } - struct S28 has key, drop { x: u64 } - struct S29 has key, drop { x: u64 } - struct S30 has key, drop { x: u64 } - struct S31 has key, drop { x: u64 } - struct S32 has key, drop { x: u64 } - struct S33 has key, drop { x: u64 } - struct S34 has key, drop { x: u64 } - struct S35 has key, drop { x: u64 } - struct S36 has key, drop { x: u64 } - struct S37 has key, drop { x: u64 } - struct S38 has key, drop { x: u64 } - struct S39 has key, drop { x: u64 } - struct S40 has key, drop { x: u64 } - struct S41 has key, drop { x: u64 } - struct S42 has key, drop { x: u64 } - struct S43 has key, drop { x: u64 } - struct S44 has key, drop { x: u64 } - struct S45 has key, drop { x: u64 } - struct S46 has key, drop { x: u64 } - struct S47 has key, drop { x: u64 } - struct S48 has key, drop { x: u64 } - struct S49 has key, drop { x: u64 } - struct S50 has key, drop { x: u64 } - struct S51 has key, drop { x: u64 } - struct S52 has key, drop { x: u64 } - struct S53 has key, drop { x: u64 } - struct S54 has key, drop { x: u64 } - struct S55 has key, drop { x: u64 } - struct S56 has key, drop { x: u64 } - struct S57 has key, drop { x: u64 } - struct S58 has key, drop { x: u64 } - struct S59 has key, drop { x: u64 } - struct S60 has key, drop { x: u64 } - struct S61 has key, drop { x: u64 } - struct S62 has key, drop { x: u64 } - struct S63 has key, drop { x: u64 } - struct S64 has key, drop { x: u64 } - struct S65 has key, drop { x: u64 } - struct S66 has key, drop { x: u64 } - struct S67 has key, drop { x: u64 } - struct S68 has key, drop { x: u64 } - struct S69 has key, drop { x: u64 } - struct S70 has key, drop { x: u64 } - struct S71 has key, drop { x: u64 } - struct S72 has key, drop { x: u64 } - struct S73 has key, drop { x: u64 } - struct S74 has key, drop { x: u64 } - struct S75 has key, drop { x: u64 } - struct S76 has key, drop { x: u64 } - struct S77 has key, drop { x: u64 } - struct S78 has key, drop { x: u64 } - struct S79 has key, drop { x: u64 } - struct S80 has key, drop { x: u64 } - struct S81 has key, drop { x: u64 } - struct S82 has key, drop { x: u64 } - struct S83 has key, drop { x: u64 } - struct S84 has key, drop { x: u64 } - struct S85 has key, drop { x: u64 } - struct S86 has key, drop { x: u64 } - struct S87 has key, drop { x: u64 } - struct S88 has key, drop { x: u64 } - struct S89 has key, drop { x: u64 } - struct S90 has key, drop { x: u64 } - struct S91 has key, drop { x: u64 } - struct S92 has key, drop { x: u64 } - struct S93 has key, drop { x: u64 } - struct S94 has key, drop { x: u64 } - struct S95 has key, drop { x: u64 } - struct S96 has key, drop { x: u64 } - struct S97 has key, drop { x: u64 } - struct S98 has key, drop { x: u64 } - struct S99 has key, drop { x: u64 } - struct S100 has key, drop { x: u64 } - struct S101 has key, drop { x: u64 } - struct S102 has key, drop { x: u64 } - struct S103 has key, drop { x: u64 } - struct S104 has key, drop { x: u64 } - struct S105 has key, drop { x: u64 } - struct S106 has key, drop { x: u64 } - struct S107 has key, drop { x: u64 } - struct S108 has key, drop { x: u64 } - struct S109 has key, drop { x: u64 } - struct S110 has key, drop { x: u64 } - struct S111 has key, drop { x: u64 } - struct S112 has key, drop { x: u64 } - struct S113 has key, drop { x: u64 } - struct S114 has key, drop { x: u64 } - struct S115 has key, drop { x: u64 } - struct S116 has key, drop { x: u64 } - struct S117 has key, drop { x: u64 } - struct S118 has key, drop { x: u64 } - struct S119 has key, drop { x: u64 } - struct S120 has key, drop { x: u64 } - struct S121 has key, drop { x: u64 } - struct S122 has key, drop { x: u64 } - struct S123 has key, drop { x: u64 } - struct S124 has key, drop { x: u64 } - struct S125 has key, drop { x: u64 } - struct S126 has key, drop { x: u64 } - struct S127 has key, drop { x: u64 } - struct S128 has key, drop { x: u64 } - struct S129 has key, drop { x: u64 } - struct S130 has key, drop { x: u64 } - struct S131 has key, drop { x: u64 } - struct S132 has key, drop { x: u64 } - struct S133 has key, drop { x: u64 } - struct S134 has key, drop { x: u64 } - struct S135 has key, drop { x: u64 } - struct S136 has key, drop { x: u64 } - struct S137 has key, drop { x: u64 } - struct S138 has key, drop { x: u64 } - struct S139 has key, drop { x: u64 } - struct S140 has key, drop { x: u64 } - struct S141 has key, drop { x: u64 } - struct S142 has key, drop { x: u64 } - struct S143 has key, drop { x: u64 } - struct S144 has key, drop { x: u64 } - struct S145 has key, drop { x: u64 } - struct S146 has key, drop { x: u64 } - struct S147 has key, drop { x: u64 } - struct S148 has key, drop { x: u64 } - struct S149 has key, drop { x: u64 } - struct S150 has key, drop { x: u64 } - struct S151 has key, drop { x: u64 } - struct S152 has key, drop { x: u64 } - struct S153 has key, drop { x: u64 } - struct S154 has key, drop { x: u64 } - struct S155 has key, drop { x: u64 } - struct S156 has key, drop { x: u64 } - struct S157 has key, drop { x: u64 } - struct S158 has key, drop { x: u64 } - struct S159 has key, drop { x: u64 } - struct S160 has key, drop { x: u64 } - struct S161 has key, drop { x: u64 } - struct S162 has key, drop { x: u64 } - struct S163 has key, drop { x: u64 } - struct S164 has key, drop { x: u64 } - struct S165 has key, drop { x: u64 } - struct S166 has key, drop { x: u64 } - struct S167 has key, drop { x: u64 } - struct S168 has key, drop { x: u64 } - struct S169 has key, drop { x: u64 } - struct S170 has key, drop { x: u64 } - struct S171 has key, drop { x: u64 } - struct S172 has key, drop { x: u64 } - struct S173 has key, drop { x: u64 } - struct S174 has key, drop { x: u64 } - struct S175 has key, drop { x: u64 } - struct S176 has key, drop { x: u64 } - struct S177 has key, drop { x: u64 } - struct S178 has key, drop { x: u64 } - struct S179 has key, drop { x: u64 } - struct S180 has key, drop { x: u64 } - struct S181 has key, drop { x: u64 } - struct S182 has key, drop { x: u64 } - struct S183 has key, drop { x: u64 } - struct S184 has key, drop { x: u64 } - struct S185 has key, drop { x: u64 } - struct S186 has key, drop { x: u64 } - struct S187 has key, drop { x: u64 } - struct S188 has key, drop { x: u64 } - struct S189 has key, drop { x: u64 } - struct S190 has key, drop { x: u64 } - struct S191 has key, drop { x: u64 } - struct S192 has key, drop { x: u64 } - struct S193 has key, drop { x: u64 } - struct S194 has key, drop { x: u64 } - struct S195 has key, drop { x: u64 } - struct S196 has key, drop { x: u64 } - struct S197 has key, drop { x: u64 } - struct S198 has key, drop { x: u64 } - struct S199 has key, drop { x: u64 } - struct S200 has key, drop { x: u64 } - struct S201 has key, drop { x: u64 } - struct S202 has key, drop { x: u64 } - struct S203 has key, drop { x: u64 } - struct S204 has key, drop { x: u64 } - struct S205 has key, drop { x: u64 } - struct S206 has key, drop { x: u64 } - struct S207 has key, drop { x: u64 } - struct S208 has key, drop { x: u64 } - struct S209 has key, drop { x: u64 } - struct S210 has key, drop { x: u64 } - struct S211 has key, drop { x: u64 } - struct S212 has key, drop { x: u64 } - struct S213 has key, drop { x: u64 } - struct S214 has key, drop { x: u64 } - struct S215 has key, drop { x: u64 } - struct S216 has key, drop { x: u64 } - struct S217 has key, drop { x: u64 } - struct S218 has key, drop { x: u64 } - struct S219 has key, drop { x: u64 } - struct S220 has key, drop { x: u64 } - struct S221 has key, drop { x: u64 } - struct S222 has key, drop { x: u64 } - struct S223 has key, drop { x: u64 } - struct S224 has key, drop { x: u64 } - struct S225 has key, drop { x: u64 } - struct S226 has key, drop { x: u64 } - struct S227 has key, drop { x: u64 } - struct S228 has key, drop { x: u64 } - struct S229 has key, drop { x: u64 } - struct S230 has key, drop { x: u64 } - struct S231 has key, drop { x: u64 } - struct S232 has key, drop { x: u64 } - struct S233 has key, drop { x: u64 } - struct S234 has key, drop { x: u64 } - struct S235 has key, drop { x: u64 } - struct S236 has key, drop { x: u64 } - struct S237 has key, drop { x: u64 } - struct S238 has key, drop { x: u64 } - struct S239 has key, drop { x: u64 } - struct S240 has key, drop { x: u64 } - struct S241 has key, drop { x: u64 } - struct S242 has key, drop { x: u64 } - struct S243 has key, drop { x: u64 } - struct S244 has key, drop { x: u64 } - struct S245 has key, drop { x: u64 } - struct S246 has key, drop { x: u64 } - struct S247 has key, drop { x: u64 } - struct S248 has key, drop { x: u64 } - struct S249 has key, drop { x: u64 } - struct S250 has key, drop { x: u64 } - struct S251 has key, drop { x: u64 } - struct S252 has key, drop { x: u64 } - struct S253 has key, drop { x: u64 } - struct S254 has key, drop { x: u64 } - struct S255 has key, drop { x: u64 } - struct S256 has key, drop { x: u64 } - struct S257 has key, drop { x: u64 } - struct S258 has key, drop { x: u64 } - struct S259 has key, drop { x: u64 } - struct S260 has key, drop { x: u64 } - struct S261 has key, drop { x: u64 } - struct S262 has key, drop { x: u64 } - struct S263 has key, drop { x: u64 } - struct S264 has key, drop { x: u64 } - struct S265 has key, drop { x: u64 } - struct S266 has key, drop { x: u64 } - struct S267 has key, drop { x: u64 } - struct S268 has key, drop { x: u64 } - struct S269 has key, drop { x: u64 } - struct S270 has key, drop { x: u64 } - struct S271 has key, drop { x: u64 } - struct S272 has key, drop { x: u64 } - struct S273 has key, drop { x: u64 } - struct S274 has key, drop { x: u64 } - struct S275 has key, drop { x: u64 } - struct S276 has key, drop { x: u64 } - struct S277 has key, drop { x: u64 } - struct S278 has key, drop { x: u64 } - struct S279 has key, drop { x: u64 } - struct S280 has key, drop { x: u64 } - struct S281 has key, drop { x: u64 } - struct S282 has key, drop { x: u64 } - struct S283 has key, drop { x: u64 } - struct S284 has key, drop { x: u64 } - struct S285 has key, drop { x: u64 } - struct S286 has key, drop { x: u64 } - struct S287 has key, drop { x: u64 } - struct S288 has key, drop { x: u64 } - struct S289 has key, drop { x: u64 } - struct S290 has key, drop { x: u64 } - struct S291 has key, drop { x: u64 } - struct S292 has key, drop { x: u64 } - struct S293 has key, drop { x: u64 } - struct S294 has key, drop { x: u64 } - struct S295 has key, drop { x: u64 } - struct S296 has key, drop { x: u64 } - struct S297 has key, drop { x: u64 } - struct S298 has key, drop { x: u64 } - struct S299 has key, drop { x: u64 } - struct S300 has key, drop { x: u64 } - struct S301 has key, drop { x: u64 } - struct S302 has key, drop { x: u64 } - struct S303 has key, drop { x: u64 } - struct S304 has key, drop { x: u64 } - struct S305 has key, drop { x: u64 } - struct S306 has key, drop { x: u64 } - struct S307 has key, drop { x: u64 } - struct S308 has key, drop { x: u64 } - struct S309 has key, drop { x: u64 } - struct S310 has key, drop { x: u64 } - struct S311 has key, drop { x: u64 } - struct S312 has key, drop { x: u64 } - struct S313 has key, drop { x: u64 } - struct S314 has key, drop { x: u64 } - struct S315 has key, drop { x: u64 } - struct S316 has key, drop { x: u64 } - struct S317 has key, drop { x: u64 } - struct S318 has key, drop { x: u64 } - struct S319 has key, drop { x: u64 } - struct S320 has key, drop { x: u64 } - struct S321 has key, drop { x: u64 } - struct S322 has key, drop { x: u64 } - struct S323 has key, drop { x: u64 } - struct S324 has key, drop { x: u64 } - struct S325 has key, drop { x: u64 } - struct S326 has key, drop { x: u64 } - struct S327 has key, drop { x: u64 } - struct S328 has key, drop { x: u64 } - struct S329 has key, drop { x: u64 } - struct S330 has key, drop { x: u64 } - struct S331 has key, drop { x: u64 } - struct S332 has key, drop { x: u64 } - struct S333 has key, drop { x: u64 } - struct S334 has key, drop { x: u64 } - struct S335 has key, drop { x: u64 } - struct S336 has key, drop { x: u64 } - struct S337 has key, drop { x: u64 } - struct S338 has key, drop { x: u64 } - struct S339 has key, drop { x: u64 } - struct S340 has key, drop { x: u64 } - struct S341 has key, drop { x: u64 } - struct S342 has key, drop { x: u64 } - struct S343 has key, drop { x: u64 } - struct S344 has key, drop { x: u64 } - struct S345 has key, drop { x: u64 } - struct S346 has key, drop { x: u64 } - struct S347 has key, drop { x: u64 } - struct S348 has key, drop { x: u64 } - struct S349 has key, drop { x: u64 } - struct S350 has key, drop { x: u64 } - struct S351 has key, drop { x: u64 } - struct S352 has key, drop { x: u64 } - struct S353 has key, drop { x: u64 } - struct S354 has key, drop { x: u64 } - struct S355 has key, drop { x: u64 } - struct S356 has key, drop { x: u64 } - struct S357 has key, drop { x: u64 } - struct S358 has key, drop { x: u64 } - struct S359 has key, drop { x: u64 } - struct S360 has key, drop { x: u64 } - struct S361 has key, drop { x: u64 } - struct S362 has key, drop { x: u64 } - struct S363 has key, drop { x: u64 } - struct S364 has key, drop { x: u64 } - struct S365 has key, drop { x: u64 } - struct S366 has key, drop { x: u64 } - struct S367 has key, drop { x: u64 } - struct S368 has key, drop { x: u64 } - struct S369 has key, drop { x: u64 } - struct S370 has key, drop { x: u64 } - struct S371 has key, drop { x: u64 } - struct S372 has key, drop { x: u64 } - struct S373 has key, drop { x: u64 } - struct S374 has key, drop { x: u64 } - struct S375 has key, drop { x: u64 } - struct S376 has key, drop { x: u64 } - struct S377 has key, drop { x: u64 } - struct S378 has key, drop { x: u64 } - struct S379 has key, drop { x: u64 } - struct S380 has key, drop { x: u64 } - struct S381 has key, drop { x: u64 } - struct S382 has key, drop { x: u64 } - struct S383 has key, drop { x: u64 } - struct S384 has key, drop { x: u64 } - struct S385 has key, drop { x: u64 } - struct S386 has key, drop { x: u64 } - struct S387 has key, drop { x: u64 } - struct S388 has key, drop { x: u64 } - struct S389 has key, drop { x: u64 } - struct S390 has key, drop { x: u64 } - struct S391 has key, drop { x: u64 } - struct S392 has key, drop { x: u64 } - struct S393 has key, drop { x: u64 } - struct S394 has key, drop { x: u64 } - struct S395 has key, drop { x: u64 } - struct S396 has key, drop { x: u64 } - struct S397 has key, drop { x: u64 } - struct S398 has key, drop { x: u64 } - struct S399 has key, drop { x: u64 } - struct S400 has key, drop { x: u64 } - struct S401 has key, drop { x: u64 } - struct S402 has key, drop { x: u64 } - struct S403 has key, drop { x: u64 } - struct S404 has key, drop { x: u64 } - struct S405 has key, drop { x: u64 } - struct S406 has key, drop { x: u64 } - struct S407 has key, drop { x: u64 } - struct S408 has key, drop { x: u64 } - struct S409 has key, drop { x: u64 } - struct S410 has key, drop { x: u64 } - struct S411 has key, drop { x: u64 } - struct S412 has key, drop { x: u64 } - struct S413 has key, drop { x: u64 } - struct S414 has key, drop { x: u64 } - struct S415 has key, drop { x: u64 } - struct S416 has key, drop { x: u64 } - struct S417 has key, drop { x: u64 } - struct S418 has key, drop { x: u64 } - struct S419 has key, drop { x: u64 } - struct S420 has key, drop { x: u64 } - struct S421 has key, drop { x: u64 } - struct S422 has key, drop { x: u64 } - struct S423 has key, drop { x: u64 } - struct S424 has key, drop { x: u64 } - struct S425 has key, drop { x: u64 } - struct S426 has key, drop { x: u64 } - struct S427 has key, drop { x: u64 } - struct S428 has key, drop { x: u64 } - struct S429 has key, drop { x: u64 } - struct S430 has key, drop { x: u64 } - struct S431 has key, drop { x: u64 } - struct S432 has key, drop { x: u64 } - struct S433 has key, drop { x: u64 } - struct S434 has key, drop { x: u64 } - struct S435 has key, drop { x: u64 } - struct S436 has key, drop { x: u64 } - struct S437 has key, drop { x: u64 } - struct S438 has key, drop { x: u64 } - struct S439 has key, drop { x: u64 } - struct S440 has key, drop { x: u64 } - struct S441 has key, drop { x: u64 } - struct S442 has key, drop { x: u64 } - struct S443 has key, drop { x: u64 } - struct S444 has key, drop { x: u64 } - struct S445 has key, drop { x: u64 } - struct S446 has key, drop { x: u64 } - struct S447 has key, drop { x: u64 } - struct S448 has key, drop { x: u64 } - struct S449 has key, drop { x: u64 } - struct S450 has key, drop { x: u64 } - struct S451 has key, drop { x: u64 } - struct S452 has key, drop { x: u64 } - struct S453 has key, drop { x: u64 } - struct S454 has key, drop { x: u64 } - struct S455 has key, drop { x: u64 } - struct S456 has key, drop { x: u64 } - struct S457 has key, drop { x: u64 } - struct S458 has key, drop { x: u64 } - struct S459 has key, drop { x: u64 } - struct S460 has key, drop { x: u64 } - struct S461 has key, drop { x: u64 } - struct S462 has key, drop { x: u64 } - struct S463 has key, drop { x: u64 } - struct S464 has key, drop { x: u64 } - struct S465 has key, drop { x: u64 } - struct S466 has key, drop { x: u64 } - struct S467 has key, drop { x: u64 } - struct S468 has key, drop { x: u64 } - struct S469 has key, drop { x: u64 } - struct S470 has key, drop { x: u64 } - struct S471 has key, drop { x: u64 } - struct S472 has key, drop { x: u64 } - struct S473 has key, drop { x: u64 } - struct S474 has key, drop { x: u64 } - struct S475 has key, drop { x: u64 } - struct S476 has key, drop { x: u64 } - struct S477 has key, drop { x: u64 } - struct S478 has key, drop { x: u64 } - struct S479 has key, drop { x: u64 } - struct S480 has key, drop { x: u64 } - struct S481 has key, drop { x: u64 } - struct S482 has key, drop { x: u64 } - struct S483 has key, drop { x: u64 } - struct S484 has key, drop { x: u64 } - struct S485 has key, drop { x: u64 } - struct S486 has key, drop { x: u64 } - struct S487 has key, drop { x: u64 } - struct S488 has key, drop { x: u64 } - struct S489 has key, drop { x: u64 } - struct S490 has key, drop { x: u64 } - struct S491 has key, drop { x: u64 } - struct S492 has key, drop { x: u64 } - struct S493 has key, drop { x: u64 } - struct S494 has key, drop { x: u64 } - struct S495 has key, drop { x: u64 } - struct S496 has key, drop { x: u64 } - struct S497 has key, drop { x: u64 } - struct S498 has key, drop { x: u64 } - struct S499 has key, drop { x: u64 } - struct S500 has key, drop { x: u64 } - struct S501 has key, drop { x: u64 } - struct S502 has key, drop { x: u64 } - struct S503 has key, drop { x: u64 } - struct S504 has key, drop { x: u64 } - struct S505 has key, drop { x: u64 } - struct S506 has key, drop { x: u64 } - struct S507 has key, drop { x: u64 } - struct S508 has key, drop { x: u64 } - struct S509 has key, drop { x: u64 } - struct S510 has key, drop { x: u64 } - struct S511 has key, drop { x: u64 } - struct S512 has key, drop { x: u64 } - struct S513 has key, drop { x: u64 } - struct S514 has key, drop { x: u64 } - struct S515 has key, drop { x: u64 } - struct S516 has key, drop { x: u64 } - struct S517 has key, drop { x: u64 } - struct S518 has key, drop { x: u64 } - struct S519 has key, drop { x: u64 } - struct S520 has key, drop { x: u64 } - struct S521 has key, drop { x: u64 } - struct S522 has key, drop { x: u64 } - struct S523 has key, drop { x: u64 } - struct S524 has key, drop { x: u64 } - struct S525 has key, drop { x: u64 } - struct S526 has key, drop { x: u64 } - struct S527 has key, drop { x: u64 } - struct S528 has key, drop { x: u64 } - struct S529 has key, drop { x: u64 } - struct S530 has key, drop { x: u64 } - struct S531 has key, drop { x: u64 } - struct S532 has key, drop { x: u64 } - struct S533 has key, drop { x: u64 } - struct S534 has key, drop { x: u64 } - struct S535 has key, drop { x: u64 } - struct S536 has key, drop { x: u64 } - struct S537 has key, drop { x: u64 } - struct S538 has key, drop { x: u64 } - struct S539 has key, drop { x: u64 } - struct S540 has key, drop { x: u64 } - struct S541 has key, drop { x: u64 } - struct S542 has key, drop { x: u64 } - struct S543 has key, drop { x: u64 } - struct S544 has key, drop { x: u64 } - struct S545 has key, drop { x: u64 } - struct S546 has key, drop { x: u64 } - struct S547 has key, drop { x: u64 } - struct S548 has key, drop { x: u64 } - struct S549 has key, drop { x: u64 } - struct S550 has key, drop { x: u64 } - struct S551 has key, drop { x: u64 } - struct S552 has key, drop { x: u64 } - struct S553 has key, drop { x: u64 } - struct S554 has key, drop { x: u64 } - struct S555 has key, drop { x: u64 } - struct S556 has key, drop { x: u64 } - struct S557 has key, drop { x: u64 } - struct S558 has key, drop { x: u64 } - struct S559 has key, drop { x: u64 } - struct S560 has key, drop { x: u64 } - struct S561 has key, drop { x: u64 } - struct S562 has key, drop { x: u64 } - struct S563 has key, drop { x: u64 } - struct S564 has key, drop { x: u64 } - struct S565 has key, drop { x: u64 } - struct S566 has key, drop { x: u64 } - struct S567 has key, drop { x: u64 } - struct S568 has key, drop { x: u64 } - struct S569 has key, drop { x: u64 } - struct S570 has key, drop { x: u64 } - struct S571 has key, drop { x: u64 } - struct S572 has key, drop { x: u64 } - struct S573 has key, drop { x: u64 } - struct S574 has key, drop { x: u64 } - struct S575 has key, drop { x: u64 } - struct S576 has key, drop { x: u64 } - struct S577 has key, drop { x: u64 } - struct S578 has key, drop { x: u64 } - struct S579 has key, drop { x: u64 } - struct S580 has key, drop { x: u64 } - struct S581 has key, drop { x: u64 } - struct S582 has key, drop { x: u64 } - struct S583 has key, drop { x: u64 } - struct S584 has key, drop { x: u64 } - struct S585 has key, drop { x: u64 } - struct S586 has key, drop { x: u64 } - struct S587 has key, drop { x: u64 } - struct S588 has key, drop { x: u64 } - struct S589 has key, drop { x: u64 } - struct S590 has key, drop { x: u64 } - struct S591 has key, drop { x: u64 } - struct S592 has key, drop { x: u64 } - struct S593 has key, drop { x: u64 } - struct S594 has key, drop { x: u64 } - struct S595 has key, drop { x: u64 } - struct S596 has key, drop { x: u64 } - struct S597 has key, drop { x: u64 } - struct S598 has key, drop { x: u64 } - struct S599 has key, drop { x: u64 } - struct S600 has key, drop { x: u64 } - struct S601 has key, drop { x: u64 } - struct S602 has key, drop { x: u64 } - struct S603 has key, drop { x: u64 } - struct S604 has key, drop { x: u64 } - struct S605 has key, drop { x: u64 } - struct S606 has key, drop { x: u64 } - struct S607 has key, drop { x: u64 } - struct S608 has key, drop { x: u64 } - struct S609 has key, drop { x: u64 } - struct S610 has key, drop { x: u64 } - struct S611 has key, drop { x: u64 } - struct S612 has key, drop { x: u64 } - struct S613 has key, drop { x: u64 } - struct S614 has key, drop { x: u64 } - struct S615 has key, drop { x: u64 } - struct S616 has key, drop { x: u64 } - struct S617 has key, drop { x: u64 } - struct S618 has key, drop { x: u64 } - struct S619 has key, drop { x: u64 } - struct S620 has key, drop { x: u64 } - struct S621 has key, drop { x: u64 } - struct S622 has key, drop { x: u64 } - struct S623 has key, drop { x: u64 } - struct S624 has key, drop { x: u64 } - struct S625 has key, drop { x: u64 } - struct S626 has key, drop { x: u64 } - struct S627 has key, drop { x: u64 } - struct S628 has key, drop { x: u64 } - struct S629 has key, drop { x: u64 } - struct S630 has key, drop { x: u64 } - struct S631 has key, drop { x: u64 } - struct S632 has key, drop { x: u64 } - struct S633 has key, drop { x: u64 } - struct S634 has key, drop { x: u64 } - struct S635 has key, drop { x: u64 } - struct S636 has key, drop { x: u64 } - struct S637 has key, drop { x: u64 } - struct S638 has key, drop { x: u64 } - struct S639 has key, drop { x: u64 } - struct S640 has key, drop { x: u64 } - struct S641 has key, drop { x: u64 } - struct S642 has key, drop { x: u64 } - struct S643 has key, drop { x: u64 } - struct S644 has key, drop { x: u64 } - struct S645 has key, drop { x: u64 } - struct S646 has key, drop { x: u64 } - struct S647 has key, drop { x: u64 } - struct S648 has key, drop { x: u64 } - struct S649 has key, drop { x: u64 } - struct S650 has key, drop { x: u64 } - struct S651 has key, drop { x: u64 } - struct S652 has key, drop { x: u64 } - struct S653 has key, drop { x: u64 } - struct S654 has key, drop { x: u64 } - struct S655 has key, drop { x: u64 } - struct S656 has key, drop { x: u64 } - struct S657 has key, drop { x: u64 } - struct S658 has key, drop { x: u64 } - struct S659 has key, drop { x: u64 } - struct S660 has key, drop { x: u64 } - struct S661 has key, drop { x: u64 } - struct S662 has key, drop { x: u64 } - struct S663 has key, drop { x: u64 } - struct S664 has key, drop { x: u64 } - struct S665 has key, drop { x: u64 } - struct S666 has key, drop { x: u64 } - struct S667 has key, drop { x: u64 } - struct S668 has key, drop { x: u64 } - struct S669 has key, drop { x: u64 } - struct S670 has key, drop { x: u64 } - struct S671 has key, drop { x: u64 } - struct S672 has key, drop { x: u64 } - struct S673 has key, drop { x: u64 } - struct S674 has key, drop { x: u64 } - struct S675 has key, drop { x: u64 } - struct S676 has key, drop { x: u64 } - struct S677 has key, drop { x: u64 } - struct S678 has key, drop { x: u64 } - struct S679 has key, drop { x: u64 } - struct S680 has key, drop { x: u64 } - struct S681 has key, drop { x: u64 } - struct S682 has key, drop { x: u64 } - struct S683 has key, drop { x: u64 } - struct S684 has key, drop { x: u64 } - struct S685 has key, drop { x: u64 } - struct S686 has key, drop { x: u64 } - struct S687 has key, drop { x: u64 } - struct S688 has key, drop { x: u64 } - struct S689 has key, drop { x: u64 } - struct S690 has key, drop { x: u64 } - struct S691 has key, drop { x: u64 } - struct S692 has key, drop { x: u64 } - struct S693 has key, drop { x: u64 } - struct S694 has key, drop { x: u64 } - struct S695 has key, drop { x: u64 } - struct S696 has key, drop { x: u64 } - struct S697 has key, drop { x: u64 } - struct S698 has key, drop { x: u64 } - struct S699 has key, drop { x: u64 } - struct S700 has key, drop { x: u64 } - struct S701 has key, drop { x: u64 } - struct S702 has key, drop { x: u64 } - struct S703 has key, drop { x: u64 } - struct S704 has key, drop { x: u64 } - struct S705 has key, drop { x: u64 } - struct S706 has key, drop { x: u64 } - struct S707 has key, drop { x: u64 } - struct S708 has key, drop { x: u64 } - struct S709 has key, drop { x: u64 } - struct S710 has key, drop { x: u64 } - struct S711 has key, drop { x: u64 } - struct S712 has key, drop { x: u64 } - struct S713 has key, drop { x: u64 } - struct S714 has key, drop { x: u64 } - struct S715 has key, drop { x: u64 } - struct S716 has key, drop { x: u64 } - struct S717 has key, drop { x: u64 } - struct S718 has key, drop { x: u64 } - struct S719 has key, drop { x: u64 } - struct S720 has key, drop { x: u64 } - struct S721 has key, drop { x: u64 } - struct S722 has key, drop { x: u64 } - struct S723 has key, drop { x: u64 } - struct S724 has key, drop { x: u64 } - struct S725 has key, drop { x: u64 } - struct S726 has key, drop { x: u64 } - struct S727 has key, drop { x: u64 } - struct S728 has key, drop { x: u64 } - struct S729 has key, drop { x: u64 } - struct S730 has key, drop { x: u64 } - struct S731 has key, drop { x: u64 } - struct S732 has key, drop { x: u64 } - struct S733 has key, drop { x: u64 } - struct S734 has key, drop { x: u64 } - struct S735 has key, drop { x: u64 } - struct S736 has key, drop { x: u64 } - struct S737 has key, drop { x: u64 } - struct S738 has key, drop { x: u64 } - struct S739 has key, drop { x: u64 } - struct S740 has key, drop { x: u64 } - struct S741 has key, drop { x: u64 } - struct S742 has key, drop { x: u64 } - struct S743 has key, drop { x: u64 } - struct S744 has key, drop { x: u64 } - struct S745 has key, drop { x: u64 } - struct S746 has key, drop { x: u64 } - struct S747 has key, drop { x: u64 } - struct S748 has key, drop { x: u64 } - struct S749 has key, drop { x: u64 } - struct S750 has key, drop { x: u64 } - struct S751 has key, drop { x: u64 } - struct S752 has key, drop { x: u64 } - struct S753 has key, drop { x: u64 } - struct S754 has key, drop { x: u64 } - struct S755 has key, drop { x: u64 } - struct S756 has key, drop { x: u64 } - struct S757 has key, drop { x: u64 } - struct S758 has key, drop { x: u64 } - struct S759 has key, drop { x: u64 } - struct S760 has key, drop { x: u64 } - struct S761 has key, drop { x: u64 } - struct S762 has key, drop { x: u64 } - struct S763 has key, drop { x: u64 } - struct S764 has key, drop { x: u64 } - struct S765 has key, drop { x: u64 } - struct S766 has key, drop { x: u64 } - struct S767 has key, drop { x: u64 } - struct S768 has key, drop { x: u64 } - struct S769 has key, drop { x: u64 } - struct S770 has key, drop { x: u64 } - struct S771 has key, drop { x: u64 } - struct S772 has key, drop { x: u64 } - struct S773 has key, drop { x: u64 } - struct S774 has key, drop { x: u64 } - struct S775 has key, drop { x: u64 } - struct S776 has key, drop { x: u64 } - struct S777 has key, drop { x: u64 } - struct S778 has key, drop { x: u64 } - struct S779 has key, drop { x: u64 } - struct S780 has key, drop { x: u64 } - struct S781 has key, drop { x: u64 } - struct S782 has key, drop { x: u64 } - struct S783 has key, drop { x: u64 } - struct S784 has key, drop { x: u64 } - struct S785 has key, drop { x: u64 } - struct S786 has key, drop { x: u64 } - struct S787 has key, drop { x: u64 } - struct S788 has key, drop { x: u64 } - struct S789 has key, drop { x: u64 } - struct S790 has key, drop { x: u64 } - struct S791 has key, drop { x: u64 } - struct S792 has key, drop { x: u64 } - struct S793 has key, drop { x: u64 } - struct S794 has key, drop { x: u64 } - struct S795 has key, drop { x: u64 } - struct S796 has key, drop { x: u64 } - struct S797 has key, drop { x: u64 } - struct S798 has key, drop { x: u64 } - struct S799 has key, drop { x: u64 } - struct S800 has key, drop { x: u64 } - struct S801 has key, drop { x: u64 } - struct S802 has key, drop { x: u64 } - struct S803 has key, drop { x: u64 } - struct S804 has key, drop { x: u64 } - struct S805 has key, drop { x: u64 } - struct S806 has key, drop { x: u64 } - struct S807 has key, drop { x: u64 } - struct S808 has key, drop { x: u64 } - struct S809 has key, drop { x: u64 } - struct S810 has key, drop { x: u64 } - struct S811 has key, drop { x: u64 } - struct S812 has key, drop { x: u64 } - struct S813 has key, drop { x: u64 } - struct S814 has key, drop { x: u64 } - struct S815 has key, drop { x: u64 } - struct S816 has key, drop { x: u64 } - struct S817 has key, drop { x: u64 } - struct S818 has key, drop { x: u64 } - struct S819 has key, drop { x: u64 } - struct S820 has key, drop { x: u64 } - struct S821 has key, drop { x: u64 } - struct S822 has key, drop { x: u64 } - struct S823 has key, drop { x: u64 } - struct S824 has key, drop { x: u64 } - struct S825 has key, drop { x: u64 } - struct S826 has key, drop { x: u64 } - struct S827 has key, drop { x: u64 } - struct S828 has key, drop { x: u64 } - struct S829 has key, drop { x: u64 } - struct S830 has key, drop { x: u64 } - struct S831 has key, drop { x: u64 } - struct S832 has key, drop { x: u64 } - struct S833 has key, drop { x: u64 } - struct S834 has key, drop { x: u64 } - struct S835 has key, drop { x: u64 } - struct S836 has key, drop { x: u64 } - struct S837 has key, drop { x: u64 } - struct S838 has key, drop { x: u64 } - struct S839 has key, drop { x: u64 } - struct S840 has key, drop { x: u64 } - struct S841 has key, drop { x: u64 } - struct S842 has key, drop { x: u64 } - struct S843 has key, drop { x: u64 } - struct S844 has key, drop { x: u64 } - struct S845 has key, drop { x: u64 } - struct S846 has key, drop { x: u64 } - struct S847 has key, drop { x: u64 } - struct S848 has key, drop { x: u64 } - struct S849 has key, drop { x: u64 } - struct S850 has key, drop { x: u64 } - struct S851 has key, drop { x: u64 } - struct S852 has key, drop { x: u64 } - struct S853 has key, drop { x: u64 } - struct S854 has key, drop { x: u64 } - struct S855 has key, drop { x: u64 } - struct S856 has key, drop { x: u64 } - struct S857 has key, drop { x: u64 } - struct S858 has key, drop { x: u64 } - struct S859 has key, drop { x: u64 } - struct S860 has key, drop { x: u64 } - struct S861 has key, drop { x: u64 } - struct S862 has key, drop { x: u64 } - struct S863 has key, drop { x: u64 } - struct S864 has key, drop { x: u64 } - struct S865 has key, drop { x: u64 } - struct S866 has key, drop { x: u64 } - struct S867 has key, drop { x: u64 } - struct S868 has key, drop { x: u64 } - struct S869 has key, drop { x: u64 } - struct S870 has key, drop { x: u64 } - struct S871 has key, drop { x: u64 } - struct S872 has key, drop { x: u64 } - struct S873 has key, drop { x: u64 } - struct S874 has key, drop { x: u64 } - struct S875 has key, drop { x: u64 } - struct S876 has key, drop { x: u64 } - struct S877 has key, drop { x: u64 } - struct S878 has key, drop { x: u64 } - struct S879 has key, drop { x: u64 } - struct S880 has key, drop { x: u64 } - struct S881 has key, drop { x: u64 } - struct S882 has key, drop { x: u64 } - struct S883 has key, drop { x: u64 } - struct S884 has key, drop { x: u64 } - struct S885 has key, drop { x: u64 } - struct S886 has key, drop { x: u64 } - struct S887 has key, drop { x: u64 } - struct S888 has key, drop { x: u64 } - struct S889 has key, drop { x: u64 } - struct S890 has key, drop { x: u64 } - struct S891 has key, drop { x: u64 } - struct S892 has key, drop { x: u64 } - struct S893 has key, drop { x: u64 } - struct S894 has key, drop { x: u64 } - struct S895 has key, drop { x: u64 } - struct S896 has key, drop { x: u64 } - struct S897 has key, drop { x: u64 } - struct S898 has key, drop { x: u64 } - struct S899 has key, drop { x: u64 } - struct S900 has key, drop { x: u64 } - struct S901 has key, drop { x: u64 } - struct S902 has key, drop { x: u64 } - struct S903 has key, drop { x: u64 } - struct S904 has key, drop { x: u64 } - struct S905 has key, drop { x: u64 } - struct S906 has key, drop { x: u64 } - struct S907 has key, drop { x: u64 } - struct S908 has key, drop { x: u64 } - struct S909 has key, drop { x: u64 } - struct S910 has key, drop { x: u64 } - struct S911 has key, drop { x: u64 } - struct S912 has key, drop { x: u64 } - struct S913 has key, drop { x: u64 } - struct S914 has key, drop { x: u64 } - struct S915 has key, drop { x: u64 } - struct S916 has key, drop { x: u64 } - struct S917 has key, drop { x: u64 } - struct S918 has key, drop { x: u64 } - struct S919 has key, drop { x: u64 } - struct S920 has key, drop { x: u64 } - struct S921 has key, drop { x: u64 } - struct S922 has key, drop { x: u64 } - struct S923 has key, drop { x: u64 } - struct S924 has key, drop { x: u64 } - struct S925 has key, drop { x: u64 } - struct S926 has key, drop { x: u64 } - struct S927 has key, drop { x: u64 } - struct S928 has key, drop { x: u64 } - struct S929 has key, drop { x: u64 } - struct S930 has key, drop { x: u64 } - struct S931 has key, drop { x: u64 } - struct S932 has key, drop { x: u64 } - struct S933 has key, drop { x: u64 } - struct S934 has key, drop { x: u64 } - struct S935 has key, drop { x: u64 } - struct S936 has key, drop { x: u64 } - struct S937 has key, drop { x: u64 } - struct S938 has key, drop { x: u64 } - struct S939 has key, drop { x: u64 } - struct S940 has key, drop { x: u64 } - struct S941 has key, drop { x: u64 } - struct S942 has key, drop { x: u64 } - struct S943 has key, drop { x: u64 } - struct S944 has key, drop { x: u64 } - struct S945 has key, drop { x: u64 } - struct S946 has key, drop { x: u64 } - struct S947 has key, drop { x: u64 } - struct S948 has key, drop { x: u64 } - struct S949 has key, drop { x: u64 } - struct S950 has key, drop { x: u64 } - struct S951 has key, drop { x: u64 } - struct S952 has key, drop { x: u64 } - struct S953 has key, drop { x: u64 } - struct S954 has key, drop { x: u64 } - struct S955 has key, drop { x: u64 } - struct S956 has key, drop { x: u64 } - struct S957 has key, drop { x: u64 } - struct S958 has key, drop { x: u64 } - struct S959 has key, drop { x: u64 } - struct S960 has key, drop { x: u64 } - struct S961 has key, drop { x: u64 } - struct S962 has key, drop { x: u64 } - struct S963 has key, drop { x: u64 } - struct S964 has key, drop { x: u64 } - struct S965 has key, drop { x: u64 } - struct S966 has key, drop { x: u64 } - struct S967 has key, drop { x: u64 } - struct S968 has key, drop { x: u64 } - struct S969 has key, drop { x: u64 } - struct S970 has key, drop { x: u64 } - struct S971 has key, drop { x: u64 } - struct S972 has key, drop { x: u64 } - struct S973 has key, drop { x: u64 } - struct S974 has key, drop { x: u64 } - struct S975 has key, drop { x: u64 } - struct S976 has key, drop { x: u64 } - struct S977 has key, drop { x: u64 } - struct S978 has key, drop { x: u64 } - struct S979 has key, drop { x: u64 } - struct S980 has key, drop { x: u64 } - struct S981 has key, drop { x: u64 } - struct S982 has key, drop { x: u64 } - struct S983 has key, drop { x: u64 } - struct S984 has key, drop { x: u64 } - struct S985 has key, drop { x: u64 } - struct S986 has key, drop { x: u64 } - struct S987 has key, drop { x: u64 } - struct S988 has key, drop { x: u64 } - struct S989 has key, drop { x: u64 } - struct S990 has key, drop { x: u64 } - struct S991 has key, drop { x: u64 } - struct S992 has key, drop { x: u64 } - struct S993 has key, drop { x: u64 } - struct S994 has key, drop { x: u64 } - struct S995 has key, drop { x: u64 } - struct S996 has key, drop { x: u64 } - struct S997 has key, drop { x: u64 } - struct S998 has key, drop { x: u64 } - struct S999 has key, drop { x: u64 } - struct S1000 has key, drop { x: u64 } - struct S1001 has key, drop { x: u64 } - struct S1002 has key, drop { x: u64 } - struct S1003 has key, drop { x: u64 } - struct S1004 has key, drop { x: u64 } - struct S1005 has key, drop { x: u64 } - struct S1006 has key, drop { x: u64 } - struct S1007 has key, drop { x: u64 } - struct S1008 has key, drop { x: u64 } - struct S1009 has key, drop { x: u64 } - struct S1010 has key, drop { x: u64 } - struct S1011 has key, drop { x: u64 } - struct S1012 has key, drop { x: u64 } - struct S1013 has key, drop { x: u64 } - struct S1014 has key, drop { x: u64 } - struct S1015 has key, drop { x: u64 } - struct S1016 has key, drop { x: u64 } - struct S1017 has key, drop { x: u64 } - struct S1018 has key, drop { x: u64 } - struct S1019 has key, drop { x: u64 } - struct S1020 has key, drop { x: u64 } - struct S1021 has key, drop { x: u64 } - struct S1022 has key, drop { x: u64 } - struct S1023 has key, drop { x: u64 } - struct S1024 has key, drop { x: u64 } - struct S1025 has key, drop { x: u64 } - struct S1026 has key, drop { x: u64 } - struct S1027 has key, drop { x: u64 } - struct S1028 has key, drop { x: u64 } - struct S1029 has key, drop { x: u64 } - struct S1030 has key, drop { x: u64 } - struct S1031 has key, drop { x: u64 } - struct S1032 has key, drop { x: u64 } - struct S1033 has key, drop { x: u64 } - struct S1034 has key, drop { x: u64 } - struct S1035 has key, drop { x: u64 } - struct S1036 has key, drop { x: u64 } - struct S1037 has key, drop { x: u64 } - struct S1038 has key, drop { x: u64 } - struct S1039 has key, drop { x: u64 } - struct S1040 has key, drop { x: u64 } - struct S1041 has key, drop { x: u64 } - struct S1042 has key, drop { x: u64 } - struct S1043 has key, drop { x: u64 } - struct S1044 has key, drop { x: u64 } - struct S1045 has key, drop { x: u64 } - struct S1046 has key, drop { x: u64 } - struct S1047 has key, drop { x: u64 } - struct S1048 has key, drop { x: u64 } - struct S1049 has key, drop { x: u64 } - struct S1050 has key, drop { x: u64 } - struct S1051 has key, drop { x: u64 } - struct S1052 has key, drop { x: u64 } - struct S1053 has key, drop { x: u64 } - struct S1054 has key, drop { x: u64 } - struct S1055 has key, drop { x: u64 } - struct S1056 has key, drop { x: u64 } - struct S1057 has key, drop { x: u64 } - struct S1058 has key, drop { x: u64 } - struct S1059 has key, drop { x: u64 } - struct S1060 has key, drop { x: u64 } - struct S1061 has key, drop { x: u64 } - struct S1062 has key, drop { x: u64 } - struct S1063 has key, drop { x: u64 } - struct S1064 has key, drop { x: u64 } - struct S1065 has key, drop { x: u64 } - struct S1066 has key, drop { x: u64 } - struct S1067 has key, drop { x: u64 } - struct S1068 has key, drop { x: u64 } - struct S1069 has key, drop { x: u64 } - struct S1070 has key, drop { x: u64 } - struct S1071 has key, drop { x: u64 } - struct S1072 has key, drop { x: u64 } - struct S1073 has key, drop { x: u64 } - struct S1074 has key, drop { x: u64 } - struct S1075 has key, drop { x: u64 } - struct S1076 has key, drop { x: u64 } - struct S1077 has key, drop { x: u64 } - struct S1078 has key, drop { x: u64 } - struct S1079 has key, drop { x: u64 } - struct S1080 has key, drop { x: u64 } - struct S1081 has key, drop { x: u64 } - struct S1082 has key, drop { x: u64 } - struct S1083 has key, drop { x: u64 } - struct S1084 has key, drop { x: u64 } - struct S1085 has key, drop { x: u64 } - struct S1086 has key, drop { x: u64 } - struct S1087 has key, drop { x: u64 } - struct S1088 has key, drop { x: u64 } - struct S1089 has key, drop { x: u64 } - struct S1090 has key, drop { x: u64 } - struct S1091 has key, drop { x: u64 } - struct S1092 has key, drop { x: u64 } - struct S1093 has key, drop { x: u64 } - struct S1094 has key, drop { x: u64 } - struct S1095 has key, drop { x: u64 } - struct S1096 has key, drop { x: u64 } - struct S1097 has key, drop { x: u64 } - struct S1098 has key, drop { x: u64 } - struct S1099 has key, drop { x: u64 } - struct S1100 has key, drop { x: u64 } - struct S1101 has key, drop { x: u64 } - struct S1102 has key, drop { x: u64 } - struct S1103 has key, drop { x: u64 } - struct S1104 has key, drop { x: u64 } - struct S1105 has key, drop { x: u64 } - struct S1106 has key, drop { x: u64 } - struct S1107 has key, drop { x: u64 } - struct S1108 has key, drop { x: u64 } - struct S1109 has key, drop { x: u64 } - struct S1110 has key, drop { x: u64 } - struct S1111 has key, drop { x: u64 } - struct S1112 has key, drop { x: u64 } - struct S1113 has key, drop { x: u64 } - struct S1114 has key, drop { x: u64 } - struct S1115 has key, drop { x: u64 } - struct S1116 has key, drop { x: u64 } - struct S1117 has key, drop { x: u64 } - struct S1118 has key, drop { x: u64 } - struct S1119 has key, drop { x: u64 } - struct S1120 has key, drop { x: u64 } - struct S1121 has key, drop { x: u64 } - struct S1122 has key, drop { x: u64 } - struct S1123 has key, drop { x: u64 } - struct S1124 has key, drop { x: u64 } - struct S1125 has key, drop { x: u64 } - struct S1126 has key, drop { x: u64 } - struct S1127 has key, drop { x: u64 } - struct S1128 has key, drop { x: u64 } - struct S1129 has key, drop { x: u64 } - struct S1130 has key, drop { x: u64 } - struct S1131 has key, drop { x: u64 } - struct S1132 has key, drop { x: u64 } - struct S1133 has key, drop { x: u64 } - struct S1134 has key, drop { x: u64 } - struct S1135 has key, drop { x: u64 } - struct S1136 has key, drop { x: u64 } - struct S1137 has key, drop { x: u64 } - struct S1138 has key, drop { x: u64 } - struct S1139 has key, drop { x: u64 } - struct S1140 has key, drop { x: u64 } - struct S1141 has key, drop { x: u64 } - struct S1142 has key, drop { x: u64 } - struct S1143 has key, drop { x: u64 } - struct S1144 has key, drop { x: u64 } - struct S1145 has key, drop { x: u64 } - struct S1146 has key, drop { x: u64 } - struct S1147 has key, drop { x: u64 } - struct S1148 has key, drop { x: u64 } - struct S1149 has key, drop { x: u64 } - struct S1150 has key, drop { x: u64 } - struct S1151 has key, drop { x: u64 } - struct S1152 has key, drop { x: u64 } - struct S1153 has key, drop { x: u64 } - struct S1154 has key, drop { x: u64 } - struct S1155 has key, drop { x: u64 } - struct S1156 has key, drop { x: u64 } - struct S1157 has key, drop { x: u64 } - struct S1158 has key, drop { x: u64 } - struct S1159 has key, drop { x: u64 } - struct S1160 has key, drop { x: u64 } - struct S1161 has key, drop { x: u64 } - struct S1162 has key, drop { x: u64 } - struct S1163 has key, drop { x: u64 } - struct S1164 has key, drop { x: u64 } - struct S1165 has key, drop { x: u64 } - struct S1166 has key, drop { x: u64 } - struct S1167 has key, drop { x: u64 } - struct S1168 has key, drop { x: u64 } - struct S1169 has key, drop { x: u64 } - struct S1170 has key, drop { x: u64 } - struct S1171 has key, drop { x: u64 } - struct S1172 has key, drop { x: u64 } - struct S1173 has key, drop { x: u64 } - struct S1174 has key, drop { x: u64 } - struct S1175 has key, drop { x: u64 } - struct S1176 has key, drop { x: u64 } - struct S1177 has key, drop { x: u64 } - struct S1178 has key, drop { x: u64 } - struct S1179 has key, drop { x: u64 } - struct S1180 has key, drop { x: u64 } - struct S1181 has key, drop { x: u64 } - struct S1182 has key, drop { x: u64 } - struct S1183 has key, drop { x: u64 } - struct S1184 has key, drop { x: u64 } - struct S1185 has key, drop { x: u64 } - struct S1186 has key, drop { x: u64 } - struct S1187 has key, drop { x: u64 } - struct S1188 has key, drop { x: u64 } - struct S1189 has key, drop { x: u64 } - struct S1190 has key, drop { x: u64 } - struct S1191 has key, drop { x: u64 } - struct S1192 has key, drop { x: u64 } - struct S1193 has key, drop { x: u64 } - struct S1194 has key, drop { x: u64 } - struct S1195 has key, drop { x: u64 } - struct S1196 has key, drop { x: u64 } - struct S1197 has key, drop { x: u64 } - struct S1198 has key, drop { x: u64 } - struct S1199 has key, drop { x: u64 } - struct S1200 has key, drop { x: u64 } - struct S1201 has key, drop { x: u64 } - struct S1202 has key, drop { x: u64 } - struct S1203 has key, drop { x: u64 } - struct S1204 has key, drop { x: u64 } - struct S1205 has key, drop { x: u64 } - struct S1206 has key, drop { x: u64 } - struct S1207 has key, drop { x: u64 } - struct S1208 has key, drop { x: u64 } - struct S1209 has key, drop { x: u64 } - struct S1210 has key, drop { x: u64 } - struct S1211 has key, drop { x: u64 } - struct S1212 has key, drop { x: u64 } - struct S1213 has key, drop { x: u64 } - struct S1214 has key, drop { x: u64 } - struct S1215 has key, drop { x: u64 } - struct S1216 has key, drop { x: u64 } - struct S1217 has key, drop { x: u64 } - struct S1218 has key, drop { x: u64 } - struct S1219 has key, drop { x: u64 } - struct S1220 has key, drop { x: u64 } - struct S1221 has key, drop { x: u64 } - struct S1222 has key, drop { x: u64 } - struct S1223 has key, drop { x: u64 } - struct S1224 has key, drop { x: u64 } - struct S1225 has key, drop { x: u64 } - struct S1226 has key, drop { x: u64 } - struct S1227 has key, drop { x: u64 } - struct S1228 has key, drop { x: u64 } - struct S1229 has key, drop { x: u64 } - struct S1230 has key, drop { x: u64 } - struct S1231 has key, drop { x: u64 } - struct S1232 has key, drop { x: u64 } - struct S1233 has key, drop { x: u64 } - struct S1234 has key, drop { x: u64 } - struct S1235 has key, drop { x: u64 } - struct S1236 has key, drop { x: u64 } - struct S1237 has key, drop { x: u64 } - struct S1238 has key, drop { x: u64 } - struct S1239 has key, drop { x: u64 } - struct S1240 has key, drop { x: u64 } - struct S1241 has key, drop { x: u64 } - struct S1242 has key, drop { x: u64 } - struct S1243 has key, drop { x: u64 } - struct S1244 has key, drop { x: u64 } - struct S1245 has key, drop { x: u64 } - struct S1246 has key, drop { x: u64 } - struct S1247 has key, drop { x: u64 } - struct S1248 has key, drop { x: u64 } - struct S1249 has key, drop { x: u64 } - struct S1250 has key, drop { x: u64 } - struct S1251 has key, drop { x: u64 } - struct S1252 has key, drop { x: u64 } - struct S1253 has key, drop { x: u64 } - struct S1254 has key, drop { x: u64 } - struct S1255 has key, drop { x: u64 } - struct S1256 has key, drop { x: u64 } - struct S1257 has key, drop { x: u64 } - struct S1258 has key, drop { x: u64 } - struct S1259 has key, drop { x: u64 } - struct S1260 has key, drop { x: u64 } - struct S1261 has key, drop { x: u64 } - struct S1262 has key, drop { x: u64 } - struct S1263 has key, drop { x: u64 } - struct S1264 has key, drop { x: u64 } - struct S1265 has key, drop { x: u64 } - struct S1266 has key, drop { x: u64 } - struct S1267 has key, drop { x: u64 } - struct S1268 has key, drop { x: u64 } - struct S1269 has key, drop { x: u64 } - struct S1270 has key, drop { x: u64 } - struct S1271 has key, drop { x: u64 } - struct S1272 has key, drop { x: u64 } - struct S1273 has key, drop { x: u64 } - struct S1274 has key, drop { x: u64 } - struct S1275 has key, drop { x: u64 } - struct S1276 has key, drop { x: u64 } - struct S1277 has key, drop { x: u64 } - struct S1278 has key, drop { x: u64 } - struct S1279 has key, drop { x: u64 } - struct S1280 has key, drop { x: u64 } - struct S1281 has key, drop { x: u64 } - struct S1282 has key, drop { x: u64 } - struct S1283 has key, drop { x: u64 } - struct S1284 has key, drop { x: u64 } - struct S1285 has key, drop { x: u64 } - struct S1286 has key, drop { x: u64 } - struct S1287 has key, drop { x: u64 } - struct S1288 has key, drop { x: u64 } - struct S1289 has key, drop { x: u64 } - struct S1290 has key, drop { x: u64 } - struct S1291 has key, drop { x: u64 } - struct S1292 has key, drop { x: u64 } - struct S1293 has key, drop { x: u64 } - struct S1294 has key, drop { x: u64 } - struct S1295 has key, drop { x: u64 } - struct S1296 has key, drop { x: u64 } - struct S1297 has key, drop { x: u64 } - struct S1298 has key, drop { x: u64 } - struct S1299 has key, drop { x: u64 } - struct S1300 has key, drop { x: u64 } - struct S1301 has key, drop { x: u64 } - struct S1302 has key, drop { x: u64 } - struct S1303 has key, drop { x: u64 } - struct S1304 has key, drop { x: u64 } - struct S1305 has key, drop { x: u64 } - struct S1306 has key, drop { x: u64 } - struct S1307 has key, drop { x: u64 } - struct S1308 has key, drop { x: u64 } - struct S1309 has key, drop { x: u64 } - struct S1310 has key, drop { x: u64 } - struct S1311 has key, drop { x: u64 } - struct S1312 has key, drop { x: u64 } - struct S1313 has key, drop { x: u64 } - struct S1314 has key, drop { x: u64 } - struct S1315 has key, drop { x: u64 } - struct S1316 has key, drop { x: u64 } - struct S1317 has key, drop { x: u64 } - struct S1318 has key, drop { x: u64 } - struct S1319 has key, drop { x: u64 } - struct S1320 has key, drop { x: u64 } - struct S1321 has key, drop { x: u64 } - struct S1322 has key, drop { x: u64 } - struct S1323 has key, drop { x: u64 } - struct S1324 has key, drop { x: u64 } - struct S1325 has key, drop { x: u64 } - struct S1326 has key, drop { x: u64 } - struct S1327 has key, drop { x: u64 } - struct S1328 has key, drop { x: u64 } - struct S1329 has key, drop { x: u64 } - struct S1330 has key, drop { x: u64 } - struct S1331 has key, drop { x: u64 } - struct S1332 has key, drop { x: u64 } - struct S1333 has key, drop { x: u64 } - struct S1334 has key, drop { x: u64 } - struct S1335 has key, drop { x: u64 } - struct S1336 has key, drop { x: u64 } - struct S1337 has key, drop { x: u64 } - struct S1338 has key, drop { x: u64 } - struct S1339 has key, drop { x: u64 } - struct S1340 has key, drop { x: u64 } - struct S1341 has key, drop { x: u64 } - struct S1342 has key, drop { x: u64 } - struct S1343 has key, drop { x: u64 } - struct S1344 has key, drop { x: u64 } - struct S1345 has key, drop { x: u64 } - struct S1346 has key, drop { x: u64 } - struct S1347 has key, drop { x: u64 } - struct S1348 has key, drop { x: u64 } - struct S1349 has key, drop { x: u64 } - struct S1350 has key, drop { x: u64 } - struct S1351 has key, drop { x: u64 } - struct S1352 has key, drop { x: u64 } - struct S1353 has key, drop { x: u64 } - struct S1354 has key, drop { x: u64 } - struct S1355 has key, drop { x: u64 } - struct S1356 has key, drop { x: u64 } - struct S1357 has key, drop { x: u64 } - struct S1358 has key, drop { x: u64 } - struct S1359 has key, drop { x: u64 } - struct S1360 has key, drop { x: u64 } - struct S1361 has key, drop { x: u64 } - struct S1362 has key, drop { x: u64 } - struct S1363 has key, drop { x: u64 } - struct S1364 has key, drop { x: u64 } - struct S1365 has key, drop { x: u64 } - struct S1366 has key, drop { x: u64 } - struct S1367 has key, drop { x: u64 } - struct S1368 has key, drop { x: u64 } - struct S1369 has key, drop { x: u64 } - struct S1370 has key, drop { x: u64 } - struct S1371 has key, drop { x: u64 } - struct S1372 has key, drop { x: u64 } - struct S1373 has key, drop { x: u64 } - struct S1374 has key, drop { x: u64 } - struct S1375 has key, drop { x: u64 } - struct S1376 has key, drop { x: u64 } - struct S1377 has key, drop { x: u64 } - struct S1378 has key, drop { x: u64 } - struct S1379 has key, drop { x: u64 } - struct S1380 has key, drop { x: u64 } - struct S1381 has key, drop { x: u64 } - struct S1382 has key, drop { x: u64 } - struct S1383 has key, drop { x: u64 } - struct S1384 has key, drop { x: u64 } - struct S1385 has key, drop { x: u64 } - struct S1386 has key, drop { x: u64 } - struct S1387 has key, drop { x: u64 } - struct S1388 has key, drop { x: u64 } - struct S1389 has key, drop { x: u64 } - struct S1390 has key, drop { x: u64 } - struct S1391 has key, drop { x: u64 } - struct S1392 has key, drop { x: u64 } - struct S1393 has key, drop { x: u64 } - struct S1394 has key, drop { x: u64 } - struct S1395 has key, drop { x: u64 } - struct S1396 has key, drop { x: u64 } - struct S1397 has key, drop { x: u64 } - struct S1398 has key, drop { x: u64 } - struct S1399 has key, drop { x: u64 } - struct S1400 has key, drop { x: u64 } - struct S1401 has key, drop { x: u64 } - struct S1402 has key, drop { x: u64 } - struct S1403 has key, drop { x: u64 } - struct S1404 has key, drop { x: u64 } - struct S1405 has key, drop { x: u64 } - struct S1406 has key, drop { x: u64 } - struct S1407 has key, drop { x: u64 } - struct S1408 has key, drop { x: u64 } - struct S1409 has key, drop { x: u64 } - struct S1410 has key, drop { x: u64 } - struct S1411 has key, drop { x: u64 } - struct S1412 has key, drop { x: u64 } - struct S1413 has key, drop { x: u64 } - struct S1414 has key, drop { x: u64 } - struct S1415 has key, drop { x: u64 } - struct S1416 has key, drop { x: u64 } - struct S1417 has key, drop { x: u64 } - struct S1418 has key, drop { x: u64 } - struct S1419 has key, drop { x: u64 } - struct S1420 has key, drop { x: u64 } - struct S1421 has key, drop { x: u64 } - struct S1422 has key, drop { x: u64 } - struct S1423 has key, drop { x: u64 } - struct S1424 has key, drop { x: u64 } - struct S1425 has key, drop { x: u64 } - struct S1426 has key, drop { x: u64 } - struct S1427 has key, drop { x: u64 } - struct S1428 has key, drop { x: u64 } - struct S1429 has key, drop { x: u64 } - struct S1430 has key, drop { x: u64 } - struct S1431 has key, drop { x: u64 } - struct S1432 has key, drop { x: u64 } - struct S1433 has key, drop { x: u64 } - struct S1434 has key, drop { x: u64 } - struct S1435 has key, drop { x: u64 } - struct S1436 has key, drop { x: u64 } - struct S1437 has key, drop { x: u64 } - struct S1438 has key, drop { x: u64 } - struct S1439 has key, drop { x: u64 } - struct S1440 has key, drop { x: u64 } - struct S1441 has key, drop { x: u64 } - struct S1442 has key, drop { x: u64 } - struct S1443 has key, drop { x: u64 } - struct S1444 has key, drop { x: u64 } - struct S1445 has key, drop { x: u64 } - struct S1446 has key, drop { x: u64 } - struct S1447 has key, drop { x: u64 } - struct S1448 has key, drop { x: u64 } - struct S1449 has key, drop { x: u64 } - struct S1450 has key, drop { x: u64 } - struct S1451 has key, drop { x: u64 } - struct S1452 has key, drop { x: u64 } - struct S1453 has key, drop { x: u64 } - struct S1454 has key, drop { x: u64 } - struct S1455 has key, drop { x: u64 } - struct S1456 has key, drop { x: u64 } - struct S1457 has key, drop { x: u64 } - struct S1458 has key, drop { x: u64 } - struct S1459 has key, drop { x: u64 } - struct S1460 has key, drop { x: u64 } - struct S1461 has key, drop { x: u64 } - struct S1462 has key, drop { x: u64 } - struct S1463 has key, drop { x: u64 } - struct S1464 has key, drop { x: u64 } - struct S1465 has key, drop { x: u64 } - struct S1466 has key, drop { x: u64 } - struct S1467 has key, drop { x: u64 } - struct S1468 has key, drop { x: u64 } - struct S1469 has key, drop { x: u64 } - struct S1470 has key, drop { x: u64 } - struct S1471 has key, drop { x: u64 } - struct S1472 has key, drop { x: u64 } - struct S1473 has key, drop { x: u64 } - struct S1474 has key, drop { x: u64 } - struct S1475 has key, drop { x: u64 } - struct S1476 has key, drop { x: u64 } - struct S1477 has key, drop { x: u64 } - struct S1478 has key, drop { x: u64 } - struct S1479 has key, drop { x: u64 } - struct S1480 has key, drop { x: u64 } - struct S1481 has key, drop { x: u64 } - struct S1482 has key, drop { x: u64 } - struct S1483 has key, drop { x: u64 } - struct S1484 has key, drop { x: u64 } - struct S1485 has key, drop { x: u64 } - struct S1486 has key, drop { x: u64 } - struct S1487 has key, drop { x: u64 } - struct S1488 has key, drop { x: u64 } - struct S1489 has key, drop { x: u64 } - struct S1490 has key, drop { x: u64 } - struct S1491 has key, drop { x: u64 } - struct S1492 has key, drop { x: u64 } - struct S1493 has key, drop { x: u64 } - struct S1494 has key, drop { x: u64 } - struct S1495 has key, drop { x: u64 } - struct S1496 has key, drop { x: u64 } - struct S1497 has key, drop { x: u64 } - struct S1498 has key, drop { x: u64 } - struct S1499 has key, drop { x: u64 } - struct S1500 has key, drop { x: u64 } - struct S1501 has key, drop { x: u64 } - struct S1502 has key, drop { x: u64 } - struct S1503 has key, drop { x: u64 } - struct S1504 has key, drop { x: u64 } - struct S1505 has key, drop { x: u64 } - struct S1506 has key, drop { x: u64 } - struct S1507 has key, drop { x: u64 } - struct S1508 has key, drop { x: u64 } - struct S1509 has key, drop { x: u64 } - struct S1510 has key, drop { x: u64 } - struct S1511 has key, drop { x: u64 } - struct S1512 has key, drop { x: u64 } - struct S1513 has key, drop { x: u64 } - struct S1514 has key, drop { x: u64 } - struct S1515 has key, drop { x: u64 } - struct S1516 has key, drop { x: u64 } - struct S1517 has key, drop { x: u64 } - struct S1518 has key, drop { x: u64 } - struct S1519 has key, drop { x: u64 } - struct S1520 has key, drop { x: u64 } - struct S1521 has key, drop { x: u64 } - struct S1522 has key, drop { x: u64 } - struct S1523 has key, drop { x: u64 } - struct S1524 has key, drop { x: u64 } - struct S1525 has key, drop { x: u64 } - struct S1526 has key, drop { x: u64 } - struct S1527 has key, drop { x: u64 } - struct S1528 has key, drop { x: u64 } - struct S1529 has key, drop { x: u64 } - struct S1530 has key, drop { x: u64 } - struct S1531 has key, drop { x: u64 } - struct S1532 has key, drop { x: u64 } - struct S1533 has key, drop { x: u64 } - struct S1534 has key, drop { x: u64 } - struct S1535 has key, drop { x: u64 } - struct S1536 has key, drop { x: u64 } - struct S1537 has key, drop { x: u64 } - struct S1538 has key, drop { x: u64 } - struct S1539 has key, drop { x: u64 } - struct S1540 has key, drop { x: u64 } - struct S1541 has key, drop { x: u64 } - struct S1542 has key, drop { x: u64 } - struct S1543 has key, drop { x: u64 } - struct S1544 has key, drop { x: u64 } - struct S1545 has key, drop { x: u64 } - struct S1546 has key, drop { x: u64 } - struct S1547 has key, drop { x: u64 } - struct S1548 has key, drop { x: u64 } - struct S1549 has key, drop { x: u64 } - struct S1550 has key, drop { x: u64 } - struct S1551 has key, drop { x: u64 } - struct S1552 has key, drop { x: u64 } - struct S1553 has key, drop { x: u64 } - struct S1554 has key, drop { x: u64 } - struct S1555 has key, drop { x: u64 } - struct S1556 has key, drop { x: u64 } - struct S1557 has key, drop { x: u64 } - struct S1558 has key, drop { x: u64 } - struct S1559 has key, drop { x: u64 } - struct S1560 has key, drop { x: u64 } - struct S1561 has key, drop { x: u64 } - struct S1562 has key, drop { x: u64 } - struct S1563 has key, drop { x: u64 } - struct S1564 has key, drop { x: u64 } - struct S1565 has key, drop { x: u64 } - struct S1566 has key, drop { x: u64 } - struct S1567 has key, drop { x: u64 } - struct S1568 has key, drop { x: u64 } - struct S1569 has key, drop { x: u64 } - struct S1570 has key, drop { x: u64 } - struct S1571 has key, drop { x: u64 } - struct S1572 has key, drop { x: u64 } - struct S1573 has key, drop { x: u64 } - struct S1574 has key, drop { x: u64 } - struct S1575 has key, drop { x: u64 } - struct S1576 has key, drop { x: u64 } - struct S1577 has key, drop { x: u64 } - struct S1578 has key, drop { x: u64 } - struct S1579 has key, drop { x: u64 } - struct S1580 has key, drop { x: u64 } - struct S1581 has key, drop { x: u64 } - struct S1582 has key, drop { x: u64 } - struct S1583 has key, drop { x: u64 } - struct S1584 has key, drop { x: u64 } - struct S1585 has key, drop { x: u64 } - struct S1586 has key, drop { x: u64 } - struct S1587 has key, drop { x: u64 } - struct S1588 has key, drop { x: u64 } - struct S1589 has key, drop { x: u64 } - struct S1590 has key, drop { x: u64 } - struct S1591 has key, drop { x: u64 } - struct S1592 has key, drop { x: u64 } - struct S1593 has key, drop { x: u64 } - struct S1594 has key, drop { x: u64 } - struct S1595 has key, drop { x: u64 } - struct S1596 has key, drop { x: u64 } - struct S1597 has key, drop { x: u64 } - struct S1598 has key, drop { x: u64 } - struct S1599 has key, drop { x: u64 } - struct S1600 has key, drop { x: u64 } - - public entry calibrate_move_to_x100(s: signer) { - label b0: - move_to(&s, S1{ x: 0 }); - move_to(&s, S2{ x: 0 }); - move_to(&s, S3{ x: 0 }); - move_to(&s, S4{ x: 0 }); - move_to(&s, S5{ x: 0 }); - move_to(&s, S6{ x: 0 }); - move_to(&s, S7{ x: 0 }); - move_to(&s, S8{ x: 0 }); - move_to(&s, S9{ x: 0 }); - move_to(&s, S10{ x: 0 }); - move_to(&s, S11{ x: 0 }); - move_to(&s, S12{ x: 0 }); - move_to(&s, S13{ x: 0 }); - move_to(&s, S14{ x: 0 }); - move_to(&s, S15{ x: 0 }); - move_to(&s, S16{ x: 0 }); - move_to(&s, S17{ x: 0 }); - move_to(&s, S18{ x: 0 }); - move_to(&s, S19{ x: 0 }); - move_to(&s, S20{ x: 0 }); - move_to(&s, S21{ x: 0 }); - move_to(&s, S22{ x: 0 }); - move_to(&s, S23{ x: 0 }); - move_to(&s, S24{ x: 0 }); - move_to(&s, S25{ x: 0 }); - move_to(&s, S26{ x: 0 }); - move_to(&s, S27{ x: 0 }); - move_to(&s, S28{ x: 0 }); - move_to(&s, S29{ x: 0 }); - move_to(&s, S30{ x: 0 }); - move_to(&s, S31{ x: 0 }); - move_to(&s, S32{ x: 0 }); - move_to(&s, S33{ x: 0 }); - move_to(&s, S34{ x: 0 }); - move_to(&s, S35{ x: 0 }); - move_to(&s, S36{ x: 0 }); - move_to(&s, S37{ x: 0 }); - move_to(&s, S38{ x: 0 }); - move_to(&s, S39{ x: 0 }); - move_to(&s, S40{ x: 0 }); - move_to(&s, S41{ x: 0 }); - move_to(&s, S42{ x: 0 }); - move_to(&s, S43{ x: 0 }); - move_to(&s, S44{ x: 0 }); - move_to(&s, S45{ x: 0 }); - move_to(&s, S46{ x: 0 }); - move_to(&s, S47{ x: 0 }); - move_to(&s, S48{ x: 0 }); - move_to(&s, S49{ x: 0 }); - move_to(&s, S50{ x: 0 }); - move_to(&s, S51{ x: 0 }); - move_to(&s, S52{ x: 0 }); - move_to(&s, S53{ x: 0 }); - move_to(&s, S54{ x: 0 }); - move_to(&s, S55{ x: 0 }); - move_to(&s, S56{ x: 0 }); - move_to(&s, S57{ x: 0 }); - move_to(&s, S58{ x: 0 }); - move_to(&s, S59{ x: 0 }); - move_to(&s, S60{ x: 0 }); - move_to(&s, S61{ x: 0 }); - move_to(&s, S62{ x: 0 }); - move_to(&s, S63{ x: 0 }); - move_to(&s, S64{ x: 0 }); - move_to(&s, S65{ x: 0 }); - move_to(&s, S66{ x: 0 }); - move_to(&s, S67{ x: 0 }); - move_to(&s, S68{ x: 0 }); - move_to(&s, S69{ x: 0 }); - move_to(&s, S70{ x: 0 }); - move_to(&s, S71{ x: 0 }); - move_to(&s, S72{ x: 0 }); - move_to(&s, S73{ x: 0 }); - move_to(&s, S74{ x: 0 }); - move_to(&s, S75{ x: 0 }); - move_to(&s, S76{ x: 0 }); - move_to(&s, S77{ x: 0 }); - move_to(&s, S78{ x: 0 }); - move_to(&s, S79{ x: 0 }); - move_to(&s, S80{ x: 0 }); - move_to(&s, S81{ x: 0 }); - move_to(&s, S82{ x: 0 }); - move_to(&s, S83{ x: 0 }); - move_to(&s, S84{ x: 0 }); - move_to(&s, S85{ x: 0 }); - move_to(&s, S86{ x: 0 }); - move_to(&s, S87{ x: 0 }); - move_to(&s, S88{ x: 0 }); - move_to(&s, S89{ x: 0 }); - move_to(&s, S90{ x: 0 }); - move_to(&s, S91{ x: 0 }); - move_to(&s, S92{ x: 0 }); - move_to(&s, S93{ x: 0 }); - move_to(&s, S94{ x: 0 }); - move_to(&s, S95{ x: 0 }); - move_to(&s, S96{ x: 0 }); - move_to(&s, S97{ x: 0 }); - move_to(&s, S98{ x: 0 }); - move_to(&s, S99{ x: 0 }); - move_to(&s, S100{ x: 0 }); - return; - } - - public entry calibrate_move_to_x500(s: signer) { - label b0: - move_to(&s, S101{ x: 0 }); - move_to(&s, S102{ x: 0 }); - move_to(&s, S103{ x: 0 }); - move_to(&s, S104{ x: 0 }); - move_to(&s, S105{ x: 0 }); - move_to(&s, S106{ x: 0 }); - move_to(&s, S107{ x: 0 }); - move_to(&s, S108{ x: 0 }); - move_to(&s, S109{ x: 0 }); - move_to(&s, S110{ x: 0 }); - move_to(&s, S111{ x: 0 }); - move_to(&s, S112{ x: 0 }); - move_to(&s, S113{ x: 0 }); - move_to(&s, S114{ x: 0 }); - move_to(&s, S115{ x: 0 }); - move_to(&s, S116{ x: 0 }); - move_to(&s, S117{ x: 0 }); - move_to(&s, S118{ x: 0 }); - move_to(&s, S119{ x: 0 }); - move_to(&s, S120{ x: 0 }); - move_to(&s, S121{ x: 0 }); - move_to(&s, S122{ x: 0 }); - move_to(&s, S123{ x: 0 }); - move_to(&s, S124{ x: 0 }); - move_to(&s, S125{ x: 0 }); - move_to(&s, S126{ x: 0 }); - move_to(&s, S127{ x: 0 }); - move_to(&s, S128{ x: 0 }); - move_to(&s, S129{ x: 0 }); - move_to(&s, S130{ x: 0 }); - move_to(&s, S131{ x: 0 }); - move_to(&s, S132{ x: 0 }); - move_to(&s, S133{ x: 0 }); - move_to(&s, S134{ x: 0 }); - move_to(&s, S135{ x: 0 }); - move_to(&s, S136{ x: 0 }); - move_to(&s, S137{ x: 0 }); - move_to(&s, S138{ x: 0 }); - move_to(&s, S139{ x: 0 }); - move_to(&s, S140{ x: 0 }); - move_to(&s, S141{ x: 0 }); - move_to(&s, S142{ x: 0 }); - move_to(&s, S143{ x: 0 }); - move_to(&s, S144{ x: 0 }); - move_to(&s, S145{ x: 0 }); - move_to(&s, S146{ x: 0 }); - move_to(&s, S147{ x: 0 }); - move_to(&s, S148{ x: 0 }); - move_to(&s, S149{ x: 0 }); - move_to(&s, S150{ x: 0 }); - move_to(&s, S151{ x: 0 }); - move_to(&s, S152{ x: 0 }); - move_to(&s, S153{ x: 0 }); - move_to(&s, S154{ x: 0 }); - move_to(&s, S155{ x: 0 }); - move_to(&s, S156{ x: 0 }); - move_to(&s, S157{ x: 0 }); - move_to(&s, S158{ x: 0 }); - move_to(&s, S159{ x: 0 }); - move_to(&s, S160{ x: 0 }); - move_to(&s, S161{ x: 0 }); - move_to(&s, S162{ x: 0 }); - move_to(&s, S163{ x: 0 }); - move_to(&s, S164{ x: 0 }); - move_to(&s, S165{ x: 0 }); - move_to(&s, S166{ x: 0 }); - move_to(&s, S167{ x: 0 }); - move_to(&s, S168{ x: 0 }); - move_to(&s, S169{ x: 0 }); - move_to(&s, S170{ x: 0 }); - move_to(&s, S171{ x: 0 }); - move_to(&s, S172{ x: 0 }); - move_to(&s, S173{ x: 0 }); - move_to(&s, S174{ x: 0 }); - move_to(&s, S175{ x: 0 }); - move_to(&s, S176{ x: 0 }); - move_to(&s, S177{ x: 0 }); - move_to(&s, S178{ x: 0 }); - move_to(&s, S179{ x: 0 }); - move_to(&s, S180{ x: 0 }); - move_to(&s, S181{ x: 0 }); - move_to(&s, S182{ x: 0 }); - move_to(&s, S183{ x: 0 }); - move_to(&s, S184{ x: 0 }); - move_to(&s, S185{ x: 0 }); - move_to(&s, S186{ x: 0 }); - move_to(&s, S187{ x: 0 }); - move_to(&s, S188{ x: 0 }); - move_to(&s, S189{ x: 0 }); - move_to(&s, S190{ x: 0 }); - move_to(&s, S191{ x: 0 }); - move_to(&s, S192{ x: 0 }); - move_to(&s, S193{ x: 0 }); - move_to(&s, S194{ x: 0 }); - move_to(&s, S195{ x: 0 }); - move_to(&s, S196{ x: 0 }); - move_to(&s, S197{ x: 0 }); - move_to(&s, S198{ x: 0 }); - move_to(&s, S199{ x: 0 }); - move_to(&s, S200{ x: 0 }); - move_to(&s, S201{ x: 0 }); - move_to(&s, S202{ x: 0 }); - move_to(&s, S203{ x: 0 }); - move_to(&s, S204{ x: 0 }); - move_to(&s, S205{ x: 0 }); - move_to(&s, S206{ x: 0 }); - move_to(&s, S207{ x: 0 }); - move_to(&s, S208{ x: 0 }); - move_to(&s, S209{ x: 0 }); - move_to(&s, S210{ x: 0 }); - move_to(&s, S211{ x: 0 }); - move_to(&s, S212{ x: 0 }); - move_to(&s, S213{ x: 0 }); - move_to(&s, S214{ x: 0 }); - move_to(&s, S215{ x: 0 }); - move_to(&s, S216{ x: 0 }); - move_to(&s, S217{ x: 0 }); - move_to(&s, S218{ x: 0 }); - move_to(&s, S219{ x: 0 }); - move_to(&s, S220{ x: 0 }); - move_to(&s, S221{ x: 0 }); - move_to(&s, S222{ x: 0 }); - move_to(&s, S223{ x: 0 }); - move_to(&s, S224{ x: 0 }); - move_to(&s, S225{ x: 0 }); - move_to(&s, S226{ x: 0 }); - move_to(&s, S227{ x: 0 }); - move_to(&s, S228{ x: 0 }); - move_to(&s, S229{ x: 0 }); - move_to(&s, S230{ x: 0 }); - move_to(&s, S231{ x: 0 }); - move_to(&s, S232{ x: 0 }); - move_to(&s, S233{ x: 0 }); - move_to(&s, S234{ x: 0 }); - move_to(&s, S235{ x: 0 }); - move_to(&s, S236{ x: 0 }); - move_to(&s, S237{ x: 0 }); - move_to(&s, S238{ x: 0 }); - move_to(&s, S239{ x: 0 }); - move_to(&s, S240{ x: 0 }); - move_to(&s, S241{ x: 0 }); - move_to(&s, S242{ x: 0 }); - move_to(&s, S243{ x: 0 }); - move_to(&s, S244{ x: 0 }); - move_to(&s, S245{ x: 0 }); - move_to(&s, S246{ x: 0 }); - move_to(&s, S247{ x: 0 }); - move_to(&s, S248{ x: 0 }); - move_to(&s, S249{ x: 0 }); - move_to(&s, S250{ x: 0 }); - move_to(&s, S251{ x: 0 }); - move_to(&s, S252{ x: 0 }); - move_to(&s, S253{ x: 0 }); - move_to(&s, S254{ x: 0 }); - move_to(&s, S255{ x: 0 }); - move_to(&s, S256{ x: 0 }); - move_to(&s, S257{ x: 0 }); - move_to(&s, S258{ x: 0 }); - move_to(&s, S259{ x: 0 }); - move_to(&s, S260{ x: 0 }); - move_to(&s, S261{ x: 0 }); - move_to(&s, S262{ x: 0 }); - move_to(&s, S263{ x: 0 }); - move_to(&s, S264{ x: 0 }); - move_to(&s, S265{ x: 0 }); - move_to(&s, S266{ x: 0 }); - move_to(&s, S267{ x: 0 }); - move_to(&s, S268{ x: 0 }); - move_to(&s, S269{ x: 0 }); - move_to(&s, S270{ x: 0 }); - move_to(&s, S271{ x: 0 }); - move_to(&s, S272{ x: 0 }); - move_to(&s, S273{ x: 0 }); - move_to(&s, S274{ x: 0 }); - move_to(&s, S275{ x: 0 }); - move_to(&s, S276{ x: 0 }); - move_to(&s, S277{ x: 0 }); - move_to(&s, S278{ x: 0 }); - move_to(&s, S279{ x: 0 }); - move_to(&s, S280{ x: 0 }); - move_to(&s, S281{ x: 0 }); - move_to(&s, S282{ x: 0 }); - move_to(&s, S283{ x: 0 }); - move_to(&s, S284{ x: 0 }); - move_to(&s, S285{ x: 0 }); - move_to(&s, S286{ x: 0 }); - move_to(&s, S287{ x: 0 }); - move_to(&s, S288{ x: 0 }); - move_to(&s, S289{ x: 0 }); - move_to(&s, S290{ x: 0 }); - move_to(&s, S291{ x: 0 }); - move_to(&s, S292{ x: 0 }); - move_to(&s, S293{ x: 0 }); - move_to(&s, S294{ x: 0 }); - move_to(&s, S295{ x: 0 }); - move_to(&s, S296{ x: 0 }); - move_to(&s, S297{ x: 0 }); - move_to(&s, S298{ x: 0 }); - move_to(&s, S299{ x: 0 }); - move_to(&s, S300{ x: 0 }); - move_to(&s, S301{ x: 0 }); - move_to(&s, S302{ x: 0 }); - move_to(&s, S303{ x: 0 }); - move_to(&s, S304{ x: 0 }); - move_to(&s, S305{ x: 0 }); - move_to(&s, S306{ x: 0 }); - move_to(&s, S307{ x: 0 }); - move_to(&s, S308{ x: 0 }); - move_to(&s, S309{ x: 0 }); - move_to(&s, S310{ x: 0 }); - move_to(&s, S311{ x: 0 }); - move_to(&s, S312{ x: 0 }); - move_to(&s, S313{ x: 0 }); - move_to(&s, S314{ x: 0 }); - move_to(&s, S315{ x: 0 }); - move_to(&s, S316{ x: 0 }); - move_to(&s, S317{ x: 0 }); - move_to(&s, S318{ x: 0 }); - move_to(&s, S319{ x: 0 }); - move_to(&s, S320{ x: 0 }); - move_to(&s, S321{ x: 0 }); - move_to(&s, S322{ x: 0 }); - move_to(&s, S323{ x: 0 }); - move_to(&s, S324{ x: 0 }); - move_to(&s, S325{ x: 0 }); - move_to(&s, S326{ x: 0 }); - move_to(&s, S327{ x: 0 }); - move_to(&s, S328{ x: 0 }); - move_to(&s, S329{ x: 0 }); - move_to(&s, S330{ x: 0 }); - move_to(&s, S331{ x: 0 }); - move_to(&s, S332{ x: 0 }); - move_to(&s, S333{ x: 0 }); - move_to(&s, S334{ x: 0 }); - move_to(&s, S335{ x: 0 }); - move_to(&s, S336{ x: 0 }); - move_to(&s, S337{ x: 0 }); - move_to(&s, S338{ x: 0 }); - move_to(&s, S339{ x: 0 }); - move_to(&s, S340{ x: 0 }); - move_to(&s, S341{ x: 0 }); - move_to(&s, S342{ x: 0 }); - move_to(&s, S343{ x: 0 }); - move_to(&s, S344{ x: 0 }); - move_to(&s, S345{ x: 0 }); - move_to(&s, S346{ x: 0 }); - move_to(&s, S347{ x: 0 }); - move_to(&s, S348{ x: 0 }); - move_to(&s, S349{ x: 0 }); - move_to(&s, S350{ x: 0 }); - move_to(&s, S351{ x: 0 }); - move_to(&s, S352{ x: 0 }); - move_to(&s, S353{ x: 0 }); - move_to(&s, S354{ x: 0 }); - move_to(&s, S355{ x: 0 }); - move_to(&s, S356{ x: 0 }); - move_to(&s, S357{ x: 0 }); - move_to(&s, S358{ x: 0 }); - move_to(&s, S359{ x: 0 }); - move_to(&s, S360{ x: 0 }); - move_to(&s, S361{ x: 0 }); - move_to(&s, S362{ x: 0 }); - move_to(&s, S363{ x: 0 }); - move_to(&s, S364{ x: 0 }); - move_to(&s, S365{ x: 0 }); - move_to(&s, S366{ x: 0 }); - move_to(&s, S367{ x: 0 }); - move_to(&s, S368{ x: 0 }); - move_to(&s, S369{ x: 0 }); - move_to(&s, S370{ x: 0 }); - move_to(&s, S371{ x: 0 }); - move_to(&s, S372{ x: 0 }); - move_to(&s, S373{ x: 0 }); - move_to(&s, S374{ x: 0 }); - move_to(&s, S375{ x: 0 }); - move_to(&s, S376{ x: 0 }); - move_to(&s, S377{ x: 0 }); - move_to(&s, S378{ x: 0 }); - move_to(&s, S379{ x: 0 }); - move_to(&s, S380{ x: 0 }); - move_to(&s, S381{ x: 0 }); - move_to(&s, S382{ x: 0 }); - move_to(&s, S383{ x: 0 }); - move_to(&s, S384{ x: 0 }); - move_to(&s, S385{ x: 0 }); - move_to(&s, S386{ x: 0 }); - move_to(&s, S387{ x: 0 }); - move_to(&s, S388{ x: 0 }); - move_to(&s, S389{ x: 0 }); - move_to(&s, S390{ x: 0 }); - move_to(&s, S391{ x: 0 }); - move_to(&s, S392{ x: 0 }); - move_to(&s, S393{ x: 0 }); - move_to(&s, S394{ x: 0 }); - move_to(&s, S395{ x: 0 }); - move_to(&s, S396{ x: 0 }); - move_to(&s, S397{ x: 0 }); - move_to(&s, S398{ x: 0 }); - move_to(&s, S399{ x: 0 }); - move_to(&s, S400{ x: 0 }); - move_to(&s, S401{ x: 0 }); - move_to(&s, S402{ x: 0 }); - move_to(&s, S403{ x: 0 }); - move_to(&s, S404{ x: 0 }); - move_to(&s, S405{ x: 0 }); - move_to(&s, S406{ x: 0 }); - move_to(&s, S407{ x: 0 }); - move_to(&s, S408{ x: 0 }); - move_to(&s, S409{ x: 0 }); - move_to(&s, S410{ x: 0 }); - move_to(&s, S411{ x: 0 }); - move_to(&s, S412{ x: 0 }); - move_to(&s, S413{ x: 0 }); - move_to(&s, S414{ x: 0 }); - move_to(&s, S415{ x: 0 }); - move_to(&s, S416{ x: 0 }); - move_to(&s, S417{ x: 0 }); - move_to(&s, S418{ x: 0 }); - move_to(&s, S419{ x: 0 }); - move_to(&s, S420{ x: 0 }); - move_to(&s, S421{ x: 0 }); - move_to(&s, S422{ x: 0 }); - move_to(&s, S423{ x: 0 }); - move_to(&s, S424{ x: 0 }); - move_to(&s, S425{ x: 0 }); - move_to(&s, S426{ x: 0 }); - move_to(&s, S427{ x: 0 }); - move_to(&s, S428{ x: 0 }); - move_to(&s, S429{ x: 0 }); - move_to(&s, S430{ x: 0 }); - move_to(&s, S431{ x: 0 }); - move_to(&s, S432{ x: 0 }); - move_to(&s, S433{ x: 0 }); - move_to(&s, S434{ x: 0 }); - move_to(&s, S435{ x: 0 }); - move_to(&s, S436{ x: 0 }); - move_to(&s, S437{ x: 0 }); - move_to(&s, S438{ x: 0 }); - move_to(&s, S439{ x: 0 }); - move_to(&s, S440{ x: 0 }); - move_to(&s, S441{ x: 0 }); - move_to(&s, S442{ x: 0 }); - move_to(&s, S443{ x: 0 }); - move_to(&s, S444{ x: 0 }); - move_to(&s, S445{ x: 0 }); - move_to(&s, S446{ x: 0 }); - move_to(&s, S447{ x: 0 }); - move_to(&s, S448{ x: 0 }); - move_to(&s, S449{ x: 0 }); - move_to(&s, S450{ x: 0 }); - move_to(&s, S451{ x: 0 }); - move_to(&s, S452{ x: 0 }); - move_to(&s, S453{ x: 0 }); - move_to(&s, S454{ x: 0 }); - move_to(&s, S455{ x: 0 }); - move_to(&s, S456{ x: 0 }); - move_to(&s, S457{ x: 0 }); - move_to(&s, S458{ x: 0 }); - move_to(&s, S459{ x: 0 }); - move_to(&s, S460{ x: 0 }); - move_to(&s, S461{ x: 0 }); - move_to(&s, S462{ x: 0 }); - move_to(&s, S463{ x: 0 }); - move_to(&s, S464{ x: 0 }); - move_to(&s, S465{ x: 0 }); - move_to(&s, S466{ x: 0 }); - move_to(&s, S467{ x: 0 }); - move_to(&s, S468{ x: 0 }); - move_to(&s, S469{ x: 0 }); - move_to(&s, S470{ x: 0 }); - move_to(&s, S471{ x: 0 }); - move_to(&s, S472{ x: 0 }); - move_to(&s, S473{ x: 0 }); - move_to(&s, S474{ x: 0 }); - move_to(&s, S475{ x: 0 }); - move_to(&s, S476{ x: 0 }); - move_to(&s, S477{ x: 0 }); - move_to(&s, S478{ x: 0 }); - move_to(&s, S479{ x: 0 }); - move_to(&s, S480{ x: 0 }); - move_to(&s, S481{ x: 0 }); - move_to(&s, S482{ x: 0 }); - move_to(&s, S483{ x: 0 }); - move_to(&s, S484{ x: 0 }); - move_to(&s, S485{ x: 0 }); - move_to(&s, S486{ x: 0 }); - move_to(&s, S487{ x: 0 }); - move_to(&s, S488{ x: 0 }); - move_to(&s, S489{ x: 0 }); - move_to(&s, S490{ x: 0 }); - move_to(&s, S491{ x: 0 }); - move_to(&s, S492{ x: 0 }); - move_to(&s, S493{ x: 0 }); - move_to(&s, S494{ x: 0 }); - move_to(&s, S495{ x: 0 }); - move_to(&s, S496{ x: 0 }); - move_to(&s, S497{ x: 0 }); - move_to(&s, S498{ x: 0 }); - move_to(&s, S499{ x: 0 }); - move_to(&s, S500{ x: 0 }); - move_to(&s, S501{ x: 0 }); - move_to(&s, S502{ x: 0 }); - move_to(&s, S503{ x: 0 }); - move_to(&s, S504{ x: 0 }); - move_to(&s, S505{ x: 0 }); - move_to(&s, S506{ x: 0 }); - move_to(&s, S507{ x: 0 }); - move_to(&s, S508{ x: 0 }); - move_to(&s, S509{ x: 0 }); - move_to(&s, S510{ x: 0 }); - move_to(&s, S511{ x: 0 }); - move_to(&s, S512{ x: 0 }); - move_to(&s, S513{ x: 0 }); - move_to(&s, S514{ x: 0 }); - move_to(&s, S515{ x: 0 }); - move_to(&s, S516{ x: 0 }); - move_to(&s, S517{ x: 0 }); - move_to(&s, S518{ x: 0 }); - move_to(&s, S519{ x: 0 }); - move_to(&s, S520{ x: 0 }); - move_to(&s, S521{ x: 0 }); - move_to(&s, S522{ x: 0 }); - move_to(&s, S523{ x: 0 }); - move_to(&s, S524{ x: 0 }); - move_to(&s, S525{ x: 0 }); - move_to(&s, S526{ x: 0 }); - move_to(&s, S527{ x: 0 }); - move_to(&s, S528{ x: 0 }); - move_to(&s, S529{ x: 0 }); - move_to(&s, S530{ x: 0 }); - move_to(&s, S531{ x: 0 }); - move_to(&s, S532{ x: 0 }); - move_to(&s, S533{ x: 0 }); - move_to(&s, S534{ x: 0 }); - move_to(&s, S535{ x: 0 }); - move_to(&s, S536{ x: 0 }); - move_to(&s, S537{ x: 0 }); - move_to(&s, S538{ x: 0 }); - move_to(&s, S539{ x: 0 }); - move_to(&s, S540{ x: 0 }); - move_to(&s, S541{ x: 0 }); - move_to(&s, S542{ x: 0 }); - move_to(&s, S543{ x: 0 }); - move_to(&s, S544{ x: 0 }); - move_to(&s, S545{ x: 0 }); - move_to(&s, S546{ x: 0 }); - move_to(&s, S547{ x: 0 }); - move_to(&s, S548{ x: 0 }); - move_to(&s, S549{ x: 0 }); - move_to(&s, S550{ x: 0 }); - move_to(&s, S551{ x: 0 }); - move_to(&s, S552{ x: 0 }); - move_to(&s, S553{ x: 0 }); - move_to(&s, S554{ x: 0 }); - move_to(&s, S555{ x: 0 }); - move_to(&s, S556{ x: 0 }); - move_to(&s, S557{ x: 0 }); - move_to(&s, S558{ x: 0 }); - move_to(&s, S559{ x: 0 }); - move_to(&s, S560{ x: 0 }); - move_to(&s, S561{ x: 0 }); - move_to(&s, S562{ x: 0 }); - move_to(&s, S563{ x: 0 }); - move_to(&s, S564{ x: 0 }); - move_to(&s, S565{ x: 0 }); - move_to(&s, S566{ x: 0 }); - move_to(&s, S567{ x: 0 }); - move_to(&s, S568{ x: 0 }); - move_to(&s, S569{ x: 0 }); - move_to(&s, S570{ x: 0 }); - move_to(&s, S571{ x: 0 }); - move_to(&s, S572{ x: 0 }); - move_to(&s, S573{ x: 0 }); - move_to(&s, S574{ x: 0 }); - move_to(&s, S575{ x: 0 }); - move_to(&s, S576{ x: 0 }); - move_to(&s, S577{ x: 0 }); - move_to(&s, S578{ x: 0 }); - move_to(&s, S579{ x: 0 }); - move_to(&s, S580{ x: 0 }); - move_to(&s, S581{ x: 0 }); - move_to(&s, S582{ x: 0 }); - move_to(&s, S583{ x: 0 }); - move_to(&s, S584{ x: 0 }); - move_to(&s, S585{ x: 0 }); - move_to(&s, S586{ x: 0 }); - move_to(&s, S587{ x: 0 }); - move_to(&s, S588{ x: 0 }); - move_to(&s, S589{ x: 0 }); - move_to(&s, S590{ x: 0 }); - move_to(&s, S591{ x: 0 }); - move_to(&s, S592{ x: 0 }); - move_to(&s, S593{ x: 0 }); - move_to(&s, S594{ x: 0 }); - move_to(&s, S595{ x: 0 }); - move_to(&s, S596{ x: 0 }); - move_to(&s, S597{ x: 0 }); - move_to(&s, S598{ x: 0 }); - move_to(&s, S599{ x: 0 }); - move_to(&s, S600{ x: 0 }); - return; - } - - public entry calibrate_move_to_x1000(s: signer) { - label b0: - move_to(&s, S601{ x: 0 }); - move_to(&s, S602{ x: 0 }); - move_to(&s, S603{ x: 0 }); - move_to(&s, S604{ x: 0 }); - move_to(&s, S605{ x: 0 }); - move_to(&s, S606{ x: 0 }); - move_to(&s, S607{ x: 0 }); - move_to(&s, S608{ x: 0 }); - move_to(&s, S609{ x: 0 }); - move_to(&s, S610{ x: 0 }); - move_to(&s, S611{ x: 0 }); - move_to(&s, S612{ x: 0 }); - move_to(&s, S613{ x: 0 }); - move_to(&s, S614{ x: 0 }); - move_to(&s, S615{ x: 0 }); - move_to(&s, S616{ x: 0 }); - move_to(&s, S617{ x: 0 }); - move_to(&s, S618{ x: 0 }); - move_to(&s, S619{ x: 0 }); - move_to(&s, S620{ x: 0 }); - move_to(&s, S621{ x: 0 }); - move_to(&s, S622{ x: 0 }); - move_to(&s, S623{ x: 0 }); - move_to(&s, S624{ x: 0 }); - move_to(&s, S625{ x: 0 }); - move_to(&s, S626{ x: 0 }); - move_to(&s, S627{ x: 0 }); - move_to(&s, S628{ x: 0 }); - move_to(&s, S629{ x: 0 }); - move_to(&s, S630{ x: 0 }); - move_to(&s, S631{ x: 0 }); - move_to(&s, S632{ x: 0 }); - move_to(&s, S633{ x: 0 }); - move_to(&s, S634{ x: 0 }); - move_to(&s, S635{ x: 0 }); - move_to(&s, S636{ x: 0 }); - move_to(&s, S637{ x: 0 }); - move_to(&s, S638{ x: 0 }); - move_to(&s, S639{ x: 0 }); - move_to(&s, S640{ x: 0 }); - move_to(&s, S641{ x: 0 }); - move_to(&s, S642{ x: 0 }); - move_to(&s, S643{ x: 0 }); - move_to(&s, S644{ x: 0 }); - move_to(&s, S645{ x: 0 }); - move_to(&s, S646{ x: 0 }); - move_to(&s, S647{ x: 0 }); - move_to(&s, S648{ x: 0 }); - move_to(&s, S649{ x: 0 }); - move_to(&s, S650{ x: 0 }); - move_to(&s, S651{ x: 0 }); - move_to(&s, S652{ x: 0 }); - move_to(&s, S653{ x: 0 }); - move_to(&s, S654{ x: 0 }); - move_to(&s, S655{ x: 0 }); - move_to(&s, S656{ x: 0 }); - move_to(&s, S657{ x: 0 }); - move_to(&s, S658{ x: 0 }); - move_to(&s, S659{ x: 0 }); - move_to(&s, S660{ x: 0 }); - move_to(&s, S661{ x: 0 }); - move_to(&s, S662{ x: 0 }); - move_to(&s, S663{ x: 0 }); - move_to(&s, S664{ x: 0 }); - move_to(&s, S665{ x: 0 }); - move_to(&s, S666{ x: 0 }); - move_to(&s, S667{ x: 0 }); - move_to(&s, S668{ x: 0 }); - move_to(&s, S669{ x: 0 }); - move_to(&s, S670{ x: 0 }); - move_to(&s, S671{ x: 0 }); - move_to(&s, S672{ x: 0 }); - move_to(&s, S673{ x: 0 }); - move_to(&s, S674{ x: 0 }); - move_to(&s, S675{ x: 0 }); - move_to(&s, S676{ x: 0 }); - move_to(&s, S677{ x: 0 }); - move_to(&s, S678{ x: 0 }); - move_to(&s, S679{ x: 0 }); - move_to(&s, S680{ x: 0 }); - move_to(&s, S681{ x: 0 }); - move_to(&s, S682{ x: 0 }); - move_to(&s, S683{ x: 0 }); - move_to(&s, S684{ x: 0 }); - move_to(&s, S685{ x: 0 }); - move_to(&s, S686{ x: 0 }); - move_to(&s, S687{ x: 0 }); - move_to(&s, S688{ x: 0 }); - move_to(&s, S689{ x: 0 }); - move_to(&s, S690{ x: 0 }); - move_to(&s, S691{ x: 0 }); - move_to(&s, S692{ x: 0 }); - move_to(&s, S693{ x: 0 }); - move_to(&s, S694{ x: 0 }); - move_to(&s, S695{ x: 0 }); - move_to(&s, S696{ x: 0 }); - move_to(&s, S697{ x: 0 }); - move_to(&s, S698{ x: 0 }); - move_to(&s, S699{ x: 0 }); - move_to(&s, S700{ x: 0 }); - move_to(&s, S701{ x: 0 }); - move_to(&s, S702{ x: 0 }); - move_to(&s, S703{ x: 0 }); - move_to(&s, S704{ x: 0 }); - move_to(&s, S705{ x: 0 }); - move_to(&s, S706{ x: 0 }); - move_to(&s, S707{ x: 0 }); - move_to(&s, S708{ x: 0 }); - move_to(&s, S709{ x: 0 }); - move_to(&s, S710{ x: 0 }); - move_to(&s, S711{ x: 0 }); - move_to(&s, S712{ x: 0 }); - move_to(&s, S713{ x: 0 }); - move_to(&s, S714{ x: 0 }); - move_to(&s, S715{ x: 0 }); - move_to(&s, S716{ x: 0 }); - move_to(&s, S717{ x: 0 }); - move_to(&s, S718{ x: 0 }); - move_to(&s, S719{ x: 0 }); - move_to(&s, S720{ x: 0 }); - move_to(&s, S721{ x: 0 }); - move_to(&s, S722{ x: 0 }); - move_to(&s, S723{ x: 0 }); - move_to(&s, S724{ x: 0 }); - move_to(&s, S725{ x: 0 }); - move_to(&s, S726{ x: 0 }); - move_to(&s, S727{ x: 0 }); - move_to(&s, S728{ x: 0 }); - move_to(&s, S729{ x: 0 }); - move_to(&s, S730{ x: 0 }); - move_to(&s, S731{ x: 0 }); - move_to(&s, S732{ x: 0 }); - move_to(&s, S733{ x: 0 }); - move_to(&s, S734{ x: 0 }); - move_to(&s, S735{ x: 0 }); - move_to(&s, S736{ x: 0 }); - move_to(&s, S737{ x: 0 }); - move_to(&s, S738{ x: 0 }); - move_to(&s, S739{ x: 0 }); - move_to(&s, S740{ x: 0 }); - move_to(&s, S741{ x: 0 }); - move_to(&s, S742{ x: 0 }); - move_to(&s, S743{ x: 0 }); - move_to(&s, S744{ x: 0 }); - move_to(&s, S745{ x: 0 }); - move_to(&s, S746{ x: 0 }); - move_to(&s, S747{ x: 0 }); - move_to(&s, S748{ x: 0 }); - move_to(&s, S749{ x: 0 }); - move_to(&s, S750{ x: 0 }); - move_to(&s, S751{ x: 0 }); - move_to(&s, S752{ x: 0 }); - move_to(&s, S753{ x: 0 }); - move_to(&s, S754{ x: 0 }); - move_to(&s, S755{ x: 0 }); - move_to(&s, S756{ x: 0 }); - move_to(&s, S757{ x: 0 }); - move_to(&s, S758{ x: 0 }); - move_to(&s, S759{ x: 0 }); - move_to(&s, S760{ x: 0 }); - move_to(&s, S761{ x: 0 }); - move_to(&s, S762{ x: 0 }); - move_to(&s, S763{ x: 0 }); - move_to(&s, S764{ x: 0 }); - move_to(&s, S765{ x: 0 }); - move_to(&s, S766{ x: 0 }); - move_to(&s, S767{ x: 0 }); - move_to(&s, S768{ x: 0 }); - move_to(&s, S769{ x: 0 }); - move_to(&s, S770{ x: 0 }); - move_to(&s, S771{ x: 0 }); - move_to(&s, S772{ x: 0 }); - move_to(&s, S773{ x: 0 }); - move_to(&s, S774{ x: 0 }); - move_to(&s, S775{ x: 0 }); - move_to(&s, S776{ x: 0 }); - move_to(&s, S777{ x: 0 }); - move_to(&s, S778{ x: 0 }); - move_to(&s, S779{ x: 0 }); - move_to(&s, S780{ x: 0 }); - move_to(&s, S781{ x: 0 }); - move_to(&s, S782{ x: 0 }); - move_to(&s, S783{ x: 0 }); - move_to(&s, S784{ x: 0 }); - move_to(&s, S785{ x: 0 }); - move_to(&s, S786{ x: 0 }); - move_to(&s, S787{ x: 0 }); - move_to(&s, S788{ x: 0 }); - move_to(&s, S789{ x: 0 }); - move_to(&s, S790{ x: 0 }); - move_to(&s, S791{ x: 0 }); - move_to(&s, S792{ x: 0 }); - move_to(&s, S793{ x: 0 }); - move_to(&s, S794{ x: 0 }); - move_to(&s, S795{ x: 0 }); - move_to(&s, S796{ x: 0 }); - move_to(&s, S797{ x: 0 }); - move_to(&s, S798{ x: 0 }); - move_to(&s, S799{ x: 0 }); - move_to(&s, S800{ x: 0 }); - move_to(&s, S801{ x: 0 }); - move_to(&s, S802{ x: 0 }); - move_to(&s, S803{ x: 0 }); - move_to(&s, S804{ x: 0 }); - move_to(&s, S805{ x: 0 }); - move_to(&s, S806{ x: 0 }); - move_to(&s, S807{ x: 0 }); - move_to(&s, S808{ x: 0 }); - move_to(&s, S809{ x: 0 }); - move_to(&s, S810{ x: 0 }); - move_to(&s, S811{ x: 0 }); - move_to(&s, S812{ x: 0 }); - move_to(&s, S813{ x: 0 }); - move_to(&s, S814{ x: 0 }); - move_to(&s, S815{ x: 0 }); - move_to(&s, S816{ x: 0 }); - move_to(&s, S817{ x: 0 }); - move_to(&s, S818{ x: 0 }); - move_to(&s, S819{ x: 0 }); - move_to(&s, S820{ x: 0 }); - move_to(&s, S821{ x: 0 }); - move_to(&s, S822{ x: 0 }); - move_to(&s, S823{ x: 0 }); - move_to(&s, S824{ x: 0 }); - move_to(&s, S825{ x: 0 }); - move_to(&s, S826{ x: 0 }); - move_to(&s, S827{ x: 0 }); - move_to(&s, S828{ x: 0 }); - move_to(&s, S829{ x: 0 }); - move_to(&s, S830{ x: 0 }); - move_to(&s, S831{ x: 0 }); - move_to(&s, S832{ x: 0 }); - move_to(&s, S833{ x: 0 }); - move_to(&s, S834{ x: 0 }); - move_to(&s, S835{ x: 0 }); - move_to(&s, S836{ x: 0 }); - move_to(&s, S837{ x: 0 }); - move_to(&s, S838{ x: 0 }); - move_to(&s, S839{ x: 0 }); - move_to(&s, S840{ x: 0 }); - move_to(&s, S841{ x: 0 }); - move_to(&s, S842{ x: 0 }); - move_to(&s, S843{ x: 0 }); - move_to(&s, S844{ x: 0 }); - move_to(&s, S845{ x: 0 }); - move_to(&s, S846{ x: 0 }); - move_to(&s, S847{ x: 0 }); - move_to(&s, S848{ x: 0 }); - move_to(&s, S849{ x: 0 }); - move_to(&s, S850{ x: 0 }); - move_to(&s, S851{ x: 0 }); - move_to(&s, S852{ x: 0 }); - move_to(&s, S853{ x: 0 }); - move_to(&s, S854{ x: 0 }); - move_to(&s, S855{ x: 0 }); - move_to(&s, S856{ x: 0 }); - move_to(&s, S857{ x: 0 }); - move_to(&s, S858{ x: 0 }); - move_to(&s, S859{ x: 0 }); - move_to(&s, S860{ x: 0 }); - move_to(&s, S861{ x: 0 }); - move_to(&s, S862{ x: 0 }); - move_to(&s, S863{ x: 0 }); - move_to(&s, S864{ x: 0 }); - move_to(&s, S865{ x: 0 }); - move_to(&s, S866{ x: 0 }); - move_to(&s, S867{ x: 0 }); - move_to(&s, S868{ x: 0 }); - move_to(&s, S869{ x: 0 }); - move_to(&s, S870{ x: 0 }); - move_to(&s, S871{ x: 0 }); - move_to(&s, S872{ x: 0 }); - move_to(&s, S873{ x: 0 }); - move_to(&s, S874{ x: 0 }); - move_to(&s, S875{ x: 0 }); - move_to(&s, S876{ x: 0 }); - move_to(&s, S877{ x: 0 }); - move_to(&s, S878{ x: 0 }); - move_to(&s, S879{ x: 0 }); - move_to(&s, S880{ x: 0 }); - move_to(&s, S881{ x: 0 }); - move_to(&s, S882{ x: 0 }); - move_to(&s, S883{ x: 0 }); - move_to(&s, S884{ x: 0 }); - move_to(&s, S885{ x: 0 }); - move_to(&s, S886{ x: 0 }); - move_to(&s, S887{ x: 0 }); - move_to(&s, S888{ x: 0 }); - move_to(&s, S889{ x: 0 }); - move_to(&s, S890{ x: 0 }); - move_to(&s, S891{ x: 0 }); - move_to(&s, S892{ x: 0 }); - move_to(&s, S893{ x: 0 }); - move_to(&s, S894{ x: 0 }); - move_to(&s, S895{ x: 0 }); - move_to(&s, S896{ x: 0 }); - move_to(&s, S897{ x: 0 }); - move_to(&s, S898{ x: 0 }); - move_to(&s, S899{ x: 0 }); - move_to(&s, S900{ x: 0 }); - move_to(&s, S901{ x: 0 }); - move_to(&s, S902{ x: 0 }); - move_to(&s, S903{ x: 0 }); - move_to(&s, S904{ x: 0 }); - move_to(&s, S905{ x: 0 }); - move_to(&s, S906{ x: 0 }); - move_to(&s, S907{ x: 0 }); - move_to(&s, S908{ x: 0 }); - move_to(&s, S909{ x: 0 }); - move_to(&s, S910{ x: 0 }); - move_to(&s, S911{ x: 0 }); - move_to(&s, S912{ x: 0 }); - move_to(&s, S913{ x: 0 }); - move_to(&s, S914{ x: 0 }); - move_to(&s, S915{ x: 0 }); - move_to(&s, S916{ x: 0 }); - move_to(&s, S917{ x: 0 }); - move_to(&s, S918{ x: 0 }); - move_to(&s, S919{ x: 0 }); - move_to(&s, S920{ x: 0 }); - move_to(&s, S921{ x: 0 }); - move_to(&s, S922{ x: 0 }); - move_to(&s, S923{ x: 0 }); - move_to(&s, S924{ x: 0 }); - move_to(&s, S925{ x: 0 }); - move_to(&s, S926{ x: 0 }); - move_to(&s, S927{ x: 0 }); - move_to(&s, S928{ x: 0 }); - move_to(&s, S929{ x: 0 }); - move_to(&s, S930{ x: 0 }); - move_to(&s, S931{ x: 0 }); - move_to(&s, S932{ x: 0 }); - move_to(&s, S933{ x: 0 }); - move_to(&s, S934{ x: 0 }); - move_to(&s, S935{ x: 0 }); - move_to(&s, S936{ x: 0 }); - move_to(&s, S937{ x: 0 }); - move_to(&s, S938{ x: 0 }); - move_to(&s, S939{ x: 0 }); - move_to(&s, S940{ x: 0 }); - move_to(&s, S941{ x: 0 }); - move_to(&s, S942{ x: 0 }); - move_to(&s, S943{ x: 0 }); - move_to(&s, S944{ x: 0 }); - move_to(&s, S945{ x: 0 }); - move_to(&s, S946{ x: 0 }); - move_to(&s, S947{ x: 0 }); - move_to(&s, S948{ x: 0 }); - move_to(&s, S949{ x: 0 }); - move_to(&s, S950{ x: 0 }); - move_to(&s, S951{ x: 0 }); - move_to(&s, S952{ x: 0 }); - move_to(&s, S953{ x: 0 }); - move_to(&s, S954{ x: 0 }); - move_to(&s, S955{ x: 0 }); - move_to(&s, S956{ x: 0 }); - move_to(&s, S957{ x: 0 }); - move_to(&s, S958{ x: 0 }); - move_to(&s, S959{ x: 0 }); - move_to(&s, S960{ x: 0 }); - move_to(&s, S961{ x: 0 }); - move_to(&s, S962{ x: 0 }); - move_to(&s, S963{ x: 0 }); - move_to(&s, S964{ x: 0 }); - move_to(&s, S965{ x: 0 }); - move_to(&s, S966{ x: 0 }); - move_to(&s, S967{ x: 0 }); - move_to(&s, S968{ x: 0 }); - move_to(&s, S969{ x: 0 }); - move_to(&s, S970{ x: 0 }); - move_to(&s, S971{ x: 0 }); - move_to(&s, S972{ x: 0 }); - move_to(&s, S973{ x: 0 }); - move_to(&s, S974{ x: 0 }); - move_to(&s, S975{ x: 0 }); - move_to(&s, S976{ x: 0 }); - move_to(&s, S977{ x: 0 }); - move_to(&s, S978{ x: 0 }); - move_to(&s, S979{ x: 0 }); - move_to(&s, S980{ x: 0 }); - move_to(&s, S981{ x: 0 }); - move_to(&s, S982{ x: 0 }); - move_to(&s, S983{ x: 0 }); - move_to(&s, S984{ x: 0 }); - move_to(&s, S985{ x: 0 }); - move_to(&s, S986{ x: 0 }); - move_to(&s, S987{ x: 0 }); - move_to(&s, S988{ x: 0 }); - move_to(&s, S989{ x: 0 }); - move_to(&s, S990{ x: 0 }); - move_to(&s, S991{ x: 0 }); - move_to(&s, S992{ x: 0 }); - move_to(&s, S993{ x: 0 }); - move_to(&s, S994{ x: 0 }); - move_to(&s, S995{ x: 0 }); - move_to(&s, S996{ x: 0 }); - move_to(&s, S997{ x: 0 }); - move_to(&s, S998{ x: 0 }); - move_to(&s, S999{ x: 0 }); - move_to(&s, S1000{ x: 0 }); - move_to(&s, S1001{ x: 0 }); - move_to(&s, S1002{ x: 0 }); - move_to(&s, S1003{ x: 0 }); - move_to(&s, S1004{ x: 0 }); - move_to(&s, S1005{ x: 0 }); - move_to(&s, S1006{ x: 0 }); - move_to(&s, S1007{ x: 0 }); - move_to(&s, S1008{ x: 0 }); - move_to(&s, S1009{ x: 0 }); - move_to(&s, S1010{ x: 0 }); - move_to(&s, S1011{ x: 0 }); - move_to(&s, S1012{ x: 0 }); - move_to(&s, S1013{ x: 0 }); - move_to(&s, S1014{ x: 0 }); - move_to(&s, S1015{ x: 0 }); - move_to(&s, S1016{ x: 0 }); - move_to(&s, S1017{ x: 0 }); - move_to(&s, S1018{ x: 0 }); - move_to(&s, S1019{ x: 0 }); - move_to(&s, S1020{ x: 0 }); - move_to(&s, S1021{ x: 0 }); - move_to(&s, S1022{ x: 0 }); - move_to(&s, S1023{ x: 0 }); - move_to(&s, S1024{ x: 0 }); - move_to(&s, S1025{ x: 0 }); - move_to(&s, S1026{ x: 0 }); - move_to(&s, S1027{ x: 0 }); - move_to(&s, S1028{ x: 0 }); - move_to(&s, S1029{ x: 0 }); - move_to(&s, S1030{ x: 0 }); - move_to(&s, S1031{ x: 0 }); - move_to(&s, S1032{ x: 0 }); - move_to(&s, S1033{ x: 0 }); - move_to(&s, S1034{ x: 0 }); - move_to(&s, S1035{ x: 0 }); - move_to(&s, S1036{ x: 0 }); - move_to(&s, S1037{ x: 0 }); - move_to(&s, S1038{ x: 0 }); - move_to(&s, S1039{ x: 0 }); - move_to(&s, S1040{ x: 0 }); - move_to(&s, S1041{ x: 0 }); - move_to(&s, S1042{ x: 0 }); - move_to(&s, S1043{ x: 0 }); - move_to(&s, S1044{ x: 0 }); - move_to(&s, S1045{ x: 0 }); - move_to(&s, S1046{ x: 0 }); - move_to(&s, S1047{ x: 0 }); - move_to(&s, S1048{ x: 0 }); - move_to(&s, S1049{ x: 0 }); - move_to(&s, S1050{ x: 0 }); - move_to(&s, S1051{ x: 0 }); - move_to(&s, S1052{ x: 0 }); - move_to(&s, S1053{ x: 0 }); - move_to(&s, S1054{ x: 0 }); - move_to(&s, S1055{ x: 0 }); - move_to(&s, S1056{ x: 0 }); - move_to(&s, S1057{ x: 0 }); - move_to(&s, S1058{ x: 0 }); - move_to(&s, S1059{ x: 0 }); - move_to(&s, S1060{ x: 0 }); - move_to(&s, S1061{ x: 0 }); - move_to(&s, S1062{ x: 0 }); - move_to(&s, S1063{ x: 0 }); - move_to(&s, S1064{ x: 0 }); - move_to(&s, S1065{ x: 0 }); - move_to(&s, S1066{ x: 0 }); - move_to(&s, S1067{ x: 0 }); - move_to(&s, S1068{ x: 0 }); - move_to(&s, S1069{ x: 0 }); - move_to(&s, S1070{ x: 0 }); - move_to(&s, S1071{ x: 0 }); - move_to(&s, S1072{ x: 0 }); - move_to(&s, S1073{ x: 0 }); - move_to(&s, S1074{ x: 0 }); - move_to(&s, S1075{ x: 0 }); - move_to(&s, S1076{ x: 0 }); - move_to(&s, S1077{ x: 0 }); - move_to(&s, S1078{ x: 0 }); - move_to(&s, S1079{ x: 0 }); - move_to(&s, S1080{ x: 0 }); - move_to(&s, S1081{ x: 0 }); - move_to(&s, S1082{ x: 0 }); - move_to(&s, S1083{ x: 0 }); - move_to(&s, S1084{ x: 0 }); - move_to(&s, S1085{ x: 0 }); - move_to(&s, S1086{ x: 0 }); - move_to(&s, S1087{ x: 0 }); - move_to(&s, S1088{ x: 0 }); - move_to(&s, S1089{ x: 0 }); - move_to(&s, S1090{ x: 0 }); - move_to(&s, S1091{ x: 0 }); - move_to(&s, S1092{ x: 0 }); - move_to(&s, S1093{ x: 0 }); - move_to(&s, S1094{ x: 0 }); - move_to(&s, S1095{ x: 0 }); - move_to(&s, S1096{ x: 0 }); - move_to(&s, S1097{ x: 0 }); - move_to(&s, S1098{ x: 0 }); - move_to(&s, S1099{ x: 0 }); - move_to(&s, S1100{ x: 0 }); - move_to(&s, S1101{ x: 0 }); - move_to(&s, S1102{ x: 0 }); - move_to(&s, S1103{ x: 0 }); - move_to(&s, S1104{ x: 0 }); - move_to(&s, S1105{ x: 0 }); - move_to(&s, S1106{ x: 0 }); - move_to(&s, S1107{ x: 0 }); - move_to(&s, S1108{ x: 0 }); - move_to(&s, S1109{ x: 0 }); - move_to(&s, S1110{ x: 0 }); - move_to(&s, S1111{ x: 0 }); - move_to(&s, S1112{ x: 0 }); - move_to(&s, S1113{ x: 0 }); - move_to(&s, S1114{ x: 0 }); - move_to(&s, S1115{ x: 0 }); - move_to(&s, S1116{ x: 0 }); - move_to(&s, S1117{ x: 0 }); - move_to(&s, S1118{ x: 0 }); - move_to(&s, S1119{ x: 0 }); - move_to(&s, S1120{ x: 0 }); - move_to(&s, S1121{ x: 0 }); - move_to(&s, S1122{ x: 0 }); - move_to(&s, S1123{ x: 0 }); - move_to(&s, S1124{ x: 0 }); - move_to(&s, S1125{ x: 0 }); - move_to(&s, S1126{ x: 0 }); - move_to(&s, S1127{ x: 0 }); - move_to(&s, S1128{ x: 0 }); - move_to(&s, S1129{ x: 0 }); - move_to(&s, S1130{ x: 0 }); - move_to(&s, S1131{ x: 0 }); - move_to(&s, S1132{ x: 0 }); - move_to(&s, S1133{ x: 0 }); - move_to(&s, S1134{ x: 0 }); - move_to(&s, S1135{ x: 0 }); - move_to(&s, S1136{ x: 0 }); - move_to(&s, S1137{ x: 0 }); - move_to(&s, S1138{ x: 0 }); - move_to(&s, S1139{ x: 0 }); - move_to(&s, S1140{ x: 0 }); - move_to(&s, S1141{ x: 0 }); - move_to(&s, S1142{ x: 0 }); - move_to(&s, S1143{ x: 0 }); - move_to(&s, S1144{ x: 0 }); - move_to(&s, S1145{ x: 0 }); - move_to(&s, S1146{ x: 0 }); - move_to(&s, S1147{ x: 0 }); - move_to(&s, S1148{ x: 0 }); - move_to(&s, S1149{ x: 0 }); - move_to(&s, S1150{ x: 0 }); - move_to(&s, S1151{ x: 0 }); - move_to(&s, S1152{ x: 0 }); - move_to(&s, S1153{ x: 0 }); - move_to(&s, S1154{ x: 0 }); - move_to(&s, S1155{ x: 0 }); - move_to(&s, S1156{ x: 0 }); - move_to(&s, S1157{ x: 0 }); - move_to(&s, S1158{ x: 0 }); - move_to(&s, S1159{ x: 0 }); - move_to(&s, S1160{ x: 0 }); - move_to(&s, S1161{ x: 0 }); - move_to(&s, S1162{ x: 0 }); - move_to(&s, S1163{ x: 0 }); - move_to(&s, S1164{ x: 0 }); - move_to(&s, S1165{ x: 0 }); - move_to(&s, S1166{ x: 0 }); - move_to(&s, S1167{ x: 0 }); - move_to(&s, S1168{ x: 0 }); - move_to(&s, S1169{ x: 0 }); - move_to(&s, S1170{ x: 0 }); - move_to(&s, S1171{ x: 0 }); - move_to(&s, S1172{ x: 0 }); - move_to(&s, S1173{ x: 0 }); - move_to(&s, S1174{ x: 0 }); - move_to(&s, S1175{ x: 0 }); - move_to(&s, S1176{ x: 0 }); - move_to(&s, S1177{ x: 0 }); - move_to(&s, S1178{ x: 0 }); - move_to(&s, S1179{ x: 0 }); - move_to(&s, S1180{ x: 0 }); - move_to(&s, S1181{ x: 0 }); - move_to(&s, S1182{ x: 0 }); - move_to(&s, S1183{ x: 0 }); - move_to(&s, S1184{ x: 0 }); - move_to(&s, S1185{ x: 0 }); - move_to(&s, S1186{ x: 0 }); - move_to(&s, S1187{ x: 0 }); - move_to(&s, S1188{ x: 0 }); - move_to(&s, S1189{ x: 0 }); - move_to(&s, S1190{ x: 0 }); - move_to(&s, S1191{ x: 0 }); - move_to(&s, S1192{ x: 0 }); - move_to(&s, S1193{ x: 0 }); - move_to(&s, S1194{ x: 0 }); - move_to(&s, S1195{ x: 0 }); - move_to(&s, S1196{ x: 0 }); - move_to(&s, S1197{ x: 0 }); - move_to(&s, S1198{ x: 0 }); - move_to(&s, S1199{ x: 0 }); - move_to(&s, S1200{ x: 0 }); - move_to(&s, S1201{ x: 0 }); - move_to(&s, S1202{ x: 0 }); - move_to(&s, S1203{ x: 0 }); - move_to(&s, S1204{ x: 0 }); - move_to(&s, S1205{ x: 0 }); - move_to(&s, S1206{ x: 0 }); - move_to(&s, S1207{ x: 0 }); - move_to(&s, S1208{ x: 0 }); - move_to(&s, S1209{ x: 0 }); - move_to(&s, S1210{ x: 0 }); - move_to(&s, S1211{ x: 0 }); - move_to(&s, S1212{ x: 0 }); - move_to(&s, S1213{ x: 0 }); - move_to(&s, S1214{ x: 0 }); - move_to(&s, S1215{ x: 0 }); - move_to(&s, S1216{ x: 0 }); - move_to(&s, S1217{ x: 0 }); - move_to(&s, S1218{ x: 0 }); - move_to(&s, S1219{ x: 0 }); - move_to(&s, S1220{ x: 0 }); - move_to(&s, S1221{ x: 0 }); - move_to(&s, S1222{ x: 0 }); - move_to(&s, S1223{ x: 0 }); - move_to(&s, S1224{ x: 0 }); - move_to(&s, S1225{ x: 0 }); - move_to(&s, S1226{ x: 0 }); - move_to(&s, S1227{ x: 0 }); - move_to(&s, S1228{ x: 0 }); - move_to(&s, S1229{ x: 0 }); - move_to(&s, S1230{ x: 0 }); - move_to(&s, S1231{ x: 0 }); - move_to(&s, S1232{ x: 0 }); - move_to(&s, S1233{ x: 0 }); - move_to(&s, S1234{ x: 0 }); - move_to(&s, S1235{ x: 0 }); - move_to(&s, S1236{ x: 0 }); - move_to(&s, S1237{ x: 0 }); - move_to(&s, S1238{ x: 0 }); - move_to(&s, S1239{ x: 0 }); - move_to(&s, S1240{ x: 0 }); - move_to(&s, S1241{ x: 0 }); - move_to(&s, S1242{ x: 0 }); - move_to(&s, S1243{ x: 0 }); - move_to(&s, S1244{ x: 0 }); - move_to(&s, S1245{ x: 0 }); - move_to(&s, S1246{ x: 0 }); - move_to(&s, S1247{ x: 0 }); - move_to(&s, S1248{ x: 0 }); - move_to(&s, S1249{ x: 0 }); - move_to(&s, S1250{ x: 0 }); - move_to(&s, S1251{ x: 0 }); - move_to(&s, S1252{ x: 0 }); - move_to(&s, S1253{ x: 0 }); - move_to(&s, S1254{ x: 0 }); - move_to(&s, S1255{ x: 0 }); - move_to(&s, S1256{ x: 0 }); - move_to(&s, S1257{ x: 0 }); - move_to(&s, S1258{ x: 0 }); - move_to(&s, S1259{ x: 0 }); - move_to(&s, S1260{ x: 0 }); - move_to(&s, S1261{ x: 0 }); - move_to(&s, S1262{ x: 0 }); - move_to(&s, S1263{ x: 0 }); - move_to(&s, S1264{ x: 0 }); - move_to(&s, S1265{ x: 0 }); - move_to(&s, S1266{ x: 0 }); - move_to(&s, S1267{ x: 0 }); - move_to(&s, S1268{ x: 0 }); - move_to(&s, S1269{ x: 0 }); - move_to(&s, S1270{ x: 0 }); - move_to(&s, S1271{ x: 0 }); - move_to(&s, S1272{ x: 0 }); - move_to(&s, S1273{ x: 0 }); - move_to(&s, S1274{ x: 0 }); - move_to(&s, S1275{ x: 0 }); - move_to(&s, S1276{ x: 0 }); - move_to(&s, S1277{ x: 0 }); - move_to(&s, S1278{ x: 0 }); - move_to(&s, S1279{ x: 0 }); - move_to(&s, S1280{ x: 0 }); - move_to(&s, S1281{ x: 0 }); - move_to(&s, S1282{ x: 0 }); - move_to(&s, S1283{ x: 0 }); - move_to(&s, S1284{ x: 0 }); - move_to(&s, S1285{ x: 0 }); - move_to(&s, S1286{ x: 0 }); - move_to(&s, S1287{ x: 0 }); - move_to(&s, S1288{ x: 0 }); - move_to(&s, S1289{ x: 0 }); - move_to(&s, S1290{ x: 0 }); - move_to(&s, S1291{ x: 0 }); - move_to(&s, S1292{ x: 0 }); - move_to(&s, S1293{ x: 0 }); - move_to(&s, S1294{ x: 0 }); - move_to(&s, S1295{ x: 0 }); - move_to(&s, S1296{ x: 0 }); - move_to(&s, S1297{ x: 0 }); - move_to(&s, S1298{ x: 0 }); - move_to(&s, S1299{ x: 0 }); - move_to(&s, S1300{ x: 0 }); - move_to(&s, S1301{ x: 0 }); - move_to(&s, S1302{ x: 0 }); - move_to(&s, S1303{ x: 0 }); - move_to(&s, S1304{ x: 0 }); - move_to(&s, S1305{ x: 0 }); - move_to(&s, S1306{ x: 0 }); - move_to(&s, S1307{ x: 0 }); - move_to(&s, S1308{ x: 0 }); - move_to(&s, S1309{ x: 0 }); - move_to(&s, S1310{ x: 0 }); - move_to(&s, S1311{ x: 0 }); - move_to(&s, S1312{ x: 0 }); - move_to(&s, S1313{ x: 0 }); - move_to(&s, S1314{ x: 0 }); - move_to(&s, S1315{ x: 0 }); - move_to(&s, S1316{ x: 0 }); - move_to(&s, S1317{ x: 0 }); - move_to(&s, S1318{ x: 0 }); - move_to(&s, S1319{ x: 0 }); - move_to(&s, S1320{ x: 0 }); - move_to(&s, S1321{ x: 0 }); - move_to(&s, S1322{ x: 0 }); - move_to(&s, S1323{ x: 0 }); - move_to(&s, S1324{ x: 0 }); - move_to(&s, S1325{ x: 0 }); - move_to(&s, S1326{ x: 0 }); - move_to(&s, S1327{ x: 0 }); - move_to(&s, S1328{ x: 0 }); - move_to(&s, S1329{ x: 0 }); - move_to(&s, S1330{ x: 0 }); - move_to(&s, S1331{ x: 0 }); - move_to(&s, S1332{ x: 0 }); - move_to(&s, S1333{ x: 0 }); - move_to(&s, S1334{ x: 0 }); - move_to(&s, S1335{ x: 0 }); - move_to(&s, S1336{ x: 0 }); - move_to(&s, S1337{ x: 0 }); - move_to(&s, S1338{ x: 0 }); - move_to(&s, S1339{ x: 0 }); - move_to(&s, S1340{ x: 0 }); - move_to(&s, S1341{ x: 0 }); - move_to(&s, S1342{ x: 0 }); - move_to(&s, S1343{ x: 0 }); - move_to(&s, S1344{ x: 0 }); - move_to(&s, S1345{ x: 0 }); - move_to(&s, S1346{ x: 0 }); - move_to(&s, S1347{ x: 0 }); - move_to(&s, S1348{ x: 0 }); - move_to(&s, S1349{ x: 0 }); - move_to(&s, S1350{ x: 0 }); - move_to(&s, S1351{ x: 0 }); - move_to(&s, S1352{ x: 0 }); - move_to(&s, S1353{ x: 0 }); - move_to(&s, S1354{ x: 0 }); - move_to(&s, S1355{ x: 0 }); - move_to(&s, S1356{ x: 0 }); - move_to(&s, S1357{ x: 0 }); - move_to(&s, S1358{ x: 0 }); - move_to(&s, S1359{ x: 0 }); - move_to(&s, S1360{ x: 0 }); - move_to(&s, S1361{ x: 0 }); - move_to(&s, S1362{ x: 0 }); - move_to(&s, S1363{ x: 0 }); - move_to(&s, S1364{ x: 0 }); - move_to(&s, S1365{ x: 0 }); - move_to(&s, S1366{ x: 0 }); - move_to(&s, S1367{ x: 0 }); - move_to(&s, S1368{ x: 0 }); - move_to(&s, S1369{ x: 0 }); - move_to(&s, S1370{ x: 0 }); - move_to(&s, S1371{ x: 0 }); - move_to(&s, S1372{ x: 0 }); - move_to(&s, S1373{ x: 0 }); - move_to(&s, S1374{ x: 0 }); - move_to(&s, S1375{ x: 0 }); - move_to(&s, S1376{ x: 0 }); - move_to(&s, S1377{ x: 0 }); - move_to(&s, S1378{ x: 0 }); - move_to(&s, S1379{ x: 0 }); - move_to(&s, S1380{ x: 0 }); - move_to(&s, S1381{ x: 0 }); - move_to(&s, S1382{ x: 0 }); - move_to(&s, S1383{ x: 0 }); - move_to(&s, S1384{ x: 0 }); - move_to(&s, S1385{ x: 0 }); - move_to(&s, S1386{ x: 0 }); - move_to(&s, S1387{ x: 0 }); - move_to(&s, S1388{ x: 0 }); - move_to(&s, S1389{ x: 0 }); - move_to(&s, S1390{ x: 0 }); - move_to(&s, S1391{ x: 0 }); - move_to(&s, S1392{ x: 0 }); - move_to(&s, S1393{ x: 0 }); - move_to(&s, S1394{ x: 0 }); - move_to(&s, S1395{ x: 0 }); - move_to(&s, S1396{ x: 0 }); - move_to(&s, S1397{ x: 0 }); - move_to(&s, S1398{ x: 0 }); - move_to(&s, S1399{ x: 0 }); - move_to(&s, S1400{ x: 0 }); - move_to(&s, S1401{ x: 0 }); - move_to(&s, S1402{ x: 0 }); - move_to(&s, S1403{ x: 0 }); - move_to(&s, S1404{ x: 0 }); - move_to(&s, S1405{ x: 0 }); - move_to(&s, S1406{ x: 0 }); - move_to(&s, S1407{ x: 0 }); - move_to(&s, S1408{ x: 0 }); - move_to(&s, S1409{ x: 0 }); - move_to(&s, S1410{ x: 0 }); - move_to(&s, S1411{ x: 0 }); - move_to(&s, S1412{ x: 0 }); - move_to(&s, S1413{ x: 0 }); - move_to(&s, S1414{ x: 0 }); - move_to(&s, S1415{ x: 0 }); - move_to(&s, S1416{ x: 0 }); - move_to(&s, S1417{ x: 0 }); - move_to(&s, S1418{ x: 0 }); - move_to(&s, S1419{ x: 0 }); - move_to(&s, S1420{ x: 0 }); - move_to(&s, S1421{ x: 0 }); - move_to(&s, S1422{ x: 0 }); - move_to(&s, S1423{ x: 0 }); - move_to(&s, S1424{ x: 0 }); - move_to(&s, S1425{ x: 0 }); - move_to(&s, S1426{ x: 0 }); - move_to(&s, S1427{ x: 0 }); - move_to(&s, S1428{ x: 0 }); - move_to(&s, S1429{ x: 0 }); - move_to(&s, S1430{ x: 0 }); - move_to(&s, S1431{ x: 0 }); - move_to(&s, S1432{ x: 0 }); - move_to(&s, S1433{ x: 0 }); - move_to(&s, S1434{ x: 0 }); - move_to(&s, S1435{ x: 0 }); - move_to(&s, S1436{ x: 0 }); - move_to(&s, S1437{ x: 0 }); - move_to(&s, S1438{ x: 0 }); - move_to(&s, S1439{ x: 0 }); - move_to(&s, S1440{ x: 0 }); - move_to(&s, S1441{ x: 0 }); - move_to(&s, S1442{ x: 0 }); - move_to(&s, S1443{ x: 0 }); - move_to(&s, S1444{ x: 0 }); - move_to(&s, S1445{ x: 0 }); - move_to(&s, S1446{ x: 0 }); - move_to(&s, S1447{ x: 0 }); - move_to(&s, S1448{ x: 0 }); - move_to(&s, S1449{ x: 0 }); - move_to(&s, S1450{ x: 0 }); - move_to(&s, S1451{ x: 0 }); - move_to(&s, S1452{ x: 0 }); - move_to(&s, S1453{ x: 0 }); - move_to(&s, S1454{ x: 0 }); - move_to(&s, S1455{ x: 0 }); - move_to(&s, S1456{ x: 0 }); - move_to(&s, S1457{ x: 0 }); - move_to(&s, S1458{ x: 0 }); - move_to(&s, S1459{ x: 0 }); - move_to(&s, S1460{ x: 0 }); - move_to(&s, S1461{ x: 0 }); - move_to(&s, S1462{ x: 0 }); - move_to(&s, S1463{ x: 0 }); - move_to(&s, S1464{ x: 0 }); - move_to(&s, S1465{ x: 0 }); - move_to(&s, S1466{ x: 0 }); - move_to(&s, S1467{ x: 0 }); - move_to(&s, S1468{ x: 0 }); - move_to(&s, S1469{ x: 0 }); - move_to(&s, S1470{ x: 0 }); - move_to(&s, S1471{ x: 0 }); - move_to(&s, S1472{ x: 0 }); - move_to(&s, S1473{ x: 0 }); - move_to(&s, S1474{ x: 0 }); - move_to(&s, S1475{ x: 0 }); - move_to(&s, S1476{ x: 0 }); - move_to(&s, S1477{ x: 0 }); - move_to(&s, S1478{ x: 0 }); - move_to(&s, S1479{ x: 0 }); - move_to(&s, S1480{ x: 0 }); - move_to(&s, S1481{ x: 0 }); - move_to(&s, S1482{ x: 0 }); - move_to(&s, S1483{ x: 0 }); - move_to(&s, S1484{ x: 0 }); - move_to(&s, S1485{ x: 0 }); - move_to(&s, S1486{ x: 0 }); - move_to(&s, S1487{ x: 0 }); - move_to(&s, S1488{ x: 0 }); - move_to(&s, S1489{ x: 0 }); - move_to(&s, S1490{ x: 0 }); - move_to(&s, S1491{ x: 0 }); - move_to(&s, S1492{ x: 0 }); - move_to(&s, S1493{ x: 0 }); - move_to(&s, S1494{ x: 0 }); - move_to(&s, S1495{ x: 0 }); - move_to(&s, S1496{ x: 0 }); - move_to(&s, S1497{ x: 0 }); - move_to(&s, S1498{ x: 0 }); - move_to(&s, S1499{ x: 0 }); - move_to(&s, S1500{ x: 0 }); - move_to(&s, S1501{ x: 0 }); - move_to(&s, S1502{ x: 0 }); - move_to(&s, S1503{ x: 0 }); - move_to(&s, S1504{ x: 0 }); - move_to(&s, S1505{ x: 0 }); - move_to(&s, S1506{ x: 0 }); - move_to(&s, S1507{ x: 0 }); - move_to(&s, S1508{ x: 0 }); - move_to(&s, S1509{ x: 0 }); - move_to(&s, S1510{ x: 0 }); - move_to(&s, S1511{ x: 0 }); - move_to(&s, S1512{ x: 0 }); - move_to(&s, S1513{ x: 0 }); - move_to(&s, S1514{ x: 0 }); - move_to(&s, S1515{ x: 0 }); - move_to(&s, S1516{ x: 0 }); - move_to(&s, S1517{ x: 0 }); - move_to(&s, S1518{ x: 0 }); - move_to(&s, S1519{ x: 0 }); - move_to(&s, S1520{ x: 0 }); - move_to(&s, S1521{ x: 0 }); - move_to(&s, S1522{ x: 0 }); - move_to(&s, S1523{ x: 0 }); - move_to(&s, S1524{ x: 0 }); - move_to(&s, S1525{ x: 0 }); - move_to(&s, S1526{ x: 0 }); - move_to(&s, S1527{ x: 0 }); - move_to(&s, S1528{ x: 0 }); - move_to(&s, S1529{ x: 0 }); - move_to(&s, S1530{ x: 0 }); - move_to(&s, S1531{ x: 0 }); - move_to(&s, S1532{ x: 0 }); - move_to(&s, S1533{ x: 0 }); - move_to(&s, S1534{ x: 0 }); - move_to(&s, S1535{ x: 0 }); - move_to(&s, S1536{ x: 0 }); - move_to(&s, S1537{ x: 0 }); - move_to(&s, S1538{ x: 0 }); - move_to(&s, S1539{ x: 0 }); - move_to(&s, S1540{ x: 0 }); - move_to(&s, S1541{ x: 0 }); - move_to(&s, S1542{ x: 0 }); - move_to(&s, S1543{ x: 0 }); - move_to(&s, S1544{ x: 0 }); - move_to(&s, S1545{ x: 0 }); - move_to(&s, S1546{ x: 0 }); - move_to(&s, S1547{ x: 0 }); - move_to(&s, S1548{ x: 0 }); - move_to(&s, S1549{ x: 0 }); - move_to(&s, S1550{ x: 0 }); - move_to(&s, S1551{ x: 0 }); - move_to(&s, S1552{ x: 0 }); - move_to(&s, S1553{ x: 0 }); - move_to(&s, S1554{ x: 0 }); - move_to(&s, S1555{ x: 0 }); - move_to(&s, S1556{ x: 0 }); - move_to(&s, S1557{ x: 0 }); - move_to(&s, S1558{ x: 0 }); - move_to(&s, S1559{ x: 0 }); - move_to(&s, S1560{ x: 0 }); - move_to(&s, S1561{ x: 0 }); - move_to(&s, S1562{ x: 0 }); - move_to(&s, S1563{ x: 0 }); - move_to(&s, S1564{ x: 0 }); - move_to(&s, S1565{ x: 0 }); - move_to(&s, S1566{ x: 0 }); - move_to(&s, S1567{ x: 0 }); - move_to(&s, S1568{ x: 0 }); - move_to(&s, S1569{ x: 0 }); - move_to(&s, S1570{ x: 0 }); - move_to(&s, S1571{ x: 0 }); - move_to(&s, S1572{ x: 0 }); - move_to(&s, S1573{ x: 0 }); - move_to(&s, S1574{ x: 0 }); - move_to(&s, S1575{ x: 0 }); - move_to(&s, S1576{ x: 0 }); - move_to(&s, S1577{ x: 0 }); - move_to(&s, S1578{ x: 0 }); - move_to(&s, S1579{ x: 0 }); - move_to(&s, S1580{ x: 0 }); - move_to(&s, S1581{ x: 0 }); - move_to(&s, S1582{ x: 0 }); - move_to(&s, S1583{ x: 0 }); - move_to(&s, S1584{ x: 0 }); - move_to(&s, S1585{ x: 0 }); - move_to(&s, S1586{ x: 0 }); - move_to(&s, S1587{ x: 0 }); - move_to(&s, S1588{ x: 0 }); - move_to(&s, S1589{ x: 0 }); - move_to(&s, S1590{ x: 0 }); - move_to(&s, S1591{ x: 0 }); - move_to(&s, S1592{ x: 0 }); - move_to(&s, S1593{ x: 0 }); - move_to(&s, S1594{ x: 0 }); - move_to(&s, S1595{ x: 0 }); - move_to(&s, S1596{ x: 0 }); - move_to(&s, S1597{ x: 0 }); - move_to(&s, S1598{ x: 0 }); - move_to(&s, S1599{ x: 0 }); - move_to(&s, S1600{ x: 0 }); - return; - } -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/global-operations/mut-borrow-global.mvir b/aptos-move/aptos-gas-calibration/samples_ir/global-operations/mut-borrow-global.mvir deleted file mode 100644 index c91520cb1a64c..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/global-operations/mut-borrow-global.mvir +++ /dev/null @@ -1,134 +0,0 @@ -module 0xcafe.MutBorrowGlobal { - struct S1 has key, drop { x: u64 } - struct S2 has key, drop { x: u64 } - struct S3 has key, drop { x: u64 } - struct S4 has key, drop { x: u64 } - struct S5 has key, drop { x: u64 } - struct S6 has key, drop { x: u64 } - struct S7 has key, drop { x: u64 } - struct S8 has key, drop { x: u64 } - struct S9 has key, drop { x: u64 } - struct S10 has key, drop { x: u64 } - struct S11 has key, drop { x: u64 } - struct S12 has key, drop { x: u64 } - struct S13 has key, drop { x: u64 } - struct S14 has key, drop { x: u64 } - struct S15 has key, drop { x: u64 } - struct S16 has key, drop { x: u64 } - struct S17 has key, drop { x: u64 } - struct S18 has key, drop { x: u64 } - struct S19 has key, drop { x: u64 } - struct S20 has key, drop { x: u64 } - struct S21 has key, drop { x: u64 } - struct S22 has key, drop { x: u64 } - struct S23 has key, drop { x: u64 } - struct S24 has key, drop { x: u64 } - struct S25 has key, drop { x: u64 } - struct S26 has key, drop { x: u64 } - struct S27 has key, drop { x: u64 } - struct S28 has key, drop { x: u64 } - struct S29 has key, drop { x: u64 } - struct S30 has key, drop { x: u64 } - - public entry calibrate_mut_borrow_global_x100(s: signer) acquires S1, S2, S3, S4, S5, S6, S7, S8, S9, S10 { - let i: u64; - label entry: - i = 0; - move_to(&s, S1{ x: 0 }); - move_to(&s, S2{ x: 0 }); - move_to(&s, S3{ x: 0 }); - move_to(&s, S4{ x: 0 }); - move_to(&s, S5{ x: 0 }); - move_to(&s, S6{ x: 0 }); - move_to(&s, S7{ x: 0 }); - move_to(&s, S8{ x: 0 }); - move_to(&s, S9{ x: 0 }); - move_to(&s, S10{ x: 0 }); - label loop_start: - jump_if_false (copy(i) < 100) loop_end; - i = move(i) + 1; - - _ = borrow_global_mut(0xcafe); - _ = borrow_global_mut(0xcafe); - _ = borrow_global_mut(0xcafe); - _ = borrow_global_mut(0xcafe); - _ = borrow_global_mut(0xcafe); - _ = borrow_global_mut(0xcafe); - _ = borrow_global_mut(0xcafe); - _ = borrow_global_mut(0xcafe); - _ = borrow_global_mut(0xcafe); - _ = borrow_global_mut(0xcafe); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_mut_borrow_global_x500(s: signer) acquires S11, S12, S13, S14, S15, S16, S17, S18, S19, S20 { - let i: u64; - label entry: - i = 0; - move_to(&s, S11{ x: 0 }); - move_to(&s, S12{ x: 0 }); - move_to(&s, S13{ x: 0 }); - move_to(&s, S14{ x: 0 }); - move_to(&s, S15{ x: 0 }); - move_to(&s, S16{ x: 0 }); - move_to(&s, S17{ x: 0 }); - move_to(&s, S18{ x: 0 }); - move_to(&s, S19{ x: 0 }); - move_to(&s, S20{ x: 0 }); - label loop_start: - jump_if_false (copy(i) < 500) loop_end; - i = move(i) + 1; - - _ = borrow_global_mut(0xcafe); - _ = borrow_global_mut(0xcafe); - _ = borrow_global_mut(0xcafe); - _ = borrow_global_mut(0xcafe); - _ = borrow_global_mut(0xcafe); - _ = borrow_global_mut(0xcafe); - _ = borrow_global_mut(0xcafe); - _ = borrow_global_mut(0xcafe); - _ = borrow_global_mut(0xcafe); - _ = borrow_global_mut(0xcafe); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_mut_borrow_global_x1500(s: signer) acquires S21, S22, S23, S24, S25, S26, S27, S28, S29, S30 { - let i: u64; - label entry: - i = 0; - move_to(&s, S21{ x: 0 }); - move_to(&s, S22{ x: 0 }); - move_to(&s, S23{ x: 0 }); - move_to(&s, S24{ x: 0 }); - move_to(&s, S25{ x: 0 }); - move_to(&s, S26{ x: 0 }); - move_to(&s, S27{ x: 0 }); - move_to(&s, S28{ x: 0 }); - move_to(&s, S29{ x: 0 }); - move_to(&s, S30{ x: 0 }); - label loop_start: - jump_if_false (copy(i) < 1500) loop_end; - i = move(i) + 1; - - _ = borrow_global_mut(0xcafe); - _ = borrow_global_mut(0xcafe); - _ = borrow_global_mut(0xcafe); - _ = borrow_global_mut(0xcafe); - _ = borrow_global_mut(0xcafe); - _ = borrow_global_mut(0xcafe); - _ = borrow_global_mut(0xcafe); - _ = borrow_global_mut(0xcafe); - _ = borrow_global_mut(0xcafe); - _ = borrow_global_mut(0xcafe); - - jump loop_start; - label loop_end: - return; - } -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/ld/ld-true.mvir b/aptos-move/aptos-gas-calibration/samples_ir/ld/ld-true.mvir deleted file mode 100644 index 64c33415071aa..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/ld/ld-true.mvir +++ /dev/null @@ -1,35 +0,0 @@ -module 0xcafe.LdTrue { - - public calibrate_ld_true_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _, _, _, _, _, _, _, _, _, _ = (true, true, true, true, true, true, true, true, true, true); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_ld_true_x100() { - label b0: - Self.calibrate_ld_true_impl(10); - return; - } - - public entry calibrate_ld_true_x500() { - label b0: - Self.calibrate_ld_true_impl(50); - return; - } - - public entry calibrate_ld_true_x1000() { - label b0: - Self.calibrate_ld_true_impl(100); - return; - } -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/ld/ldu128.mvir b/aptos-move/aptos-gas-calibration/samples_ir/ld/ldu128.mvir deleted file mode 100644 index b37fbe4e73782..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/ld/ldu128.mvir +++ /dev/null @@ -1,35 +0,0 @@ -module 0xcafe.LdU128 { - - public calibrate_ldu128_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _,_,_,_,_,_,_,_,_,_ = (1u128,2u128,3u128,4u128,5u128,6u128,7u128,8u128,9u128,10u128); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_ldu128_x100() { - label b0: - Self.calibrate_ldu128_impl(10); - return; - } - - public entry calibrate_ldu128_x500() { - label b0: - Self.calibrate_ldu128_impl(50); - return; - } - - public entry calibrate_ldu128_x1000() { - label b0: - Self.calibrate_ldu128_impl(100); - return; - } -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/ld/ldu16.mvir b/aptos-move/aptos-gas-calibration/samples_ir/ld/ldu16.mvir deleted file mode 100644 index a79131dbec1e1..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/ld/ldu16.mvir +++ /dev/null @@ -1,35 +0,0 @@ -module 0xcafe.LdU16 { - - public calibrate_ldu16_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _,_,_,_,_,_,_,_,_,_ = (1u16,2u16,3u16,4u16,5u16,6u16,7u16,8u16,9u16,10u16); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_ldu16_x100() { - label b0: - Self.calibrate_ldu16_impl(10); - return; - } - - public entry calibrate_ldu16_x500() { - label b0: - Self.calibrate_ldu16_impl(50); - return; - } - - public entry calibrate_ldu16_x1000() { - label b0: - Self.calibrate_ldu16_impl(100); - return; - } -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/ld/ldu256.mvir b/aptos-move/aptos-gas-calibration/samples_ir/ld/ldu256.mvir deleted file mode 100644 index ebd8065139b81..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/ld/ldu256.mvir +++ /dev/null @@ -1,35 +0,0 @@ -module 0xcafe.LdU256 { - - public calibrate_ldu256_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _,_,_,_,_,_,_,_,_,_ = (1u256,2u256,3u256,4u256,5u256,6u256,7u256,8u256,9u256,10u256); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_ldu256_x100() { - label b0: - Self.calibrate_ldu256_impl(10); - return; - } - - public entry calibrate_ldu256_x500() { - label b0: - Self.calibrate_ldu256_impl(50); - return; - } - - public entry calibrate_ldu256_x1000() { - label b0: - Self.calibrate_ldu256_impl(100); - return; - } -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/ld/ldu32.mvir b/aptos-move/aptos-gas-calibration/samples_ir/ld/ldu32.mvir deleted file mode 100644 index c95815abb8131..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/ld/ldu32.mvir +++ /dev/null @@ -1,35 +0,0 @@ -module 0xcafe.LdU32 { - - public calibrate_ldu32_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _,_,_,_,_,_,_,_,_,_ = (1u32,2u32,3u32,4u32,5u32,6u32,7u32,8u32,9u32,10u32); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_ldu32_x100() { - label b0: - Self.calibrate_ldu32_impl(10); - return; - } - - public entry calibrate_ldu32_x500() { - label b0: - Self.calibrate_ldu32_impl(50); - return; - } - - public entry calibrate_ldu32_x1000() { - label b0: - Self.calibrate_ldu32_impl(100); - return; - } -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/ld/ldu8.mvir b/aptos-move/aptos-gas-calibration/samples_ir/ld/ldu8.mvir deleted file mode 100644 index 9c80047ec4463..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/ld/ldu8.mvir +++ /dev/null @@ -1,35 +0,0 @@ -module 0xcafe.LdU8 { - - public calibrate_ldu8_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _,_,_,_,_,_,_,_,_,_ = (1u8,2u8,3u8,4u8,5u8,6u8,7u8,8u8,9u8,10u8); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_ldu8_x100() { - label b0: - Self.calibrate_ldu8_impl(10); - return; - } - - public entry calibrate_ldu8_x500() { - label b0: - Self.calibrate_ldu8_impl(50); - return; - } - - public entry calibrate_ldu8_x1000() { - label b0: - Self.calibrate_ldu8_impl(100); - return; - } -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/operations-bool/and.mvir b/aptos-move/aptos-gas-calibration/samples_ir/operations-bool/and.mvir deleted file mode 100644 index 63510ddb915c3..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/operations-bool/and.mvir +++ /dev/null @@ -1,35 +0,0 @@ -module 0xcafe.ConditionsAnd { - - public calibrate_and_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _ = true && true && true && true && true && true && true && true && true && false; - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_and_x100() { - label b0: - Self.calibrate_and_impl(10); - return; - } - - public entry calibrate_and_x500() { - label b0: - Self.calibrate_and_impl(50); - return; - } - - public entry calibrate_and_x1000() { - label b0: - Self.calibrate_and_impl(100); - return; - } -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/operations-bool/eq.mvir b/aptos-move/aptos-gas-calibration/samples_ir/operations-bool/eq.mvir deleted file mode 100644 index 069b2101285d3..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/operations-bool/eq.mvir +++ /dev/null @@ -1,311 +0,0 @@ -module 0xcafe.Eq { - - public eq_u16_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _ = to_u16(21u8) == 21u16; - _ = to_u16(21u64) == 21u16; - _ = to_u16(21u128) == 21u16; - _ = to_u16(21u16) == 21u16; - _ = to_u16(21u32) == 21u16; - _ = to_u16(21u256) == 21u16; - _ = to_u16(255u8) == 255u16; - _ = to_u16(65535u64) == 65535u16; - _ = to_u16(65535u128) == 65535u16; - _ = to_u16(65535u16) == 65535u16; - _ = to_u16(65535u32) == 65535u16; - _ = to_u16(65535u256) == 65535u16; - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_eq_with_u16_x120() { - label b0: - Self.eq_u16_impl(10); - return; - } - - public entry calibrate_eq_with_u16_x600() { - label b0: - Self.eq_u16_impl(50); - return; - } - - public entry calibrate_eq_with_u16_x1200() { - label b0: - Self.eq_u16_impl(100); - return; - } - - public eq_u32_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _ = to_u32(21u8) == 21u32; - _ = to_u32(21u64) == 21u32; - _ = to_u32(21u128) == 21u32; - _ = to_u32(21u16) == 21u32; - _ = to_u32(21u32) == 21u32; - _ = to_u32(21u256) == 21u32; - _ = to_u32(255u8) == 255u32; - _ = to_u32(4294967295u64) == 4294967295u32; - _ = to_u32(4294967295u128) == 4294967295u32; - _ = to_u32(65535u16) == 65535u32; - _ = to_u32(4294967295u32) == 4294967295u32; - _ = to_u32(4294967295u256) == 4294967295u32; - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_eq_with_u32_x120() { - label b0: - Self.eq_u32_impl(10); - return; - } - - public entry calibrate_eq_with_u32_x600() { - label b0: - Self.eq_u32_impl(50); - return; - } - - public entry calibrate_eq_with_u32_x1200() { - label b0: - Self.eq_u32_impl(100); - return; - } - - public eq_u64_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _ = to_u64(0u8) == 0u64; - _ = to_u64(0u64) == 0u64; - _ = to_u64(0u128) == 0u64; - _ = to_u64(21u8) == 21u64; - _ = to_u64(21u64) == 21u64; - _ = to_u64(21u128) == 21u64; - _ = to_u64(255u8) == 255u64; - _ = to_u64(18446744073709551615u64) == 18446744073709551615u64; - _ = to_u64(18446744073709551615u128) == 18446744073709551615u64; - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_eq_with_u64_x90() { - label b0: - Self.eq_u64_impl(10); - return; - } - - public entry calibrate_eq_with_u64_x450() { - label b0: - Self.eq_u64_impl(50); - return; - } - - public entry calibrate_eq_with_u64_x900() { - label b0: - Self.eq_u64_impl(100); - return; - } - - public eq_u128_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _ = to_u128(0u8) == 0u128; - _ = to_u128(0u64) == 0u128; - _ = to_u128(0u128) == 0u128; - _ = to_u128(21u8) == 21u128; - _ = to_u128(21u64) == 21u128; - _ = to_u128(21u128) == 21u128; - _ = to_u128(255u8) == 255u128; - _ = to_u128(18446744073709551615u64) == 18446744073709551615u128; - _ = to_u128(340282366920938463463374607431768211455u128) == 340282366920938463463374607431768211455u128; - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_eq_with_u128_x90() { - label b0: - Self.eq_u128_impl(10); - return; - } - - public entry calibrate_eq_with_u128_x450() { - label b0: - Self.eq_u128_impl(50); - return; - } - - public entry calibrate_eq_with_u128_x900() { - label b0: - Self.eq_u128_impl(100); - return; - } - - public eq_u256_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _ = to_u256(0u8) == 0u256; - _ = to_u256(0u64) == 0u256; - _ = to_u256(0u128) == 0u256; - _ = to_u256(0u16) == 0u256; - _ = to_u256(0u32) == 0u256; - _ = to_u256(0u256) == 0u256; - _ = to_u256(21u8) == 21u256; - _ = to_u256(21u64) == 21u256; - _ = to_u256(21u128) == 21u256; - _ = to_u256(21u16) == 21u256; - _ = to_u256(21u32) == 21u256; - _ = to_u256(21u256) == 21u256; - _ = to_u256(255u8) == 255u256; - _ = to_u256(18446744073709551615u64) == 18446744073709551615u256; - _ = to_u256(340282366920938463463374607431768211455u128) == 340282366920938463463374607431768211455u256; - _ = to_u256(65535u16) == 65535u256; - _ = to_u256(4294967295u32) == 4294967295u256; - _ = to_u256(115792089237316195423570985008687907853269984665640564039457584007913129639935u256) == 115792089237316195423570985008687907853269984665640564039457584007913129639935u256; - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_eq_with_u256_x180() { - label b0: - Self.eq_u256_impl(10); - return; - } - - public entry calibrate_eq_with_u256_x900() { - label b0: - Self.eq_u256_impl(50); - return; - } - - public entry calibrate_eq_with_u256_x1800() { - label b0: - Self.eq_u256_impl(100); - return; - } - - public eq_vec_same_len_impl(n: u64) { - let i: u64; - let a: vector; - let b: vector; - label entry: - i = 0; - a = h"000102030405060712346536356345012392385678567856785678567856785678123412341234123412341234"; - b = h"000102030405060712346536356345012392385678567856785678567856785678123412341234123412341234"; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _,_,_,_,_,_,_,_,_,_ = (&a == &b,&a == &b,&a == &b,&a == &b,&a == &b,&a == &b,&a == &b,&a == &b,&a == &b,&a == &b); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_eq_vec_same_len_x100() { - label b0: - Self.eq_vec_same_len_impl(10); - return; - } - - public entry calibrate_eq_vec_same_len_x500() { - label b0: - Self.eq_vec_same_len_impl(50); - return; - } - - public entry calibrate_eq_vec_same_len_x1000() { - label b0: - Self.eq_vec_same_len_impl(100); - return; - } - - public eq_vec_mix_len_impl(n: u64) { - let i: u64; - let a: vector; - let b: vector; - let c: vector; - let d: vector; - let e: vector; - let f: vector; - let g: vector; - let h: vector; - let k: vector; - label entry: - i = 0; - a = h"000102030405060712346536356345012392385678567856785678567856785678000102030405060712346536356345012392385678567856785678567856785678000102030405060712346536356345012392385678567856785678567856785678000102030405060712346536356345012392385678567856785678567856785678"; - b = h""; - c = h"000102030405060712346536356345012392385678567856785678567856785678"; - d = h"000102030405060712346536356345012392385678567856785678567856785678000102030405060712346536356345012392385678567856785678567856785678000102030405060712346536356345012392385678567856785678567856785678000102030405060712346536356345012392385678567856785678567856785678"; - e = h"1234"; - f = h"000102030405060712346536356345012392385678567856785678567856785678000102030405060712346536356345012392385678567856785678567856785678"; - g = h""; - h = h"000102030405060712346536356345012392385678567856785678567856785678000102030405060712346536356345012392385678567856785678567856785678"; - k = h"000102030405060712346536356345012392385678567856785678567856785678"; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _,_,_,_,_,_,_,_,_,_ = (&a == &b,&c == &d,&e == &f,&g == &h,&h == &k,&a == &b,&c == &d,&e == &f,&g == &h,&h == &k); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_eq_vec_mix_len_x100() { - label b0: - Self.eq_vec_mix_len_impl(10); - return; - } - - public entry calibrate_eq_vec_mix_len_x500() { - label b0: - Self.eq_vec_mix_len_impl(50); - return; - } - - public entry calibrate_eq_vec_mix_len_x1000() { - label b0: - Self.eq_vec_mix_len_impl(100); - return; - } - -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/operations-bool/ge.mvir b/aptos-move/aptos-gas-calibration/samples_ir/operations-bool/ge.mvir deleted file mode 100644 index 9aefc28b2a57f..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/operations-bool/ge.mvir +++ /dev/null @@ -1,35 +0,0 @@ -module 0xcafe.OperationsBoolGe { - - public calibrate_ge_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _, _, _, _, _, _, _, _, _, _ = (0 >= 10, 0 >= 10, 0 >= 10, 0 >= 10, 0 >= 10, 0 >= 10, 0 >= 10, 0 >= 10, 0 >= 10, 0 >= 10); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_ge_x100() { - label b0: - Self.calibrate_ge_impl(10); - return; - } - - public entry calibrate_ge_x500() { - label b0: - Self.calibrate_ge_impl(50); - return; - } - - public entry calibrate_ge_x1000() { - label b0: - Self.calibrate_ge_impl(100); - return; - } -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/operations-bool/gt.mvir b/aptos-move/aptos-gas-calibration/samples_ir/operations-bool/gt.mvir deleted file mode 100644 index 27a58ce239ed1..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/operations-bool/gt.mvir +++ /dev/null @@ -1,35 +0,0 @@ -module 0xcafe.OperationsBoolGt { - - public calibrate_gt_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _, _, _, _, _, _, _, _, _, _ = (0 > 10, 0 > 10, 0 > 10, 0 > 10, 0 > 10, 0 > 10, 0 > 10, 0 > 10, 0 > 10, 0 > 10); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_gt_x100() { - label b0: - Self.calibrate_gt_impl(10); - return; - } - - public entry calibrate_gt_x500() { - label b0: - Self.calibrate_gt_impl(50); - return; - } - - public entry calibrate_gt_x1000() { - label b0: - Self.calibrate_gt_impl(100); - return; - } -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/operations-bool/le.mvir b/aptos-move/aptos-gas-calibration/samples_ir/operations-bool/le.mvir deleted file mode 100644 index 7d8956b4df8c3..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/operations-bool/le.mvir +++ /dev/null @@ -1,35 +0,0 @@ -module 0xcafe.OperationsBoolLe { - - public calibrate_le_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _, _, _, _, _, _, _, _, _, _ = (0 <= 10, 0 <= 10, 0 <= 10, 0 <= 10, 0 <= 10, 0 <= 10, 0 <= 10, 0 <= 10, 0 <= 10, 0 <= 10); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_le_x100() { - label b0: - Self.calibrate_le_impl(10); - return; - } - - public entry calibrate_le_x500() { - label b0: - Self.calibrate_le_impl(50); - return; - } - - public entry calibrate_le_x1000() { - label b0: - Self.calibrate_le_impl(100); - return; - } -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/operations-bool/neq.mvir b/aptos-move/aptos-gas-calibration/samples_ir/operations-bool/neq.mvir deleted file mode 100644 index 8adc2c077dc09..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/operations-bool/neq.mvir +++ /dev/null @@ -1,311 +0,0 @@ -module 0xcafe.Neq { - - public neq_u16_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _ = to_u16(21u8) != 21u16; - _ = to_u16(21u64) != 21u16; - _ = to_u16(21u128) != 21u16; - _ = to_u16(21u16) != 21u16; - _ = to_u16(21u32) != 21u16; - _ = to_u16(21u256) != 21u16; - _ = to_u16(255u8) != 255u16; - _ = to_u16(65535u64) != 65535u16; - _ = to_u16(65535u128) != 65535u16; - _ = to_u16(65535u16) != 65535u16; - _ = to_u16(65535u32) != 65535u16; - _ = to_u16(65535u256) != 65535u16; - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_neq_with_u16_x120() { - label b0: - Self.neq_u16_impl(10); - return; - } - - public entry calibrate_neq_with_u16_x600() { - label b0: - Self.neq_u16_impl(50); - return; - } - - public entry calibrate_neq_with_u16_x1200() { - label b0: - Self.neq_u16_impl(100); - return; - } - - public neq_u32_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _ = to_u32(21u8) != 21u32; - _ = to_u32(21u64) != 21u32; - _ = to_u32(21u128) != 21u32; - _ = to_u32(21u16) != 21u32; - _ = to_u32(21u32) != 21u32; - _ = to_u32(21u256) != 21u32; - _ = to_u32(255u8) != 255u32; - _ = to_u32(4294967295u64) != 4294967295u32; - _ = to_u32(4294967295u128) != 4294967295u32; - _ = to_u32(65535u16) != 65535u32; - _ = to_u32(4294967295u32) != 4294967295u32; - _ = to_u32(4294967295u256) != 4294967295u32; - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_neq_with_u32_x120() { - label b0: - Self.neq_u32_impl(10); - return; - } - - public entry calibrate_neq_with_u32_x600() { - label b0: - Self.neq_u32_impl(50); - return; - } - - public entry calibrate_neq_with_u32_x1200() { - label b0: - Self.neq_u32_impl(100); - return; - } - - public neq_u64_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _ = to_u64(0u8) != 0u64; - _ = to_u64(0u64) != 0u64; - _ = to_u64(0u128) != 0u64; - _ = to_u64(21u8) != 21u64; - _ = to_u64(21u64) != 21u64; - _ = to_u64(21u128) != 21u64; - _ = to_u64(255u8) != 255u64; - _ = to_u64(18446744073709551615u64) != 18446744073709551615u64; - _ = to_u64(18446744073709551615u128) != 18446744073709551615u64; - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_neq_with_u64_x90() { - label b0: - Self.neq_u64_impl(10); - return; - } - - public entry calibrate_neq_with_u64_x450() { - label b0: - Self.neq_u64_impl(50); - return; - } - - public entry calibrate_neq_with_u64_x900() { - label b0: - Self.neq_u64_impl(100); - return; - } - - public neq_u128_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _ = to_u128(0u8) != 0u128; - _ = to_u128(0u64) != 0u128; - _ = to_u128(0u128) != 0u128; - _ = to_u128(21u8) != 21u128; - _ = to_u128(21u64) != 21u128; - _ = to_u128(21u128) != 21u128; - _ = to_u128(255u8) != 255u128; - _ = to_u128(18446744073709551615u64) != 18446744073709551615u128; - _ = to_u128(340282366920938463463374607431768211455u128) != 340282366920938463463374607431768211455u128; - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_neq_with_u128_x90() { - label b0: - Self.neq_u128_impl(10); - return; - } - - public entry calibrate_neq_with_u128_x450() { - label b0: - Self.neq_u128_impl(50); - return; - } - - public entry calibrate_neq_with_u128_x900() { - label b0: - Self.neq_u128_impl(100); - return; - } - - public neq_u256_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _ = to_u256(0u8) != 0u256; - _ = to_u256(0u64) != 0u256; - _ = to_u256(0u128) != 0u256; - _ = to_u256(0u16) != 0u256; - _ = to_u256(0u32) != 0u256; - _ = to_u256(0u256) != 0u256; - _ = to_u256(21u8) != 21u256; - _ = to_u256(21u64) != 21u256; - _ = to_u256(21u128) != 21u256; - _ = to_u256(21u16) != 21u256; - _ = to_u256(21u32) != 21u256; - _ = to_u256(21u256) != 21u256; - _ = to_u256(255u8) != 255u256; - _ = to_u256(18446744073709551615u64) != 18446744073709551615u256; - _ = to_u256(340282366920938463463374607431768211455u128) != 340282366920938463463374607431768211455u256; - _ = to_u256(65535u16) != 65535u256; - _ = to_u256(4294967295u32) != 4294967295u256; - _ = to_u256(115792089237316195423570985008687907853269984665640564039457584007913129639935u256) != 115792089237316195423570985008687907853269984665640564039457584007913129639935u256; - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_neq_with_u256_x180() { - label b0: - Self.neq_u256_impl(10); - return; - } - - public entry calibrate_neq_with_u256_x900() { - label b0: - Self.neq_u256_impl(50); - return; - } - - public entry calibrate_neq_with_u256_x1800() { - label b0: - Self.neq_u256_impl(100); - return; - } - - public neq_vec_same_len_impl(n: u64) { - let i: u64; - let a: vector; - let b: vector; - label entry: - i = 0; - a = h"000102030405060712346536356345012392385678567856785678567856785678123412341234123412341234"; - b = h"000102030405060712346536356345012392385678567856785678567856785678123412341234123412341234"; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _,_,_,_,_,_,_,_,_,_ = (&a != &b,&a != &b,&a != &b,&a != &b,&a != &b,&a != &b,&a != &b,&a != &b,&a != &b,&a != &b); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_neq_vec_same_len_x100() { - label b0: - Self.neq_vec_same_len_impl(10); - return; - } - - public entry calibrate_neq_vec_same_len_x500() { - label b0: - Self.neq_vec_same_len_impl(50); - return; - } - - public entry calibrate_neq_vec_same_len_x1000() { - label b0: - Self.neq_vec_same_len_impl(100); - return; - } - - public neq_vec_mix_len_impl(n: u64) { - let i: u64; - let a: vector; - let b: vector; - let c: vector; - let d: vector; - let e: vector; - let f: vector; - let g: vector; - let h: vector; - let k: vector; - label entry: - i = 0; - a = h"000102030405060712346536356345012392385678567856785678567856785678000102030405060712346536356345012392385678567856785678567856785678000102030405060712346536356345012392385678567856785678567856785678000102030405060712346536356345012392385678567856785678567856785678"; - b = h""; - c = h"000102030405060712346536356345012392385678567856785678567856785678"; - d = h"000102030405060712346536356345012392385678567856785678567856785678000102030405060712346536356345012392385678567856785678567856785678000102030405060712346536356345012392385678567856785678567856785678000102030405060712346536356345012392385678567856785678567856785678"; - e = h"1234"; - f = h"000102030405060712346536356345012392385678567856785678567856785678000102030405060712346536356345012392385678567856785678567856785678"; - g = h""; - h = h"000102030405060712346536356345012392385678567856785678567856785678000102030405060712346536356345012392385678567856785678567856785678"; - k = h"000102030405060712346536356345012392385678567856785678567856785678"; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _,_,_,_,_,_,_,_,_,_ = (&a != &b,&c != &d,&e != &f,&g != &h,&h != &k,&a != &b,&c != &d,&e != &f,&g != &h,&h != &k); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_neq_vec_mix_len_x100() { - label b0: - Self.neq_vec_mix_len_impl(10); - return; - } - - public entry calibrate_neq_vec_mix_len_x500() { - label b0: - Self.neq_vec_mix_len_impl(50); - return; - } - - public entry calibrate_neq_vec_mix_len_x1000() { - label b0: - Self.neq_vec_mix_len_impl(100); - return; - } - -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/operations-bool/not.mvir b/aptos-move/aptos-gas-calibration/samples_ir/operations-bool/not.mvir deleted file mode 100644 index ef88b481148c8..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/operations-bool/not.mvir +++ /dev/null @@ -1,35 +0,0 @@ -module 0xcafe.OperationsBoolNot { - - public calibrate_not_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _ = !!!!!!!!!!true; - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_not_x100() { - label b0: - Self.calibrate_not_impl(10); - return; - } - - public entry calibrate_not_x500() { - label b0: - Self.calibrate_not_impl(50); - return; - } - - public entry calibrate_not_x1000() { - label b0: - Self.calibrate_not_impl(100); - return; - } -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/operations-bool/or.mvir b/aptos-move/aptos-gas-calibration/samples_ir/operations-bool/or.mvir deleted file mode 100644 index fb3a0645bbe43..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/operations-bool/or.mvir +++ /dev/null @@ -1,35 +0,0 @@ -module 0xcafe.OperationsBoolOr { - - public calibrate_or_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _ = false || false || false || false || false || false || false || false || false || false; - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_or_x100() { - label b0: - Self.calibrate_or_impl(10); - return; - } - - public entry calibrate_or_x500() { - label b0: - Self.calibrate_or_impl(50); - return; - } - - public entry calibrate_or_x1000() { - label b0: - Self.calibrate_or_impl(100); - return; - } -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/operations/bitand.mvir b/aptos-move/aptos-gas-calibration/samples_ir/operations/bitand.mvir deleted file mode 100644 index 5ebf4f0ead150..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/operations/bitand.mvir +++ /dev/null @@ -1,35 +0,0 @@ -module 0xcafe.OperationsBitAnd { - - public calibrate_bitand_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _ = 1 & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 1; - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_bitand_x100() { - label b0: - Self.calibrate_bitand_impl(10); - return; - } - - public entry calibrate_bitand_x500() { - label b0: - Self.calibrate_bitand_impl(50); - return; - } - - public entry calibrate_bitand_x1000() { - label b0: - Self.calibrate_bitand_impl(100); - return; - } -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/operations/bitor.mvir b/aptos-move/aptos-gas-calibration/samples_ir/operations/bitor.mvir deleted file mode 100644 index 8a5d78b417b08..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/operations/bitor.mvir +++ /dev/null @@ -1,35 +0,0 @@ -module 0xcafe.OperationsBitOr { - - public calibrate_bitor_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _ = 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1; - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_bitor_x100() { - label b0: - Self.calibrate_bitor_impl(10); - return; - } - - public entry calibrate_bitor_x500() { - label b0: - Self.calibrate_bitor_impl(50); - return; - } - - public entry calibrate_bitor_x1000() { - label b0: - Self.calibrate_bitor_impl(100); - return; - } -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/operations/div.mvir b/aptos-move/aptos-gas-calibration/samples_ir/operations/div.mvir deleted file mode 100644 index 1c80c8df9aee2..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/operations/div.mvir +++ /dev/null @@ -1,47 +0,0 @@ -module 0xcafe.OperationDiv { - - public entry calibrate_div_x100() { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < 10) loop_end; - i = move(i) + 1; - - _, _, _, _, _, _, _, _, _, _ = (100/1, 100/1, 100/1, 100/1, 100/1, 100/1, 100/1, 100/1, 100/1, 100/1); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_div_x500() { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < 50) loop_end; - i = move(i) + 1; - - _, _, _, _, _, _, _, _, _, _ = (100/1, 100/1, 100/1, 100/1, 100/1, 100/1, 100/1, 100/1, 100/1, 100/1); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_div_x1000() { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < 100) loop_end; - i = move(i) + 1; - - _, _, _, _, _, _, _, _, _, _ = (100/1, 100/1, 100/1, 100/1, 100/1, 100/1, 100/1, 100/1, 100/1, 100/1); - - jump loop_start; - label loop_end: - return; - } -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/operations/mod.mvir b/aptos-move/aptos-gas-calibration/samples_ir/operations/mod.mvir deleted file mode 100644 index 796764bbf3d7d..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/operations/mod.mvir +++ /dev/null @@ -1,47 +0,0 @@ -module 0xcafe.OperationMod { - - public entry calibrate_mod_x100() { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < 10) loop_end; - i = move(i) + 1; - - _, _, _, _, _, _, _, _, _, _ = (100%1, 100%1, 100%1, 100%1, 100%1, 100%1, 100%1, 100%1, 100%1, 100%1); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_mod_x500() { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < 50) loop_end; - i = move(i) + 1; - - _, _, _, _, _, _, _, _, _, _ = (100%1, 100%1, 100%1, 100%1, 100%1, 100%1, 100%1, 100%1, 100%1, 100%1); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_mod_x1000() { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < 100) loop_end; - i = move(i) + 1; - - _, _, _, _, _, _, _, _, _, _ = (100%1, 100%1, 100%1, 100%1, 100%1, 100%1, 100%1, 100%1, 100%1, 100%1); - - jump loop_start; - label loop_end: - return; - } -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/operations/mul.mvir b/aptos-move/aptos-gas-calibration/samples_ir/operations/mul.mvir deleted file mode 100644 index 97716e67e43a6..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/operations/mul.mvir +++ /dev/null @@ -1,78 +0,0 @@ -module 0xcafe.OperationMul { - // - mul - - public entry calibrate_mul_x10() { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < 1) loop_end; - i = move(i) + 1; - - _, _, _, _, _, _, _, _, _, _ = (100*1, 100*1, 100*1, 100*1, 100*1, 100*1, 100*1, 100*1, 100*1, 100*1); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_mul_x50() { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < 5) loop_end; - i = move(i) + 1; - - _, _, _, _, _, _, _, _, _, _ = (100*1, 100*1, 100*1, 100*1, 100*1, 100*1, 100*1, 100*1, 100*1, 100*1); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_mul_x100() { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < 10) loop_end; - i = move(i) + 1; - - _, _, _, _, _, _, _, _, _, _ = (100*1, 100*1, 100*1, 100*1, 100*1, 100*1, 100*1, 100*1, 100*1, 100*1); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_mul_x300() { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < 30) loop_end; - i = move(i) + 1; - - _, _, _, _, _, _, _, _, _, _ = (100*1, 100*1, 100*1, 100*1, 100*1, 100*1, 100*1, 100*1, 100*1, 100*1); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_mul_x600() { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < 60) loop_end; - i = move(i) + 1; - - _, _, _, _, _, _, _, _, _, _ = (100*1, 100*1, 100*1, 100*1, 100*1, 100*1, 100*1, 100*1, 100*1, 100*1); - - jump loop_start; - label loop_end: - return; - } -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/operations/shl.mvir b/aptos-move/aptos-gas-calibration/samples_ir/operations/shl.mvir deleted file mode 100644 index 4814ebb0479fd..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/operations/shl.mvir +++ /dev/null @@ -1,44 +0,0 @@ -module 0xcafe.OperationsShl { - - public calibrate_shl_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _ = (1u8 << 1u8); - _ = (7u64 << 1u8); - _ = (1000u128 << 1u8); - _ = (3u16 << 1u8); - _ = (7u32 << 1u8); - _ = (1000u256 << 1u8); - _ = (123453u256 << 13u8); - _ = (123453678909u256 << 76u8); - _ = (1234536789093546757803u256 << 168u8); - _ = (1234536789093546757803786604381691994985672142341299639418u256 << 202u8); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_shl_x100() { - label b0: - Self.calibrate_shl_impl(10); - return; - } - - public entry calibrate_shl_x500() { - label b0: - Self.calibrate_shl_impl(50); - return; - } - - public entry calibrate_shl_x1000() { - label b0: - Self.calibrate_shl_impl(100); - return; - } -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/operations/shr.mvir b/aptos-move/aptos-gas-calibration/samples_ir/operations/shr.mvir deleted file mode 100644 index f3c30adcbae46..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/operations/shr.mvir +++ /dev/null @@ -1,44 +0,0 @@ -module 0xcafe.OperationsShr { - - public calibrate_shr_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _ = (1u8 >> 1u8); - _ = (7u64 >> 1u8); - _ = (1000u128 >> 1u8); - _ = (3u16 >> 1u8); - _ = (7u32 >> 1u8); - _ = (1000u256 >> 1u8); - _ = (123453u256 >> 13u8); - _ = (123453678909u256 >> 76u8); - _ = (1234536789093546757803u256 >> 168u8); - _ = (1234536789093546757803786604381691994985672142341299639418u256 >> 202u8); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_shr_x100() { - label b0: - Self.calibrate_shr_impl(10); - return; - } - - public entry calibrate_shr_x500() { - label b0: - Self.calibrate_shr_impl(50); - return; - } - - public entry calibrate_shr_x1000() { - label b0: - Self.calibrate_shr_impl(100); - return; - } -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/operations/xor.mvir b/aptos-move/aptos-gas-calibration/samples_ir/operations/xor.mvir deleted file mode 100644 index 9cbfe67d6044c..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/operations/xor.mvir +++ /dev/null @@ -1,35 +0,0 @@ -module 0xcafe.OperationsXor { - - public calibrate_xor_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _ = 1 ^ 1 ^ 1 ^ 1 ^ 1 ^ 1 ^ 1 ^ 1 ^ 1 ^ 1; - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_xor_x100() { - label b0: - Self.calibrate_xor_impl(10); - return; - } - - public entry calibrate_xor_x500() { - label b0: - Self.calibrate_xor_impl(50); - return; - } - - public entry calibrate_xor_x1000() { - label b0: - Self.calibrate_xor_impl(100); - return; - } -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/struct/imm-borrow-field.mvir b/aptos-move/aptos-gas-calibration/samples_ir/struct/imm-borrow-field.mvir deleted file mode 100644 index b4a11e0860a0b..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/struct/imm-borrow-field.mvir +++ /dev/null @@ -1,42 +0,0 @@ -module 0xcafe.ImmBorrowField { - - struct Foo has drop { u: u64 } - - public calibrate_imm_borrow_field_foo_impl(n: u64) { - let i: u64; - let a: Self.Foo; - let b: &Self.Foo; - label entry: - i = 0; - a = Foo { u: 0 }; - b = &a; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _,_,_,_,_,_,_,_,_,_ = (©(b).Foo::u,©(b).Foo::u,©(b).Foo::u,©(b).Foo::u,©(b).Foo::u,©(b).Foo::u,©(b).Foo::u,©(b).Foo::u,©(b).Foo::u,©(b).Foo::u); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_imm_borrow_field_foo_x100() { - label b0: - Self.calibrate_imm_borrow_field_foo_impl(10); - return; - } - - public entry calibrate_imm_borrow_field_foo_x500() { - label b0: - Self.calibrate_imm_borrow_field_foo_impl(50); - return; - } - - public entry calibrate_imm_borrow_field_foo_x1000() { - label b0: - Self.calibrate_imm_borrow_field_foo_impl(100); - return; - } - -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/struct/mut-borrow-field.mvir b/aptos-move/aptos-gas-calibration/samples_ir/struct/mut-borrow-field.mvir deleted file mode 100644 index a0fd0d6e94974..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/struct/mut-borrow-field.mvir +++ /dev/null @@ -1,42 +0,0 @@ -module 0xcafe.MutBorrowField { - - struct Foo has drop { u: u64 } - - public calibrate_mut_borrow_field_foo_impl(n: u64) { - let i: u64; - let a: Self.Foo; - let b: &mut Self.Foo; - label entry: - i = 0; - a = Foo { u: 0 }; - b = &mut a; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _,_,_,_,_,_,_,_,_,_ = (&mut copy(b).Foo::u,&mut copy(b).Foo::u,&mut copy(b).Foo::u,&mut copy(b).Foo::u,&mut copy(b).Foo::u,&mut copy(b).Foo::u,&mut copy(b).Foo::u,&mut copy(b).Foo::u,&mut copy(b).Foo::u,&mut copy(b).Foo::u); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_mut_borrow_field_foo_x100() { - label b0: - Self.calibrate_mut_borrow_field_foo_impl(10); - return; - } - - public entry calibrate_mut_borrow_field_foo_x500() { - label b0: - Self.calibrate_mut_borrow_field_foo_impl(50); - return; - } - - public entry calibrate_mut_borrow_field_foo_x1000() { - label b0: - Self.calibrate_mut_borrow_field_foo_impl(100); - return; - } - -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/struct/pack.mvir b/aptos-move/aptos-gas-calibration/samples_ir/struct/pack.mvir deleted file mode 100644 index 8579ffa4c3cd1..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/struct/pack.mvir +++ /dev/null @@ -1,186 +0,0 @@ -module 0xcafe.Pack { - struct Foo has drop { x: u64, y: u64 } - struct Bar has drop { x: u64, y: u64, z: Self.Foo } - - struct T1 has drop { x: u64 } - struct T2 has drop { x: Self.T1 } - struct T3 has drop { x: Self.T2 } - struct T4 has drop { x: Self.T3 } - struct T5 has drop { x: Self.T4 } - struct T6 has drop { x: Self.T5 } - struct T7 has drop { x: Self.T6 } - struct T8 has drop { x: Self.T7 } - struct T9 has drop { x: Self.T8 } - struct T10 has drop { x: Self.T9 } - struct T11 has drop { x: Self.T10 } - struct T12 has drop { x: Self.T11 } - struct T13 has drop { x: Self.T12 } - struct T14 has drop { x: Self.T13 } - struct T15 has drop { x: Self.T14 } - struct T16 has drop { x: Self.T15 } - struct T17 has drop { x: Self.T16 } - struct T18 has drop { x: Self.T17 } - struct T19 has drop { x: Self.T18 } - struct T20 has drop { x: Self.T19 } - struct T21 has drop { x: Self.T20 } - struct T22 has drop { x: Self.T21 } - struct T23 has drop { x: Self.T22 } - struct T24 has drop { x: Self.T23 } - struct T25 has drop { x: Self.T24 } - struct T26 has drop { x: Self.T25 } - struct T27 has drop { x: Self.T26 } - struct T28 has drop { x: Self.T27 } - struct T29 has drop { x: Self.T28 } - struct T30 has drop { x: Self.T29 } - struct T31 has drop { x: Self.T30 } - - public calibrate_pack_foo_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _, _, _, _, _, _, _, _, _, _ = (Foo{x:0, y:0}, Foo{x:0, y:0}, Foo{x:0, y:0}, Foo{x:0, y:0}, Foo{x:0, y:0}, Foo{x:0, y:0}, Foo{x:0, y:0}, Foo{x:0, y:0}, Foo{x:0, y:0}, Foo{x:0, y:0}); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_pack_foo_x100() { - label b0: - Self.calibrate_pack_foo_impl(10); - return; - } - - public entry calibrate_pack_foo_x500() { - label b0: - Self.calibrate_pack_foo_impl(50); - return; - } - - public entry calibrate_pack_foo_x1000() { - label b0: - Self.calibrate_pack_foo_impl(100); - return; - } - - public calibrate_pack_bar_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _, _, _, _, _, _, _, _, _, _ = (Bar{x:0, y:0, z:Foo{x:0, y:0}}, Bar{x:0, y:0, z:Foo{x:0, y:0}}, Bar{x:0, y:0, z:Foo{x:0, y:0}}, Bar{x:0, y:0, z:Foo{x:0, y:0}}, Bar{x:0, y:0, z:Foo{x:0, y:0}}, Bar{x:0, y:0, z:Foo{x:0, y:0}}, Bar{x:0, y:0, z:Foo{x:0, y:0}}, Bar{x:0, y:0, z:Foo{x:0, y:0}}, Bar{x:0, y:0, z:Foo{x:0, y:0}}, Bar{x:0, y:0, z:Foo{x:0, y:0}}); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_pack_bar_x100() { - label b0: - Self.calibrate_pack_bar_impl(10); - return; - } - - public entry calibrate_pack_bar_x500() { - label b0: - Self.calibrate_pack_bar_impl(50); - return; - } - - public entry calibrate_pack_bar_x1000() { - label b0: - Self.calibrate_pack_bar_impl(100); - return; - } - - public calibrate_pack_t8_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _ = T8{x:T7{x:T6{x:T5{x:T4{x:T3{x:T2{x:T1{x:0}}}}}}}}; - _ = T8{x:T7{x:T6{x:T5{x:T4{x:T3{x:T2{x:T1{x:0}}}}}}}}; - _ = T8{x:T7{x:T6{x:T5{x:T4{x:T3{x:T2{x:T1{x:0}}}}}}}}; - _ = T8{x:T7{x:T6{x:T5{x:T4{x:T3{x:T2{x:T1{x:0}}}}}}}}; - _ = T8{x:T7{x:T6{x:T5{x:T4{x:T3{x:T2{x:T1{x:0}}}}}}}}; - _ = T8{x:T7{x:T6{x:T5{x:T4{x:T3{x:T2{x:T1{x:0}}}}}}}}; - _ = T8{x:T7{x:T6{x:T5{x:T4{x:T3{x:T2{x:T1{x:0}}}}}}}}; - _ = T8{x:T7{x:T6{x:T5{x:T4{x:T3{x:T2{x:T1{x:0}}}}}}}}; - _ = T8{x:T7{x:T6{x:T5{x:T4{x:T3{x:T2{x:T1{x:0}}}}}}}}; - _ = T8{x:T7{x:T6{x:T5{x:T4{x:T3{x:T2{x:T1{x:0}}}}}}}}; - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_pack_t8_x100() { - label b0: - Self.calibrate_pack_t8_impl(10); - return; - } - - public entry calibrate_pack_t8_x500() { - label b0: - Self.calibrate_pack_t8_impl(50); - return; - } - - public entry calibrate_pack_t8_x1000() { - label b0: - Self.calibrate_pack_t8_impl(100); - return; - } - - public calibrate_pack_t32_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _ = T31{x:T30{x:T29{x:T28{x:T27{x:T26{x:T25{x:T24{x:T23{x:T22{x:T21{x:T20{x:T19{x:T18{x:T17{x:T16{x:T15{x:T14{x:T13{x:T12{x:T11{x:T10{x:T9{x:T8{x:T7{x:T6{x:T5{x:T4{x:T3{x:T2{x:T1{x:0}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}; - _ = T31{x:T30{x:T29{x:T28{x:T27{x:T26{x:T25{x:T24{x:T23{x:T22{x:T21{x:T20{x:T19{x:T18{x:T17{x:T16{x:T15{x:T14{x:T13{x:T12{x:T11{x:T10{x:T9{x:T8{x:T7{x:T6{x:T5{x:T4{x:T3{x:T2{x:T1{x:0}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}; - _ = T31{x:T30{x:T29{x:T28{x:T27{x:T26{x:T25{x:T24{x:T23{x:T22{x:T21{x:T20{x:T19{x:T18{x:T17{x:T16{x:T15{x:T14{x:T13{x:T12{x:T11{x:T10{x:T9{x:T8{x:T7{x:T6{x:T5{x:T4{x:T3{x:T2{x:T1{x:0}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}; - _ = T31{x:T30{x:T29{x:T28{x:T27{x:T26{x:T25{x:T24{x:T23{x:T22{x:T21{x:T20{x:T19{x:T18{x:T17{x:T16{x:T15{x:T14{x:T13{x:T12{x:T11{x:T10{x:T9{x:T8{x:T7{x:T6{x:T5{x:T4{x:T3{x:T2{x:T1{x:0}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}; - _ = T31{x:T30{x:T29{x:T28{x:T27{x:T26{x:T25{x:T24{x:T23{x:T22{x:T21{x:T20{x:T19{x:T18{x:T17{x:T16{x:T15{x:T14{x:T13{x:T12{x:T11{x:T10{x:T9{x:T8{x:T7{x:T6{x:T5{x:T4{x:T3{x:T2{x:T1{x:0}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}; - _ = T31{x:T30{x:T29{x:T28{x:T27{x:T26{x:T25{x:T24{x:T23{x:T22{x:T21{x:T20{x:T19{x:T18{x:T17{x:T16{x:T15{x:T14{x:T13{x:T12{x:T11{x:T10{x:T9{x:T8{x:T7{x:T6{x:T5{x:T4{x:T3{x:T2{x:T1{x:0}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}; - _ = T31{x:T30{x:T29{x:T28{x:T27{x:T26{x:T25{x:T24{x:T23{x:T22{x:T21{x:T20{x:T19{x:T18{x:T17{x:T16{x:T15{x:T14{x:T13{x:T12{x:T11{x:T10{x:T9{x:T8{x:T7{x:T6{x:T5{x:T4{x:T3{x:T2{x:T1{x:0}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}; - _ = T31{x:T30{x:T29{x:T28{x:T27{x:T26{x:T25{x:T24{x:T23{x:T22{x:T21{x:T20{x:T19{x:T18{x:T17{x:T16{x:T15{x:T14{x:T13{x:T12{x:T11{x:T10{x:T9{x:T8{x:T7{x:T6{x:T5{x:T4{x:T3{x:T2{x:T1{x:0}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}; - _ = T31{x:T30{x:T29{x:T28{x:T27{x:T26{x:T25{x:T24{x:T23{x:T22{x:T21{x:T20{x:T19{x:T18{x:T17{x:T16{x:T15{x:T14{x:T13{x:T12{x:T11{x:T10{x:T9{x:T8{x:T7{x:T6{x:T5{x:T4{x:T3{x:T2{x:T1{x:0}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}; - _ = T31{x:T30{x:T29{x:T28{x:T27{x:T26{x:T25{x:T24{x:T23{x:T22{x:T21{x:T20{x:T19{x:T18{x:T17{x:T16{x:T15{x:T14{x:T13{x:T12{x:T11{x:T10{x:T9{x:T8{x:T7{x:T6{x:T5{x:T4{x:T3{x:T2{x:T1{x:0}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}; - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_pack_t32_x100() { - label b0: - Self.calibrate_pack_t32_impl(10); - return; - } - - public entry calibrate_pack_t32_x500() { - label b0: - Self.calibrate_pack_t32_impl(50); - return; - } - - public entry calibrate_pack_t32_x1000() { - label b0: - Self.calibrate_pack_t32_impl(100); - return; - } -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/struct/unpack.mvir b/aptos-move/aptos-gas-calibration/samples_ir/struct/unpack.mvir deleted file mode 100644 index d410d7d093468..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/struct/unpack.mvir +++ /dev/null @@ -1,260 +0,0 @@ -module 0xcafe.Unpack { - struct Foo has drop { x: u64, y: u64 } - struct Bar has drop { x: u64, y: u64, z: Self.Foo } - - struct T1 has drop { x: u64 } - struct T2 has drop { x: Self.T1 } - struct T3 has drop { x: Self.T2 } - struct T4 has drop { x: Self.T3 } - struct T5 has drop { x: Self.T4 } - struct T6 has drop { x: Self.T5 } - struct T7 has drop { x: Self.T6 } - struct T8 has drop { x: Self.T7 } - struct T9 has drop { x: Self.T8 } - struct T10 has drop { x: Self.T9 } - struct T11 has drop { x: Self.T10 } - struct T12 has drop { x: Self.T11 } - struct T13 has drop { x: Self.T12 } - struct T14 has drop { x: Self.T13 } - struct T15 has drop { x: Self.T14 } - struct T16 has drop { x: Self.T15 } - struct T17 has drop { x: Self.T16 } - struct T18 has drop { x: Self.T17 } - struct T19 has drop { x: Self.T18 } - struct T20 has drop { x: Self.T19 } - struct T21 has drop { x: Self.T20 } - struct T22 has drop { x: Self.T21 } - struct T23 has drop { x: Self.T22 } - struct T24 has drop { x: Self.T23 } - struct T25 has drop { x: Self.T24 } - struct T26 has drop { x: Self.T25 } - struct T27 has drop { x: Self.T26 } - struct T28 has drop { x: Self.T27 } - struct T29 has drop { x: Self.T28 } - struct T30 has drop { x: Self.T29 } - struct T31 has drop { x: Self.T30 } - - public calibrate_unpack_foo_impl(n: u64) { - let i: u64; - let x: u64; - let y: u64; - let t: Self.Foo; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - t = Foo{x:0,y:0}; - Foo{x,y} = move(t); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_unpack_foo_x100() { - label b0: - Self.calibrate_unpack_foo_impl(10); - return; - } - - public entry calibrate_unpack_foo_x500() { - label b0: - Self.calibrate_unpack_foo_impl(50); - return; - } - - public entry calibrate_unpack_foo_x1000() { - label b0: - Self.calibrate_unpack_foo_impl(100); - return; - } - - public calibrate_unpack_bar_impl(n: u64) { - let i: u64; - let x: u64; - let y: u64; - let s: u64; - let w: u64; - let z: Self.Foo; - let t: Self.Bar; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - t = Bar{x:0,y:0,z:Foo{x:0,y:0}}; - Bar{x,y,z} = move(t); - Foo{s,w} = move(z); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_unpack_bar_x100() { - label b0: - Self.calibrate_unpack_bar_impl(10); - return; - } - - public entry calibrate_unpack_bar_x500() { - label b0: - Self.calibrate_unpack_bar_impl(50); - return; - } - - public entry calibrate_unpack_bar_x1000() { - label b0: - Self.calibrate_unpack_bar_impl(100); - return; - } - - public calibrate_unpack_t8_impl(n: u64) { - let i: u64; - let t8: Self.T8; - let x7: Self.T7; - let x6: Self.T6; - let x5: Self.T5; - let x4: Self.T4; - let x3: Self.T3; - let x2: Self.T2; - let x1: Self.T1; - let x: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - t8 = T8{x:T7{x:T6{x:T5{x:T4{x:T3{x:T2{x:T1{x:0}}}}}}}}; - T8{x7} = move(t8); - T7{x6} = move(x7); - T6{x5} = move(x6); - T5{x4} = move(x5); - T4{x3} = move(x4); - T3{x2} = move(x3); - T2{x1} = move(x2); - T1{x} = move(x1); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_unpack_t8_x100() { - label b0: - Self.calibrate_unpack_t8_impl(10); - return; - } - - public entry calibrate_unpack_t8_x500() { - label b0: - Self.calibrate_unpack_t8_impl(50); - return; - } - - public entry calibrate_unpack_t8_x1000() { - label b0: - Self.calibrate_unpack_t8_impl(100); - return; - } - - public calibrate_unpack_t32_impl(n: u64) { - let i: u64; - let t31: Self.T31; - let x30: Self.T30; - let x29: Self.T29; - let x28: Self.T28; - let x27: Self.T27; - let x26: Self.T26; - let x25: Self.T25; - let x24: Self.T24; - let x23: Self.T23; - let x22: Self.T22; - let x21: Self.T21; - let x20: Self.T20; - let x19: Self.T19; - let x18: Self.T18; - let x17: Self.T17; - let x16: Self.T16; - let x15: Self.T15; - let x14: Self.T14; - let x13: Self.T13; - let x12: Self.T12; - let x11: Self.T11; - let x10: Self.T10; - let x9: Self.T9; - let x8: Self.T8; - let x7: Self.T7; - let x6: Self.T6; - let x5: Self.T5; - let x4: Self.T4; - let x3: Self.T3; - let x2: Self.T2; - let x1: Self.T1; - let x0: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - t31 = T31{x:T30{x:T29{x:T28{x:T27{x:T26{x:T25{x:T24{x:T23{x:T22{x:T21{x:T20{x:T19{x:T18{x:T17{x:T16{x:T15{x:T14{x:T13{x:T12{x:T11{x:T10{x:T9{x:T8{x:T7{x:T6{x:T5{x:T4{x:T3{x:T2{x:T1{x:0}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}; - T31{x30} = move(t31); - T30{x29} = move(x30); - T29{x28} = move(x29); - T28{x27} = move(x28); - T27{x26} = move(x27); - T26{x25} = move(x26); - T25{x24} = move(x25); - T24{x23} = move(x24); - T23{x22} = move(x23); - T22{x21} = move(x22); - T21{x20} = move(x21); - T20{x19} = move(x20); - T19{x18} = move(x19); - T18{x17} = move(x18); - T17{x16} = move(x17); - T16{x15} = move(x16); - T15{x14} = move(x15); - T14{x13} = move(x14); - T13{x12} = move(x13); - T12{x11} = move(x12); - T11{x10} = move(x11); - T10{x9} = move(x10); - T9{x8} = move(x9); - T8{x7} = move(x8); - T7{x6} = move(x7); - T6{x5} = move(x6); - T5{x4} = move(x5); - T4{x3} = move(x4); - T3{x2} = move(x3); - T2{x1} = move(x2); - T1{x0} = move(x1); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_unpack_t32_x100() { - label b0: - Self.calibrate_unpack_t32_impl(10); - return; - } - - public entry calibrate_unpack_t32_x500() { - label b0: - Self.calibrate_unpack_t32_impl(50); - return; - } - - public entry calibrate_unpack_t32_x1000() { - label b0: - Self.calibrate_unpack_t32_impl(100); - return; - } -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/vector/vec-generic.mvir b/aptos-move/aptos-gas-calibration/samples_ir/vector/vec-generic.mvir deleted file mode 100644 index 2af4918258c20..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/vector/vec-generic.mvir +++ /dev/null @@ -1,230 +0,0 @@ -module 0xcafe.VecGeneric { - struct D has copy, drop { x: u64 } - struct C has copy, drop { x: T, y: u64 } - struct E has copy, drop { x: T, y: u64 } - struct F has copy, drop { x: T, y: u64 } - struct G has copy, drop { x: T, y: u64 } - - public make(): Self.C { - let d: Self.D; - label b0: - d = D { x: 0 }; - return C { x: move(d), y: 0 }; - } - - public calibrate_vec_len_generic_impl(n: u64) { - let i: u64; - let c: Self.C; - let v: vector>; - label entry: - i = 0; - c = Self.make(); - v = vec_pack_1>(move(c)); - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - Self.vec_len(&v); - jump loop_start; - label loop_end: - return; - } - - public calibrate_vec_len_generic_inlined_impl(n: u64) { - let i: u64; - let c: Self.C; - let v: vector>; - label entry: - i = 0; - c = Self.make(); - v = vec_pack_1>(move(c)); - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - _ = vec_len>(&v); - jump loop_start; - label loop_end: - return; - } - - public vec_len(v: &vector>) { - label entry: - _ = vec_len>(move(v)); - return; - } - - public entry calibrate_vec_len_generic_1_x100() { - label b0: - Self.calibrate_vec_len_generic_impl(10); - return; - } - - public entry calibrate_vec_len_generic_1_x500() { - label b0: - Self.calibrate_vec_len_generic_impl(50); - return; - } - - public entry calibrate_vec_len_generic_1_x1000() { - label b0: - Self.calibrate_vec_len_generic_impl(100); - return; - } - - public entry calibrate_vec_len_generic_inlined_1_x100() { - label b0: - Self.calibrate_vec_len_generic_inlined_impl(10); - return; - } - - public entry calibrate_vec_len_generic_inlined_1_x500() { - label b0: - Self.calibrate_vec_len_generic_inlined_impl(50); - return; - } - - public entry calibrate_vec_len_generic_inlined_1_x1000() { - label b0: - Self.calibrate_vec_len_generic_inlined_impl(100); - return; - } - - public make_gen(v: T): Self.C { - label b0: - return C { x: move(v), y: 0 }; - } - - public calibrate_vec_len_generic_2_impl(n: u64, val: T) { - let i: u64; - let c: Self.C; - let v: vector>; - label entry: - i = 0; - c = Self.make_gen(move(val)); - v = vec_pack_1>(move(c)); - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - Self.vec_len_gen(&v); - jump loop_start; - label loop_end: - return; - } - - public calibrate_vec_len_generic_inlined_2_impl(n: u64, val: T) { - let i: u64; - let c: Self.C; - let v: vector>; - label entry: - i = 0; - c = Self.make_gen(move(val)); - v = vec_pack_1>(move(c)); - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - _ = vec_len>(&v); - jump loop_start; - label loop_end: - return; - } - - public vec_len_gen(v: &vector>) { - label entry: - _ = vec_len>(move(v)); - return; - } - - public entry calibrate_vec_len_generic_2_x100() { - let d: Self.D; - label b0: - d = D { x: 0 }; - Self.calibrate_vec_len_generic_2_impl(10, move(d)); - return; - } - - public entry calibrate_vec_len_generic_2_x500() { - let d: Self.D; - label b0: - d = D { x: 0 }; - Self.calibrate_vec_len_generic_2_impl(50, move(d)); - return; - } - - public entry calibrate_vec_len_generic_2_x1000() { - let d: Self.D; - label b0: - d = D { x: 0 }; - Self.calibrate_vec_len_generic_2_impl(100, move(d)); - return; - } - - public entry calibrate_vec_len_generic_inlined_2_x100() { - let d: Self.D; - label b0: - d = D { x: 0 }; - Self.calibrate_vec_len_generic_inlined_2_impl(10, move(d)); - return; - } - - public entry calibrate_vec_len_generic_inlined_2_x500() { - let d: Self.D; - label b0: - d = D { x: 0 }; - Self.calibrate_vec_len_generic_inlined_2_impl(50, move(d)); - return; - } - - public entry calibrate_vec_len_generic_inlined_2_x1000() { - let d: Self.D; - label b0: - d = D { x: 0 }; - Self.calibrate_vec_len_generic_inlined_2_impl(100, move(d)); - return; - } - - public calibrate_vec_len_generic_inlined_exterme_impl(n: u64, val: T) { - let i: u64; - let v: vector>>>>; - let g: Self.G; - let f: Self.F>; - let e: Self.E>>; - let c: Self.C>>>; - label entry: - i = 0; - g = G { x: move(val), y: 0}; - f = F> { x: move(g), y: 0 }; - e = E>> { x: move(f), y: 0 }; - c = C>>> { x: move(e), y: 0 }; - v = vec_pack_1>>>>(move(c)); - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - _ = vec_len>>>>(&v); - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_vec_len_generic_inlined_exterme_x100() { - let d: Self.D; - label b0: - d = D { x: 0 }; - Self.calibrate_vec_len_generic_inlined_exterme_impl(10, move(d)); - return; - } - - public entry calibrate_vec_len_generic_inlined_exterme_x500() { - let d: Self.D; - label b0: - d = D { x: 0 }; - Self.calibrate_vec_len_generic_inlined_exterme_impl(50, move(d)); - return; - } - - public entry calibrate_vec_len_generic_inlined_exterme_x1000() { - let d: Self.D; - label b0: - d = D { x: 0 }; - Self.calibrate_vec_len_generic_inlined_exterme_impl(100, move(d)); - return; - } -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/vector/vec-imm-borrow.mvir b/aptos-move/aptos-gas-calibration/samples_ir/vector/vec-imm-borrow.mvir deleted file mode 100644 index d1a0d4e0aad49..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/vector/vec-imm-borrow.mvir +++ /dev/null @@ -1,73 +0,0 @@ -module 0xcafe.VecImmBorrow { - - public calibrate_vec_imm_borrow_1_impl(n: u64) { - let i: u64; - let v: vector; - label entry: - i = 0; - v = vec_pack_1(42); - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _, _, _, _, _, _, _, _, _, _ = (vec_imm_borrow(&v, 0), vec_imm_borrow(&v, 0), vec_imm_borrow(&v, 0), vec_imm_borrow(&v, 0), vec_imm_borrow(&v, 0), vec_imm_borrow(&v, 0), vec_imm_borrow(&v, 0), vec_imm_borrow(&v, 0), vec_imm_borrow(&v, 0), vec_imm_borrow(&v, 0)); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_vec_imm_borrow_1_x100() { - label b0: - Self.calibrate_vec_imm_borrow_1_impl(10); - return; - } - - public entry calibrate_vec_imm_borrow_1_x500() { - label b0: - Self.calibrate_vec_imm_borrow_1_impl(50); - return; - } - - public entry calibrate_vec_imm_borrow_1_x1000() { - label b0: - Self.calibrate_vec_imm_borrow_1_impl(100); - return; - } - - public calibrate_vec_imm_borrow_2_impl(n: u64) { - let i: u64; - let v: vector; - label entry: - i = 0; - v = vec_pack_2(42, 43); - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _, _, _, _, _, _, _, _, _, _ = (vec_imm_borrow(&v, 0), vec_imm_borrow(&v, 0), vec_imm_borrow(&v, 0), vec_imm_borrow(&v, 0), vec_imm_borrow(&v, 0), vec_imm_borrow(&v, 0), vec_imm_borrow(&v, 0), vec_imm_borrow(&v, 0), vec_imm_borrow(&v, 0), vec_imm_borrow(&v, 0)); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_vec_imm_borrow_2_x100() { - label b0: - Self.calibrate_vec_imm_borrow_2_impl(10); - return; - } - - public entry calibrate_vec_imm_borrow_2_x500() { - label b0: - Self.calibrate_vec_imm_borrow_2_impl(50); - return; - } - - public entry calibrate_vec_imm_borrow_2_x1000() { - label b0: - Self.calibrate_vec_imm_borrow_2_impl(100); - return; - } - -} diff --git a/aptos-move/aptos-gas-calibration/samples_ir/vector/vec-len.mvir b/aptos-move/aptos-gas-calibration/samples_ir/vector/vec-len.mvir deleted file mode 100644 index f1d0494d6ed0d..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/vector/vec-len.mvir +++ /dev/null @@ -1,178 +0,0 @@ -module 0xcafe.VecLen { - - public calibrate_veclen_0_impl(n: u64) { - let i: u64; - let v: vector; - label entry: - i = 0; - v = vec_pack_0(); - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _, _, _, _, _, _, _, _, _, _ = (vec_len(&v), vec_len(&v), vec_len(&v), vec_len(&v), vec_len(&v), vec_len(&v), vec_len(&v), vec_len(&v), vec_len(&v), vec_len(&v)); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_veclen_0_x100() { - label b0: - Self.calibrate_veclen_0_impl(10); - return; - } - - public entry calibrate_veclen_0_x500() { - label b0: - Self.calibrate_veclen_0_impl(50); - return; - } - - public entry calibrate_veclen_0_x1000() { - label b0: - Self.calibrate_veclen_0_impl(100); - return; - } - - public calibrate_veclen_1_impl(n: u64) { - let i: u64; - let v: vector; - label entry: - i = 0; - v = vec_pack_1(42); - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _, _, _, _, _, _, _, _, _, _ = (vec_len(&v), vec_len(&v), vec_len(&v), vec_len(&v), vec_len(&v), vec_len(&v), vec_len(&v), vec_len(&v), vec_len(&v), vec_len(&v)); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_veclen_1_x100() { - label b0: - Self.calibrate_veclen_1_impl(10); - return; - } - - public entry calibrate_veclen_1_x500() { - label b0: - Self.calibrate_veclen_1_impl(50); - return; - } - - public entry calibrate_veclen_1_x1000() { - label b0: - Self.calibrate_veclen_1_impl(100); - return; - } - - public calibrate_veclen_2_impl(n: u64) { - let i: u64; - let v: vector; - label entry: - i = 0; - v = vec_pack_2(42, 43); - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _, _, _, _, _, _, _, _, _, _ = (vec_len(&v), vec_len(&v), vec_len(&v), vec_len(&v), vec_len(&v), vec_len(&v), vec_len(&v), vec_len(&v), vec_len(&v), vec_len(&v)); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_veclen_2_x100() { - label b0: - Self.calibrate_veclen_2_impl(10); - return; - } - - public entry calibrate_veclen_2_x500() { - label b0: - Self.calibrate_veclen_2_impl(50); - return; - } - - public entry calibrate_veclen_2_x1000() { - label b0: - Self.calibrate_veclen_2_impl(100); - return; - } - - public calibrate_veclen_8_impl(n: u64) { - let i: u64; - let v: vector; - label entry: - i = 0; - v = vec_pack_8(40, 41, 42, 43, 44, 45, 46, 47); - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _, _, _, _, _, _, _, _, _, _ = (vec_len(&v), vec_len(&v), vec_len(&v), vec_len(&v), vec_len(&v), vec_len(&v), vec_len(&v), vec_len(&v), vec_len(&v), vec_len(&v)); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_veclen_8_x100() { - label b0: - Self.calibrate_veclen_8_impl(10); - return; - } - - public entry calibrate_veclen_8_x500() { - label b0: - Self.calibrate_veclen_8_impl(50); - return; - } - - public entry calibrate_veclen_8_x1000() { - label b0: - Self.calibrate_veclen_8_impl(100); - return; - } - - public calibrate_veclen_32_impl(n: u64) { - let i: u64; - let v: vector; - label entry: - i = 0; - v = vec_pack_32(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31); - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _, _, _, _, _, _, _, _, _, _ = (vec_len(&v), vec_len(&v), vec_len(&v), vec_len(&v), vec_len(&v), vec_len(&v), vec_len(&v), vec_len(&v), vec_len(&v), vec_len(&v)); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_veclen_32_x100() { - label b0: - Self.calibrate_veclen_32_impl(10); - return; - } - - public entry calibrate_veclen_32_x500() { - label b0: - Self.calibrate_veclen_32_impl(50); - return; - } - - public entry calibrate_veclen_32_x1000() { - label b0: - Self.calibrate_veclen_32_impl(100); - return; - } - -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/vector/vec-mut-borrow.mvir b/aptos-move/aptos-gas-calibration/samples_ir/vector/vec-mut-borrow.mvir deleted file mode 100644 index 662e5d7c235fa..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/vector/vec-mut-borrow.mvir +++ /dev/null @@ -1,135 +0,0 @@ -module 0xcafe.VecMutBorrow { - - public calibrate_vec_mut_borrow_1_impl(n: u64) { - let i: u64; - let v: vector; - label entry: - i = 0; - v = vec_pack_1(42); - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _ = vec_mut_borrow(&mut v, 0); - _ = vec_mut_borrow(&mut v, 0); - _ = vec_mut_borrow(&mut v, 0); - _ = vec_mut_borrow(&mut v, 0); - _ = vec_mut_borrow(&mut v, 0); - _ = vec_mut_borrow(&mut v, 0); - _ = vec_mut_borrow(&mut v, 0); - _ = vec_mut_borrow(&mut v, 0); - _ = vec_mut_borrow(&mut v, 0); - _ = vec_mut_borrow(&mut v, 0); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_vec_mut_borrow_1_x100() { - label b0: - Self.calibrate_vec_mut_borrow_1_impl(10); - return; - } - - public entry calibrate_vec_mut_borrow_1_x500() { - label b0: - Self.calibrate_vec_mut_borrow_1_impl(50); - return; - } - - public entry calibrate_vec_mut_borrow_1_x1000() { - label b0: - Self.calibrate_vec_mut_borrow_1_impl(100); - return; - } - - public calibrate_vec_mut_borrow_10_impl(n: u64) { - let i: u64; - let v: vector; - label entry: - i = 0; - v = vec_pack_10(40, 41, 42, 43, 44, 45, 46, 47, 48, 49); - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _ = vec_mut_borrow(&mut v, 0); - _ = vec_mut_borrow(&mut v, 1); - _ = vec_mut_borrow(&mut v, 2); - _ = vec_mut_borrow(&mut v, 3); - _ = vec_mut_borrow(&mut v, 4); - _ = vec_mut_borrow(&mut v, 5); - _ = vec_mut_borrow(&mut v, 6); - _ = vec_mut_borrow(&mut v, 7); - _ = vec_mut_borrow(&mut v, 8); - _ = vec_mut_borrow(&mut v, 9); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_vec_mut_borrow_10_x100() { - label b0: - Self.calibrate_vec_mut_borrow_10_impl(10); - return; - } - - public entry calibrate_vec_mut_borrow_10_x500() { - label b0: - Self.calibrate_vec_mut_borrow_10_impl(50); - return; - } - - public entry calibrate_vec_mut_borrow_10_x1000() { - label b0: - Self.calibrate_vec_mut_borrow_10_impl(100); - return; - } - - public calibrate_vec_mut_borrow_32_impl(n: u64) { - let i: u64; - let v: vector; - label entry: - i = 0; - v = vec_pack_32(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31); - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _ = vec_mut_borrow(&mut v, 0); - _ = vec_mut_borrow(&mut v, 1); - _ = vec_mut_borrow(&mut v, 2); - _ = vec_mut_borrow(&mut v, 3); - _ = vec_mut_borrow(&mut v, 4); - _ = vec_mut_borrow(&mut v, 5); - _ = vec_mut_borrow(&mut v, 6); - _ = vec_mut_borrow(&mut v, 7); - _ = vec_mut_borrow(&mut v, 8); - _ = vec_mut_borrow(&mut v, 9); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_vec_mut_borrow_32_x100() { - label b0: - Self.calibrate_vec_mut_borrow_32_impl(10); - return; - } - - public entry calibrate_vec_mut_borrow_32_x500() { - label b0: - Self.calibrate_vec_mut_borrow_32_impl(50); - return; - } - - public entry calibrate_vec_mut_borrow_32_x1000() { - label b0: - Self.calibrate_vec_mut_borrow_32_impl(100); - return; - } - -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/vector/vec-pack.mvir b/aptos-move/aptos-gas-calibration/samples_ir/vector/vec-pack.mvir deleted file mode 100644 index be37a2cca7e8e..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/vector/vec-pack.mvir +++ /dev/null @@ -1,168 +0,0 @@ -module 0xcafe.VecPack { - - public calibrate_vecpack_0_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _, _, _, _, _, _, _, _, _, _ = (vec_pack_0(), vec_pack_0(), vec_pack_0(), vec_pack_0(), vec_pack_0(), vec_pack_0(), vec_pack_0(), vec_pack_0(), vec_pack_0(), vec_pack_0()); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_vecpack_0_x100() { - label b0: - Self.calibrate_vecpack_0_impl(10); - return; - } - - public entry calibrate_vecpack_0_x500() { - label b0: - Self.calibrate_vecpack_0_impl(50); - return; - } - - public entry calibrate_vecpack_0_x1000() { - label b0: - Self.calibrate_vecpack_0_impl(100); - return; - } - - public calibrate_vecpack_1_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _, _, _, _, _, _, _, _, _, _ = (vec_pack_1(42), vec_pack_1(42), vec_pack_1(42), vec_pack_1(42), vec_pack_1(42), vec_pack_1(42), vec_pack_1(42), vec_pack_1(42), vec_pack_1(42), vec_pack_1(42)); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_vecpack_1_x100() { - label b0: - Self.calibrate_vecpack_1_impl(10); - return; - } - - public entry calibrate_vecpack_1_x500() { - label b0: - Self.calibrate_vecpack_1_impl(50); - return; - } - - public entry calibrate_vecpack_1_x1000() { - label b0: - Self.calibrate_vecpack_1_impl(100); - return; - } - - public calibrate_vecpack_2_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _, _, _, _, _, _, _, _, _, _ = (vec_pack_2(42, 43), vec_pack_2(42, 43), vec_pack_2(42, 43), vec_pack_2(42, 43), vec_pack_2(42, 43), vec_pack_2(42, 43), vec_pack_2(42, 43), vec_pack_2(42, 43), vec_pack_2(42, 43), vec_pack_2(42, 43)); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_vecpack_2_x100() { - label b0: - Self.calibrate_vecpack_2_impl(10); - return; - } - - public entry calibrate_vecpack_2_x500() { - label b0: - Self.calibrate_vecpack_2_impl(50); - return; - } - - public entry calibrate_vecpack_2_x1000() { - label b0: - Self.calibrate_vecpack_2_impl(100); - return; - } - - public calibrate_vecpack_8_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _, _, _, _, _, _, _, _, _, _ = (vec_pack_8(40, 41, 42, 43, 44, 45, 46, 47), vec_pack_8(40, 41, 42, 43, 44, 45, 46, 47), vec_pack_8(40, 41, 42, 43, 44, 45, 46, 47), vec_pack_8(40, 41, 42, 43, 44, 45, 46, 47), vec_pack_8(40, 41, 42, 43, 44, 45, 46, 47), vec_pack_8(40, 41, 42, 43, 44, 45, 46, 47), vec_pack_8(40, 41, 42, 43, 44, 45, 46, 47), vec_pack_8(40, 41, 42, 43, 44, 45, 46, 47), vec_pack_8(40, 41, 42, 43, 44, 45, 46, 47), vec_pack_8(40, 41, 42, 43, 44, 45, 46, 47)); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_vecpack_8_x100() { - label b0: - Self.calibrate_vecpack_8_impl(10); - return; - } - - public entry calibrate_vecpack_8_x500() { - label b0: - Self.calibrate_vecpack_8_impl(50); - return; - } - - public entry calibrate_vecpack_8_x1000() { - label b0: - Self.calibrate_vecpack_8_impl(100); - return; - } - - public calibrate_vecpack_32_impl(n: u64) { - let i: u64; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - _, _, _, _, _, _, _, _, _, _ = (vec_pack_32(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31), vec_pack_32(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31), vec_pack_32(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31), vec_pack_32(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31), vec_pack_32(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31), vec_pack_32(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31), vec_pack_32(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31), vec_pack_32(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31), vec_pack_32(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31), vec_pack_32(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31)); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_vecpack_32_x100() { - label b0: - Self.calibrate_vecpack_32_impl(10); - return; - } - - public entry calibrate_vecpack_32_x500() { - label b0: - Self.calibrate_vecpack_32_impl(50); - return; - } - - public entry calibrate_vecpack_32_x1000() { - label b0: - Self.calibrate_vecpack_32_impl(100); - return; - } - -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/vector/vec-pop-back.mvir b/aptos-move/aptos-gas-calibration/samples_ir/vector/vec-pop-back.mvir deleted file mode 100644 index 52c52b935723f..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/vector/vec-pop-back.mvir +++ /dev/null @@ -1,146 +0,0 @@ -module 0xcafe.VecPop { - - public calibrate_vec_pop_back_1_impl(n: u64) { - let i: u64; - let v: vector; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - v = vec_pack_1(42); - _ = vec_pop_back(&mut v); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_vec_pop_back_1_x100() { - label b0: - Self.calibrate_vec_pop_back_1_impl(10); - return; - } - - public entry calibrate_vec_pop_back_1_x500() { - label b0: - Self.calibrate_vec_pop_back_1_impl(50); - return; - } - - public entry calibrate_vec_pop_back_1_x1000() { - label b0: - Self.calibrate_vec_pop_back_1_impl(100); - return; - } - - public calibrate_vec_pop_back_2_impl(n: u64) { - let i: u64; - let v: vector; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - v = vec_pack_2(42, 43); - _ = vec_pop_back(&mut v); - _ = vec_pop_back(&mut v); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_vec_pop_back_2_x100() { - label b0: - Self.calibrate_vec_pop_back_2_impl(10); - return; - } - - public entry calibrate_vec_pop_back_2_x500() { - label b0: - Self.calibrate_vec_pop_back_2_impl(50); - return; - } - - public entry calibrate_vec_pop_back_2_x1000() { - label b0: - Self.calibrate_vec_pop_back_2_impl(100); - return; - } - - public calibrate_vec_pop_back_8_impl(n: u64) { - let i: u64; - let v: vector; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - v = vec_pack_8(40, 41, 42, 43, 44, 45, 46, 47); - _, _, _, _, _, _, _, _ = (vec_pop_back(&mut v), vec_pop_back(&mut v), vec_pop_back(&mut v), vec_pop_back(&mut v), vec_pop_back(&mut v), vec_pop_back(&mut v), vec_pop_back(&mut v), vec_pop_back(&mut v)); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_vec_pop_back_8_x100() { - label b0: - Self.calibrate_vec_pop_back_8_impl(10); - return; - } - - public entry calibrate_vec_pop_back_8_x500() { - label b0: - Self.calibrate_vec_pop_back_8_impl(50); - return; - } - - public entry calibrate_vec_pop_back_8_x1000() { - label b0: - Self.calibrate_vec_pop_back_8_impl(100); - return; - } - - public calibrate_vec_pop_back_32_impl(n: u64) { - let i: u64; - let v: vector; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - v = vec_pack_32(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31); - _, _, _, _, _, _, _, _ = (vec_pop_back(&mut v), vec_pop_back(&mut v), vec_pop_back(&mut v), vec_pop_back(&mut v), vec_pop_back(&mut v), vec_pop_back(&mut v), vec_pop_back(&mut v), vec_pop_back(&mut v)); - _, _, _, _, _, _, _, _ = (vec_pop_back(&mut v), vec_pop_back(&mut v), vec_pop_back(&mut v), vec_pop_back(&mut v), vec_pop_back(&mut v), vec_pop_back(&mut v), vec_pop_back(&mut v), vec_pop_back(&mut v)); - _, _, _, _, _, _, _, _ = (vec_pop_back(&mut v), vec_pop_back(&mut v), vec_pop_back(&mut v), vec_pop_back(&mut v), vec_pop_back(&mut v), vec_pop_back(&mut v), vec_pop_back(&mut v), vec_pop_back(&mut v)); - _, _, _, _, _, _, _, _ = (vec_pop_back(&mut v), vec_pop_back(&mut v), vec_pop_back(&mut v), vec_pop_back(&mut v), vec_pop_back(&mut v), vec_pop_back(&mut v), vec_pop_back(&mut v), vec_pop_back(&mut v)); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_vec_pop_back_32_x100() { - label b0: - Self.calibrate_vec_pop_back_32_impl(10); - return; - } - - public entry calibrate_vec_pop_back_32_x500() { - label b0: - Self.calibrate_vec_pop_back_32_impl(50); - return; - } - - public entry calibrate_vec_pop_back_32_x1000() { - label b0: - Self.calibrate_vec_pop_back_32_impl(100); - return; - } -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/vector/vec-push-back.mvir b/aptos-move/aptos-gas-calibration/samples_ir/vector/vec-push-back.mvir deleted file mode 100644 index f7136ae3caed6..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/vector/vec-push-back.mvir +++ /dev/null @@ -1,134 +0,0 @@ -module 0xcafe.VecPushBack { - - public calibrate_vecpushback_0_impl(n: u64) { - let i: u64; - let v: vector; - label entry: - i = 0; - v = vec_pack_0(); - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - vec_push_back(&mut v, 0); - vec_push_back(&mut v, 0); - vec_push_back(&mut v, 0); - vec_push_back(&mut v, 0); - vec_push_back(&mut v, 0); - vec_push_back(&mut v, 0); - vec_push_back(&mut v, 0); - vec_push_back(&mut v, 0); - vec_push_back(&mut v, 0); - vec_push_back(&mut v, 0); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_vecpushback_0_x100() { - label b0: - Self.calibrate_vecpushback_0_impl(10); - return; - } - - public entry calibrate_vecpushback_0_x500() { - label b0: - Self.calibrate_vecpushback_0_impl(50); - return; - } - - public entry calibrate_vecpushback_0_x1000() { - label b0: - Self.calibrate_vecpushback_0_impl(100); - return; - } - - public calibrate_vecpushback_1_impl(n: u64) { - let i: u64; - let v: vector; - label entry: - i = 0; - v = vec_pack_1(42); - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - vec_push_back(&mut v, 0); - vec_push_back(&mut v, 0); - vec_push_back(&mut v, 0); - vec_push_back(&mut v, 0); - vec_push_back(&mut v, 0); - vec_push_back(&mut v, 0); - vec_push_back(&mut v, 0); - vec_push_back(&mut v, 0); - vec_push_back(&mut v, 0); - vec_push_back(&mut v, 0); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_vecpushback_1_x100() { - label b0: - Self.calibrate_vecpushback_1_impl(10); - return; - } - - public entry calibrate_vecpushback_1_x500() { - label b0: - Self.calibrate_vecpushback_1_impl(50); - return; - } - - public entry calibrate_vecpushback_1_x1000() { - label b0: - Self.calibrate_vecpushback_1_impl(100); - return; - } - - public calibrate_vecpushback_2_impl(n: u64) { - let i: u64; - let v: vector; - label entry: - i = 0; - v = vec_pack_2(42, 43); - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - vec_push_back(&mut v, 0); - vec_push_back(&mut v, 0); - vec_push_back(&mut v, 0); - vec_push_back(&mut v, 0); - vec_push_back(&mut v, 0); - vec_push_back(&mut v, 0); - vec_push_back(&mut v, 0); - vec_push_back(&mut v, 0); - vec_push_back(&mut v, 0); - vec_push_back(&mut v, 0); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_vecpushback_2_x100() { - label b0: - Self.calibrate_vecpushback_2_impl(10); - return; - } - - public entry calibrate_vecpushback_2_x500() { - label b0: - Self.calibrate_vecpushback_2_impl(50); - return; - } - - public entry calibrate_vecpushback_2_x1000() { - label b0: - Self.calibrate_vecpushback_2_impl(100); - return; - } -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/vector/vec-swap.mvir b/aptos-move/aptos-gas-calibration/samples_ir/vector/vec-swap.mvir deleted file mode 100644 index 7a8f9fbc151cf..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/vector/vec-swap.mvir +++ /dev/null @@ -1,133 +0,0 @@ -module 0xcafe.VecSwap { - public calibrate_vec_swap_2_impl(n: u64) { - let i: u64; - let v: vector; - label entry: - i = 0; - v = vec_pack_2(42, 43); - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - vec_swap(&mut v, 0, 1); - vec_swap(&mut v, 0, 1); - vec_swap(&mut v, 0, 1); - vec_swap(&mut v, 0, 1); - vec_swap(&mut v, 0, 1); - vec_swap(&mut v, 0, 1); - vec_swap(&mut v, 0, 1); - vec_swap(&mut v, 0, 1); - vec_swap(&mut v, 0, 1); - vec_swap(&mut v, 0, 1); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_vec_swap_2_x100() { - label b0: - Self.calibrate_vec_swap_2_impl(10); - return; - } - - public entry calibrate_vec_swap_2_x500() { - label b0: - Self.calibrate_vec_swap_2_impl(50); - return; - } - - public entry calibrate_vec_swap_2_x1000() { - label b0: - Self.calibrate_vec_swap_2_impl(100); - return; - } - - public calibrate_vec_swap_10_impl(n: u64) { - let i: u64; - let v: vector; - label entry: - i = 0; - v = vec_pack_10(40, 41, 42, 43, 44, 45, 46, 47, 48, 49); - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - vec_swap(&mut v, 0, 1); - vec_swap(&mut v, 0, 1); - vec_swap(&mut v, 0, 1); - vec_swap(&mut v, 3, 4); - vec_swap(&mut v, 3, 4); - vec_swap(&mut v, 3, 4); - vec_swap(&mut v, 8, 9); - vec_swap(&mut v, 8, 9); - vec_swap(&mut v, 8, 9); - vec_swap(&mut v, 8, 9); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_vec_swap_10_x100() { - label b0: - Self.calibrate_vec_swap_10_impl(10); - return; - } - - public entry calibrate_vec_swap_10_x500() { - label b0: - Self.calibrate_vec_swap_10_impl(50); - return; - } - - public entry calibrate_vec_swap_10_x1000() { - label b0: - Self.calibrate_vec_swap_10_impl(100); - return; - } - - public calibrate_vec_swap_32_impl(n: u64) { - let i: u64; - let v: vector; - label entry: - i = 0; - v = vec_pack_32(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31); - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - vec_swap(&mut v, 0, 1); - vec_swap(&mut v, 0, 1); - vec_swap(&mut v, 10, 11); - vec_swap(&mut v, 10, 11); - vec_swap(&mut v, 20, 21); - vec_swap(&mut v, 20, 21); - vec_swap(&mut v, 28, 29); - vec_swap(&mut v, 28, 29); - vec_swap(&mut v, 28, 29); - vec_swap(&mut v, 28, 29); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_vec_swap_32_x100() { - label b0: - Self.calibrate_vec_swap_32_impl(10); - return; - } - - public entry calibrate_vec_swap_32_x500() { - label b0: - Self.calibrate_vec_swap_32_impl(50); - return; - } - - public entry calibrate_vec_swap_32_x1000() { - label b0: - Self.calibrate_vec_swap_32_impl(100); - return; - } -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/samples_ir/vector/vec-unpack.mvir b/aptos-move/aptos-gas-calibration/samples_ir/vector/vec-unpack.mvir deleted file mode 100644 index fe81426dc5d3d..0000000000000 --- a/aptos-move/aptos-gas-calibration/samples_ir/vector/vec-unpack.mvir +++ /dev/null @@ -1,141 +0,0 @@ -module 0xcafe.VecUnpack { - public calibrate_vec_unpack_0_impl(n: u64) { - let i: u64; - let v: vector; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - v = vec_pack_0(); - vec_unpack_0(move(v)); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_vec_unpack_0_x100() { - label b0: - Self.calibrate_vec_unpack_0_impl(10); - return; - } - - public entry calibrate_vec_unpack_0_x500() { - label b0: - Self.calibrate_vec_unpack_0_impl(50); - return; - } - - public entry calibrate_vec_unpack_0_x1000() { - label b0: - Self.calibrate_vec_unpack_0_impl(100); - return; - } - - public calibrate_vec_unpack_2_impl(n: u64) { - let i: u64; - let v: vector; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - v = vec_pack_2(42, 43); - _, _ = vec_unpack_2(move(v)); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_vec_unpack_2_x100() { - label b0: - Self.calibrate_vec_unpack_2_impl(10); - return; - } - - public entry calibrate_vec_unpack_2_x500() { - label b0: - Self.calibrate_vec_unpack_2_impl(50); - return; - } - - public entry calibrate_vec_unpack_2_x1000() { - label b0: - Self.calibrate_vec_unpack_2_impl(100); - return; - } - - public calibrate_vec_unpack_8_impl(n: u64) { - let i: u64; - let v: vector; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - v = vec_pack_8(40, 41, 42, 43, 44, 45, 46, 47); - _, _, _, _, _, _, _, _ = vec_unpack_8(move(v)); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_vec_unpack_8_x100() { - label b0: - Self.calibrate_vec_unpack_8_impl(10); - return; - } - - public entry calibrate_vec_unpack_8_x500() { - label b0: - Self.calibrate_vec_unpack_8_impl(50); - return; - } - - public entry calibrate_vec_unpack_8_x1000() { - label b0: - Self.calibrate_vec_unpack_8_impl(100); - return; - } - - public calibrate_vec_unpack_32_impl(n: u64) { - let i: u64; - let v: vector; - label entry: - i = 0; - label loop_start: - jump_if_false (copy(i) < copy(n)) loop_end; - i = move(i) + 1; - - v = vec_pack_32(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31); - _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = vec_unpack_32(move(v)); - - jump loop_start; - label loop_end: - return; - } - - public entry calibrate_vec_unpack_32_x100() { - label b0: - Self.calibrate_vec_unpack_32_impl(10); - return; - } - - public entry calibrate_vec_unpack_32_x500() { - label b0: - Self.calibrate_vec_unpack_32_impl(50); - return; - } - - public entry calibrate_vec_unpack_32_x1000() { - label b0: - Self.calibrate_vec_unpack_32_impl(100); - return; - } -} \ No newline at end of file diff --git a/aptos-move/aptos-gas-calibration/src/main.rs b/aptos-move/aptos-gas-calibration/src/main.rs deleted file mode 100644 index bef5bb950d553..0000000000000 --- a/aptos-move/aptos-gas-calibration/src/main.rs +++ /dev/null @@ -1,86 +0,0 @@ -// Copyright Š Aptos Foundation -// SPDX-License-Identifier: Apache-2.0 - -mod math; -mod math_interface; -mod measurements; -mod measurements_helpers; -mod solve; -use aptos_abstract_gas_usage::{aggregate_terms, expand_terms}; -use aptos_gas_algebra::DynamicExpression; -use clap::Parser; -use math_interface::{convert_to_matrix_format, total_num_of_cols, total_num_rows}; -use measurements::compile_and_run; -use solve::{build_coefficient_matrix, build_constant_matrix, least_squares}; -use std::collections::BTreeMap; - -/// Automated Gas Calibration to calibrate Move bytecode and Native Functions -#[derive(Parser, Debug)] -struct Args { - /// Specific Calibration Function tests to run that match a given pattern - #[clap(short, long, default_value = "")] - pattern: String, - - /// Number of iterations to run each Calibration Function - #[clap(short, long, default_value_t = 20)] - iterations: u64, - - /// Maximum execution time in milliseconds - #[clap(short, long, default_value_t = 300)] - max_execution_time: u64, -} - -fn main() { - // Implement CLI - let args = Args::parse(); - let pattern = &args.pattern; - let iterations = args.iterations; - let max_execution_time = args.max_execution_time; - - println!( - "Running each Calibration Function for {} iterations\n", - iterations - ); - - println!("Calibrating Gas Parameters ...\n"); - - let measurements = compile_and_run(iterations, pattern); - - let mut system_of_equations: Vec> = Vec::new(); - for formula in measurements.abstract_meter { - let mut terms: Vec = Vec::new(); - for term in formula { - let normal = expand_terms(term); - terms.extend(normal); - } - system_of_equations.push(terms); - } - - // Collect like terms - let mut mappings: Vec> = Vec::new(); - for equation in system_of_equations { - let map = aggregate_terms(equation) - .expect("Failed: Should not have concrete quantities in gas formulae."); - mappings.push(map); - } - - // Convert simplified map to a math friendly interface - let vec_format: Vec> = convert_to_matrix_format(mappings.clone()); - - // Build the system of linear equations using the math library - let nrows = total_num_rows(mappings.clone()); - let ncols = total_num_of_cols(mappings.clone()); - let vec_col: usize = 1; - - let mut coeff_matrix = build_coefficient_matrix(vec_format, nrows, ncols); - let mut const_matrix = build_constant_matrix(measurements.regular_meter, nrows, vec_col); - - // Solve the system of linear equations - least_squares( - mappings, - &mut coeff_matrix, - &mut const_matrix, - measurements.equation_names, - max_execution_time, - ); -} diff --git a/aptos-move/aptos-gas-calibration/src/math.rs b/aptos-move/aptos-gas-calibration/src/math.rs deleted file mode 100644 index bc336d6b71a24..0000000000000 --- a/aptos-move/aptos-gas-calibration/src/math.rs +++ /dev/null @@ -1,271 +0,0 @@ -// Copyright Š Aptos Foundation -// SPDX-License-Identifier: Apache-2.0 - -use anyhow::Result; -use float_cmp::approx_eq; -use nalgebra::{self, DMatrix}; -use std::ops::{Div, Mul}; - -const MARGIN_OF_ERROR: f64 = 0.2; - -/// Add a gas formula to the coefficient matrix -/// -/// ### Arguments -/// -/// * `idx` - Keeps track of which row to edit -/// * `ncols` - Max number of columns -/// * `formula` - The gas formula to add -/// * `coefficient_matrix` - The Matrix we want to edit -pub fn add_gas_formula_to_coefficient_matrix( - idx: usize, - ncols: usize, - formula: &[f64], - coefficient_matrix: &mut DMatrix, -) { - for j in 0..ncols { - coefficient_matrix[(idx, j)] = formula[j]; - } -} - -/// Add the running time corresponding to the gas formula to -/// constant matrix. -/// -/// ### Arguments -/// -/// * `idx` - Keeps track of which row to edit -/// * `running_time` - The running time w.r.t the gas formula -/// * `constant_matrix` - The Matrix we want to edit -pub fn add_running_time_to_constant_matrix( - idx: usize, - running_time: f64, - constant_matrix: &mut DMatrix, -) { - constant_matrix[(idx, 0)] = running_time; -} - -/// Join coefficient and constant matrix to make augmented -/// -/// ### Arguments -/// -/// * `augmented_matrix` - Matrix to join coefficient and constant -/// * `coefficient_matrix` - Matrix for gas formula -/// * `constant_matrix` - Matrix for running time w.r.t gas formula -fn create_augmented_matrix( - augmented_matrix: &mut DMatrix, - coefficient_matrix: &mut DMatrix, - constant_matrix: &mut DMatrix, -) { - let nrows = augmented_matrix.nrows(); - let ncols = coefficient_matrix.ncols(); - for i in 0..nrows { - for j in 0..ncols { - augmented_matrix[(i, j)] = coefficient_matrix[(i, j)]; - } - } - - for i in 0..nrows { - augmented_matrix[(i, ncols)] = constant_matrix[(i, 0)]; - } -} - -/// Compute least squares -/// -/// ### Arguments -/// -/// * `A` - Coefficient matrix -/// * `b` - Constant matrix -#[allow(non_snake_case)] -pub fn compute_least_square_solutions( - A: &mut DMatrix, - b: &mut DMatrix, -) -> Result, String> { - let A_T = A.transpose(); - let A_TA = A_T.clone().mul(A.clone()); - let A_Tb = A_T.clone().mul(b.clone()); - - if !A_TA.is_invertible() { - return Err("cannot invert A_TA matrix".to_string()); - } - - let inverse = A_TA.try_inverse().expect("inverse should work"); - let x_hat = inverse.mul(&A_Tb); - Ok(x_hat) -} - -/// Find all free variables / linear dependent combinations -/// -/// ### Arguments -/// -/// * `A` - Coefficient matrix -/// * `b` - Constant matrix -#[allow(non_snake_case)] -pub fn find_linearly_dependent_variables( - A: &mut DMatrix, - b: &mut DMatrix, - gas_params: Vec, -) -> Result, Vec> { - let mut aug_matrix = DMatrix::::zeros(A.nrows(), A.ncols() + 1); - create_augmented_matrix(&mut aug_matrix, A, b); - rref(&mut aug_matrix); - - let linearly_independent = find_linear_independent_variables(&mut aug_matrix); - let mut linearly_dependent = Vec::new(); - for (idx, gas_param) in gas_params.into_iter().enumerate() { - if !linearly_independent.contains(&idx) { - linearly_dependent.push(gas_param) - } - } - Ok(linearly_dependent) -} - -/// We use the Least Squares solution to input into the LHS to get what we -/// call as the Computed Time. We compare this against the LHS (the Actual Time) and -/// check if it it varies by a certain amount. -/// -/// ### Arguments -/// -/// * `x_hat` - Solutions to the Least Squares -/// * `coefficient_matrix` - Matrix of linear equations -/// * `constant_matrix` - Matrix of Actual Time -pub fn get_computed_time_and_outliers( - x_hat: &mut DMatrix, - coefficient_matrix: &mut DMatrix, - constant_matrix: &mut DMatrix, -) -> Result, String> { - // get computed running time - let mut computed_running_time: Vec = Vec::new(); - let coeff_row = coefficient_matrix.nrows(); - let coeff_col = coefficient_matrix.ncols(); - for i in 0..coeff_row { - let mut total_time: f64 = 0.0; - for j in 0..coeff_col { - let a_ij = coefficient_matrix[(i, j)]; - total_time += a_ij * x_hat[(j, 0)]; - } - computed_running_time.push(total_time); - } - - // compare w/ margin of error - let mut outliers: Vec<(usize, f64, f64, f64, bool)> = Vec::new(); - let const_row = constant_matrix.nrows(); - for i in 0..const_row { - let a_ij = constant_matrix[(i, 0)]; - - let numerator = (a_ij - computed_running_time[i]).abs(); - let denominator = computed_running_time[i]; - if approx_eq!(f64, denominator, 0.0, ulps = 2) { - return Err(String::from("Division by zero")); - } else { - let diff = numerator.div(denominator); - if diff > MARGIN_OF_ERROR { - // append equation that is an outlier - outliers.push((i, computed_running_time[i], a_ij, diff, true)); - } else { - // not outlier, but still display to the user - // the running time of that Calibration Function - outliers.push((i, computed_running_time[i], a_ij, diff, false)); - } - } - } - - Ok(outliers) -} - -/// Reduced row echelon form (RREF) with partial pivoting -/// -/// ### Arguments -/// -/// * `matrix` - A matrix to perform RREF -fn rref(matrix: &mut DMatrix) { - let (nrows, ncols) = matrix.shape(); - let mut lead = 0; - - for r in 0..nrows { - if ncols <= lead { - break; - } - - let mut i = r; - - while matrix[(i, lead)] == 0.0 { - i += 1; - - if nrows == i { - i = r; - lead += 1; - - if ncols == lead { - return; - } - } - } - - if i != r { - matrix.swap_rows(i, r); - } - - let pivot = matrix[(r, lead)]; - - for j in 0..ncols { - matrix[(r, j)] /= pivot; - } - - for i in 0..nrows { - if i != r { - let factor = matrix[(i, lead)]; - for j in 0..ncols { - matrix[(i, j)] -= factor * matrix[(r, j)]; - } - } - } - - lead += 1; - } -} - -/// If the matrix is not invertible, and there exists a row that has more than one -/// approximate value of 1, then we should report all linear combinations that exist -/// to the user by scanning each row and only reporting those rows. -/// -/// Source: https://stackoverflow.com/questions/43619121/how-to-find-partial-solutions-in-a-underdetermined-system-of-linear-equations -/// -/// ### Arguments -/// -/// * `matrix` - Augmented matrix that has been RREF'd -fn find_linear_independent_variables(matrix: &mut DMatrix) -> Vec { - let mut linear_combos = Vec::new(); - - for i in 0..matrix.nrows() { - let mut max_val: f64 = 0.0; - for k in 0..(matrix.ncols() - 1) { - let a_ik = matrix[(i, k)]; - if a_ik > max_val { - max_val = a_ik; - } - } - - if approx_eq!(f64, max_val, 0.0, ulps = 2) { - // ignore this row - continue; - } - - let mut independent_vars = Vec::new(); - for j in 0..(matrix.ncols() - 1) { - let a_ij = matrix[(i, j)]; - let ratio = a_ij / max_val; - // if each element / max_val is approximately not 0 - if !approx_eq!(f64, ratio, 0.0, ulps = 2) { - independent_vars.push((i, j)); - } - } - - if independent_vars.len() == 1 { - // mark all linear combinations as undetermined - for (_, gas_param) in independent_vars { - linear_combos.push(gas_param); - } - } - } - - linear_combos -} diff --git a/aptos-move/aptos-gas-calibration/src/math_interface.rs b/aptos-move/aptos-gas-calibration/src/math_interface.rs deleted file mode 100644 index a33e2989585fe..0000000000000 --- a/aptos-move/aptos-gas-calibration/src/math_interface.rs +++ /dev/null @@ -1,86 +0,0 @@ -// Copyright Š Aptos Foundation -// SPDX-License-Identifier: Apache-2.0 - -use std::collections::BTreeMap; - -const DEFAULT_VALUE: f64 = 0.0; - -/// Getter function for number of rows -/// -/// ### Arguments -/// -/// * `input` - All the equations -pub fn total_num_rows(input: Vec>) -> usize { - input.len() -} - -/// Taking the union finds the total distinct gas parameters -/// -/// ### Arguments -/// -/// * `input` - All the equations in the simplified mapping version -pub fn total_num_of_cols(input: Vec>) -> usize { - let mut union_btreemap: BTreeMap = BTreeMap::new(); - for map in input { - union_btreemap.extend(map); - } - union_btreemap.len() -} - -/// Creates a generic template for BTreeMaps so we can easily -/// translate the entries into indices of our vector representation -/// -/// ### Arguments -/// -/// * `input` - All the equations in the simplified mapping version -pub fn generic_map(input: Vec>) -> BTreeMap { - let mut union_btreemap: BTreeMap = BTreeMap::new(); - for map in input { - union_btreemap.extend(map); - } - - // sort BTree lexicographically - let sorted_map: BTreeMap = union_btreemap.into_iter().collect(); - - let keys: Vec = sorted_map.keys().map(|key| key.to_string()).collect(); - let generic: BTreeMap = keys.into_iter().map(|key| (key, DEFAULT_VALUE)).collect(); - generic -} - -/// Standardize all maps into a generic map -/// -/// ### Arguments -/// -/// * `input` - All the equations in the simplified mapping version -pub fn convert_to_generic_map(input: Vec>) -> Vec> { - let mut generic_maps: Vec> = Vec::new(); - for map in &input { - let mut generic = generic_map(input.clone()); - for (key, value) in map.iter() { - generic - .entry(key.to_string()) - .and_modify(|v| *v = *value as f64); - } - generic_maps.push(generic); - } - generic_maps -} - -/// Transform into standardized mapping before converting to a vector -/// -/// ### Arguments -/// -/// * `input` - All the equations in the simplified mapping version -pub fn convert_to_matrix_format(input: Vec>) -> Vec> { - let ncols = total_num_of_cols(input.clone()); - let mut result: Vec> = Vec::new(); - let generic_maps = convert_to_generic_map(input); - //println!("KEYS {:?}\n", generic_maps); - for eq in generic_maps { - let vec_format: Vec = eq.values().cloned().collect(); - assert_eq!(vec_format.len(), ncols); - result.push(vec_format); - } - - result -} diff --git a/aptos-move/aptos-gas-calibration/src/measurements.rs b/aptos-move/aptos-gas-calibration/src/measurements.rs deleted file mode 100644 index fa0257ce29a0c..0000000000000 --- a/aptos-move/aptos-gas-calibration/src/measurements.rs +++ /dev/null @@ -1,189 +0,0 @@ -// Copyright Š Aptos Foundation -// SPDX-License-Identifier: Apache-2.0 -use crate::measurements_helpers::{get_dir_paths, list_entrypoints, record_gas_usage}; -use aptos_framework::{BuildOptions, BuiltPackage}; -use aptos_gas_algebra::DynamicExpression; -use aptos_language_e2e_tests::executor::{ExecFuncTimerDynamicArgs, FakeExecutor, GasMeterType}; -use move_binary_format::CompiledModule; -use move_ir_compiler::Compiler; -use std::{ - fs::{read_dir, read_to_string}, - path::PathBuf, -}; -use walkdir::WalkDir; - -pub struct GasMeasurements { - pub regular_meter: Vec, - pub abstract_meter: Vec>, - pub equation_names: Vec, -} - -/// Compile and run both samples and samples_ir directories -pub fn compile_and_run(iterations: u64, pattern: &String) -> GasMeasurements { - let executor = FakeExecutor::from_head_genesis(); - let mut executor = executor.set_not_parallel(); - - let mut gas_measurement = GasMeasurements { - regular_meter: Vec::new(), - abstract_meter: Vec::new(), - equation_names: Vec::new(), - }; - - compile_and_run_samples(iterations, pattern, &mut gas_measurement, &mut executor); - compile_and_run_samples_ir(iterations, pattern, &mut gas_measurement, &mut executor); - - gas_measurement -} - -/// Compile every Move sample and run each sample with two different measuring methods. -/// The first is with the Regular Gas Meter (used in production) to record the running time. -/// The second is with the Abstract Algebra Gas Meter to record abstract gas usage. -fn compile_and_run_samples( - iterations: u64, - pattern: &String, - gas_measurement: &mut GasMeasurements, - executor: &mut FakeExecutor, -) { - // Discover all top-level packages in samples directory - let path = PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("samples"); - let dirs = read_dir(path.as_path()).unwrap(); - let dir_paths = get_dir_paths(dirs); - - // Go over all Move projects - for dir_path in dir_paths { - // configure and build Move package - let build_options = BuildOptions { - with_srcs: true, - with_abis: true, - with_source_maps: true, - with_error_map: true, - ..BuildOptions::default() - }; - let package = - BuiltPackage::build(dir_path, build_options).expect("Failed to build package"); - - // iterate over all Move package code - let codes = package.extract_code(); - for code in codes { - let compiled_module = CompiledModule::deserialize(&code).unwrap(); - let module_id = compiled_module.self_id(); - let identifier = &module_id.name().to_string(); - - // get module address - let address = module_id.address(); - - // get all benchmark tagged functions - let func_identifiers = list_entrypoints(&compiled_module, pattern.to_string()).expect( - "Failed: entry function probably has >1 parameter that's not a Signer type", - ); - - let measurement_results = record_gas_usage( - &package, - executor, - func_identifiers, - *address, - identifier, - iterations, - ); - - // record the equation names - gas_measurement - .equation_names - .extend(measurement_results.equation_names); - - // record with regular gas meter - gas_measurement - .regular_meter - .extend(measurement_results.regular_meter); - - // record with abstract gas meter - gas_measurement - .abstract_meter - .extend(measurement_results.abstract_meter); - } - } -} - -/// Compile every MVIR and run each sample with two different measuring methods. -/// The first is with the Regular Gas Meter (used in production) to record the running time. -/// The second is with the Abstract Algebra Gas Meter to record abstract gas usage. -fn compile_and_run_samples_ir( - iterations: u64, - pattern: &String, - gas_measurement: &mut GasMeasurements, - executor: &mut FakeExecutor, -) { - let path = PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("samples_ir"); - - // Walk through all subdirectories and files in the root directory - for entry in WalkDir::new(path).into_iter().filter_map(|e| e.ok()) { - let path_entry = entry.path(); - - // Check if the entry is a file - if path_entry.is_file() { - // ignore all non .mvir files - if let Some(file_ext) = path_entry.extension() { - if let Some(ext) = file_ext.to_str() { - if ext != "mvir" { - continue; - } - } - } - - if let Some(file_name) = path_entry.file_name() { - // Convert the file_name to a string slice - if let Some(_file_name_str) = file_name.to_str() { - // compile module - let code = read_to_string(path_entry).expect("Failed to read file contents"); - let module = Compiler::new(vec![]) - .into_compiled_module(&code) - .expect("should compile mvir"); - - // get relevant module metadata - let module_id = module.self_id(); - let identifier = &module_id.name().to_string(); - let func_identifiers = list_entrypoints(&module, pattern.to_string()).expect( - "Failed: entry function probably has >1 parameter that's not a Signer type", - ); - - // build .mv of module - let mut module_blob: Vec = vec![]; - module - .serialize(&mut module_blob) - .expect("Failed to serialize module"); - - // publish module - executor.add_module(&module_id, module_blob); - - for func_identifier in func_identifiers { - println!("Benchmarking {}::{}\n", &identifier, func_identifier.0); - - gas_measurement - .equation_names - .push(format!("{}::{}", &identifier, func_identifier.0)); - - let elapsed = executor.exec_func_record_running_time( - &module_id, - &func_identifier.0, - vec![], - func_identifier.1.clone(), - iterations, - ExecFuncTimerDynamicArgs::NoArgs, - GasMeterType::UnmeteredGasMeter, - ); - gas_measurement.regular_meter.push(elapsed); - - // record with abstract gas meter - let gas_formula = executor.exec_abstract_usage( - &module_id, - &func_identifier.0, - vec![], - func_identifier.1, - ); - gas_measurement.abstract_meter.push(gas_formula); - } - } - } - } - } -} diff --git a/aptos-move/aptos-gas-calibration/src/measurements_helpers.rs b/aptos-move/aptos-gas-calibration/src/measurements_helpers.rs deleted file mode 100644 index 3f242b4457d4e..0000000000000 --- a/aptos-move/aptos-gas-calibration/src/measurements_helpers.rs +++ /dev/null @@ -1,291 +0,0 @@ -// Copyright Š Aptos Foundation -// SPDX-License-Identifier: Apache-2.0 - -use crate::measurements::GasMeasurements; -use anyhow::{anyhow, Result}; -use aptos_cached_packages::aptos_stdlib; -use aptos_framework::BuiltPackage; -use aptos_language_e2e_tests::{ - account::Account, - executor::{ExecFuncTimerDynamicArgs, FakeExecutor, GasMeterType}, -}; -use aptos_types::transaction::TransactionPayload; -use move_binary_format::{file_format::SignatureToken, CompiledModule}; -use move_core_types::{ - account_address::AccountAddress, - identifier::Identifier, - language_storage::ModuleId, - value::{serialize_values, MoveValue}, -}; -use std::{fs::ReadDir, path::PathBuf, string::String, time::Instant}; - -// CONSTANTS -const PREFIX: &str = "calibrate_"; - -/// Generate a TransactionPayload for modules -/// -/// ### Arguments -/// -/// * `package` - Built Move package -pub fn generate_module_payload(package: &BuiltPackage) -> TransactionPayload { - // extract package data - let code = package.extract_code(); - let metadata = package - .extract_metadata() - .expect("extracting package metadata must succeed"); - - // publish package similar to create_publish_package in harness.rs - aptos_stdlib::code_publish_package_txn( - bcs::to_bytes(&metadata).expect("PackageMetadata has BCS"), - code, - ) -} - -/// Sign transaction to create a Module and return transaction status -/// -/// ### Arguments -/// -/// * `executor` - Runs transactions -/// * `account` - Account to publish module under -/// * `payload` - Info relating to the module -/// * `sequence_number` - Nonce -pub fn execute_module_txn( - executor: &mut FakeExecutor, - account: &Account, - payload: TransactionPayload, - sequence_number: u64, -) { - // build and sign transaction - let sign_tx = account - .transaction() - .sequence_number(sequence_number) - .max_gas_amount(2_000_000) - .gas_unit_price(200) - .payload(payload) - .sign(); - - // Restart timer and sequence counter for each new package - // only count running time of entry function - let start = Instant::now(); - let txn_output = executor.execute_transaction(sign_tx); - - // apply write set to avoid LINKER_ERROR - executor.apply_write_set(txn_output.write_set()); - let elapsed = start.elapsed(); - println!("running time (microseconds): {}", elapsed.as_micros()); - - // validate successful transaction - let txn_status = txn_output.status().to_owned(); - assert!(txn_output.status().status().unwrap().is_success()); - println!("txn status: {:?}", txn_status); -} - -/// execute user transaction and the time only records the body of the transaction -/// -/// ### Arguments -/// -/// * `executor` - Runs transactions -/// * `module_name` - Name of module -/// * `function_name` - Name of function in the module -pub fn execute_user_txn( - executor: &mut FakeExecutor, - module_name: &ModuleId, - function_name: &str, - iterations: u64, - args: Vec>, -) -> u128 { - let elapsed = executor.exec_func_record_running_time( - module_name, - function_name, - vec![], - args, - iterations, - ExecFuncTimerDynamicArgs::NoArgs, - GasMeterType::UnmeteredGasMeter, - ); - println!("running time (microseconds): {}", elapsed); - elapsed -} - -/// Publish module under user, sign and run user transaction. -/// This runs for both Gas Meters (regular and abstract). -/// -/// ### Arguments -/// -/// * `package` - Built Move package -/// * `executor` - Runs transactions -/// * `func_identifiers` - All function names -/// * `address` - Address associated to an account -/// * `identifier` - Name of module -pub fn record_gas_usage( - package: &BuiltPackage, - executor: &mut FakeExecutor, - func_identifiers: Vec<(String, Vec>)>, - address: AccountAddress, - identifier: &String, - iterations: u64, -) -> GasMeasurements { - // publish test-package under module address - let creator = executor.new_account_at(address); - - let mut gas_measurement = GasMeasurements { - regular_meter: Vec::new(), - abstract_meter: Vec::new(), - equation_names: Vec::new(), - }; - - // iterate over all the functions that satisfied the requirements above - for (sequence_num_counter, func_identifier) in func_identifiers.into_iter().enumerate() { - println!( - "Executing {}::{}::{}", - address, - identifier, - func_identifier.0.clone(), - ); - gas_measurement - .equation_names - .push(format!("{}::{}", &identifier, &func_identifier.0)); - - // publish package similar to create_publish_package in harness.rs - println!("Signing txn for module... "); - let module_payload = generate_module_payload(package); - let counter = sequence_num_counter.try_into().unwrap(); - execute_module_txn(executor, &creator, module_payload, counter); - - // send a txn that invokes the entry function 0x{address}::{name}::benchmark - println!("Signing and running user txn for Regular Meter... "); - let module_name = get_module_name(address, identifier, &func_identifier.0); - let duration = execute_user_txn( - executor, - &module_name, - &func_identifier.0, - iterations, - func_identifier.1.clone(), - ); - gas_measurement.regular_meter.push(duration); - - println!("Signing and running user txn for Abstract Meter... "); - let gas_formula = executor.exec_abstract_usage( - &module_name, - &func_identifier.0, - vec![], - func_identifier.1, - ); - gas_measurement.abstract_meter.push(gas_formula); - } - - gas_measurement -} - -/* - * - * GETTER FUNCTIONS - * - */ -/// get module name -/// -/// ### Arguments -/// -/// * `address` - Address associated to an account -/// * `identifier` - Name of module -/// * `func_identifier` - Name of function in module -pub fn get_module_name( - address: AccountAddress, - identifier: &str, - _func_identifier: &str, -) -> ModuleId { - ModuleId::new(address, Identifier::new(identifier).unwrap()) -} - -/// get all directories of Move projects -/// -/// ### Arguments -/// -/// * `dirs` - directory -pub fn get_dir_paths(dirs: ReadDir) -> Vec { - let mut dir_paths = Vec::new(); - for dir in dirs { - // validate path is directory - let entry = dir.unwrap(); - if !entry.path().is_dir() { - continue; - } - dir_paths.push(entry.path()); - } - dir_paths -} - -/// get functional identifiers -/// -/// ### Arguments -/// -/// * `cm` - Compiled module -/// * `identifier` - Name of module -/// * `address` - Account address for the module -/// * `pattern` - Certain functions to run based on pattern -pub fn list_entrypoints( - cm: &CompiledModule, - pattern: String, -) -> Result>)>> { - // find non-entry functions and ignore them - // keep entry function names in func_identifiers vector - let funcs = &cm.function_defs; - let func_handles = &cm.function_handles; - let func_identifier_pool = &cm.identifiers; - - let module_id = cm.self_id(); - let identifier = module_id.name().to_string(); - let address = module_id.address(); - - // find # of params in each func if it is entry function - let signature_pool = &cm.signatures; - - let mut func_identifiers: Vec<(String, Vec>)> = Vec::new(); - for func in funcs { - // check if function is marked as entry, if not skip it - let is_entry = func.is_entry; - if !is_entry { - continue; - } - - // extract some info from the function - let func_idx: usize = func.function.0.into(); - let handle = &func_handles[func_idx]; - let func_identifier_idx: usize = handle.name.0.into(); - let func_identifier = &func_identifier_pool[func_identifier_idx]; - - // check if it doesn't start with "benchmark", if not skip it - let func_name = func_identifier.to_string(); - if !func_name.starts_with(PREFIX) { - continue; - } - - // check if it doesn't match pattern, if not skip it - let fully_qualified_path = format!("{}::{}::{}", address, identifier, func_name); - if !fully_qualified_path.contains(&pattern) && !pattern.is_empty() { - continue; - } - - // if it does, ensure no params in benchmark function - let signature_idx: usize = handle.parameters.0.into(); - let func_params = &signature_pool[signature_idx]; - if !func_params.is_empty() { - let first_arg_signature_token = &func_params.0.to_vec()[0]; - match first_arg_signature_token { - SignatureToken::Signer => { - let args = serialize_values(&vec![MoveValue::Signer(*address)]); - func_identifiers.push((func_name, args)); - }, - _ => { - return Err(anyhow!( - "Failed: only supports 1 parameter that is a signer type at the moment." - )); - }, - } - } else { - func_identifiers.push((func_name, vec![])); - } - } - - Ok(func_identifiers) -} diff --git a/aptos-move/aptos-gas-calibration/src/solve.rs b/aptos-move/aptos-gas-calibration/src/solve.rs deleted file mode 100644 index 0cdc85ff63ab3..0000000000000 --- a/aptos-move/aptos-gas-calibration/src/solve.rs +++ /dev/null @@ -1,199 +0,0 @@ -// Copyright Š Aptos Foundation -// SPDX-License-Identifier: Apache-2.0 - -use crate::{ - math::{ - add_gas_formula_to_coefficient_matrix, add_running_time_to_constant_matrix, - compute_least_square_solutions, find_linearly_dependent_variables, - get_computed_time_and_outliers, - }, - math_interface::generic_map, -}; -use aptos_gas_schedule::{InitialGasSchedule, TransactionGasParameters}; -use nalgebra::DMatrix; -use std::collections::BTreeMap; - -const MILLISECONDS_TO_MICROSECONDS: u64 = 1000; - -/// wrapper function to build a coefficient matrix -/// -/// ### Arguments -/// -/// * `input` - Collection of like-terms -/// * `nrows` - Number of rows -/// * `ncols` - Number of cols -pub fn build_coefficient_matrix(input: Vec>, nrows: usize, ncols: usize) -> DMatrix { - let mut coeff_matrix = DMatrix::::zeros(nrows, ncols); - for (idx, eq) in input.iter().enumerate() { - add_gas_formula_to_coefficient_matrix(idx, ncols, eq, &mut coeff_matrix); - } - coeff_matrix -} - -/// wrapper function to build a constant matrix -/// -/// ### Arguments -/// -/// * `input` - Collection of like-terms -/// * `nrows` - Number of rows -/// * `ncols` - Number of cols -pub fn build_constant_matrix(input: Vec, nrows: usize, ncols: usize) -> DMatrix { - let mut const_matrix = DMatrix::::zeros(nrows, ncols); - for (idx, run_time) in input.iter().enumerate() { - add_running_time_to_constant_matrix(idx, *run_time as f64, &mut const_matrix); - } - const_matrix -} - -/// compute the least squares solution -/// -/// ### Arguments -/// -/// * `input` - Collection of like-terms -/// * `coeff_matrix` - Coefficient Matrix -/// * `const_matrix` - Constant Matrix -/// * `max_execution_time` - Configurable flag for max execution time of txn -pub fn least_squares( - input: Vec>, - coeff_matrix: &mut DMatrix, - const_matrix: &mut DMatrix, - equation_names: Vec, - max_execution_time: u64, -) { - let lss = compute_least_square_solutions(coeff_matrix, const_matrix); - if let Ok(answer) = lss { - let mut x_hat = answer; - - let map = generic_map(input.clone()); - let keys: Vec = map.keys().map(|key| key.to_string()).collect(); - - // TODO: error handling with division zero that bubbles up - let computed_time_and_outliers = - get_computed_time_and_outliers(&mut x_hat, coeff_matrix, const_matrix) - .expect("Failed: should unwrap, possibly division by zero"); - - report_computed_times(&equation_names, &computed_time_and_outliers); - - report_outliers(&equation_names, &computed_time_and_outliers); - - convert_to_internal_gas_cost(&mut x_hat, max_execution_time, keys); - } else { - report_undetermined_gas_params(input, coeff_matrix, const_matrix); - } -} - -/// display the computed running times to the user after computing least squares -/// -/// ### Arguments -/// -/// * `input` - Collection of like-terms -/// * `x_hat` - Least squares solution -/// * `coeff_matrix` - Coefficient Matrix -/// * `const_matrix` - Constant Matrix -fn report_computed_times( - equation_names: &[String], - actual_times: &Vec<(usize, f64, f64, f64, bool)>, -) { - println!("\nComputed running times are:\n"); - for (idx, cr, ar, err, is_outlier) in actual_times { - if *is_outlier { - continue; - }; - println!( - "- {} | Computed {}Âĩs vs. Actual {}Âĩs | Error {}\n", - equation_names[*idx], - cr, - format_args!("{:.3}", ar), - format_args!("{:.3}", err) - ); - } -} - -/// determine the outliers after computing least squares -/// -/// ### Arguments -/// -/// * `input` - Collection of like-terms -/// * `x_hat` - Least squares solution -/// * `coeff_matrix` - Coefficient Matrix -/// * `const_matrix` - Constant Matrix -fn report_outliers(equation_names: &[String], outliers: &Vec<(usize, f64, f64, f64, bool)>) { - println!("\nOutliers are:\n"); - for (idx, cr, ar, err, is_outlier) in outliers { - if !is_outlier { - continue; - }; - println!( - "- {} | Computed {}Âĩs vs. Actual {}Âĩs | Error {}\n", - equation_names[*idx], - cr, - format_args!("{:.3}", ar), - format_args!("{:.3}", err) - ); - } -} - -/// find the gas params that could not be determined if the system -/// was not solvable. -/// -/// ### Arguments -/// -/// * `input` - Collection of like-terms -/// * `coeff_matrix` - Coefficient Matrix -/// * `const_matrix` - Constant Matrix -fn report_undetermined_gas_params( - input: Vec>, - coeff_matrix: &mut DMatrix, - const_matrix: &mut DMatrix, -) { - let map = generic_map(input); - let keys: Vec = map.keys().map(|key| key.to_string()).collect(); - - let result = find_linearly_dependent_variables(coeff_matrix, const_matrix, keys.clone()); - match result { - Ok(linear_combos) => { - println!("linearly dependent variables are:\n"); - for gas_param in linear_combos { - println!("- gas parameter: {}\n", gas_param); - } - }, - Err(pivot_columns) => { - println!("free variables are:\n"); - for col in pivot_columns { - let gas_param = &keys[col]; - println!("- gas parameter: {}\n", gas_param); - } - }, - } -} - -/// convert gas usage per instruction to gas cost (InternalGas) -/// -/// ### Arguments -/// -/// * `x_hat` - Least Squares Solution -/// * `max_execution_time` - Configurable flag for max execution time of txn -/// * `gas_params` - A vector representing all gas parameter names in the system -fn convert_to_internal_gas_cost( - x_hat: &mut DMatrix, - max_execution_time: u64, - gas_params: Vec, -) { - let max_execution_gas = u64::from(TransactionGasParameters::initial().max_execution_gas); - let one_microsec_per_internal_gas = - (max_execution_gas / max_execution_time) / MILLISECONDS_TO_MICROSECONDS; - - println!( - "\ninternal gas cost ({} InternalGas per 1Âĩ):\n", - one_microsec_per_internal_gas - ); - - let nrows = x_hat.nrows(); - let ncols = x_hat.ncols(); - for i in 0..nrows { - for j in 0..ncols { - let internal_gas_cost = x_hat[(i, j)] * one_microsec_per_internal_gas as f64; - println!("{} = {}", gas_params[i], internal_gas_cost); - } - } -} diff --git a/aptos-move/aptos-release-builder/Cargo.toml b/aptos-move/aptos-release-builder/Cargo.toml index a42cff88383d2..87a64633157c2 100644 --- a/aptos-move/aptos-release-builder/Cargo.toml +++ b/aptos-move/aptos-release-builder/Cargo.toml @@ -14,7 +14,7 @@ rust-version = { workspace = true } [dependencies] anyhow = { workspace = true } -aptos = { workspace = true, features = [ "no-upload-proposal" ] } +movement = { workspace = true, features = [ "no-upload-proposal" ] } aptos-api-types = { workspace = true } aptos-build-info = { workspace = true } aptos-crypto = { workspace = true } diff --git a/aptos-move/aptos-release-builder/src/components/feature_flags.rs b/aptos-move/aptos-release-builder/src/components/feature_flags.rs index f19e53681363f..805e8d4f598e6 100644 --- a/aptos-move/aptos-release-builder/src/components/feature_flags.rs +++ b/aptos-move/aptos-release-builder/src/components/feature_flags.rs @@ -121,6 +121,16 @@ pub enum FeatureFlag { DefaultToConcurrentFungibleBalance, LimitVMTypeSize, AbortIfMultisigPayloadMismatch, + AllowSerializedScriptArgs, + UseCompatibilityCheckerV2, + EnableEnumTypes, + FederatedKeyless, + TransactionSimulationEnhancement, + CollectionOwner, + NativeMemoryOperations, + AccountAbstraction, + GovernedGasPool, + DecommissionCoreResources, } fn generate_features_blob(writer: &CodeWriter, data: &[u64]) { @@ -184,11 +194,25 @@ pub fn generate_feature_upgrade_proposal( generate_features_blob(writer, &disabled); emitln!(writer, ";\n"); + let update_method = if is_testnet { + "change_feature_flags" + } else { + "change_feature_flags_for_next_epoch" + }; + emitln!( writer, - "features::change_feature_flags_for_next_epoch({}, enabled_blob, disabled_blob);", + "features::{}({}, enabled_blob, disabled_blob);", + update_method, signer_arg ); + + let reconfig_method = if is_testnet { + "force_end_epoch" + } else { + "reconfigure" + }; + emitln!(writer, "aptos_governance::reconfigure({});", signer_arg); }, ); @@ -316,6 +340,22 @@ impl From for AptosFeatureFlag { FeatureFlag::AbortIfMultisigPayloadMismatch => { AptosFeatureFlag::ABORT_IF_MULTISIG_PAYLOAD_MISMATCH }, + FeatureFlag::AllowSerializedScriptArgs => { + AptosFeatureFlag::ALLOW_SERIALIZED_SCRIPT_ARGS + }, + FeatureFlag::UseCompatibilityCheckerV2 => { + AptosFeatureFlag::_USE_COMPATIBILITY_CHECKER_V2 + }, + FeatureFlag::EnableEnumTypes => AptosFeatureFlag::ENABLE_ENUM_TYPES, + FeatureFlag::FederatedKeyless => AptosFeatureFlag::FEDERATED_KEYLESS, + FeatureFlag::TransactionSimulationEnhancement => { + AptosFeatureFlag::TRANSACTION_SIMULATION_ENHANCEMENT + }, + FeatureFlag::CollectionOwner => AptosFeatureFlag::COLLECTION_OWNER, + FeatureFlag::NativeMemoryOperations => AptosFeatureFlag::NATIVE_MEMORY_OPERATIONS, + FeatureFlag::AccountAbstraction => AptosFeatureFlag::ACCOUNT_ABSTRACTION, + FeatureFlag::GovernedGasPool => AptosFeatureFlag::GOVERNED_GAS_POOL, + FeatureFlag::DecommissionCoreResources => AptosFeatureFlag::DECOMMISSION_CORE_RESOURCES, } } } @@ -440,6 +480,22 @@ impl From for FeatureFlag { AptosFeatureFlag::ABORT_IF_MULTISIG_PAYLOAD_MISMATCH => { FeatureFlag::AbortIfMultisigPayloadMismatch }, + AptosFeatureFlag::ALLOW_SERIALIZED_SCRIPT_ARGS => { + FeatureFlag::AllowSerializedScriptArgs + }, + AptosFeatureFlag::_USE_COMPATIBILITY_CHECKER_V2 => { + FeatureFlag::UseCompatibilityCheckerV2 + }, + AptosFeatureFlag::ENABLE_ENUM_TYPES => FeatureFlag::EnableEnumTypes, + AptosFeatureFlag::FEDERATED_KEYLESS => FeatureFlag::FederatedKeyless, + AptosFeatureFlag::TRANSACTION_SIMULATION_ENHANCEMENT => { + FeatureFlag::TransactionSimulationEnhancement + }, + AptosFeatureFlag::COLLECTION_OWNER => FeatureFlag::CollectionOwner, + AptosFeatureFlag::NATIVE_MEMORY_OPERATIONS => FeatureFlag::NativeMemoryOperations, + AptosFeatureFlag::ACCOUNT_ABSTRACTION => FeatureFlag::AccountAbstraction, + AptosFeatureFlag::GOVERNED_GAS_POOL => FeatureFlag::GovernedGasPool, + AptosFeatureFlag::DECOMMISSION_CORE_RESOURCES => FeatureFlag::DecommissionCoreResources, } } } diff --git a/aptos-move/aptos-release-builder/src/components/framework.rs b/aptos-move/aptos-release-builder/src/components/framework.rs index d95c585d8e4fc..b19c7aa937014 100644 --- a/aptos-move/aptos-release-builder/src/components/framework.rs +++ b/aptos-move/aptos-release-builder/src/components/framework.rs @@ -8,6 +8,7 @@ use aptos_temppath::TempPath; use aptos_types::account_address::AccountAddress; use git2::Repository; use serde::{Deserialize, Serialize}; +use std::path::PathBuf; #[derive(Serialize, Deserialize, Clone, Eq, PartialEq, Debug)] pub struct FrameworkReleaseConfig { @@ -24,7 +25,67 @@ pub fn generate_upgrade_proposals( next_execution_hash: Vec, ) -> Result> { const APTOS_GIT_PATH: &str = "https://github.com/aptos-labs/aptos-core.git"; + generate_upgrade_proposals_with_repo(config, is_testnet, next_execution_hash, APTOS_GIT_PATH) +} + +pub fn generate_upgrade_proposals_with_repo( + config: &FrameworkReleaseConfig, + is_testnet: bool, + next_execution_hash: Vec, + repo_str: &str, +) -> Result> { + let mut result = vec![]; + + let (commit_info, release_packages) = generate_upgrade_proposals_release_packages_with_repo( + config, + is_testnet, + next_execution_hash.clone(), + repo_str, + )?; + + for (account, release, move_script_path, script_name) in release_packages.into_iter() { + // If we're generating a single-step proposal on testnet + if is_testnet && next_execution_hash.is_empty() { + release.generate_script_proposal_testnet(account, move_script_path.clone())?; + // If we're generating a single-step proposal on mainnet + } else if next_execution_hash.is_empty() { + release.generate_script_proposal(account, move_script_path.clone())?; + // If we're generating a multi-step proposal + } else { + let next_execution_hash_bytes = if result.is_empty() { + next_execution_hash.clone() + } else { + get_execution_hash(&result) + }; + release.generate_script_proposal_multi_step( + account, + move_script_path.clone(), + next_execution_hash_bytes, + )?; + }; + let mut script = format!( + "// Framework commit hash: {}\n// Builder commit hash: {}\n", + commit_info, + aptos_build_info::get_git_hash() + ); + + script.push_str(&std::fs::read_to_string(move_script_path.as_path())?); + + result.push((script_name, script)); + } + Ok(result) +} + +pub fn generate_upgrade_proposals_release_packages_with_repo( + config: &FrameworkReleaseConfig, + is_testnet: bool, + next_execution_hash: Vec, + repo_str: &str, +) -> Result<( + String, + Vec<(AccountAddress, ReleasePackage, PathBuf, String)>, +)> { let mut package_path_list = [ ("0x1", "aptos-move/framework/move-stdlib"), ("0x1", "aptos-move/framework/aptos-stdlib"), @@ -33,14 +94,14 @@ pub fn generate_upgrade_proposals( ("0x4", "aptos-move/framework/aptos-token-objects"), ]; - let mut result: Vec<(String, String)> = vec![]; + let mut result = vec![]; let temp_root_path = TempPath::new(); temp_root_path.create_as_dir()?; let commit_info = if let Some(revision) = &config.git_hash { // If a commit hash is set, clone the repo from github and checkout to desired hash to a local temp directory. - let repository = Repository::clone(APTOS_GIT_PATH, temp_root_path.path())?; + let repository = Repository::clone(repo_str, temp_root_path.path())?; let (commit, _) = repository.revparse_ext(revision.as_str())?; let commit_info = commit .describe(&git2::DescribeOptions::default())? @@ -100,37 +161,13 @@ pub fn generate_upgrade_proposals( ..BuildOptions::default() }; let package = BuiltPackage::build(package_path, options)?; - let release = ReleasePackage::new(package)?; - - // If we're generating a single-step proposal on testnet - if is_testnet && next_execution_hash.is_empty() { - release.generate_script_proposal_testnet(account, move_script_path.clone())?; - // If we're generating a single-step proposal on mainnet - } else if next_execution_hash.is_empty() { - release.generate_script_proposal(account, move_script_path.clone())?; - // If we're generating a multi-step proposal - } else { - let next_execution_hash_bytes = if result.is_empty() { - next_execution_hash.clone() - } else { - get_execution_hash(&result) - }; - release.generate_script_proposal_multi_step( - account, - move_script_path.clone(), - next_execution_hash_bytes, - )?; - }; - - let mut script = format!( - "// Framework commit hash: {}\n// Builder commit hash: {}\n", - commit_info, - aptos_build_info::get_git_hash() - ); - - script.push_str(&std::fs::read_to_string(move_script_path.as_path())?); - - result.push((script_name, script)); + result.push(( + account, + ReleasePackage::new(package)?, + move_script_path, + script_name, + )); } - Ok(result) + + Ok((commit_info, result)) } diff --git a/aptos-move/aptos-release-builder/src/components/gas.rs b/aptos-move/aptos-release-builder/src/components/gas.rs index 7e247e8a402a1..446b001bc890e 100644 --- a/aptos-move/aptos-release-builder/src/components/gas.rs +++ b/aptos-move/aptos-release-builder/src/components/gas.rs @@ -135,14 +135,32 @@ pub fn generate_gas_upgrade_proposal( ); }, None => { + let update_method = if is_testnet { + "set_for_next_epoch" + } else { + "set_for_next_epoch" + }; emitln!( writer, - "gas_schedule::set_for_next_epoch({}, gas_schedule_blob);", + "gas_schedule::{}({}, gas_schedule_blob);", + update_method, signer_arg ); }, } - emitln!(writer, "aptos_governance::reconfigure({});", signer_arg); + + let reconfig_method = if is_testnet { + "force_end_epoch" + } else { + "reconfigure" + }; + + emitln!( + writer, + "aptos_governance::{}({});", + reconfig_method, + signer_arg + ); }, ); diff --git a/aptos-move/aptos-release-builder/src/components/mod.rs b/aptos-move/aptos-release-builder/src/components/mod.rs index f814f10bda8f9..b83bea79fe822 100644 --- a/aptos-move/aptos-release-builder/src/components/mod.rs +++ b/aptos-move/aptos-release-builder/src/components/mod.rs @@ -10,7 +10,7 @@ use crate::{ }, }; use anyhow::{anyhow, bail, Context, Result}; -use aptos::governance::GenerateExecutionHash; +use movement::governance::GenerateExecutionHash; use aptos_gas_schedule::LATEST_GAS_FEATURE_VERSION; use aptos_infallible::duration_since_epoch; use aptos_rest_client::Client; diff --git a/aptos-move/aptos-release-builder/src/lib.rs b/aptos-move/aptos-release-builder/src/lib.rs index b53dd7006f106..ca61386c057d8 100644 --- a/aptos-move/aptos-release-builder/src/lib.rs +++ b/aptos-move/aptos-release-builder/src/lib.rs @@ -43,13 +43,13 @@ pub fn initialize_aptos_core_path(overriden_path: Option) { }; } -pub(crate) fn aptos_core_path() -> PathBuf { +pub fn aptos_core_path() -> PathBuf { APTOS_CORE_PATH .get_or_init(aptos_core_path_at_compile_time) .clone() } -pub(crate) fn aptos_framework_path() -> PathBuf { +pub fn aptos_framework_path() -> PathBuf { let mut path = aptos_core_path(); path.push("aptos-move/framework/aptos-framework"); path diff --git a/aptos-move/aptos-release-builder/src/validate.rs b/aptos-move/aptos-release-builder/src/validate.rs index b994ef499bbc9..9fd627188f9b8 100644 --- a/aptos-move/aptos-release-builder/src/validate.rs +++ b/aptos-move/aptos-release-builder/src/validate.rs @@ -3,7 +3,7 @@ use crate::{aptos_framework_path, components::ProposalMetadata, ExecutionMode, ReleaseConfig}; use anyhow::Result; -use aptos::{ +use movement::{ common::types::CliCommand, governance::{ExecuteProposal, SubmitProposal, SubmitVote}, move_tool::{RunFunction, RunScript}, diff --git a/aptos-move/aptos-vm-benchmarks/README.md b/aptos-move/aptos-vm-benchmarks/README.md deleted file mode 100644 index 09522941a2092..0000000000000 --- a/aptos-move/aptos-vm-benchmarks/README.md +++ /dev/null @@ -1,59 +0,0 @@ ---- -id: Aptos-vm-benchmarks -title: Aptos VM Benchmarks ---- - -## Aptos VM Benchmarks - -The Aptos VM Benchmark allows anyone to specify a set of Move modules and benchmark -the running time of transactions in the AptosVM measured in milliseconds. The Aptos -VM Benchmark allows an arbitrary amount of packages to be benchmarked. - -## Usage - -Move packages should be placed under the `/samples` directory. In order to benchmark -a transaction, the function must be marked with `entry` and have a prefix of `benchmark`. -For example, the following functions would work: - -```Move - -//// acceptable formats -public entry fun benchmark() {} - -public entry fun benchmark_another_txn() {} - -public entry fun benchmark123() {} - -//// inacceptable formats -public fun benchmark() {} - -public fun test_my_txn() {} - -public entry fun benchmark_addition(_x: u64, _y: u64) {} - -``` - -To run the benchmarks, simply run `cargo run`. There is also support for filtering specific -tests to run. If no pattern is provided, it will run all the benchmarks. - -```Bash -cargo run --release PATTERN -``` - -## Adding a benchmark - -``` -cd aptos-vm-benchmarks/samples -mkdir proj-name -cd proj-name -cargo run -p aptos -- move init --name proj-name -``` - -## Examples - -Two basics examples are included under the `/samples` directory to demonstrate how the -crate works: `/samples/add-numbers` and `/samples/do-nothing`. The `do-nothing` package -demonstrates basic usage, as well as situations where the benchmark script will complain. - -Additionally, `add-numbers` shows a simple implementation of a Move module and how one -might benchmark it. \ No newline at end of file diff --git a/aptos-move/aptos-vm-benchmarks/samples/add-numbers/Move.toml b/aptos-move/aptos-vm-benchmarks/samples/add-numbers/Move.toml deleted file mode 100644 index 2cf87321920de..0000000000000 --- a/aptos-move/aptos-vm-benchmarks/samples/add-numbers/Move.toml +++ /dev/null @@ -1,6 +0,0 @@ -[package] -name = 'add-numbers' -version = '1.0.0' -[dependencies.AptosFramework] -local = '../../../..' -subdir = 'aptos-move/framework/aptos-framework' diff --git a/aptos-move/aptos-vm-benchmarks/samples/add-numbers/sources/AddNumbers.move b/aptos-move/aptos-vm-benchmarks/samples/add-numbers/sources/AddNumbers.move deleted file mode 100644 index c8c18b4526693..0000000000000 --- a/aptos-move/aptos-vm-benchmarks/samples/add-numbers/sources/AddNumbers.move +++ /dev/null @@ -1,11 +0,0 @@ -module 0xcafe::test1 { - // implementation - public fun add_numbers(x: u64, y: u64): u64 { - x + y - } - - // now we want to benchmark our implementation - public entry fun benchmark_add_numbers() { - add_numbers(5,5); - } -} diff --git a/aptos-move/aptos-vm-benchmarks/samples/do-nothing/Move.toml b/aptos-move/aptos-vm-benchmarks/samples/do-nothing/Move.toml deleted file mode 100644 index aedf01f521f95..0000000000000 --- a/aptos-move/aptos-vm-benchmarks/samples/do-nothing/Move.toml +++ /dev/null @@ -1,6 +0,0 @@ -[package] -name = 'do-nothing' -version = '1.0.0' -[dependencies] -AptosFramework = { local = "../../../framework/aptos-framework" } -AptosStdlib = { local = "../../../framework/aptos-stdlib" } \ No newline at end of file diff --git a/aptos-move/aptos-vm-benchmarks/samples/do-nothing/sources/DoNothing.move b/aptos-move/aptos-vm-benchmarks/samples/do-nothing/sources/DoNothing.move deleted file mode 100644 index 04d8fdf45d4ea..0000000000000 --- a/aptos-move/aptos-vm-benchmarks/samples/do-nothing/sources/DoNothing.move +++ /dev/null @@ -1,27 +0,0 @@ -// test.move -module 0xbeef::test_entry_cases { - // this will run - public entry fun benchmark() { - } - - // this is not marked as entry so it will not run - public fun benchmark1() { - } -} - -// test multiple modules in a package -module 0xbeef::test_with_params { - // this will run - public entry fun benchmark_test1() { - } - - // this will give a warning, no params allowed - public entry fun benchmark_test2(_x: u64) { - } -} - -module 0xbeef::test_diff_names { - // this will run, but convention is snake case - public entry fun benchmark1() { - } -} diff --git a/aptos-move/aptos-vm-benchmarks/src/helper.rs b/aptos-move/aptos-vm-benchmarks/src/helper.rs deleted file mode 100644 index aea964f3e20e2..0000000000000 --- a/aptos-move/aptos-vm-benchmarks/src/helper.rs +++ /dev/null @@ -1,210 +0,0 @@ -// Copyright Š Aptos Foundation -// SPDX-License-Identifier: Apache-2.0 - -use aptos_cached_packages::aptos_stdlib; -use aptos_framework::BuiltPackage; -use aptos_language_e2e_tests::{ - account::Account, - executor::{ExecFuncTimerDynamicArgs, FakeExecutor, GasMeterType}, -}; -use aptos_types::{move_utils::MemberId, transaction::TransactionPayload}; -use move_binary_format::CompiledModule; -use move_core_types::{account_address::AccountAddress, language_storage::ModuleId}; -use std::{fs::ReadDir, path::PathBuf, string::String, time::Instant}; - -// CONSTANTS -const PREFIX: &str = "benchmark"; - -// generate a TransactionPayload for modules -pub fn generate_module_payload(package: &BuiltPackage) -> TransactionPayload { - // extract package data - let code = package.extract_code(); - let metadata = package - .extract_metadata() - .expect("extracting package metadata must succeed"); - - // publish package similar to create_publish_package in harness.rs - aptos_stdlib::code_publish_package_txn( - bcs::to_bytes(&metadata).expect("PackageMetadata has BCS"), - code, - ) -} - -// sign transaction to create a Module and return transaction status -pub fn execute_module_txn( - executor: &mut FakeExecutor, - account: &Account, - payload: TransactionPayload, - sequence_number: u64, -) { - // build and sign transaction - let sign_tx = account - .transaction() - .sequence_number(sequence_number) - .max_gas_amount(2_000_000) - .gas_unit_price(200) - .payload(payload) - .sign(); - - // Restart timer and sequence counter for each new package - // only count running time of entry function - let start = Instant::now(); - let txn_output = executor.execute_transaction(sign_tx); - - // apply write set to avoid LINKER_ERROR - executor.apply_write_set(txn_output.write_set()); - let elapsed = start.elapsed(); - println!("running time (microseconds): {}", elapsed.as_micros()); - - // validate successful transaction - let txn_status = txn_output.status().to_owned(); - assert!(txn_output.status().status().unwrap().is_success()); - println!("txn status: {:?}", txn_status); -} - -// sign user transaction and only records the body of the transaction -pub fn execute_user_txn(executor: &mut FakeExecutor, module_name: &ModuleId, function_name: &str) { - let elapsed = executor.exec_func_record_running_time( - module_name, - function_name, - vec![], - vec![], - 10, - ExecFuncTimerDynamicArgs::NoArgs, - GasMeterType::UnmeteredGasMeter, - ); - println!("running time (microseconds): {}", elapsed); -} - -// publish module under user and sign user transaction -pub fn publish( - package: &BuiltPackage, - executor: &mut FakeExecutor, - func_identifiers: Vec, - address: AccountAddress, - identifier: &String, -) { - //// publish test-package under module address - let creator = executor.new_account_at(address); - - //// iterate over all the functions that satisfied the requirements above - for (sequence_num_counter, func_identifier) in func_identifiers.into_iter().enumerate() { - println!( - "Executing {}::{}::{}", - address, - identifier, - func_identifier.clone(), - ); - - // publish package similar to create_publish_package in harness.rs - print!("Signing txn for module... "); - let module_payload = generate_module_payload(package); - let counter = sequence_num_counter.try_into().unwrap(); - execute_module_txn(executor, &creator, module_payload, counter); - - //// send a txn that invokes the entry function 0x{address}::{name}::benchmark - print!("Signing user txn... "); - let module_name = get_module_name(address, identifier, &func_identifier); - execute_user_txn(executor, &module_name, &func_identifier); - } -} - -/* - * - * GETTER FUNCTIONS - * - */ -// get module name -pub fn get_module_name( - address: AccountAddress, - identifier: &String, - func_identifier: &String, -) -> ModuleId { - let MemberId { - module_id, - member_id: _function_id, - } = str::parse(&format!( - "0x{}::{}::{}", - address.to_hex(), - identifier, - func_identifier, - )) - .unwrap(); - - module_id -} - -// get all directories of Move projects -pub fn get_dir_paths(dirs: ReadDir) -> Vec { - let mut dir_paths = Vec::new(); - for dir in dirs { - // validate path is directory - let entry = dir.unwrap(); - if !entry.path().is_dir() { - continue; - } - dir_paths.push(entry.path()); - } - dir_paths -} - -// get functional identifiers -pub fn get_functional_identifiers( - cm: CompiledModule, - identifier: &String, - address: AccountAddress, - pattern: String, -) -> Vec { - // find non-entry functions and ignore them - // keep entry function names in func_identifiers vector - let funcs = cm.function_defs; - let func_handles = cm.function_handles; - let func_identifier_pool = cm.identifiers; - - // find # of params in each func if it is entry function - let signature_pool = cm.signatures; - - let mut func_identifiers: Vec = Vec::new(); - for func in funcs { - // check if function is marked as entry, if not skip it - let is_entry = func.is_entry; - if !is_entry { - continue; - } - - // extract some info from the function - let func_idx: usize = func.function.0.into(); - let handle = &func_handles[func_idx]; - let func_identifier_idx: usize = handle.name.0.into(); - let func_identifier = &func_identifier_pool[func_identifier_idx]; - - // check if it doesn't start with "benchmark", if not skip it - let func_name = func_identifier.to_string(); - if !func_name.starts_with(PREFIX) { - continue; - } - - // check if it doesn't match pattern, if not skip it - let fully_qualified_path = format!("{}::{}::{}", address, identifier, func_name); - if !fully_qualified_path.contains(&pattern) && !pattern.is_empty() { - continue; - } - - // if it does, ensure no params in benchmark function - let signature_idx: usize = handle.parameters.0.into(); - let func_params = &signature_pool[signature_idx]; - if !func_params.is_empty() { - eprintln!( - "\n[WARNING] benchmark function should not have parameters: {}\n", - func_name, - ); - // TODO: should we exit instead of continuing with the benchmark - continue; - } - - // save function to later run benchmark for it - func_identifiers.push(func_name); - } - - func_identifiers -} diff --git a/aptos-move/aptos-vm-benchmarks/src/main.rs b/aptos-move/aptos-vm-benchmarks/src/main.rs deleted file mode 100644 index 0360127e36da7..0000000000000 --- a/aptos-move/aptos-vm-benchmarks/src/main.rs +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright Š Aptos Foundation -// SPDX-License-Identifier: Apache-2.0 - -mod helper; -use aptos_framework::{BuildOptions, BuiltPackage}; -use aptos_language_e2e_tests::executor::FakeExecutor; -use clap::Parser; -use move_binary_format::CompiledModule; -use std::{fs::read_dir, path::PathBuf}; - -// CLI options -#[derive(Parser, Debug)] -struct Cli { - #[clap(default_value = "")] - pattern: String, -} - -fn main() { - //// Implement CLI - let args = Cli::parse(); - let pattern = &args.pattern; - - //// Discover all top-level packages in samples directory - let path = PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("samples"); - let dirs = read_dir(path.as_path()).unwrap(); - - //// Setting up local execution environment once - // disable parallel execution - let executor = FakeExecutor::from_head_genesis(); - let mut executor = executor.set_not_parallel(); - - //// get all paths for Move projects - let dir_paths = helper::get_dir_paths(dirs); - - //// Go over all Move projects - for dir_path in dir_paths { - // configure and build Move package - let build_options = BuildOptions { - with_srcs: true, - with_abis: true, - with_source_maps: true, - with_error_map: true, - ..BuildOptions::default() - }; - let package = - BuiltPackage::build(dir_path, build_options).expect("build package must succeed"); - - // iterate over all Move package code - let codes = package.extract_code(); - for code in codes { - let compiled_module = CompiledModule::deserialize(&code).unwrap(); - let module_id = compiled_module.self_id(); - let identifier = &module_id.name().to_string(); - - //// get module address - let address = module_id.address(); - - //// get all benchmark tagged functions - let func_identifiers = helper::get_functional_identifiers( - compiled_module, - identifier, - *address, - pattern.clone(), - ); - - //// publish module and sign user transaction - //// the benchmark happens when in signing user txn - helper::publish( - &package, - &mut executor, - func_identifiers, - *address, - identifier, - ) - } - } -} diff --git a/aptos-move/aptos-vm/src/aptos_vm.rs b/aptos-move/aptos-vm/src/aptos_vm.rs index f36e90c624e3c..08416b113350f 100644 --- a/aptos-move/aptos-vm/src/aptos_vm.rs +++ b/aptos-move/aptos-vm/src/aptos_vm.rs @@ -750,10 +750,11 @@ impl AptosVM { let module_id = traversal_context .referenced_module_ids .alloc(entry_fn.module().clone()); - session.check_dependencies_and_charge_gas(gas_meter, traversal_context, [( - module_id.address(), - module_id.name(), - )])?; + session.check_dependencies_and_charge_gas( + gas_meter, + traversal_context, + [(module_id.address(), module_id.name())], + )?; } let function = @@ -1318,7 +1319,14 @@ impl AptosVM { )?; } else { return Err(PartialVMError::new(StatusCode::CONSTRAINT_NOT_SATISFIED) - .finish(Location::Undefined)); + .with_message(format!( + "initializer not found in module '{}'", + module.self_id().name() + )) + .finish(Location::Constraint(format!( + "module must have an initializer function name '{}'", + init_func_name + )))); } } } @@ -1541,7 +1549,9 @@ impl AptosVM { fn metadata_validation_error(msg: &str) -> VMError { PartialVMError::new(StatusCode::CONSTRAINT_NOT_SATISFIED) .with_message(format!("metadata and code bundle mismatch: {}", msg)) - .finish(Location::Undefined) + .finish(Location::Constraint( + "metadata must match the code bundle".to_string(), + )) } fn validate_signed_transaction( @@ -2335,6 +2345,11 @@ impl AptosVM { // The known Move function failure and type resolution failure could be a result of speculative execution. Use speculative logger. StatusCode::UNEXPECTED_ERROR_FROM_KNOWN_MOVE_FUNCTION | StatusCode::TYPE_RESOLUTION_FAILURE => { + println!( + "[aptos_vm] Transaction breaking known Move function failure. txn: {:?}, status: {:?}", + bcs::to_bytes::(txn), + vm_status, + ); speculative_error!( log_context, format!( diff --git a/aptos-move/aptos-vm/src/block_executor/mod.rs b/aptos-move/aptos-vm/src/block_executor/mod.rs index e15e52871c4a5..9d359267a55fa 100644 --- a/aptos-move/aptos-vm/src/block_executor/mod.rs +++ b/aptos-move/aptos-vm/src/block_executor/mod.rs @@ -67,14 +67,14 @@ pub struct AptosTransactionOutput { } impl AptosTransactionOutput { - pub(crate) fn new(output: VMOutput) -> Self { + pub fn new(output: VMOutput) -> Self { Self { vm_output: Mutex::new(Some(output)), committed_output: OnceCell::new(), } } - pub(crate) fn committed_output(&self) -> &TransactionOutput { + pub fn committed_output(&self) -> &TransactionOutput { self.committed_output.get().unwrap() } diff --git a/aptos-move/aptos-vm/src/errors.rs b/aptos-move/aptos-vm/src/errors.rs index 629c576875b37..44ef2c83e6be2 100644 --- a/aptos-move/aptos-vm/src/errors.rs +++ b/aptos-move/aptos-vm/src/errors.rs @@ -97,6 +97,7 @@ pub fn convert_prologue_error( let err_msg = format!("[aptos_vm] Unexpected prologue Move abort: {:?}::{:?} (Category: {:?} Reason: {:?})", location, code, category, reason); speculative_error!(log_context, err_msg.clone()); + println!("Error: {:?}", err_msg); return Err(VMStatus::error( StatusCode::UNEXPECTED_ERROR_FROM_KNOWN_MOVE_FUNCTION, Some(err_msg), @@ -138,6 +139,7 @@ pub fn convert_prologue_error( let err_msg = format!("[aptos_vm] Unexpected prologue Move abort: {:?}::{:?} (Category: {:?} Reason: {:?})", location, code, category, reason); speculative_error!(log_context, err_msg.clone()); + println!("Error: {:?}", err_msg); return Err(VMStatus::Error { status_code: StatusCode::UNEXPECTED_ERROR_FROM_KNOWN_MOVE_FUNCTION, sub_status: None, @@ -152,10 +154,11 @@ pub fn convert_prologue_error( log_context, format!("[aptos_vm] Unexpected prologue error: {:?}", status), ); + println!("Error: {:?}", status); VMStatus::Error { status_code: StatusCode::UNEXPECTED_ERROR_FROM_KNOWN_MOVE_FUNCTION, sub_status: status.sub_status(), - message: None, + message: Some(format!("{:?}", status)), } }, }) @@ -178,6 +181,7 @@ pub fn convert_epilogue_error( let err_msg = format!("[aptos_vm] Unexpected success epilogue Move abort: {:?}::{:?} (Category: {:?} Reason: {:?})", location, code, category, reason); speculative_error!(log_context, err_msg.clone()); + print!("Error: {:?}", err_msg); VMStatus::error( StatusCode::UNEXPECTED_ERROR_FROM_KNOWN_MOVE_FUNCTION, Some(err_msg), @@ -190,6 +194,7 @@ pub fn convert_epilogue_error( let err_msg = format!("[aptos_vm] Unexpected success epilogue Move abort: {:?}::{:?} (Category: {:?} Reason: {:?})", location, code, category, reason); speculative_error!(log_context, err_msg.clone()); + println!("Error: {:?}", err_msg); VMStatus::error( StatusCode::UNEXPECTED_ERROR_FROM_KNOWN_MOVE_FUNCTION, Some(err_msg), @@ -199,6 +204,7 @@ pub fn convert_epilogue_error( status => { let err_msg = format!("[aptos_vm] Unexpected success epilogue error: {:?}", status); speculative_error!(log_context, err_msg.clone()); + println!("Error: {:?}", err_msg); VMStatus::Error { status_code: StatusCode::UNEXPECTED_ERROR_FROM_KNOWN_MOVE_FUNCTION, sub_status: status.sub_status(), @@ -234,6 +240,7 @@ pub fn expect_only_successful_execution( function_name, status ); speculative_warn!(log_context, err_msg.clone()); + println!("Error: {:?}", err_msg); VMStatus::Error { status_code: StatusCode::UNEXPECTED_ERROR_FROM_KNOWN_MOVE_FUNCTION, sub_status: status.sub_status(), diff --git a/aptos-move/aptos-vm/src/verifier/resource_groups.rs b/aptos-move/aptos-vm/src/verifier/resource_groups.rs index caa90bbfaa391..2c331a4f9f35b 100644 --- a/aptos-move/aptos-vm/src/verifier/resource_groups.rs +++ b/aptos-move/aptos-vm/src/verifier/resource_groups.rs @@ -22,7 +22,9 @@ fn metadata_validation_err(msg: &str) -> Result<(), VMError> { fn metadata_validation_error(msg: &str) -> VMError { PartialVMError::new(StatusCode::CONSTRAINT_NOT_SATISFIED) .with_message(format!("metadata and code bundle mismatch: {}", msg)) - .finish(Location::Undefined) + .finish(Location::Constraint( + "metadata must match code bundle".to_string(), + )) } /// Perform validation and upgrade checks on resource groups diff --git a/aptos-move/e2e-move-tests/Cargo.toml b/aptos-move/e2e-move-tests/Cargo.toml index 6158f0f52a9f2..32c7e7aae887a 100644 --- a/aptos-move/e2e-move-tests/Cargo.toml +++ b/aptos-move/e2e-move-tests/Cargo.toml @@ -22,10 +22,11 @@ aptos-gas-profiling = { workspace = true } aptos-gas-schedule = { workspace = true, features = ["testing"] } aptos-language-e2e-tests = { workspace = true } aptos-package-builder = { workspace = true } -aptos-types = { workspace = true } +aptos-types = { workspace = true, features = ["testing"] } aptos-vm = { workspace = true, features = ["testing"] } bcs = { workspace = true } claims = { workspace = true } +ethabi = { workspace = true } hex = { workspace = true } move-binary-format = { workspace = true } move-command-line-common = { workspace = true } @@ -46,6 +47,7 @@ test-case = { workspace = true } aptos-vm-types = { workspace = true } claims = { workspace = true } test-case = { workspace = true } +tiny-keccak = { workspace = true } [lib] doctest = false diff --git a/aptos-move/e2e-move-tests/src/tests/bridge.data/atomic_bridge_feature/Move.toml b/aptos-move/e2e-move-tests/src/tests/bridge.data/atomic_bridge_feature/Move.toml new file mode 100644 index 0000000000000..2d3f5079a8181 --- /dev/null +++ b/aptos-move/e2e-move-tests/src/tests/bridge.data/atomic_bridge_feature/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "AtomicBridgeFeature" +version = "0.0.0" + +[dependencies] +AptosFramework = { local = "../../../../../framework/aptos-framework" } diff --git a/aptos-move/e2e-move-tests/src/tests/bridge.data/atomic_bridge_feature/sources/main.move b/aptos-move/e2e-move-tests/src/tests/bridge.data/atomic_bridge_feature/sources/main.move new file mode 100644 index 0000000000000..8810742c2ba0c --- /dev/null +++ b/aptos-move/e2e-move-tests/src/tests/bridge.data/atomic_bridge_feature/sources/main.move @@ -0,0 +1,15 @@ +script { + use aptos_framework::aptos_governance; + use aptos_framework::features; + + fun main(core_resources: &signer) { + let framework_signer = aptos_governance::get_signer_testnet_only(core_resources, @aptos_framework); + features::change_feature_flags_for_next_epoch( + &framework_signer, + vector[features::get_atomic_bridge_feature()], + vector[] + ); + + features::on_new_epoch(&framework_signer); + } +} diff --git a/aptos-move/e2e-move-tests/src/tests/bridge.data/mint_burn_caps/Move.toml b/aptos-move/e2e-move-tests/src/tests/bridge.data/mint_burn_caps/Move.toml new file mode 100644 index 0000000000000..6b22ac39568a7 --- /dev/null +++ b/aptos-move/e2e-move-tests/src/tests/bridge.data/mint_burn_caps/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "MintBurnCaps" +version = "0.0.0" + +[dependencies] +AptosFramework = { local = "../../../../../framework/aptos-framework" } diff --git a/aptos-move/e2e-move-tests/src/tests/bridge.data/mint_burn_caps/sources/main.move b/aptos-move/e2e-move-tests/src/tests/bridge.data/mint_burn_caps/sources/main.move new file mode 100644 index 0000000000000..bd797983bb570 --- /dev/null +++ b/aptos-move/e2e-move-tests/src/tests/bridge.data/mint_burn_caps/sources/main.move @@ -0,0 +1,13 @@ +script { + use aptos_framework::aptos_governance; + use aptos_framework::transaction_fee; + use aptos_framework::atomic_bridge; + + fun main(core_resources: &signer) { + let framework_signer = aptos_governance::get_signer_testnet_only(core_resources, @aptos_framework); + let (mint, burn) = transaction_fee::copy_capabilities_for_bridge(&framework_signer); + + atomic_bridge::store_aptos_coin_mint_cap(&framework_signer, mint); + atomic_bridge::store_aptos_coin_burn_cap(&framework_signer, burn); + } +} diff --git a/aptos-move/e2e-move-tests/src/tests/bridge.data/mint_burn_caps_native/Move.toml b/aptos-move/e2e-move-tests/src/tests/bridge.data/mint_burn_caps_native/Move.toml new file mode 100644 index 0000000000000..efae81e93464b --- /dev/null +++ b/aptos-move/e2e-move-tests/src/tests/bridge.data/mint_burn_caps_native/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "MintBurnCapsNative" +version = "0.0.0" + +[dependencies] +AptosFramework = { local = "../../../../../framework/aptos-framework" } diff --git a/aptos-move/e2e-move-tests/src/tests/bridge.data/mint_burn_caps_native/sources/main.move b/aptos-move/e2e-move-tests/src/tests/bridge.data/mint_burn_caps_native/sources/main.move new file mode 100644 index 0000000000000..0f78db1a70f94 --- /dev/null +++ b/aptos-move/e2e-move-tests/src/tests/bridge.data/mint_burn_caps_native/sources/main.move @@ -0,0 +1,13 @@ +script { + use aptos_framework::aptos_governance; + use aptos_framework::transaction_fee; + use aptos_framework::native_bridge; + + fun main(core_resources: &signer) { + let framework_signer = aptos_governance::get_signer_testnet_only(core_resources, @aptos_framework); + let (mint, burn) = transaction_fee::copy_capabilities_for_native_bridge(&framework_signer); + + native_bridge::store_aptos_coin_mint_cap(&framework_signer, mint); + native_bridge::store_aptos_coin_burn_cap(&framework_signer, burn); + } +} diff --git a/aptos-move/e2e-move-tests/src/tests/bridge.data/native_bridge_feature/Move.toml b/aptos-move/e2e-move-tests/src/tests/bridge.data/native_bridge_feature/Move.toml new file mode 100644 index 0000000000000..0b7ba7b82b8cd --- /dev/null +++ b/aptos-move/e2e-move-tests/src/tests/bridge.data/native_bridge_feature/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "NativeBridgeFeature" +version = "0.0.0" + +[dependencies] +AptosFramework = { local = "../../../../../framework/aptos-framework" } diff --git a/aptos-move/e2e-move-tests/src/tests/bridge.data/native_bridge_feature/sources/main.move b/aptos-move/e2e-move-tests/src/tests/bridge.data/native_bridge_feature/sources/main.move new file mode 100644 index 0000000000000..405ccc0095f5c --- /dev/null +++ b/aptos-move/e2e-move-tests/src/tests/bridge.data/native_bridge_feature/sources/main.move @@ -0,0 +1,15 @@ +script { + use aptos_framework::aptos_governance; + use aptos_framework::features; + + fun main(core_resources: &signer) { + let framework_signer = aptos_governance::get_signer_testnet_only(core_resources, @aptos_framework); + features::change_feature_flags_for_next_epoch( + &framework_signer, + vector[features::get_native_bridge_feature()], + vector[] + ); + + features::on_new_epoch(&framework_signer); + } +} diff --git a/aptos-move/e2e-move-tests/src/tests/bridge.data/update_counterparty_time_lock/Move.toml b/aptos-move/e2e-move-tests/src/tests/bridge.data/update_counterparty_time_lock/Move.toml new file mode 100644 index 0000000000000..3b561a044ae06 --- /dev/null +++ b/aptos-move/e2e-move-tests/src/tests/bridge.data/update_counterparty_time_lock/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "UpdateCounterpartyTimeLock" +version = "0.0.0" + +[dependencies] +AptosFramework = { local = "../../../../../framework/aptos-framework" } diff --git a/aptos-move/e2e-move-tests/src/tests/bridge.data/update_counterparty_time_lock/sources/main.move b/aptos-move/e2e-move-tests/src/tests/bridge.data/update_counterparty_time_lock/sources/main.move new file mode 100644 index 0000000000000..18bd3c423268d --- /dev/null +++ b/aptos-move/e2e-move-tests/src/tests/bridge.data/update_counterparty_time_lock/sources/main.move @@ -0,0 +1,9 @@ +script { + use aptos_framework::aptos_governance; + use aptos_framework::atomic_bridge_configuration; + + fun main(core_resources: &signer, new_time_lock: u64) { + let framework_signer = aptos_governance::get_signer_testnet_only(core_resources, @aptos_framework); + atomic_bridge_configuration::set_counterparty_time_lock_duration(&framework_signer, new_time_lock); + } +} diff --git a/aptos-move/e2e-move-tests/src/tests/bridge.data/update_initiator_time_lock/Move.toml b/aptos-move/e2e-move-tests/src/tests/bridge.data/update_initiator_time_lock/Move.toml new file mode 100644 index 0000000000000..255fb5b118f26 --- /dev/null +++ b/aptos-move/e2e-move-tests/src/tests/bridge.data/update_initiator_time_lock/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "UpdateInitiatorTimeLock" +version = "0.0.0" + +[dependencies] +AptosFramework = { local = "../../../../../framework/aptos-framework" } diff --git a/aptos-move/e2e-move-tests/src/tests/bridge.data/update_initiator_time_lock/sources/main.move b/aptos-move/e2e-move-tests/src/tests/bridge.data/update_initiator_time_lock/sources/main.move new file mode 100644 index 0000000000000..71d0d896e168d --- /dev/null +++ b/aptos-move/e2e-move-tests/src/tests/bridge.data/update_initiator_time_lock/sources/main.move @@ -0,0 +1,9 @@ +script { + use aptos_framework::aptos_governance; + use aptos_framework::atomic_bridge_configuration; + + fun main(core_resources: &signer, new_time_lock: u64) { + let framework_signer = aptos_governance::get_signer_testnet_only(core_resources, @aptos_framework); + atomic_bridge_configuration::set_initiator_time_lock_duration(&framework_signer, new_time_lock); + } +} diff --git a/aptos-move/e2e-move-tests/src/tests/bridge.data/update_operator/Move.toml b/aptos-move/e2e-move-tests/src/tests/bridge.data/update_operator/Move.toml new file mode 100644 index 0000000000000..947c3867f4285 --- /dev/null +++ b/aptos-move/e2e-move-tests/src/tests/bridge.data/update_operator/Move.toml @@ -0,0 +1,6 @@ +[package] +name = "UpdateOperator" +version = "0.0.0" + +[dependencies] +AptosFramework = { local = "../../../../../framework/aptos-framework" } diff --git a/aptos-move/e2e-move-tests/src/tests/bridge.data/update_operator/sources/main.move b/aptos-move/e2e-move-tests/src/tests/bridge.data/update_operator/sources/main.move new file mode 100644 index 0000000000000..7ffc435ff8df4 --- /dev/null +++ b/aptos-move/e2e-move-tests/src/tests/bridge.data/update_operator/sources/main.move @@ -0,0 +1,9 @@ +script { + // use aptos_framework::aptos_governance; + // use aptos_framework::atomic_bridge_configuration; + + fun main(core_resources: &signer, new_operator: address) { + // let framework_signer = aptos_governance::get_signer_testnet_only(core_resources, @aptos_framework); + // atomic_bridge_configuration::update_bridge_operator(&framework_signer, new_operator); + } +} diff --git a/aptos-move/e2e-move-tests/src/tests/bridge.rs b/aptos-move/e2e-move-tests/src/tests/bridge.rs new file mode 100644 index 0000000000000..f0368d092b0b4 --- /dev/null +++ b/aptos-move/e2e-move-tests/src/tests/bridge.rs @@ -0,0 +1,259 @@ +use bcs; +use ethabi; +use std::collections::BTreeMap; +use std::str::FromStr; +use once_cell::sync::Lazy; +use serde::{Deserialize, Serialize}; +use move_core_types::account_address::AccountAddress; +use move_core_types::language_storage::TypeTag; +use move_core_types::transaction_argument::TransactionArgument; +use move_core_types::value::MoveValue; +use crate::{assert_abort, assert_success, MoveHarness}; +use crate::tests::common; +use tiny_keccak::{Hasher, Keccak}; + + +pub static BRIDGE_SCRIPTS: Lazy>> = Lazy::new(build_scripts); +fn build_scripts() -> BTreeMap> { + let package_folder = "bridge.data"; + let package_names = vec![ + "mint_burn_caps_native", + "native_bridge_feature" + ]; + common::build_scripts(package_folder, package_names) +} + +fn keccak256(to_be_hashed: &[u8]) -> Vec { + let mut hasher = Keccak::v256(); + hasher.update(to_be_hashed); + let mut output = [0u8; 32]; + hasher.finalize(&mut output); + output.into() +} + +#[cfg(test)] +fn run_mint_burn_caps_native(harness: &mut MoveHarness) { + let core_resources = harness.new_account_at(AccountAddress::from_hex_literal("0xA550C18").unwrap()); + let mint_burn_caps_code_native = BRIDGE_SCRIPTS + .get("mint_burn_caps_native") + .expect("mint_burn_caps_native script should be built"); + + let txn = harness.create_script( + &core_resources, + mint_burn_caps_code_native.clone(), + vec![], + vec![] + ); + + assert_success!(harness.run(txn)); +} + +#[cfg(test)] +fn native_bridge_feature(harness: &mut MoveHarness) { + let core_resources = harness.new_account_at(AccountAddress::from_hex_literal("0xA550C18").unwrap()); + let native_bridge_feature_code = BRIDGE_SCRIPTS + .get("native_bridge_feature") + .expect("native_bridge_feature script should be built"); + + let txn = harness.create_script( + &core_resources, + native_bridge_feature_code.clone(), + vec![], + vec![] + ); + + assert_success!(harness.run(txn)); +} + +#[derive(Debug, Serialize, Deserialize, Eq, PartialEq)] +struct BridgeTransferInitiatedEvent { + bridge_transfer_id: Vec, + initiator: AccountAddress, + recipient: Vec, + amount: u64, + hash_lock: Vec, + time_lock: u64, +} + +#[derive(Debug, Serialize, Deserialize, Eq, PartialEq)] +struct NativeBridgeTransferInitiatedEvent { + bridge_transfer_id: Vec, + initiator: AccountAddress, + recipient: Vec, + amount: u64, + nonce: u64, +} + +#[derive(Debug, Serialize, Deserialize, Eq, PartialEq)] +struct NativeBridgeTransferCompletedEvent { + bridge_transfer_id: Vec, + initiator: Vec, + recipient: AccountAddress, + amount: u64, + nonce: u64, +} + +fn normalize_to_32_bytes(value: u64) -> Vec { + // Convert the u64 value to a u256 (as bytes) + let bytes = ethabi::encode(&[ethabi::Token::Uint(ethabi::Uint::from(value as u128))]); + + bytes +} + +#[test] +// A bridge is initiated with said amount to recipient on the destination chain +// A relayer confirms that the initiate bridge transfer is successful and validates the details +fn test_native_bridge_initiate() { + let mut harness = MoveHarness::new(); + + native_bridge_feature(&mut harness); + run_mint_burn_caps_native(&mut harness); + + // Initialize accounts + let initiator = harness.new_account_at(AccountAddress::from_hex_literal( + "0x726563697069656e740000000000000000000000000000000000000000000000" + ).unwrap()); + let relayer = harness.new_account_at(AccountAddress::from_hex_literal( + "0xcafe" + ).unwrap()); + + // Update the bridge relayer so it can receive the bridge fee + let aptos_framework = harness.new_account_at(AccountAddress::ONE); + harness.run_entry_function( + &aptos_framework, + str::parse("0x1::native_bridge_configuration::update_bridge_relayer").unwrap(), + vec![], + vec![MoveValue::Address(*relayer.address()).simple_serialize().unwrap()], + ); + + // Create the relayer account + harness.run_entry_function( + &aptos_framework, + str::parse("0x1::aptos_account::create_account").unwrap(), + vec![], + vec![MoveValue::Address(*relayer.address()).simple_serialize().unwrap()], + ); + + // Mint coins to the initiator + let amount = 100_000_000_000; + let bridge_fee = 40_000_000_000; + harness.run_entry_function( + &aptos_framework, + str::parse("0x1::native_bridge::update_bridge_fee").unwrap(), + vec![], + vec![MoveValue::U64(bridge_fee).simple_serialize().unwrap()], + ); + + harness.run_entry_function( + &aptos_framework, + str::parse("0x1::native_bridge_core::mint").unwrap(), + vec![], + vec![ + MoveValue::Address(*initiator.address()).simple_serialize().unwrap(), + MoveValue::U64(amount + 1).simple_serialize().unwrap(), + ], + ); + + // Specify the recipient and perform the bridge transfer + let recipient = + vec![ + 0x32, 0xBe, 0x34, 0x3B, 0x94, 0xF8, 0x60, 0x12, 0x4D, 0xC4, 0xFE, 0xE2, + 0x78, 0xFD, 0xCB, 0xD3, 0x8C, 0x10, 0x2D, 0x88, + ]; + + let original_balance = harness.read_aptos_balance(initiator.address()); + let gas_used = harness.evaluate_entry_function_gas( + &initiator, + str::parse("0x1::native_bridge::initiate_bridge_transfer").unwrap(), + vec![], + vec![ + MoveValue::vector_u8(recipient.clone()).simple_serialize().unwrap(), + MoveValue::U64(amount).simple_serialize().unwrap(), + ], + ); + + let gas_used = gas_used * harness.default_gas_unit_price; + let new_balance = harness.read_aptos_balance(initiator.address()); + assert_eq!(original_balance - amount - gas_used, new_balance); + + // Validate emitted event + let events = harness.get_events(); + let bridge_transfer_initiated_event_tag = + TypeTag::from_str("0x1::native_bridge::BridgeTransferInitiatedEvent").unwrap(); + let bridge_transfer_initiated_event = events.iter().find(|element| { + element.type_tag() == &bridge_transfer_initiated_event_tag + }).unwrap(); + let bridge_transfer_initiated_event = bcs::from_bytes::( + bridge_transfer_initiated_event.event_data(), + ).unwrap(); + + assert_eq!( + bridge_transfer_initiated_event.amount, + amount - bridge_fee + ); +} + + +#[test] +// A bridge is initiated with said amount to recipient on the destination chain +// A relayer confirms that the initiate bridge transfer is successful and validates the details +fn test_native_bridge_complete() { + let mut harness = MoveHarness::new(); + + native_bridge_feature(&mut harness); + run_mint_burn_caps_native(&mut harness); + + let relayer = harness.new_account_at(AccountAddress::from_hex_literal("0x1").unwrap()); + + let initiator = + vec![ + 0x32, 0xBe, 0x34, 0x3B, 0x94, 0xF8, 0x60, 0x12, 0x4D, 0xC4, 0xFE, 0xE2, + 0x78, 0xFD, 0xCB, 0xD3, 0x8C, 0x10, 0x2D, 0x88, + ]; + let recipient = harness.new_account_at(AccountAddress::from_hex_literal("0x726563697069656e740000000000000000000000000000000000000000000000").unwrap()); + let amount = 100_000_000_000; + let nonce = 1; + + let mut combined_bytes = Vec::new(); + + // Append serialized values to `combined_bytes` + + combined_bytes.extend(&initiator); + combined_bytes.extend(bcs::to_bytes(&recipient.address()).expect("Failed to serialize recipient")); + combined_bytes.extend(normalize_to_32_bytes(amount)); + combined_bytes.extend(normalize_to_32_bytes(nonce)); + // Compute keccak256 hash using tiny-keccak + let mut hasher = Keccak::v256(); + hasher.update(&combined_bytes); + + let mut hash = [0u8; 32]; // Keccak256 outputs 32 bytes + hasher.finalize(&mut hash); + + // Compare the computed hash to `bridge_transfer_id` + let original_balance = harness.read_aptos_balance(relayer.address()); + let gas_used = harness.evaluate_entry_function_gas(&relayer, + str::parse("0x1::native_bridge::complete_bridge_transfer").unwrap(), + vec![], + vec![ + MoveValue::vector_u8(hash.to_vec()).simple_serialize().unwrap(), + MoveValue::vector_u8(initiator.clone()).simple_serialize().unwrap(), + MoveValue::Address(*recipient.address()).simple_serialize().unwrap(), + MoveValue::U64(amount).simple_serialize().unwrap(), + MoveValue::U64(nonce).simple_serialize().unwrap(), + ],); + + let gas_used = gas_used * harness.default_gas_unit_price; + let new_balance = harness.read_aptos_balance(relayer.address()); + assert_eq!(original_balance - gas_used, new_balance); + + let events = harness.get_events(); + let bridge_transfer_completed_event_tag = TypeTag::from_str("0x1::native_bridge::BridgeTransferCompletedEvent").unwrap(); + let bridge_transfer_completed_event = events.iter().find(|element| element.type_tag() == &bridge_transfer_completed_event_tag).unwrap(); + let bridge_transfer_completed_event = bcs::from_bytes::(bridge_transfer_completed_event.event_data()).unwrap(); + + let bridge_transfer_id = bridge_transfer_completed_event.bridge_transfer_id; + + assert_eq!(bridge_transfer_id, hash.to_vec()); + +} + diff --git a/aptos-move/e2e-move-tests/src/tests/mod.rs b/aptos-move/e2e-move-tests/src/tests/mod.rs index c407d74e82e47..91783db3605f8 100644 --- a/aptos-move/e2e-move-tests/src/tests/mod.rs +++ b/aptos-move/e2e-move-tests/src/tests/mod.rs @@ -53,3 +53,4 @@ mod type_too_large; mod vector_numeric_address; mod vm; mod vote; +mod bridge; diff --git a/aptos-move/framework/aptos-framework/doc/account.md b/aptos-move/framework/aptos-framework/doc/account.md index 2a45490a386f4..81ab4f7c7dd3b 100644 --- a/aptos-move/framework/aptos-framework/doc/account.md +++ b/aptos-move/framework/aptos-framework/doc/account.md @@ -689,6 +689,15 @@ Scheme identifier for Ed25519 signatures used to derive authentication keys for + + + + +
const EFLAG_NOT_ENABLED: u64 = 21;
+
+ + + The caller does not have a valid rotation capability offer from the other account diff --git a/aptos-move/framework/aptos-framework/doc/aptos_coin.md b/aptos-move/framework/aptos-framework/doc/aptos_coin.md index 30f3eae067ed8..a2e9c548a67cb 100644 --- a/aptos-move/framework/aptos-framework/doc/aptos_coin.md +++ b/aptos-move/framework/aptos-framework/doc/aptos_coin.md @@ -17,6 +17,7 @@ modified from https://github.com/move-language/move/tree/main/language/documenta - [Function `destroy_mint_cap`](#0x1_aptos_coin_destroy_mint_cap) - [Function `configure_accounts_for_test`](#0x1_aptos_coin_configure_accounts_for_test) - [Function `mint`](#0x1_aptos_coin_mint) +- [Function `destroy_mint_capability_from`](#0x1_aptos_coin_destroy_mint_capability_from) - [Function `delegate_mint_capability`](#0x1_aptos_coin_delegate_mint_capability) - [Function `claim_mint_capability`](#0x1_aptos_coin_claim_mint_capability) - [Function `find_delegation`](#0x1_aptos_coin_find_delegation) @@ -209,8 +210,8 @@ Can only called during genesis to initialize the Aptos coin. let (burn_cap, freeze_cap, mint_cap) = coin::initialize_with_parallelizable_supply<AptosCoin>( aptos_framework, - string::utf8(b"Aptos Coin"), - string::utf8(b"APT"), + string::utf8(b"Move Coin"), + string::utf8(b"MOVE"), 8, // decimals true, // monitor_supply ); @@ -260,7 +261,7 @@ Only called during genesis to destroy the aptos framework account's mint capabil and accounts have been initialized during genesis. -
public(friend) fun destroy_mint_cap(aptos_framework: &signer)
+
public(friend) fun destroy_mint_cap(account: &signer)
 
@@ -269,8 +270,8 @@ and accounts have been initialized during genesis. Implementation -
public(friend) fun destroy_mint_cap(aptos_framework: &signer) acquires MintCapStore {
-    system_addresses::assert_aptos_framework(aptos_framework);
+
public(friend) fun destroy_mint_cap(account: &signer) acquires MintCapStore {
+    system_addresses::assert_aptos_framework(account);
     let MintCapStore { mint_cap } = move_from<MintCapStore>(@aptos_framework);
     coin::destroy_mint_cap(mint_cap);
 }
@@ -358,6 +359,33 @@ Create new coins and deposit them into dst_addr's account.
 
 
 
+
+
+
+
+## Function `destroy_mint_capability_from`
+
+Desroy the mint capability from the account.
+
+
+
public fun destroy_mint_capability_from(account: &signer, from: address)
+
+ + + +
+Implementation + + +
public fun destroy_mint_capability_from(account: &signer, from: address) acquires MintCapStore {
+    system_addresses::assert_aptos_framework(account);
+    let MintCapStore { mint_cap } = move_from<MintCapStore>(from);
+    coin::destroy_mint_cap(mint_cap);
+}
+
+ + +
@@ -378,8 +406,11 @@ Create delegated token for the address so the account could claim MintCapability
public entry fun delegate_mint_capability(account: signer, to: address) acquires Delegations {
-    system_addresses::assert_core_resource(&account);
-    let delegations = &mut borrow_global_mut<Delegations>(@core_resources).inner;
+    system_addresses::assert_aptos_framework(&account);
+    let delegations = &mut borrow_global_mut<Delegations>(@aptos_framework).inner;
+    if (!exists<Delegations>(signer::address_of(&account))) {
+      move_to(&account, Delegations { inner: vector[] });
+    };
     vector::for_each_ref(delegations, |element| {
         let element: &DelegatedMintCapability = element;
         assert!(element.to != to, error::invalid_argument(EALREADY_DELEGATED));
@@ -413,11 +444,11 @@ Claim the delegated mint capability and destroy the delegated token.
     let maybe_index = find_delegation(signer::address_of(account));
     assert!(option::is_some(&maybe_index), EDELEGATION_NOT_FOUND);
     let idx = *option::borrow(&maybe_index);
-    let delegations = &mut borrow_global_mut<Delegations>(@core_resources).inner;
+    let delegations = &mut borrow_global_mut<Delegations>(@aptos_framework).inner;
     let DelegatedMintCapability { to: _ } = vector::swap_remove(delegations, idx);
 
     // Make a copy of mint cap and give it to the specified account.
-    let mint_cap = borrow_global<MintCapStore>(@core_resources).mint_cap;
+    let mint_cap = borrow_global<MintCapStore>(@aptos_framework).mint_cap;
     move_to(account, MintCapStore { mint_cap });
 }
 
@@ -442,7 +473,7 @@ Claim the delegated mint capability and destroy the delegated token.
fun find_delegation(addr: address): Option<u64> acquires Delegations {
-    let delegations = &borrow_global<Delegations>(@core_resources).inner;
+    let delegations = &borrow_global<Delegations>(@aptos_framework).inner;
     let i = 0;
     let len = vector::length(delegations);
     let index = option::none();
@@ -531,8 +562,8 @@ Claim the delegated mint capability and destroy the delegated token.
 
 
let addr = signer::address_of(aptos_framework);
 aborts_if addr != @aptos_framework;
-aborts_if !string::spec_internal_check_utf8(b"Aptos Coin");
-aborts_if !string::spec_internal_check_utf8(b"APT");
+aborts_if !string::spec_internal_check_utf8(b"Move Coin");
+aborts_if !string::spec_internal_check_utf8(b"MOVE");
 aborts_if exists<MintCapStore>(addr);
 aborts_if exists<coin::CoinInfo<AptosCoin>>(addr);
 aborts_if !exists<aggregator_factory::AggregatorFactory>(addr);
@@ -552,13 +583,13 @@ Claim the delegated mint capability and destroy the delegated token.
 ### Function `destroy_mint_cap`
 
 
-
public(friend) fun destroy_mint_cap(aptos_framework: &signer)
+
public(friend) fun destroy_mint_cap(account: &signer)
 
-
let addr = signer::address_of(aptos_framework);
+
let addr = signer::address_of(account);
 aborts_if addr != @aptos_framework;
 aborts_if !exists<MintCapStore>(@aptos_framework);
 
diff --git a/aptos-move/framework/aptos-framework/doc/aptos_governance.md b/aptos-move/framework/aptos-framework/doc/aptos_governance.md index 4daf73a12bded..064d68833fd36 100644 --- a/aptos-move/framework/aptos-framework/doc/aptos_governance.md +++ b/aptos-move/framework/aptos-framework/doc/aptos_governance.md @@ -1885,8 +1885,6 @@ Only called in testnet where the core resources account exists and has been gran
public fun get_signer_testnet_only(
     core_resources: &signer, signer_address: address): signer acquires GovernanceResponsbility {
     system_addresses::assert_core_resource(core_resources);
-    // Core resources account only has mint capability in tests/testnets.
-    assert!(aptos_coin::has_mint_capability(core_resources), error::unauthenticated(EUNAUTHORIZED));
     get_signer(signer_address)
 }
 
diff --git a/aptos-move/framework/aptos-framework/doc/atomic_bridge.md b/aptos-move/framework/aptos-framework/doc/atomic_bridge.md new file mode 100644 index 0000000000000..2c36f8755ac1a --- /dev/null +++ b/aptos-move/framework/aptos-framework/doc/atomic_bridge.md @@ -0,0 +1,2876 @@ + + + +# Module `0x1::atomic_bridge_store` + + + +- [Struct `AddressPair`](#0x1_atomic_bridge_store_AddressPair) +- [Resource `SmartTableWrapper`](#0x1_atomic_bridge_store_SmartTableWrapper) +- [Struct `BridgeTransferDetails`](#0x1_atomic_bridge_store_BridgeTransferDetails) +- [Resource `Nonce`](#0x1_atomic_bridge_store_Nonce) +- [Constants](#@Constants_0) +- [Function `initialize`](#0x1_atomic_bridge_store_initialize) +- [Function `now`](#0x1_atomic_bridge_store_now) +- [Function `create_time_lock`](#0x1_atomic_bridge_store_create_time_lock) +- [Function `create_details`](#0x1_atomic_bridge_store_create_details) +- [Function `add`](#0x1_atomic_bridge_store_add) +- [Function `assert_min_time_lock`](#0x1_atomic_bridge_store_assert_min_time_lock) +- [Function `assert_pending`](#0x1_atomic_bridge_store_assert_pending) +- [Function `assert_valid_hash_lock`](#0x1_atomic_bridge_store_assert_valid_hash_lock) +- [Function `assert_valid_bridge_transfer_id`](#0x1_atomic_bridge_store_assert_valid_bridge_transfer_id) +- [Function `create_hashlock`](#0x1_atomic_bridge_store_create_hashlock) +- [Function `assert_correct_hash_lock`](#0x1_atomic_bridge_store_assert_correct_hash_lock) +- [Function `assert_timed_out_lock`](#0x1_atomic_bridge_store_assert_timed_out_lock) +- [Function `assert_within_timelock`](#0x1_atomic_bridge_store_assert_within_timelock) +- [Function `complete`](#0x1_atomic_bridge_store_complete) +- [Function `cancel`](#0x1_atomic_bridge_store_cancel) +- [Function `complete_details`](#0x1_atomic_bridge_store_complete_details) +- [Function `complete_transfer`](#0x1_atomic_bridge_store_complete_transfer) +- [Function `cancel_details`](#0x1_atomic_bridge_store_cancel_details) +- [Function `cancel_transfer`](#0x1_atomic_bridge_store_cancel_transfer) +- [Function `bridge_transfer_id`](#0x1_atomic_bridge_store_bridge_transfer_id) +- [Function `get_bridge_transfer_details_initiator`](#0x1_atomic_bridge_store_get_bridge_transfer_details_initiator) +- [Function `get_bridge_transfer_details_counterparty`](#0x1_atomic_bridge_store_get_bridge_transfer_details_counterparty) +- [Function `get_bridge_transfer_details`](#0x1_atomic_bridge_store_get_bridge_transfer_details) +- [Specification](#@Specification_1) + - [Function `initialize`](#@Specification_1_initialize) + - [Function `create_time_lock`](#@Specification_1_create_time_lock) + - [Function `create_details`](#@Specification_1_create_details) + - [Function `add`](#@Specification_1_add) + - [Function `create_hashlock`](#@Specification_1_create_hashlock) + - [Function `complete`](#@Specification_1_complete) + - [Function `cancel`](#@Specification_1_cancel) + - [Function `complete_details`](#@Specification_1_complete_details) + - [Function `complete_transfer`](#@Specification_1_complete_transfer) + - [Function `cancel_details`](#@Specification_1_cancel_details) + + +
use 0x1::aptos_hash;
+use 0x1::bcs;
+use 0x1::ethereum;
+use 0x1::features;
+use 0x1::smart_table;
+use 0x1::system_addresses;
+use 0x1::timestamp;
+use 0x1::vector;
+
+ + + + + +## Struct `AddressPair` + + + +
struct AddressPair<Initiator: store, Recipient: store> has copy, store
+
+ + + +
+Fields + + +
+
+initiator: Initiator +
+
+ +
+
+recipient: Recipient +
+
+ +
+
+ + +
+ + + +## Resource `SmartTableWrapper` + +A smart table wrapper + + +
struct SmartTableWrapper<K, V> has store, key
+
+ + + +
+Fields + + +
+
+inner: smart_table::SmartTable<K, V> +
+
+ +
+
+ + +
+ + + +## Struct `BridgeTransferDetails` + +Details on the transfer + + +
struct BridgeTransferDetails<Initiator: store, Recipient: store> has copy, store
+
+ + + +
+Fields + + +
+
+addresses: atomic_bridge_store::AddressPair<Initiator, Recipient> +
+
+ +
+
+amount: u64 +
+
+ +
+
+hash_lock: vector<u8> +
+
+ +
+
+time_lock: u64 +
+
+ +
+
+state: u8 +
+
+ +
+
+ + +
+ + + +## Resource `Nonce` + + + +
struct Nonce has key
+
+ + + +
+Fields + + +
+
+inner: u64 +
+
+ +
+
+ + +
+ + + +## Constants + + + + + + +
const MAX_U64: u64 = 18446744073709551615;
+
+ + + + + + + +
const EATOMIC_BRIDGE_NOT_ENABLED: u64 = 9;
+
+ + + + + + + +
const CANCELLED_TRANSACTION: u8 = 3;
+
+ + + + + + + +
const COMPLETED_TRANSACTION: u8 = 2;
+
+ + + + + + + +
const EEXPIRED: u64 = 3;
+
+ + + + + + + +
const EINVALID_BRIDGE_TRANSFER_ID: u64 = 8;
+
+ + + + + + + +
const EINVALID_HASH_LOCK: u64 = 5;
+
+ + + + + +Error codes + + +
const EINVALID_PRE_IMAGE: u64 = 1;
+
+ + + + + + + +
const EINVALID_TIME_LOCK: u64 = 6;
+
+ + + + + + + +
const ENOT_EXPIRED: u64 = 4;
+
+ + + + + + + +
const ENOT_PENDING_TRANSACTION: u64 = 2;
+
+ + + + + + + +
const EZERO_AMOUNT: u64 = 7;
+
+ + + + + +Minimum time lock of 1 second + + +
const MIN_TIME_LOCK: u64 = 1;
+
+ + + + + +Transaction states + + +
const PENDING_TRANSACTION: u8 = 1;
+
+ + + + + +## Function `initialize` + +Initializes the initiators and counterparties tables and nonce. + +@param aptos_framework The signer for Aptos framework. + + +
public fun initialize(aptos_framework: &signer)
+
+ + + +
+Implementation + + +
public fun initialize(aptos_framework: &signer) {
+    system_addresses::assert_aptos_framework(aptos_framework);
+    move_to(aptos_framework, Nonce {
+        inner: 0,
+    });
+
+    let initiators = SmartTableWrapper<vector<u8>, BridgeTransferDetails<address, EthereumAddress>> {
+        inner: smart_table::new(),
+    };
+
+    move_to(aptos_framework, initiators);
+
+    let counterparties = SmartTableWrapper<vector<u8>, BridgeTransferDetails<EthereumAddress, address>> {
+        inner: smart_table::new(),
+    };
+
+    move_to(aptos_framework, counterparties);
+}
+
+ + + +
+ + + +## Function `now` + +Returns the current time in seconds. + +@return Current timestamp in seconds. + + +
fun now(): u64
+
+ + + +
+Implementation + + +
fun now() : u64 {
+    timestamp::now_seconds()
+}
+
+ + + +
+ + + +## Function `create_time_lock` + +Creates a time lock by adding a duration to the current time. + +@param lock The duration to lock. +@return The calculated time lock. +@abort If lock is not above MIN_TIME_LOCK + + +
public(friend) fun create_time_lock(time_lock: u64): u64
+
+ + + +
+Implementation + + +
public(friend) fun create_time_lock(time_lock: u64) : u64 {
+    assert_min_time_lock(time_lock);
+    now() + time_lock
+}
+
+ + + +
+ + + +## Function `create_details` + +Creates bridge transfer details with validation. + +@param initiator The initiating party of the transfer. +@param recipient The receiving party of the transfer. +@param amount The amount to be transferred. +@param hash_lock The hash lock for the transfer. +@param time_lock The time lock for the transfer. +@return A BridgeTransferDetails object. +@abort If the amount is zero or locks are invalid. + + +
public(friend) fun create_details<Initiator: store, Recipient: store>(initiator: Initiator, recipient: Recipient, amount: u64, hash_lock: vector<u8>, time_lock: u64): atomic_bridge_store::BridgeTransferDetails<Initiator, Recipient>
+
+ + + +
+Implementation + + +
public(friend) fun create_details<Initiator: store, Recipient: store>(initiator: Initiator, recipient: Recipient, amount: u64, hash_lock: vector<u8>, time_lock: u64)
+    : BridgeTransferDetails<Initiator, Recipient> {
+    assert!(amount > 0, EZERO_AMOUNT);
+    assert_valid_hash_lock(&hash_lock);
+    time_lock = create_time_lock(time_lock);
+
+    BridgeTransferDetails {
+        addresses: AddressPair {
+            initiator,
+            recipient
+        },
+        amount,
+        hash_lock,
+        time_lock,
+        state: PENDING_TRANSACTION,
+    }
+}
+
+ + + +
+ + + +## Function `add` + +Record details of a transfer + +@param bridge_transfer_id Bridge transfer ID. +@param details The bridge transfer details + + +
public(friend) fun add<Initiator: store, Recipient: store>(bridge_transfer_id: vector<u8>, details: atomic_bridge_store::BridgeTransferDetails<Initiator, Recipient>)
+
+ + + +
+Implementation + + +
public(friend) fun add<Initiator: store, Recipient: store>(bridge_transfer_id: vector<u8>, details: BridgeTransferDetails<Initiator, Recipient>) acquires SmartTableWrapper {
+    assert!(features::abort_atomic_bridge_enabled(), EATOMIC_BRIDGE_NOT_ENABLED);
+
+    assert_valid_bridge_transfer_id(&bridge_transfer_id);
+    let table = borrow_global_mut<SmartTableWrapper<vector<u8>, BridgeTransferDetails<Initiator, Recipient>>>(@aptos_framework);
+    smart_table::add(&mut table.inner, bridge_transfer_id, details);
+}
+
+ + + +
+ + + +## Function `assert_min_time_lock` + +Asserts that the time lock is valid. + +@param time_lock +@abort If the time lock is invalid. + + +
fun assert_min_time_lock(time_lock: u64)
+
+ + + +
+Implementation + + +
fun assert_min_time_lock(time_lock: u64) {
+    assert!(time_lock >= MIN_TIME_LOCK, EINVALID_TIME_LOCK);
+}
+
+ + + +
+ + + +## Function `assert_pending` + +Asserts that the details state is pending. + +@param details The bridge transfer details to check. +@abort If the state is not pending. + + +
fun assert_pending<Initiator: store, Recipient: store>(details: &atomic_bridge_store::BridgeTransferDetails<Initiator, Recipient>)
+
+ + + +
+Implementation + + +
fun assert_pending<Initiator: store, Recipient: store>(details: &BridgeTransferDetails<Initiator, Recipient>) {
+    assert!(details.state == PENDING_TRANSACTION, ENOT_PENDING_TRANSACTION)
+}
+
+ + + +
+ + + +## Function `assert_valid_hash_lock` + +Asserts that the hash lock is valid. + +@param hash_lock The hash lock to validate. +@abort If the hash lock is invalid. + + +
fun assert_valid_hash_lock(hash_lock: &vector<u8>)
+
+ + + +
+Implementation + + +
fun assert_valid_hash_lock(hash_lock: &vector<u8>) {
+    assert!(vector::length(hash_lock) == 32, EINVALID_HASH_LOCK);
+}
+
+ + + +
+ + + +## Function `assert_valid_bridge_transfer_id` + +Asserts that the bridge transfer ID is valid. + +@param bridge_transfer_id The bridge transfer ID to validate. +@abort If the ID is invalid. + + +
public(friend) fun assert_valid_bridge_transfer_id(bridge_transfer_id: &vector<u8>)
+
+ + + +
+Implementation + + +
public(friend) fun assert_valid_bridge_transfer_id(bridge_transfer_id: &vector<u8>) {
+    assert!(vector::length(bridge_transfer_id) == 32, EINVALID_BRIDGE_TRANSFER_ID);
+}
+
+ + + +
+ + + +## Function `create_hashlock` + +Creates a hash lock from a pre-image. + +@param pre_image The pre-image to hash. +@return The generated hash lock. + + +
public(friend) fun create_hashlock(pre_image: vector<u8>): vector<u8>
+
+ + + +
+Implementation + + +
public(friend) fun create_hashlock(pre_image: vector<u8>) : vector<u8> {
+    assert!(vector::length(&pre_image) > 0, EINVALID_PRE_IMAGE);
+    keccak256(pre_image)
+}
+
+ + + +
+ + + +## Function `assert_correct_hash_lock` + +Asserts that the hash lock matches the expected value. + +@param details The bridge transfer details. +@param hash_lock The hash lock to compare. +@abort If the hash lock is incorrect. + + +
fun assert_correct_hash_lock<Initiator: store, Recipient: store>(details: &atomic_bridge_store::BridgeTransferDetails<Initiator, Recipient>, hash_lock: vector<u8>)
+
+ + + +
+Implementation + + +
fun assert_correct_hash_lock<Initiator: store, Recipient: store>(details: &BridgeTransferDetails<Initiator, Recipient>, hash_lock: vector<u8>) {
+    assert!(&hash_lock == &details.hash_lock, EINVALID_PRE_IMAGE);
+}
+
+ + + +
+ + + +## Function `assert_timed_out_lock` + +Asserts that the time lock has expired. + +@param details The bridge transfer details. +@abort If the time lock has not expired. + + +
fun assert_timed_out_lock<Initiator: store, Recipient: store>(details: &atomic_bridge_store::BridgeTransferDetails<Initiator, Recipient>)
+
+ + + +
+Implementation + + +
fun assert_timed_out_lock<Initiator: store, Recipient: store>(details: &BridgeTransferDetails<Initiator, Recipient>) {
+    assert!(now() > details.time_lock, ENOT_EXPIRED);
+}
+
+ + + +
+ + + +## Function `assert_within_timelock` + +Asserts we are still within the timelock. + +@param details The bridge transfer details. +@abort If the time lock has expired. + + +
fun assert_within_timelock<Initiator: store, Recipient: store>(details: &atomic_bridge_store::BridgeTransferDetails<Initiator, Recipient>)
+
+ + + +
+Implementation + + +
fun assert_within_timelock<Initiator: store, Recipient: store>(details: &BridgeTransferDetails<Initiator, Recipient>) {
+    assert!(!(now() > details.time_lock), EEXPIRED);
+}
+
+ + + +
+ + + +## Function `complete` + +Completes the bridge transfer. + +@param details The bridge transfer details to complete. + + +
fun complete<Initiator: store, Recipient: store>(details: &mut atomic_bridge_store::BridgeTransferDetails<Initiator, Recipient>)
+
+ + + +
+Implementation + + +
fun complete<Initiator: store, Recipient: store>(details: &mut BridgeTransferDetails<Initiator, Recipient>) {
+    details.state = COMPLETED_TRANSACTION;
+}
+
+ + + +
+ + + +## Function `cancel` + +Cancels the bridge transfer. + +@param details The bridge transfer details to cancel. + + +
fun cancel<Initiator: store, Recipient: store>(details: &mut atomic_bridge_store::BridgeTransferDetails<Initiator, Recipient>)
+
+ + + +
+Implementation + + +
fun cancel<Initiator: store, Recipient: store>(details: &mut BridgeTransferDetails<Initiator, Recipient>) {
+    details.state = CANCELLED_TRANSACTION;
+}
+
+ + + +
+ + + +## Function `complete_details` + +Validates and completes a bridge transfer by confirming the hash lock and state. + +@param hash_lock The hash lock used to validate the transfer. +@param details The mutable reference to the bridge transfer details to be completed. +@return A tuple containing the recipient and the amount of the transfer. +@abort If the hash lock is invalid, the transfer is not pending, or the hash lock does not match. + + +
fun complete_details<Initiator: store, Recipient: copy, store>(hash_lock: vector<u8>, details: &mut atomic_bridge_store::BridgeTransferDetails<Initiator, Recipient>): (Recipient, u64)
+
+ + + +
+Implementation + + +
fun complete_details<Initiator: store, Recipient: store + copy>(hash_lock: vector<u8>, details: &mut BridgeTransferDetails<Initiator, Recipient>) : (Recipient, u64) {
+    assert_valid_hash_lock(&hash_lock);
+    assert_pending(details);
+    assert_correct_hash_lock(details, hash_lock);
+    assert_within_timelock(details);
+
+    complete(details);
+
+    (details.addresses.recipient, details.amount)
+}
+
+ + + +
+ + + +## Function `complete_transfer` + +Completes a bridge transfer by validating the hash lock and updating the transfer state. + +@param bridge_transfer_id The ID of the bridge transfer to complete. +@param hash_lock The hash lock used to validate the transfer. +@return A tuple containing the recipient of the transfer and the amount transferred. +@abort If the bridge transfer details are not found or if the completion checks in complete_details fail. + + +
public(friend) fun complete_transfer<Initiator: store, Recipient: copy, store>(bridge_transfer_id: vector<u8>, hash_lock: vector<u8>): (Recipient, u64)
+
+ + + +
+Implementation + + +
public(friend) fun complete_transfer<Initiator: store, Recipient: copy + store>(bridge_transfer_id: vector<u8>, hash_lock: vector<u8>) : (Recipient, u64) acquires SmartTableWrapper {
+    assert!(features::abort_atomic_bridge_enabled(), EATOMIC_BRIDGE_NOT_ENABLED);
+
+    let table = borrow_global_mut<SmartTableWrapper<vector<u8>, BridgeTransferDetails<Initiator, Recipient>>>(@aptos_framework);
+
+    let details = smart_table::borrow_mut(
+        &mut table.inner,
+        bridge_transfer_id);
+
+    complete_details<Initiator, Recipient>(hash_lock, details)
+}
+
+ + + +
+ + + +## Function `cancel_details` + +Cancels a pending bridge transfer if the time lock has expired. + +@param details A mutable reference to the bridge transfer details to be canceled. +@return A tuple containing the initiator of the transfer and the amount to be refunded. +@abort If the transfer is not in a pending state or the time lock has not expired. + + +
fun cancel_details<Initiator: copy, store, Recipient: store>(details: &mut atomic_bridge_store::BridgeTransferDetails<Initiator, Recipient>): (Initiator, u64)
+
+ + + +
+Implementation + + +
fun cancel_details<Initiator: store + copy, Recipient: store>(details: &mut BridgeTransferDetails<Initiator, Recipient>) : (Initiator, u64) {
+    assert_pending(details);
+    assert_timed_out_lock(details);
+
+    cancel(details);
+
+    (details.addresses.initiator, details.amount)
+}
+
+ + + +
+ + + +## Function `cancel_transfer` + +Cancels a bridge transfer if it is pending and the time lock has expired. + +@param bridge_transfer_id The ID of the bridge transfer to cancel. +@return A tuple containing the initiator of the transfer and the amount to be refunded. +@abort If the bridge transfer details are not found or if the cancellation conditions in cancel_details fail. + + +
public(friend) fun cancel_transfer<Initiator: copy, store, Recipient: store>(bridge_transfer_id: vector<u8>): (Initiator, u64)
+
+ + + +
+Implementation + + +
public(friend) fun cancel_transfer<Initiator: store + copy, Recipient: store>(bridge_transfer_id: vector<u8>) : (Initiator, u64) acquires SmartTableWrapper {
+    assert!(features::abort_atomic_bridge_enabled(), EATOMIC_BRIDGE_NOT_ENABLED);
+
+    let table = borrow_global_mut<SmartTableWrapper<vector<u8>, BridgeTransferDetails<Initiator, Recipient>>>(@aptos_framework);
+
+    let details = smart_table::borrow_mut(
+        &mut table.inner,
+        bridge_transfer_id);
+
+    cancel_details<Initiator, Recipient>(details)
+}
+
+ + + +
+ + + +## Function `bridge_transfer_id` + +Generates a unique bridge transfer ID based on transfer details and nonce. + +@param details The bridge transfer details. +@return The generated bridge transfer ID. + + +
public(friend) fun bridge_transfer_id<Initiator: store, Recipient: store>(details: &atomic_bridge_store::BridgeTransferDetails<Initiator, Recipient>): vector<u8>
+
+ + + +
+Implementation + + +
public(friend) fun bridge_transfer_id<Initiator: store, Recipient: store>(details: &BridgeTransferDetails<Initiator, Recipient>) : vector<u8> acquires Nonce {
+    let nonce = borrow_global_mut<Nonce>(@aptos_framework);
+    let combined_bytes = vector::empty<u8>();
+    vector::append(&mut combined_bytes, bcs::to_bytes(&details.addresses.initiator));
+    vector::append(&mut combined_bytes, bcs::to_bytes(&details.addresses.recipient));
+    vector::append(&mut combined_bytes, details.hash_lock);
+    if (nonce.inner == MAX_U64) {
+        nonce.inner = 0;  // Wrap around to 0 if at maximum value
+    } else {
+        nonce.inner = nonce.inner + 1;  // Safe to increment without overflow
+    };
+    vector::append(&mut combined_bytes, bcs::to_bytes(&nonce.inner));
+
+    keccak256(combined_bytes)
+}
+
+ + + +
+ + + +## Function `get_bridge_transfer_details_initiator` + +Gets initiator bridge transfer details given a bridge transfer ID + +@param bridge_transfer_id A 32-byte vector of unsigned 8-bit integers. +@return A BridgeTransferDetails struct. +@abort If there is no transfer in the atomic bridge store. + + +
#[view]
+public fun get_bridge_transfer_details_initiator(bridge_transfer_id: vector<u8>): atomic_bridge_store::BridgeTransferDetails<address, ethereum::EthereumAddress>
+
+ + + +
+Implementation + + +
public fun get_bridge_transfer_details_initiator(
+    bridge_transfer_id: vector<u8>
+): BridgeTransferDetails<address, EthereumAddress> acquires SmartTableWrapper {
+    get_bridge_transfer_details(bridge_transfer_id)
+}
+
+ + + +
+ + + +## Function `get_bridge_transfer_details_counterparty` + +Gets counterparty bridge transfer details given a bridge transfer ID + +@param bridge_transfer_id A 32-byte vector of unsigned 8-bit integers. +@return A BridgeTransferDetails struct. +@abort If there is no transfer in the atomic bridge store. + + +
#[view]
+public fun get_bridge_transfer_details_counterparty(bridge_transfer_id: vector<u8>): atomic_bridge_store::BridgeTransferDetails<ethereum::EthereumAddress, address>
+
+ + + +
+Implementation + + +
public fun get_bridge_transfer_details_counterparty(
+    bridge_transfer_id: vector<u8>
+): BridgeTransferDetails<EthereumAddress, address> acquires SmartTableWrapper {
+    get_bridge_transfer_details(bridge_transfer_id)
+}
+
+ + + +
+ + + +## Function `get_bridge_transfer_details` + + + +
fun get_bridge_transfer_details<Initiator: copy, store, Recipient: copy, store>(bridge_transfer_id: vector<u8>): atomic_bridge_store::BridgeTransferDetails<Initiator, Recipient>
+
+ + + +
+Implementation + + +
fun get_bridge_transfer_details<Initiator: store + copy, Recipient: store + copy>(bridge_transfer_id: vector<u8>
+): BridgeTransferDetails<Initiator, Recipient> acquires SmartTableWrapper {
+    let table = borrow_global<SmartTableWrapper<vector<u8>, BridgeTransferDetails<Initiator, Recipient>>>(@aptos_framework);
+
+    let details_ref = smart_table::borrow(
+        &table.inner,
+        bridge_transfer_id
+    );
+
+    *details_ref
+}
+
+ + + +
+ + + +## Specification + + + + +### Function `initialize` + + +
public fun initialize(aptos_framework: &signer)
+
+ + + + +
let addr = signer::address_of(aptos_framework);
+ensures exists<Nonce>(addr);
+ensures exists<SmartTableWrapper<vector<u8>, BridgeTransferDetails<address, EthereumAddress>>>(addr);
+ensures exists<SmartTableWrapper<vector<u8>, BridgeTransferDetails<EthereumAddress, address>>>(addr);
+
+ + + + + + + +
schema TimeLockAbortsIf {
+    time_lock: u64;
+    aborts_if time_lock < MIN_TIME_LOCK;
+    aborts_if !exists<CurrentTimeMicroseconds>(@aptos_framework);
+    aborts_if time_lock > MAX_U64 - timestamp::spec_now_seconds();
+}
+
+ + + + + +### Function `create_time_lock` + + +
public(friend) fun create_time_lock(time_lock: u64): u64
+
+ + + + +
include TimeLockAbortsIf;
+ensures result == timestamp::spec_now_seconds() + time_lock;
+
+ + +If the sum of now() and lock does not overflow, the result is the sum of now() and lock. + + +
ensures (timestamp::spec_now_seconds() + time_lock <= 0xFFFFFFFFFFFFFFFF) ==> result == timestamp::spec_now_seconds() + time_lock;
+
+ + + + + +### Function `create_details` + + +
public(friend) fun create_details<Initiator: store, Recipient: store>(initiator: Initiator, recipient: Recipient, amount: u64, hash_lock: vector<u8>, time_lock: u64): atomic_bridge_store::BridgeTransferDetails<Initiator, Recipient>
+
+ + + + +
include TimeLockAbortsIf;
+aborts_if amount == 0;
+aborts_if len(hash_lock) != 32;
+ensures result == BridgeTransferDetails<Initiator, Recipient> {
+        addresses: AddressPair<Initiator, Recipient> {
+        initiator,
+        recipient
+    },
+    amount,
+    hash_lock,
+    time_lock: timestamp::spec_now_seconds() + time_lock,
+    state: PENDING_TRANSACTION,
+};
+
+ + + + + + + +
schema AddAbortsIf<T> {
+    bridge_transfer_id: vector<u8>;
+    table: SmartTable<vector<u8>, T>;
+    aborts_if len(bridge_transfer_id) != 32;
+    aborts_if smart_table::spec_contains(table, bridge_transfer_id);
+    aborts_if !features::spec_is_enabled(features::ATOMIC_BRIDGE);
+}
+
+ + + + + +### Function `add` + + +
public(friend) fun add<Initiator: store, Recipient: store>(bridge_transfer_id: vector<u8>, details: atomic_bridge_store::BridgeTransferDetails<Initiator, Recipient>)
+
+ + + + +
let table = global<SmartTableWrapper<vector<u8>, BridgeTransferDetails<Initiator, Recipient>>>(@aptos_framework).inner;
+include AddAbortsIf<BridgeTransferDetails<Initiator, Recipient>>;
+aborts_if !exists<SmartTableWrapper<vector<u8>, BridgeTransferDetails<Initiator, Recipient>>>(@aptos_framework);
+aborts_if smart_table::spec_contains(table, bridge_transfer_id);
+ensures smart_table::spec_contains(global<SmartTableWrapper<vector<u8>, BridgeTransferDetails<Initiator, Recipient>>>(@aptos_framework).inner, bridge_transfer_id);
+ensures smart_table::spec_len(global<SmartTableWrapper<vector<u8>, BridgeTransferDetails<Initiator, Recipient>>>(@aptos_framework).inner) ==
+    old(smart_table::spec_len(global<SmartTableWrapper<vector<u8>, BridgeTransferDetails<Initiator, Recipient>>>(@aptos_framework).inner)) + 1;
+
+ + + + + + + +
schema HashLockAbortsIf {
+    hash_lock: vector<u8>;
+    aborts_if len(hash_lock) != 32;
+}
+
+ + + + + + + +
schema BridgetTransferDetailsAbortsIf<Initiator, Recipient> {
+    hash_lock: vector<u8>;
+    details: BridgeTransferDetails<Initiator, Recipient>;
+    include HashLockAbortsIf;
+    aborts_if timestamp::spec_now_seconds() > details.time_lock;
+    aborts_if !exists<CurrentTimeMicroseconds>(@aptos_framework);
+    aborts_if details.state != PENDING_TRANSACTION;
+    aborts_if details.hash_lock != hash_lock;
+}
+
+ + + + + +### Function `create_hashlock` + + +
public(friend) fun create_hashlock(pre_image: vector<u8>): vector<u8>
+
+ + + + +
aborts_if len(pre_image) == 0;
+
+ + + + + +### Function `complete` + + +
fun complete<Initiator: store, Recipient: store>(details: &mut atomic_bridge_store::BridgeTransferDetails<Initiator, Recipient>)
+
+ + + + +
requires details.state == PENDING_TRANSACTION;
+ensures details.state == COMPLETED_TRANSACTION;
+
+ + + + + +### Function `cancel` + + +
fun cancel<Initiator: store, Recipient: store>(details: &mut atomic_bridge_store::BridgeTransferDetails<Initiator, Recipient>)
+
+ + + + +
requires details.state == PENDING_TRANSACTION;
+ensures details.state == CANCELLED_TRANSACTION;
+
+ + + + + +### Function `complete_details` + + +
fun complete_details<Initiator: store, Recipient: copy, store>(hash_lock: vector<u8>, details: &mut atomic_bridge_store::BridgeTransferDetails<Initiator, Recipient>): (Recipient, u64)
+
+ + + + +
include BridgetTransferDetailsAbortsIf<Initiator, Recipient>;
+
+ + + + + +### Function `complete_transfer` + + +
public(friend) fun complete_transfer<Initiator: store, Recipient: copy, store>(bridge_transfer_id: vector<u8>, hash_lock: vector<u8>): (Recipient, u64)
+
+ + + + +
let table = global<SmartTableWrapper<vector<u8>, BridgeTransferDetails<Initiator, Recipient>>>(@aptos_framework).inner;
+aborts_if !features::spec_is_enabled(features::ATOMIC_BRIDGE);
+aborts_if !exists<SmartTableWrapper<vector<u8>, BridgeTransferDetails<Initiator, Recipient>>>(@aptos_framework);
+aborts_if !smart_table::spec_contains(table, bridge_transfer_id);
+let details = smart_table::spec_get(table, bridge_transfer_id);
+include BridgetTransferDetailsAbortsIf<Initiator, Recipient>;
+
+ + + + + + + +
schema AbortBridgetTransferDetailsAbortsIf<Initiator, Recipient> {
+    details: BridgeTransferDetails<Initiator, Recipient>;
+    aborts_if details.state != PENDING_TRANSACTION;
+    aborts_if !(timestamp::spec_now_seconds() > details.time_lock);
+    aborts_if !exists<CurrentTimeMicroseconds>(@aptos_framework);
+    ensures details.state == CANCELLED_TRANSACTION;
+}
+
+ + + + + +### Function `cancel_details` + + +
fun cancel_details<Initiator: copy, store, Recipient: store>(details: &mut atomic_bridge_store::BridgeTransferDetails<Initiator, Recipient>): (Initiator, u64)
+
+ + + + +
include AbortBridgetTransferDetailsAbortsIf<Initiator, Recipient>;
+
+ + + + + +# Module `0x1::atomic_bridge_configuration` + + + +- [Resource `BridgeConfig`](#0x1_atomic_bridge_configuration_BridgeConfig) +- [Struct `BridgeConfigOperatorUpdated`](#0x1_atomic_bridge_configuration_BridgeConfigOperatorUpdated) +- [Struct `InitiatorTimeLockUpdated`](#0x1_atomic_bridge_configuration_InitiatorTimeLockUpdated) +- [Struct `CounterpartyTimeLockUpdated`](#0x1_atomic_bridge_configuration_CounterpartyTimeLockUpdated) +- [Constants](#@Constants_0) +- [Function `initialize`](#0x1_atomic_bridge_configuration_initialize) +- [Function `update_bridge_operator`](#0x1_atomic_bridge_configuration_update_bridge_operator) +- [Function `set_initiator_time_lock_duration`](#0x1_atomic_bridge_configuration_set_initiator_time_lock_duration) +- [Function `set_counterparty_time_lock_duration`](#0x1_atomic_bridge_configuration_set_counterparty_time_lock_duration) +- [Function `initiator_timelock_duration`](#0x1_atomic_bridge_configuration_initiator_timelock_duration) +- [Function `counterparty_timelock_duration`](#0x1_atomic_bridge_configuration_counterparty_timelock_duration) +- [Function `bridge_operator`](#0x1_atomic_bridge_configuration_bridge_operator) +- [Function `assert_is_caller_operator`](#0x1_atomic_bridge_configuration_assert_is_caller_operator) +- [Specification](#@Specification_1) + - [Function `initialize`](#@Specification_1_initialize) + - [Function `update_bridge_operator`](#@Specification_1_update_bridge_operator) + + +
use 0x1::event;
+use 0x1::signer;
+use 0x1::system_addresses;
+
+ + + + + +## Resource `BridgeConfig` + + + +
struct BridgeConfig has key
+
+ + + +
+Fields + + +
+
+bridge_operator: address +
+
+ +
+
+initiator_time_lock: u64 +
+
+ +
+
+counterparty_time_lock: u64 +
+
+ +
+
+ + +
+ + + +## Struct `BridgeConfigOperatorUpdated` + +Event emitted when the bridge operator is updated. + + +
#[event]
+struct BridgeConfigOperatorUpdated has drop, store
+
+ + + +
+Fields + + +
+
+old_operator: address +
+
+ +
+
+new_operator: address +
+
+ +
+
+ + +
+ + + +## Struct `InitiatorTimeLockUpdated` + +Event emitted when the initiator time lock has been updated. + + +
#[event]
+struct InitiatorTimeLockUpdated has drop, store
+
+ + + +
+Fields + + +
+
+time_lock: u64 +
+
+ +
+
+ + +
+ + + +## Struct `CounterpartyTimeLockUpdated` + +Event emitted when the initiator time lock has been updated. + + +
#[event]
+struct CounterpartyTimeLockUpdated has drop, store
+
+ + + +
+Fields + + +
+
+time_lock: u64 +
+
+ +
+
+ + +
+ + + +## Constants + + + + +Counterparty time lock duration is 24 hours in seconds + + +
const COUNTERPARTY_TIME_LOCK_DUARTION: u64 = 86400;
+
+ + + + + +Error code for invalid bridge operator + + +
const EINVALID_BRIDGE_OPERATOR: u64 = 1;
+
+ + + + + +Initiator time lock duration is 48 hours in seconds + + +
const INITIATOR_TIME_LOCK_DUARTION: u64 = 172800;
+
+ + + + + +## Function `initialize` + +Initializes the bridge configuration with Aptos framework as the bridge operator. + +@param aptos_framework The signer representing the Aptos framework. + + +
public fun initialize(aptos_framework: &signer)
+
+ + + +
+Implementation + + +
public fun initialize(aptos_framework: &signer) {
+    system_addresses::assert_aptos_framework(aptos_framework);
+    let bridge_config = BridgeConfig {
+        bridge_operator: signer::address_of(aptos_framework),
+        initiator_time_lock: INITIATOR_TIME_LOCK_DUARTION,
+        counterparty_time_lock: COUNTERPARTY_TIME_LOCK_DUARTION,
+    };
+    move_to(aptos_framework, bridge_config);
+}
+
+ + + +
+ + + +## Function `update_bridge_operator` + +Updates the bridge operator, requiring governance validation. + +@param aptos_framework The signer representing the Aptos framework. +@param new_operator The new address to be set as the bridge operator. +@abort If the current operator is the same as the new operator. + + +
public fun update_bridge_operator(aptos_framework: &signer, new_operator: address)
+
+ + + +
+Implementation + + +
public fun update_bridge_operator(aptos_framework: &signer, new_operator: address
+)   acquires BridgeConfig {
+    system_addresses::assert_aptos_framework(aptos_framework);
+    let bridge_config = borrow_global_mut<BridgeConfig>(@aptos_framework);
+    let old_operator = bridge_config.bridge_operator;
+    assert!(old_operator != new_operator, EINVALID_BRIDGE_OPERATOR);
+
+    bridge_config.bridge_operator = new_operator;
+
+    event::emit(
+        BridgeConfigOperatorUpdated {
+            old_operator,
+            new_operator,
+        },
+    );
+}
+
+ + + +
+ + + +## Function `set_initiator_time_lock_duration` + + + +
public fun set_initiator_time_lock_duration(aptos_framework: &signer, time_lock: u64)
+
+ + + +
+Implementation + + +
public fun set_initiator_time_lock_duration(aptos_framework: &signer, time_lock: u64
+) acquires BridgeConfig {
+    system_addresses::assert_aptos_framework(aptos_framework);
+    borrow_global_mut<BridgeConfig>(@aptos_framework).initiator_time_lock = time_lock;
+
+    event::emit(
+        InitiatorTimeLockUpdated {
+            time_lock
+        },
+    );
+}
+
+ + + +
+ + + +## Function `set_counterparty_time_lock_duration` + + + +
public fun set_counterparty_time_lock_duration(aptos_framework: &signer, time_lock: u64)
+
+ + + +
+Implementation + + +
public fun set_counterparty_time_lock_duration(aptos_framework: &signer, time_lock: u64
+) acquires BridgeConfig {
+    system_addresses::assert_aptos_framework(aptos_framework);
+    borrow_global_mut<BridgeConfig>(@aptos_framework).counterparty_time_lock = time_lock;
+
+    event::emit(
+        CounterpartyTimeLockUpdated {
+            time_lock
+        },
+    );
+}
+
+ + + +
+ + + +## Function `initiator_timelock_duration` + + + +
#[view]
+public fun initiator_timelock_duration(): u64
+
+ + + +
+Implementation + + +
public fun initiator_timelock_duration() : u64 acquires BridgeConfig {
+    borrow_global<BridgeConfig>(@aptos_framework).initiator_time_lock
+}
+
+ + + +
+ + + +## Function `counterparty_timelock_duration` + + + +
#[view]
+public fun counterparty_timelock_duration(): u64
+
+ + + +
+Implementation + + +
public fun counterparty_timelock_duration() : u64 acquires BridgeConfig {
+    borrow_global<BridgeConfig>(@aptos_framework).counterparty_time_lock
+}
+
+ + + +
+ + + +## Function `bridge_operator` + +Retrieves the address of the current bridge operator. + +@return The address of the current bridge operator. + + +
#[view]
+public fun bridge_operator(): address
+
+ + + +
+Implementation + + +
public fun bridge_operator(): address acquires BridgeConfig {
+    borrow_global_mut<BridgeConfig>(@aptos_framework).bridge_operator
+}
+
+ + + +
+ + + +## Function `assert_is_caller_operator` + +Asserts that the caller is the current bridge operator. + +@param caller The signer whose authority is being checked. +@abort If the caller is not the current bridge operator. + + +
public(friend) fun assert_is_caller_operator(caller: &signer)
+
+ + + +
+Implementation + + +
public(friend) fun assert_is_caller_operator(caller: &signer
+) acquires BridgeConfig {
+    assert!(borrow_global<BridgeConfig>(@aptos_framework).bridge_operator == signer::address_of(caller), EINVALID_BRIDGE_OPERATOR);
+}
+
+ + + +
+ + + +## Specification + + + + +### Function `initialize` + + +
public fun initialize(aptos_framework: &signer)
+
+ + + + +
aborts_if !system_addresses::is_aptos_framework_address(signer::address_of(aptos_framework));
+aborts_if exists<BridgeConfig>(signer::address_of(aptos_framework));
+ensures global<BridgeConfig>(signer::address_of(aptos_framework)).bridge_operator == signer::address_of(aptos_framework);
+
+ + + + + +### Function `update_bridge_operator` + + +
public fun update_bridge_operator(aptos_framework: &signer, new_operator: address)
+
+ + + + +
aborts_if !system_addresses::is_aptos_framework_address(signer::address_of(aptos_framework));
+aborts_if !exists<BridgeConfig>(signer::address_of(aptos_framework));
+aborts_if global<BridgeConfig>(signer::address_of(aptos_framework)).bridge_operator == new_operator;
+ensures global<BridgeConfig>(signer::address_of(aptos_framework)).bridge_operator == new_operator;
+
+ + + + + +# Module `0x1::atomic_bridge` + + + +- [Resource `AptosCoinBurnCapability`](#0x1_atomic_bridge_AptosCoinBurnCapability) +- [Resource `AptosCoinMintCapability`](#0x1_atomic_bridge_AptosCoinMintCapability) +- [Resource `AptosFABurnCapabilities`](#0x1_atomic_bridge_AptosFABurnCapabilities) +- [Resource `AptosFAMintCapabilities`](#0x1_atomic_bridge_AptosFAMintCapabilities) +- [Constants](#@Constants_0) +- [Function `initialize`](#0x1_atomic_bridge_initialize) +- [Function `store_aptos_coin_burn_cap`](#0x1_atomic_bridge_store_aptos_coin_burn_cap) +- [Function `store_aptos_coin_mint_cap`](#0x1_atomic_bridge_store_aptos_coin_mint_cap) +- [Function `mint`](#0x1_atomic_bridge_mint) +- [Function `burn`](#0x1_atomic_bridge_burn) + + +
use 0x1::aptos_coin;
+use 0x1::atomic_bridge_configuration;
+use 0x1::atomic_bridge_store;
+use 0x1::coin;
+use 0x1::features;
+use 0x1::fungible_asset;
+use 0x1::system_addresses;
+
+ + + + + +## Resource `AptosCoinBurnCapability` + + + +
struct AptosCoinBurnCapability has key
+
+ + + +
+Fields + + +
+
+burn_cap: coin::BurnCapability<aptos_coin::AptosCoin> +
+
+ +
+
+ + +
+ + + +## Resource `AptosCoinMintCapability` + + + +
struct AptosCoinMintCapability has key
+
+ + + +
+Fields + + +
+
+mint_cap: coin::MintCapability<aptos_coin::AptosCoin> +
+
+ +
+
+ + +
+ + + +## Resource `AptosFABurnCapabilities` + + + +
struct AptosFABurnCapabilities has key
+
+ + + +
+Fields + + +
+
+burn_ref: fungible_asset::BurnRef +
+
+ +
+
+ + +
+ + + +## Resource `AptosFAMintCapabilities` + + + +
struct AptosFAMintCapabilities has key
+
+ + + +
+Fields + + +
+
+burn_ref: fungible_asset::MintRef +
+
+ +
+
+ + +
+ + + +## Constants + + + + + + +
const EATOMIC_BRIDGE_NOT_ENABLED: u64 = 1;
+
+ + + + + +## Function `initialize` + +Initializes the atomic bridge by setting up necessary configurations. + +@param aptos_framework The signer representing the Aptos framework. + + +
public fun initialize(aptos_framework: &signer)
+
+ + + +
+Implementation + + +
public fun initialize(aptos_framework: &signer) {
+    atomic_bridge_configuration::initialize(aptos_framework);
+    atomic_bridge_store::initialize(aptos_framework);
+}
+
+ + + +
+ + + +## Function `store_aptos_coin_burn_cap` + +Stores the burn capability for AptosCoin, converting to a fungible asset reference if the feature is enabled. + +@param aptos_framework The signer representing the Aptos framework. +@param burn_cap The burn capability for AptosCoin. + + +
public fun store_aptos_coin_burn_cap(aptos_framework: &signer, burn_cap: coin::BurnCapability<aptos_coin::AptosCoin>)
+
+ + + +
+Implementation + + +
public fun store_aptos_coin_burn_cap(aptos_framework: &signer, burn_cap: BurnCapability<AptosCoin>) {
+    system_addresses::assert_aptos_framework(aptos_framework);
+    if (features::operations_default_to_fa_apt_store_enabled()) {
+        let burn_ref = coin::convert_and_take_paired_burn_ref(burn_cap);
+        move_to(aptos_framework, AptosFABurnCapabilities { burn_ref });
+    } else {
+        move_to(aptos_framework, AptosCoinBurnCapability { burn_cap })
+    }
+}
+
+ + + +
+ + + +## Function `store_aptos_coin_mint_cap` + +Stores the mint capability for AptosCoin. + +@param aptos_framework The signer representing the Aptos framework. +@param mint_cap The mint capability for AptosCoin. + + +
public fun store_aptos_coin_mint_cap(aptos_framework: &signer, mint_cap: coin::MintCapability<aptos_coin::AptosCoin>)
+
+ + + +
+Implementation + + +
public fun store_aptos_coin_mint_cap(aptos_framework: &signer, mint_cap: MintCapability<AptosCoin>) {
+    system_addresses::assert_aptos_framework(aptos_framework);
+    move_to(aptos_framework, AptosCoinMintCapability { mint_cap })
+}
+
+ + + +
+ + + +## Function `mint` + +Mints a specified amount of AptosCoin to a recipient's address. + +@param recipient The address of the recipient to mint coins to. +@param amount The amount of AptosCoin to mint. +@abort If the mint capability is not available. + + +
public(friend) fun mint(recipient: address, amount: u64)
+
+ + + +
+Implementation + + +
public(friend) fun mint(recipient: address, amount: u64) acquires AptosCoinMintCapability {
+    assert!(features::abort_atomic_bridge_enabled(), EATOMIC_BRIDGE_NOT_ENABLED);
+
+    coin::deposit(recipient, coin::mint(
+        amount,
+        &borrow_global<AptosCoinMintCapability>(@aptos_framework).mint_cap
+    ));
+}
+
+ + + +
+ + + +## Function `burn` + +Burns a specified amount of AptosCoin from an address. + +@param from The address from which to burn AptosCoin. +@param amount The amount of AptosCoin to burn. +@abort If the burn capability is not available. + + +
public(friend) fun burn(from: address, amount: u64)
+
+ + + +
+Implementation + + +
public(friend) fun burn(from: address, amount: u64) acquires AptosCoinBurnCapability {
+    assert!(features::abort_atomic_bridge_enabled(), EATOMIC_BRIDGE_NOT_ENABLED);
+
+    coin::burn_from(
+        from,
+        amount,
+        &borrow_global<AptosCoinBurnCapability>(@aptos_framework).burn_cap,
+    );
+}
+
+ + + +
+ + + + + +# Module `0x1::atomic_bridge_counterparty` + + + +- [Struct `BridgeTransferLockedEvent`](#0x1_atomic_bridge_counterparty_BridgeTransferLockedEvent) +- [Struct `BridgeTransferCompletedEvent`](#0x1_atomic_bridge_counterparty_BridgeTransferCompletedEvent) +- [Struct `BridgeTransferCancelledEvent`](#0x1_atomic_bridge_counterparty_BridgeTransferCancelledEvent) +- [Resource `BridgeCounterpartyEvents`](#0x1_atomic_bridge_counterparty_BridgeCounterpartyEvents) +- [Function `initialize`](#0x1_atomic_bridge_counterparty_initialize) +- [Function `lock_bridge_transfer_assets`](#0x1_atomic_bridge_counterparty_lock_bridge_transfer_assets) +- [Function `complete_bridge_transfer`](#0x1_atomic_bridge_counterparty_complete_bridge_transfer) +- [Function `abort_bridge_transfer`](#0x1_atomic_bridge_counterparty_abort_bridge_transfer) + + +
use 0x1::account;
+use 0x1::atomic_bridge;
+use 0x1::atomic_bridge_configuration;
+use 0x1::atomic_bridge_store;
+use 0x1::ethereum;
+use 0x1::event;
+
+ + + + + +## Struct `BridgeTransferLockedEvent` + +An event triggered upon locking assets for a bridge transfer + + +
#[event]
+struct BridgeTransferLockedEvent has drop, store
+
+ + + +
+Fields + + +
+
+bridge_transfer_id: vector<u8> +
+
+ +
+
+initiator: vector<u8> +
+
+ +
+
+recipient: address +
+
+ +
+
+amount: u64 +
+
+ +
+
+hash_lock: vector<u8> +
+
+ +
+
+time_lock: u64 +
+
+ +
+
+ + +
+ + + +## Struct `BridgeTransferCompletedEvent` + +An event triggered upon completing a bridge transfer + + +
#[event]
+struct BridgeTransferCompletedEvent has drop, store
+
+ + + +
+Fields + + +
+
+bridge_transfer_id: vector<u8> +
+
+ +
+
+pre_image: vector<u8> +
+
+ +
+
+ + +
+ + + +## Struct `BridgeTransferCancelledEvent` + +An event triggered upon cancelling a bridge transfer + + +
#[event]
+struct BridgeTransferCancelledEvent has drop, store
+
+ + + +
+Fields + + +
+
+bridge_transfer_id: vector<u8> +
+
+ +
+
+ + +
+ + + +## Resource `BridgeCounterpartyEvents` + +This struct will store the event handles for bridge events. + + +
struct BridgeCounterpartyEvents has store, key
+
+ + + +
+Fields + + +
+
+bridge_transfer_locked_events: event::EventHandle<atomic_bridge_counterparty::BridgeTransferLockedEvent> +
+
+ +
+
+bridge_transfer_completed_events: event::EventHandle<atomic_bridge_counterparty::BridgeTransferCompletedEvent> +
+
+ +
+
+bridge_transfer_cancelled_events: event::EventHandle<atomic_bridge_counterparty::BridgeTransferCancelledEvent> +
+
+ +
+
+ + +
+ + + +## Function `initialize` + +Initializes the module and stores the EventHandles in the resource. + + +
public fun initialize(aptos_framework: &signer)
+
+ + + +
+Implementation + + +
public fun initialize(aptos_framework: &signer) {
+    move_to(aptos_framework, BridgeCounterpartyEvents {
+        bridge_transfer_locked_events: account::new_event_handle<BridgeTransferLockedEvent>(aptos_framework),
+        bridge_transfer_completed_events: account::new_event_handle<BridgeTransferCompletedEvent>(aptos_framework),
+        bridge_transfer_cancelled_events: account::new_event_handle<BridgeTransferCancelledEvent>(aptos_framework),
+    });
+}
+
+ + + +
+ + + +## Function `lock_bridge_transfer_assets` + +Locks assets for a bridge transfer by the initiator. + +@param caller The signer representing the bridge operator. +@param initiator The initiator's Ethereum address as a vector of bytes. +@param bridge_transfer_id The unique identifier for the bridge transfer. +@param hash_lock The hash lock for securing the transfer. +@param time_lock The time lock duration for the transfer. +@param recipient The address of the recipient on the Aptos blockchain. +@param amount The amount of assets to be locked. +@abort If the caller is not the bridge operator. + + +
public entry fun lock_bridge_transfer_assets(caller: &signer, initiator: vector<u8>, bridge_transfer_id: vector<u8>, hash_lock: vector<u8>, recipient: address, amount: u64)
+
+ + + +
+Implementation + + +
public entry fun lock_bridge_transfer_assets (
+    caller: &signer,
+    initiator: vector<u8>,
+    bridge_transfer_id: vector<u8>,
+    hash_lock: vector<u8>,
+    recipient: address,
+    amount: u64
+) acquires BridgeCounterpartyEvents {
+    atomic_bridge_configuration::assert_is_caller_operator(caller);
+    let ethereum_address = ethereum::ethereum_address_no_eip55(initiator);
+    let time_lock = atomic_bridge_configuration::counterparty_timelock_duration();
+    let details = atomic_bridge_store::create_details(
+        ethereum_address,
+        recipient,
+        amount,
+        hash_lock,
+        time_lock
+    );
+
+    // bridge_store::add_counterparty(bridge_transfer_id, details);
+    atomic_bridge_store::add(bridge_transfer_id, details);
+
+    let bridge_events = borrow_global_mut<BridgeCounterpartyEvents>(@aptos_framework);
+
+    event::emit_event(
+        &mut bridge_events.bridge_transfer_locked_events,
+        BridgeTransferLockedEvent {
+            bridge_transfer_id,
+            initiator,
+            recipient,
+            amount,
+            hash_lock,
+            time_lock,
+        },
+    );
+}
+
+ + + +
+ + + +## Function `complete_bridge_transfer` + +Completes a bridge transfer by revealing the pre-image. + +@param bridge_transfer_id The unique identifier for the bridge transfer. +@param pre_image The pre-image that matches the hash lock to complete the transfer. +@abort If the caller is not the bridge operator or the hash lock validation fails. + + +
public entry fun complete_bridge_transfer(bridge_transfer_id: vector<u8>, pre_image: vector<u8>)
+
+ + + +
+Implementation + + +
public entry fun complete_bridge_transfer (
+    bridge_transfer_id: vector<u8>,
+    pre_image: vector<u8>,
+) acquires BridgeCounterpartyEvents {
+    let (recipient, amount) = atomic_bridge_store::complete_transfer<EthereumAddress, address>(
+        bridge_transfer_id,
+        create_hashlock(pre_image)
+    );
+
+    // Mint, fails silently
+    atomic_bridge::mint(recipient, amount);
+
+    let bridge_counterparty_events = borrow_global_mut<BridgeCounterpartyEvents>(@aptos_framework);
+    event::emit_event(
+        &mut bridge_counterparty_events.bridge_transfer_completed_events,
+        BridgeTransferCompletedEvent {
+            bridge_transfer_id,
+            pre_image,
+        },
+    );
+}
+
+ + + +
+ + + +## Function `abort_bridge_transfer` + +Aborts a bridge transfer if the time lock has expired. + +@param caller The signer representing the bridge operator. +@param bridge_transfer_id The unique identifier for the bridge transfer. +@abort If the caller is not the bridge operator or if the time lock has not expired. + + +
public entry fun abort_bridge_transfer(caller: &signer, bridge_transfer_id: vector<u8>)
+
+ + + +
+Implementation + + +
public entry fun abort_bridge_transfer (
+    caller: &signer,
+    bridge_transfer_id: vector<u8>
+) acquires BridgeCounterpartyEvents {
+    atomic_bridge_configuration::assert_is_caller_operator(caller);
+
+    atomic_bridge_store::cancel_transfer<EthereumAddress, address>(bridge_transfer_id);
+
+    let bridge_counterparty_events = borrow_global_mut<BridgeCounterpartyEvents>(@aptos_framework);
+    event::emit_event(
+        &mut bridge_counterparty_events.bridge_transfer_cancelled_events,
+        BridgeTransferCancelledEvent {
+            bridge_transfer_id,
+        },
+    );
+}
+
+ + + +
+ + + + + +# Module `0x1::atomic_bridge_initiator` + + + +- [Struct `BridgeTransferInitiatedEvent`](#0x1_atomic_bridge_initiator_BridgeTransferInitiatedEvent) +- [Struct `BridgeTransferCompletedEvent`](#0x1_atomic_bridge_initiator_BridgeTransferCompletedEvent) +- [Struct `BridgeTransferRefundedEvent`](#0x1_atomic_bridge_initiator_BridgeTransferRefundedEvent) +- [Resource `BridgeInitiatorEvents`](#0x1_atomic_bridge_initiator_BridgeInitiatorEvents) +- [Function `initialize`](#0x1_atomic_bridge_initiator_initialize) +- [Function `initiate_bridge_transfer`](#0x1_atomic_bridge_initiator_initiate_bridge_transfer) +- [Function `complete_bridge_transfer`](#0x1_atomic_bridge_initiator_complete_bridge_transfer) +- [Function `refund_bridge_transfer`](#0x1_atomic_bridge_initiator_refund_bridge_transfer) + + +
use 0x1::account;
+use 0x1::atomic_bridge;
+use 0x1::atomic_bridge_configuration;
+use 0x1::atomic_bridge_store;
+use 0x1::ethereum;
+use 0x1::event;
+use 0x1::signer;
+
+ + + + + +## Struct `BridgeTransferInitiatedEvent` + + + +
#[event]
+struct BridgeTransferInitiatedEvent has drop, store
+
+ + + +
+Fields + + +
+
+bridge_transfer_id: vector<u8> +
+
+ +
+
+initiator: address +
+
+ +
+
+recipient: vector<u8> +
+
+ +
+
+amount: u64 +
+
+ +
+
+hash_lock: vector<u8> +
+
+ +
+
+time_lock: u64 +
+
+ +
+
+ + +
+ + + +## Struct `BridgeTransferCompletedEvent` + + + +
#[event]
+struct BridgeTransferCompletedEvent has drop, store
+
+ + + +
+Fields + + +
+
+bridge_transfer_id: vector<u8> +
+
+ +
+
+pre_image: vector<u8> +
+
+ +
+
+ + +
+ + + +## Struct `BridgeTransferRefundedEvent` + + + +
#[event]
+struct BridgeTransferRefundedEvent has drop, store
+
+ + + +
+Fields + + +
+
+bridge_transfer_id: vector<u8> +
+
+ +
+
+ + +
+ + + +## Resource `BridgeInitiatorEvents` + +This struct will store the event handles for bridge events. + + +
struct BridgeInitiatorEvents has store, key
+
+ + + +
+Fields + + +
+
+bridge_transfer_initiated_events: event::EventHandle<atomic_bridge_initiator::BridgeTransferInitiatedEvent> +
+
+ +
+
+bridge_transfer_completed_events: event::EventHandle<atomic_bridge_initiator::BridgeTransferCompletedEvent> +
+
+ +
+
+bridge_transfer_refunded_events: event::EventHandle<atomic_bridge_initiator::BridgeTransferRefundedEvent> +
+
+ +
+
+ + +
+ + + +## Function `initialize` + +Initializes the module and stores the EventHandles in the resource. + + +
public fun initialize(aptos_framework: &signer)
+
+ + + +
+Implementation + + +
public fun initialize(aptos_framework: &signer) {
+    move_to(aptos_framework, BridgeInitiatorEvents {
+        bridge_transfer_initiated_events: account::new_event_handle<BridgeTransferInitiatedEvent>(aptos_framework),
+        bridge_transfer_completed_events: account::new_event_handle<BridgeTransferCompletedEvent>(aptos_framework),
+        bridge_transfer_refunded_events: account::new_event_handle<BridgeTransferRefundedEvent>(aptos_framework),
+    });
+}
+
+ + + +
+ + + +## Function `initiate_bridge_transfer` + +Initiate a bridge transfer of ETH from Movement to the base layer +Anyone can initiate a bridge transfer from the source chain +The amount is burnt from the initiator + + +
public entry fun initiate_bridge_transfer(initiator: &signer, recipient: vector<u8>, hash_lock: vector<u8>, amount: u64)
+
+ + + +
+Implementation + + +
public entry fun initiate_bridge_transfer(
+    initiator: &signer,
+    recipient: vector<u8>,
+    hash_lock: vector<u8>,
+    amount: u64
+) acquires BridgeInitiatorEvents {
+    let ethereum_address = ethereum::ethereum_address_no_eip55(recipient);
+    let initiator_address = signer::address_of(initiator);
+    let time_lock = atomic_bridge_configuration::initiator_timelock_duration();
+
+    let details =
+        atomic_bridge_store::create_details(
+            initiator_address,
+            ethereum_address, amount,
+            hash_lock,
+            time_lock
+        );
+
+    let bridge_transfer_id = bridge_transfer_id(&details);
+    atomic_bridge_store::add(bridge_transfer_id, details);
+    atomic_bridge::burn(initiator_address, amount);
+
+    let bridge_initiator_events = borrow_global_mut<BridgeInitiatorEvents>(@aptos_framework);
+    event::emit_event(
+        &mut bridge_initiator_events.bridge_transfer_initiated_events,
+        BridgeTransferInitiatedEvent {
+            bridge_transfer_id,
+            initiator: initiator_address,
+            recipient,
+            amount,
+            hash_lock,
+            time_lock
+        },
+    );
+}
+
+ + + +
+ + + +## Function `complete_bridge_transfer` + +Bridge operator can complete the transfer + + +
public entry fun complete_bridge_transfer(caller: &signer, bridge_transfer_id: vector<u8>, pre_image: vector<u8>)
+
+ + + +
+Implementation + + +
public entry fun complete_bridge_transfer (
+    caller: &signer,
+    bridge_transfer_id: vector<u8>,
+    pre_image: vector<u8>,
+) acquires BridgeInitiatorEvents {
+    assert_is_caller_operator(caller);
+    let (_, _) = atomic_bridge_store::complete_transfer<address, EthereumAddress>(bridge_transfer_id, create_hashlock(pre_image));
+
+    let bridge_initiator_events = borrow_global_mut<BridgeInitiatorEvents>(@aptos_framework);
+    event::emit_event(
+        &mut bridge_initiator_events.bridge_transfer_completed_events,
+        BridgeTransferCompletedEvent {
+            bridge_transfer_id,
+            pre_image,
+        },
+    );
+}
+
+ + + +
+ + + +## Function `refund_bridge_transfer` + +Anyone can refund the transfer on the source chain once time lock has passed + + +
public entry fun refund_bridge_transfer(_caller: &signer, bridge_transfer_id: vector<u8>)
+
+ + + +
+Implementation + + +
public entry fun refund_bridge_transfer (
+    _caller: &signer,
+    bridge_transfer_id: vector<u8>,
+) acquires BridgeInitiatorEvents {
+    let (receiver, amount) = atomic_bridge_store::cancel_transfer<address, EthereumAddress>(bridge_transfer_id);
+    atomic_bridge::mint(receiver, amount);
+
+    let bridge_initiator_events = borrow_global_mut<BridgeInitiatorEvents>(@aptos_framework);
+    event::emit_event(
+        &mut bridge_initiator_events.bridge_transfer_refunded_events,
+        BridgeTransferRefundedEvent {
+            bridge_transfer_id,
+        },
+    );
+}
+
+ + + +
+ + +[move-book]: https://aptos.dev/move/book/SUMMARY diff --git a/aptos-move/framework/aptos-framework/doc/chain_status.md b/aptos-move/framework/aptos-framework/doc/chain_status.md index 4bbd28af10ccc..d7b9924a2be1b 100644 --- a/aptos-move/framework/aptos-framework/doc/chain_status.md +++ b/aptos-move/framework/aptos-framework/doc/chain_status.md @@ -205,7 +205,7 @@ Helper function to assert genesis state.
public fun assert_genesis() {
-    assert!(is_genesis(), error::invalid_state(ENOT_OPERATING));
+    assert!(is_genesis(), error::invalid_state(ENOT_GENESIS));
 }
 
diff --git a/aptos-move/framework/aptos-framework/doc/coin.md b/aptos-move/framework/aptos-framework/doc/coin.md index c5ff5884262a7..75965c9d1b5fa 100644 --- a/aptos-move/framework/aptos-framework/doc/coin.md +++ b/aptos-move/framework/aptos-framework/doc/coin.md @@ -94,6 +94,7 @@ This module provides the foundation for typesafe Coins. - [Function `register`](#0x1_coin_register) - [Function `transfer`](#0x1_coin_transfer) - [Function `value`](#0x1_coin_value) +- [Function `withdraw_from`](#0x1_coin_withdraw_from) - [Function `withdraw`](#0x1_coin_withdraw) - [Function `zero`](#0x1_coin_zero) - [Function `destroy_freeze_cap`](#0x1_coin_destroy_freeze_cap) @@ -3399,6 +3400,71 @@ Returns the value passed in coin + + + +## Function `withdraw_from` + +Withdraws a specifed amount of coin CoinType from the specified account. +@param account The account from which to withdraw the coin. +@param amount The amount of coin to withdraw. + + +
public(friend) fun withdraw_from<CoinType>(account_addr: address, amount: u64): coin::Coin<CoinType>
+
+ + + +
+Implementation + + +
public(friend) fun withdraw_from<CoinType>(
+    account_addr: address,
+    amount: u64
+): Coin<CoinType> acquires CoinStore, CoinConversionMap, CoinInfo, PairedCoinType {
+
+    let (coin_amount_to_withdraw, fa_amount_to_withdraw) = calculate_amount_to_withdraw<CoinType>(
+        account_addr,
+        amount
+    );
+    let withdrawn_coin = if (coin_amount_to_withdraw > 0) {
+        let coin_store = borrow_global_mut<CoinStore<CoinType>>(account_addr);
+        assert!(
+            !coin_store.frozen,
+            error::permission_denied(EFROZEN),
+        );
+        if (std::features::module_event_migration_enabled()) {
+            event::emit(
+                CoinWithdraw {
+                    coin_type: type_name<CoinType>(), account: account_addr, amount: coin_amount_to_withdraw
+                }
+            );
+        };
+        event::emit_event<WithdrawEvent>(
+            &mut coin_store.withdraw_events,
+            WithdrawEvent { amount: coin_amount_to_withdraw },
+        );
+        extract(&mut coin_store.coin, coin_amount_to_withdraw)
+    } else {
+        zero()
+    };
+    if (fa_amount_to_withdraw > 0) {
+        let store_addr = primary_fungible_store::primary_store_address(
+            account_addr,
+            option::destroy_some(paired_metadata<CoinType>())
+        );
+        let fa = fungible_asset::withdraw_internal(store_addr, fa_amount_to_withdraw);
+        merge(&mut withdrawn_coin, fungible_asset_to_coin<CoinType>(fa));
+    };
+
+    withdrawn_coin
+}
+
+ + +
@@ -3814,64 +3880,6 @@ initialize, initialize_internal, initialize_with_parallelizable_supply; - - - - -
fun spec_is_account_registered<CoinType>(account_addr: address): bool {
-   let paired_metadata_opt = spec_paired_metadata<CoinType>();
-   exists<CoinStore<CoinType>>(account_addr) || (option::spec_is_some(
-       paired_metadata_opt
-   ) && primary_fungible_store::spec_primary_store_exists(account_addr, option::spec_borrow(paired_metadata_opt)))
-}
-
- - - - - - - -
schema CoinSubAbortsIf<CoinType> {
-    amount: u64;
-    let addr = type_info::type_of<CoinType>().account_address;
-    let maybe_supply = global<CoinInfo<CoinType>>(addr).supply;
-    include (option::is_some(
-        maybe_supply
-    )) ==> optional_aggregator::SubAbortsIf { optional_aggregator: option::borrow(maybe_supply), value: amount };
-}
-
- - - - - - - -
schema CoinAddAbortsIf<CoinType> {
-    amount: u64;
-    let addr = type_info::type_of<CoinType>().account_address;
-    let maybe_supply = global<CoinInfo<CoinType>>(addr).supply;
-    include (option::is_some(
-        maybe_supply
-    )) ==> optional_aggregator::AddAbortsIf { optional_aggregator: option::borrow(maybe_supply), value: amount };
-}
-
- - - - - - - -
schema AbortsIfNotExistCoinInfo<CoinType> {
-    let addr = type_info::type_of<CoinType>().account_address;
-    aborts_if !exists<CoinInfo<CoinType>>(addr);
-}
-
- - - ### Struct `AggregatableCoin` @@ -4095,20 +4103,6 @@ Can only be updated by @aptos_framework. - - - - -
schema DepositAbortsIf<CoinType> {
-    account_addr: address;
-    let coin_store = global<CoinStore<CoinType>>(account_addr);
-    aborts_if !exists<CoinStore<CoinType>>(account_addr);
-    aborts_if coin_store.frozen;
-}
-
- - - ### Function `coin_address` @@ -4215,6 +4209,64 @@ Get address by reflection. + + + + +
fun spec_is_account_registered<CoinType>(account_addr: address): bool {
+   let paired_metadata_opt = spec_paired_metadata<CoinType>();
+   exists<CoinStore<CoinType>>(account_addr) || (option::spec_is_some(
+       paired_metadata_opt
+   ) && primary_fungible_store::spec_primary_store_exists(account_addr, option::spec_borrow(paired_metadata_opt)))
+}
+
+ + + + + + + +
schema CoinSubAbortsIf<CoinType> {
+    amount: u64;
+    let addr = type_info::type_of<CoinType>().account_address;
+    let maybe_supply = global<CoinInfo<CoinType>>(addr).supply;
+    include (option::is_some(
+        maybe_supply
+    )) ==> optional_aggregator::SubAbortsIf { optional_aggregator: option::borrow(maybe_supply), value: amount };
+}
+
+ + + + + + + +
schema CoinAddAbortsIf<CoinType> {
+    amount: u64;
+    let addr = type_info::type_of<CoinType>().account_address;
+    let maybe_supply = global<CoinInfo<CoinType>>(addr).supply;
+    include (option::is_some(
+        maybe_supply
+    )) ==> optional_aggregator::AddAbortsIf { optional_aggregator: option::borrow(maybe_supply), value: amount };
+}
+
+ + + + + + + +
schema AbortsIfNotExistCoinInfo<CoinType> {
+    let addr = type_info::type_of<CoinType>().account_address;
+    aborts_if !exists<CoinInfo<CoinType>>(addr);
+}
+
+ + + ### Function `name` diff --git a/aptos-move/framework/aptos-framework/doc/ethereum.md b/aptos-move/framework/aptos-framework/doc/ethereum.md new file mode 100644 index 0000000000000..0c67a4ce65fed --- /dev/null +++ b/aptos-move/framework/aptos-framework/doc/ethereum.md @@ -0,0 +1,421 @@ + + + +# Module `0x1::ethereum` + + + +- [Struct `EthereumAddress`](#0x1_ethereum_EthereumAddress) +- [Constants](#@Constants_0) +- [Function `ethereum_address`](#0x1_ethereum_ethereum_address) +- [Function `ethereum_address_no_eip55`](#0x1_ethereum_ethereum_address_no_eip55) +- [Function `ethereum_address_20_bytes`](#0x1_ethereum_ethereum_address_20_bytes) +- [Function `get_inner_ethereum_address`](#0x1_ethereum_get_inner_ethereum_address) +- [Function `to_lowercase`](#0x1_ethereum_to_lowercase) +- [Function `to_eip55_checksumed_address`](#0x1_ethereum_to_eip55_checksumed_address) +- [Function `get_inner`](#0x1_ethereum_get_inner) +- [Function `assert_eip55`](#0x1_ethereum_assert_eip55) +- [Function `assert_40_char_hex`](#0x1_ethereum_assert_40_char_hex) + + +
use 0x1::aptos_hash;
+
+ + + + + +## Struct `EthereumAddress` + +Represents an Ethereum address within Aptos smart contracts. +Provides structured handling, storage, and validation of Ethereum addresses. + + +
struct EthereumAddress has copy, drop, store
+
+ + + +
+Fields + + +
+
+inner: vector<u8> +
+
+ +
+
+ + +
+ + + +## Constants + + + + +Constants for ASCII character codes + + +
const ASCII_A: u8 = 65;
+
+ + + + + + + +
const ASCII_A_LOWERCASE: u8 = 97;
+
+ + + + + + + +
const ASCII_F_LOWERCASE: u8 = 102;
+
+ + + + + + + +
const ASCII_Z: u8 = 90;
+
+ + + + + + + +
const EINVALID_LENGTH: u64 = 1;
+
+ + + + + +## Function `ethereum_address` + +Validates an Ethereum address against EIP-55 checksum rules and returns a new EthereumAddress. + +@param ethereum_address A 40-byte vector of unsigned 8-bit integers (hexadecimal format). +@return A validated EthereumAddress struct. +@abort If the address does not conform to EIP-55 standards. + + +
public fun ethereum_address(ethereum_address: vector<u8>): ethereum::EthereumAddress
+
+ + + +
+Implementation + + +
public fun ethereum_address(ethereum_address: vector<u8>): EthereumAddress {
+    assert_eip55(ðereum_address);
+    EthereumAddress { inner: ethereum_address }
+}
+
+ + + +
+ + + +## Function `ethereum_address_no_eip55` + +Returns a new EthereumAddress without EIP-55 validation. + +@param ethereum_address A 40-byte vector of unsigned 8-bit integers (hexadecimal format). +@return A validated EthereumAddress struct. +@abort If the address does not conform to EIP-55 standards. + + +
public fun ethereum_address_no_eip55(ethereum_address: vector<u8>): ethereum::EthereumAddress
+
+ + + +
+Implementation + + +
public fun ethereum_address_no_eip55(ethereum_address: vector<u8>): EthereumAddress {
+    assert_40_char_hex(ðereum_address);
+    EthereumAddress { inner: ethereum_address }
+}
+
+ + + +
+ + + +## Function `ethereum_address_20_bytes` + +Returns a new 20-byte EthereumAddress without EIP-55 validation. + +@param ethereum_address A 20-byte vector of unsigned 8-bit bytes. +@return An EthereumAddress struct. +@abort If the address does not conform to EIP-55 standards. + + +
public fun ethereum_address_20_bytes(ethereum_address: vector<u8>): ethereum::EthereumAddress
+
+ + + +
+Implementation + + +
public fun ethereum_address_20_bytes(ethereum_address: vector<u8>): EthereumAddress {
+    assert!(vector::length(ðereum_address) == 20, EINVALID_LENGTH);
+    EthereumAddress { inner: ethereum_address }
+}
+
+ + + +
+ + + +## Function `get_inner_ethereum_address` + +Gets the inner vector of an EthereumAddress. + +@param ethereum_address A 40-byte vector of unsigned 8-bit integers (hexadecimal format). +@return The vector inner value of the EthereumAddress + + +
public fun get_inner_ethereum_address(ethereum_address: ethereum::EthereumAddress): vector<u8>
+
+ + + +
+Implementation + + +
public fun get_inner_ethereum_address(ethereum_address: EthereumAddress): vector<u8> {
+    ethereum_address.inner
+}
+
+ + + +
+ + + +## Function `to_lowercase` + +Converts uppercase ASCII characters in a vector to their lowercase equivalents. + +@param input A reference to a vector of ASCII characters. +@return A new vector with lowercase equivalents of the input characters. +@note Only affects ASCII letters; non-alphabetic characters are unchanged. + + +
public fun to_lowercase(input: &vector<u8>): vector<u8>
+
+ + + +
+Implementation + + +
public fun to_lowercase(input: &vector<u8>): vector<u8> {
+    let lowercase_bytes = vector::empty();
+    vector::enumerate_ref(input, |_i, element| {
+        let lower_byte = if (*element >= ASCII_A && *element <= ASCII_Z) {
+            *element + 32
+        } else {
+            *element
+        };
+        vector::push_back<u8>(&mut lowercase_bytes, lower_byte);
+    });
+    lowercase_bytes
+}
+
+ + + +
+ + + +## Function `to_eip55_checksumed_address` + +Converts an Ethereum address to EIP-55 checksummed format. + +@param ethereum_address A 40-character vector representing the Ethereum address in hexadecimal format. +@return The EIP-55 checksummed version of the input address. +@abort If the input address does not have exactly 40 characters. +@note Assumes input address is valid and in lowercase hexadecimal format. + + +
public fun to_eip55_checksumed_address(ethereum_address: &vector<u8>): vector<u8>
+
+ + + +
+Implementation + + +
public fun to_eip55_checksumed_address(ethereum_address: &vector<u8>): vector<u8> {
+    assert!(vector::length(ethereum_address) == 40, 0);
+    let lowercase = to_lowercase(ethereum_address);
+    let hash = keccak256(lowercase);
+    let output = vector::empty<u8>();
+
+    for (index in 0..40) {
+        let item = *vector::borrow(ethereum_address, index);
+        if (item >= ASCII_A_LOWERCASE && item <= ASCII_F_LOWERCASE) {
+            let hash_item = *vector::borrow(&hash, index / 2);
+            if ((hash_item >> ((4 * (1 - (index % 2))) as u8)) & 0xF >= 8) {
+                vector::push_back(&mut output, item - 32);
+            } else {
+                vector::push_back(&mut output, item);
+            }
+        } else {
+            vector::push_back(&mut output, item);
+        }
+    };
+    output
+}
+
+ + + +
+ + + +## Function `get_inner` + + + +
public fun get_inner(eth_address: &ethereum::EthereumAddress): vector<u8>
+
+ + + +
+Implementation + + +
public fun get_inner(eth_address: &EthereumAddress): vector<u8> {
+    eth_address.inner
+}
+
+ + + +
+ + + +## Function `assert_eip55` + +Checks if an Ethereum address conforms to the EIP-55 checksum standard. + +@param ethereum_address A reference to a 40-character vector of an Ethereum address in hexadecimal format. +@abort If the address does not match its EIP-55 checksummed version. +@note Assumes the address is correctly formatted as a 40-character hexadecimal string. + + +
public fun assert_eip55(ethereum_address: &vector<u8>)
+
+ + + +
+Implementation + + +
public fun assert_eip55(ethereum_address: &vector<u8>) {
+    let eip55 = to_eip55_checksumed_address(ethereum_address);
+    let len = vector::length(&eip55);
+    for (index in 0..len) {
+        assert!(vector::borrow(&eip55, index) == vector::borrow(ethereum_address, index), 0);
+    };
+}
+
+ + + +
+ + + +## Function `assert_40_char_hex` + +Checks if an Ethereum address is a nonzero 40-character hexadecimal string. + +@param ethereum_address A reference to a vector of bytes representing the Ethereum address as characters. +@abort If the address is not 40 characters long, contains invalid characters, or is all zeros. + + +
public fun assert_40_char_hex(ethereum_address: &vector<u8>)
+
+ + + +
+Implementation + + +
public fun assert_40_char_hex(ethereum_address: &vector<u8>) {
+    let len = vector::length(ethereum_address);
+
+    // Ensure the address is exactly 40 characters long
+    assert!(len == 40, 1);
+
+    // Ensure the address contains only valid hexadecimal characters
+    let is_zero = true;
+    for (index in 0..len) {
+        let char = *vector::borrow(ethereum_address, index);
+
+        // Check if the character is a valid hexadecimal character (0-9, a-f, A-F)
+        assert!(
+            (char >= 0x30 && char <= 0x39) || // '0' to '9'
+            (char >= 0x41 && char <= 0x46) || // 'A' to 'F'
+            (char >= 0x61 && char <= 0x66),  // 'a' to 'f'
+            2
+        );
+
+        // Check if the address is nonzero
+        if (char != 0x30) { // '0'
+            is_zero = false;
+        };
+    };
+
+    // Abort if the address is all zeros
+    assert!(!is_zero, 3);
+}
+
+ + + +
+ + +[move-book]: https://aptos.dev/move/book/SUMMARY diff --git a/aptos-move/framework/aptos-framework/doc/genesis.md b/aptos-move/framework/aptos-framework/doc/genesis.md index 5fcac753d7489..ded5b7e242f39 100644 --- a/aptos-move/framework/aptos-framework/doc/genesis.md +++ b/aptos-move/framework/aptos-framework/doc/genesis.md @@ -12,6 +12,7 @@ - [Constants](#@Constants_0) - [Function `initialize`](#0x1_genesis_initialize) - [Function `initialize_aptos_coin`](#0x1_genesis_initialize_aptos_coin) +- [Function `initialize_governed_gas_pool`](#0x1_genesis_initialize_governed_gas_pool) - [Function `initialize_core_resources_and_aptos_coin`](#0x1_genesis_initialize_core_resources_and_aptos_coin) - [Function `create_accounts`](#0x1_genesis_create_accounts) - [Function `create_account`](#0x1_genesis_create_account) @@ -50,6 +51,8 @@ use 0x1::features; use 0x1::fixed_point32; use 0x1::gas_schedule; +use 0x1::governed_gas_pool; +use 0x1::native_bridge; use 0x1::reconfiguration; use 0x1::simple_map; use 0x1::stake; @@ -365,6 +368,7 @@ Genesis step 1: Initialize aptos framework account and core modules on chain. block::initialize(&aptos_framework_account, epoch_interval_microsecs); state_storage::initialize(&aptos_framework_account); timestamp::set_time_has_started(&aptos_framework_account); + native_bridge::initialize(&aptos_framework_account); }
@@ -405,6 +409,33 @@ Genesis step 2: Initialize Aptos coin. + + + + +## Function `initialize_governed_gas_pool` + + + +
fun initialize_governed_gas_pool(aptos_framework: &signer, delegation_pool_creation_seed: vector<u8>)
+
+ + + +
+Implementation + + +
fun initialize_governed_gas_pool(
+    aptos_framework: &signer,
+    delegation_pool_creation_seed: vector<u8>,
+) {
+    governed_gas_pool::initialize(aptos_framework, delegation_pool_creation_seed);
+}
+
+ + +
@@ -438,7 +469,6 @@ Only called for testnets and e2e tests. transaction_fee::store_aptos_coin_burn_cap(aptos_framework, burn_cap); // Give transaction_fee module MintCapability<AptosCoin> so it can mint refunds. transaction_fee::store_aptos_coin_mint_cap(aptos_framework, mint_cap); - let core_resources = account::create_account(@core_resources); account::rotate_authentication_key_internal(&core_resources, core_resources_auth_key); aptos_account::register_apt(&core_resources); // registers APT store diff --git a/aptos-move/framework/aptos-framework/doc/governed_gas_pool.md b/aptos-move/framework/aptos-framework/doc/governed_gas_pool.md new file mode 100644 index 0000000000000..1420628935966 --- /dev/null +++ b/aptos-move/framework/aptos-framework/doc/governed_gas_pool.md @@ -0,0 +1,568 @@ + + + +# Module `0x1::governed_gas_pool` + + + +- [Resource `GovernedGasPool`](#0x1_governed_gas_pool_GovernedGasPool) +- [Constants](#@Constants_0) +- [Function `primary_fungible_store_address`](#0x1_governed_gas_pool_primary_fungible_store_address) +- [Function `create_resource_account_seed`](#0x1_governed_gas_pool_create_resource_account_seed) +- [Function `initialize`](#0x1_governed_gas_pool_initialize) +- [Function `init_module`](#0x1_governed_gas_pool_init_module) +- [Function `governed_gas_signer`](#0x1_governed_gas_pool_governed_gas_signer) +- [Function `governed_gas_pool_address`](#0x1_governed_gas_pool_governed_gas_pool_address) +- [Function `fund`](#0x1_governed_gas_pool_fund) +- [Function `deposit`](#0x1_governed_gas_pool_deposit) +- [Function `deposit_from`](#0x1_governed_gas_pool_deposit_from) +- [Function `deposit_from_fungible_store`](#0x1_governed_gas_pool_deposit_from_fungible_store) +- [Function `deposit_gas_fee`](#0x1_governed_gas_pool_deposit_gas_fee) +- [Function `deposit_gas_fee_v2`](#0x1_governed_gas_pool_deposit_gas_fee_v2) +- [Function `get_balance`](#0x1_governed_gas_pool_get_balance) +- [Specification](#@Specification_1) + - [Function `initialize`](#@Specification_1_initialize) + - [Function `fund`](#@Specification_1_fund) + - [Function `deposit`](#@Specification_1_deposit) + - [Function `deposit_gas_fee`](#@Specification_1_deposit_gas_fee) + + +
use 0x1::account;
+use 0x1::aptos_account;
+use 0x1::aptos_coin;
+use 0x1::coin;
+use 0x1::features;
+use 0x1::fungible_asset;
+use 0x1::object;
+use 0x1::signer;
+use 0x1::system_addresses;
+use 0x1::vector;
+
+ + + + + +## Resource `GovernedGasPool` + +The Governed Gas Pool +Internally, this is a simply wrapper around a resource account. + + +
struct GovernedGasPool has key
+
+ + + +
+Fields + + +
+
+signer_capability: account::SignerCapability +
+
+ The signer capability of the resource account. +
+
+ + +
+ + + +## Constants + + + + + + +
const MODULE_SALT: vector<u8> = [97, 112, 116, 111, 115, 95, 102, 114, 97, 109, 101, 119, 111, 114, 107, 58, 58, 103, 111, 118, 101, 114, 110, 101, 100, 95, 103, 97, 115, 95, 112, 111, 111, 108];
+
+ + + + + +## Function `primary_fungible_store_address` + +Address of APT Primary Fungible Store + + +
fun primary_fungible_store_address(account: address): address
+
+ + + +
+Implementation + + +
inline fun primary_fungible_store_address(account: address): address {
+    object::create_user_derived_object_address(account, @aptos_fungible_asset)
+}
+
+ + + +
+ + + +## Function `create_resource_account_seed` + +Create the seed to derive the resource account address. + + +
fun create_resource_account_seed(delegation_pool_creation_seed: vector<u8>): vector<u8>
+
+ + + +
+Implementation + + +
fun create_resource_account_seed(
+    delegation_pool_creation_seed: vector<u8>,
+): vector<u8> {
+    let seed = vector::empty<u8>();
+    // include module salt (before any subseeds) to avoid conflicts with other modules creating resource accounts
+    vector::append(&mut seed, MODULE_SALT);
+    // include an additional salt in case the same resource account has already been created
+    vector::append(&mut seed, delegation_pool_creation_seed);
+    seed
+}
+
+ + + +
+ + + +## Function `initialize` + +Initializes the governed gas pool around a resource account creation seed. +@param aptos_framework The signer of the aptos_framework module. +@param delegation_pool_creation_seed The seed to be used to create the resource account hosting the delegation pool. + + +
public fun initialize(aptos_framework: &signer, delegation_pool_creation_seed: vector<u8>)
+
+ + + +
+Implementation + + +
public fun initialize(
+    aptos_framework: &signer,
+    delegation_pool_creation_seed: vector<u8>,
+) {
+    system_addresses::assert_aptos_framework(aptos_framework);
+
+    // return if the governed gas pool has already been initialized
+    if (exists<GovernedGasPool>(signer::address_of(aptos_framework))) {
+        return
+    };
+
+    // generate a seed to be used to create the resource account hosting the delegation pool
+    let seed = create_resource_account_seed(delegation_pool_creation_seed);
+
+    let (governed_gas_pool_signer, governed_gas_pool_signer_cap) = account::create_resource_account(aptos_framework, seed);
+
+    // register apt
+    aptos_account::register_apt(&governed_gas_pool_signer);
+
+    move_to(aptos_framework, GovernedGasPool{
+        signer_capability: governed_gas_pool_signer_cap,
+    });
+}
+
+ + + +
+ + + +## Function `init_module` + +Initialize the governed gas pool as a module +@param aptos_framework The signer of the aptos_framework module. + + +
fun init_module(aptos_framework: &signer)
+
+ + + +
+Implementation + + +
fun init_module(aptos_framework: &signer) {
+    // Initialize the governed gas pool
+    let seed : vector<u8> = b"aptos_framework::governed_gas_pool";
+    initialize(aptos_framework, seed);
+}
+
+ + + +
+ + + +## Function `governed_gas_signer` + +Borrows the signer of the governed gas pool. +@return The signer of the governed gas pool. + + +
fun governed_gas_signer(): signer
+
+ + + +
+Implementation + + +
fun governed_gas_signer(): signer acquires GovernedGasPool {
+    let signer_cap = &borrow_global<GovernedGasPool>(@aptos_framework).signer_capability;
+    create_signer_with_capability(signer_cap)
+}
+
+ + + +
+ + + +## Function `governed_gas_pool_address` + +Gets the address of the governed gas pool. +@return The address of the governed gas pool. + + +
#[view]
+public fun governed_gas_pool_address(): address
+
+ + + +
+Implementation + + +
public fun governed_gas_pool_address(): address acquires GovernedGasPool {
+    signer::address_of(&governed_gas_signer())
+}
+
+ + + +
+ + + +## Function `fund` + +Funds the destination account with a given amount of coin. +@param account The account to be funded. +@param amount The amount of coin to be funded. + + +
public fun fund<CoinType>(aptos_framework: &signer, account: address, amount: u64)
+
+ + + +
+Implementation + + +
public fun fund<CoinType>(aptos_framework: &signer, account: address, amount: u64) acquires GovernedGasPool {
+    // Check that the Aptos framework is the caller
+    // This is what ensures that funding can only be done by the Aptos framework,
+    // i.e., via a governance proposal.
+    system_addresses::assert_aptos_framework(aptos_framework);
+    let governed_gas_signer = &governed_gas_signer();
+    coin::deposit(account, coin::withdraw<CoinType>(governed_gas_signer, amount));
+}
+
+ + + +
+ + + +## Function `deposit` + +Deposits some coin into the governed gas pool. +@param coin The coin to be deposited. + + +
fun deposit<CoinType>(coin: coin::Coin<CoinType>)
+
+ + + +
+Implementation + + +
fun deposit<CoinType>(coin: Coin<CoinType>) acquires GovernedGasPool {
+    let governed_gas_pool_address = governed_gas_pool_address();
+    coin::deposit(governed_gas_pool_address, coin);
+}
+
+ + + +
+ + + +## Function `deposit_from` + +Deposits some coin from an account to the governed gas pool. +@param account The account from which the coin is to be deposited. +@param amount The amount of coin to be deposited. + + +
fun deposit_from<CoinType>(account: address, amount: u64)
+
+ + + +
+Implementation + + +
fun deposit_from<CoinType>(account: address, amount: u64) acquires GovernedGasPool {
+   deposit(coin::withdraw_from<CoinType>(account, amount));
+}
+
+ + + +
+ + + +## Function `deposit_from_fungible_store` + +Deposits some FA from the fungible store. +@param aptos_framework The signer of the aptos_framework module. +@param account The account from which the FA is to be deposited. +@param amount The amount of FA to be deposited. + + +
fun deposit_from_fungible_store(account: address, amount: u64)
+
+ + + +
+Implementation + + +
fun deposit_from_fungible_store(account: address, amount: u64) acquires GovernedGasPool {
+    if (amount > 0){
+        // compute the governed gas pool store address
+        let governed_gas_pool_address = governed_gas_pool_address();
+        let governed_gas_pool_store_address = primary_fungible_store_address(governed_gas_pool_address);
+
+        // compute the account store address
+        let account_store_address = primary_fungible_store_address(account);
+        fungible_asset::deposit_internal(
+            governed_gas_pool_store_address,
+            fungible_asset::withdraw_internal(
+                account_store_address,
+                amount
+            )
+        );
+    }
+}
+
+ + + +
+ + + +## Function `deposit_gas_fee` + +Deposits gas fees into the governed gas pool. +@param gas_payer The address of the account that paid the gas fees. +@param gas_fee The amount of gas fees to be deposited. + + +
public fun deposit_gas_fee(_gas_payer: address, _gas_fee: u64)
+
+ + + +
+Implementation + + +
public fun deposit_gas_fee(_gas_payer: address, _gas_fee: u64) acquires GovernedGasPool {
+    // get the sender to preserve the signature but do nothing
+    governed_gas_pool_address();
+}
+
+ + + +
+ + + +## Function `deposit_gas_fee_v2` + +Deposits gas fees into the governed gas pool. +@param gas_payer The address of the account that paid the gas fees. +@param gas_fee The amount of gas fees to be deposited. + + +
public(friend) fun deposit_gas_fee_v2(gas_payer: address, gas_fee: u64)
+
+ + + +
+Implementation + + +
public(friend) fun deposit_gas_fee_v2(gas_payer: address, gas_fee: u64) acquires GovernedGasPool {
+   if (features::operations_default_to_fa_apt_store_enabled()) {
+        deposit_from_fungible_store(gas_payer, gas_fee);
+    } else {
+        deposit_from<AptosCoin>(gas_payer, gas_fee);
+    };
+}
+
+ + + +
+ + + +## Function `get_balance` + +Gets the balance of a specified coin type in the governed gas pool. +@return The balance of the coin in the pool. + + +
#[view]
+public fun get_balance<CoinType>(): u64
+
+ + + +
+Implementation + + +
public fun get_balance<CoinType>(): u64 acquires GovernedGasPool {
+    let pool_address = governed_gas_pool_address();
+    coin::balance<CoinType>(pool_address)
+}
+
+ + + +
+ + + +## Specification + + + +
// This enforces high-level requirement 1:
+invariant exists<GovernedGasPool>(@aptos_framework);
+
+ + + + + +### Function `initialize` + + +
public fun initialize(aptos_framework: &signer, delegation_pool_creation_seed: vector<u8>)
+
+ + + + +
requires system_addresses::is_aptos_framework_address(signer::address_of(aptos_framework));
+// This enforces high-level requirement 1:
+ensures exists<GovernedGasPool>(@aptos_framework);
+
+ + + + + +### Function `fund` + + +
public fun fund<CoinType>(aptos_framework: &signer, account: address, amount: u64)
+
+ + + + +
pragma aborts_if_is_partial = true;
+// This enforces high-level requirement 4:
+aborts_if !system_addresses::is_aptos_framework_address(signer::address_of(aptos_framework));
+
+ + +Abort if the governed gas pool has insufficient funds + + +
aborts_with coin::EINSUFFICIENT_BALANCE, error::invalid_argument(EINSUFFICIENT_BALANCE), 0x1, 0x5, 0x7;
+
+ + + + + +### Function `deposit` + + +
fun deposit<CoinType>(coin: coin::Coin<CoinType>)
+
+ + + + +
pragma aborts_if_is_partial = true;
+
+ + + + + +### Function `deposit_gas_fee` + + +
public fun deposit_gas_fee(_gas_payer: address, _gas_fee: u64)
+
+ + +[move-book]: https://aptos.dev/move/book/SUMMARY diff --git a/aptos-move/framework/aptos-framework/doc/native_bridge.md b/aptos-move/framework/aptos-framework/doc/native_bridge.md new file mode 100644 index 0000000000000..bc7c86d56ef71 --- /dev/null +++ b/aptos-move/framework/aptos-framework/doc/native_bridge.md @@ -0,0 +1,2064 @@ + + + +# Module `0x1::native_bridge` + + + +- [Struct `BridgeConfigRelayerUpdated`](#0x1_native_bridge_BridgeConfigRelayerUpdated) +- [Struct `BridgeFeeChangedEvent`](#0x1_native_bridge_BridgeFeeChangedEvent) +- [Struct `BridgeInsuranceBudgetDividerChangedEvent`](#0x1_native_bridge_BridgeInsuranceBudgetDividerChangedEvent) +- [Struct `BridgeInsuranceFundChangedEvent`](#0x1_native_bridge_BridgeInsuranceFundChangedEvent) +- [Struct `BridgeTransferInitiatedEvent`](#0x1_native_bridge_BridgeTransferInitiatedEvent) +- [Struct `BridgeTransferCompletedEvent`](#0x1_native_bridge_BridgeTransferCompletedEvent) +- [Resource `BridgeEvents`](#0x1_native_bridge_BridgeEvents) +- [Resource `AptosCoinBurnCapability`](#0x1_native_bridge_AptosCoinBurnCapability) +- [Resource `AptosCoinMintCapability`](#0x1_native_bridge_AptosCoinMintCapability) +- [Resource `AptosFABurnCapabilities`](#0x1_native_bridge_AptosFABurnCapabilities) +- [Resource `AptosFAMintCapabilities`](#0x1_native_bridge_AptosFAMintCapabilities) +- [Resource `Nonce`](#0x1_native_bridge_Nonce) +- [Resource `OutboundRateLimitBudget`](#0x1_native_bridge_OutboundRateLimitBudget) +- [Resource `InboundRateLimitBudget`](#0x1_native_bridge_InboundRateLimitBudget) +- [Resource `SmartTableWrapper`](#0x1_native_bridge_SmartTableWrapper) +- [Struct `OutboundTransfer`](#0x1_native_bridge_OutboundTransfer) +- [Resource `BridgeConfig`](#0x1_native_bridge_BridgeConfig) +- [Constants](#@Constants_0) +- [Function `initialize`](#0x1_native_bridge_initialize) +- [Function `normalize_u64_to_32_bytes`](#0x1_native_bridge_normalize_u64_to_32_bytes) +- [Function `is_inbound_nonce_set`](#0x1_native_bridge_is_inbound_nonce_set) +- [Function `create_details`](#0x1_native_bridge_create_details) +- [Function `add`](#0x1_native_bridge_add) +- [Function `set_bridge_transfer_id_to_inbound_nonce`](#0x1_native_bridge_set_bridge_transfer_id_to_inbound_nonce) +- [Function `assert_valid_bridge_transfer_id`](#0x1_native_bridge_assert_valid_bridge_transfer_id) +- [Function `bridge_transfer_id`](#0x1_native_bridge_bridge_transfer_id) +- [Function `bridge_relayer`](#0x1_native_bridge_bridge_relayer) +- [Function `insurance_fund`](#0x1_native_bridge_insurance_fund) +- [Function `insurance_budget_divider`](#0x1_native_bridge_insurance_budget_divider) +- [Function `bridge_fee`](#0x1_native_bridge_bridge_fee) +- [Function `get_bridge_transfer_details_from_nonce`](#0x1_native_bridge_get_bridge_transfer_details_from_nonce) +- [Function `get_inbound_nonce_from_bridge_transfer_id`](#0x1_native_bridge_get_inbound_nonce_from_bridge_transfer_id) +- [Function `increment_and_get_nonce`](#0x1_native_bridge_increment_and_get_nonce) +- [Function `store_aptos_coin_burn_cap`](#0x1_native_bridge_store_aptos_coin_burn_cap) +- [Function `store_aptos_coin_mint_cap`](#0x1_native_bridge_store_aptos_coin_mint_cap) +- [Function `mint_to`](#0x1_native_bridge_mint_to) +- [Function `mint`](#0x1_native_bridge_mint) +- [Function `mint_internal`](#0x1_native_bridge_mint_internal) +- [Function `burn_from`](#0x1_native_bridge_burn_from) +- [Function `burn`](#0x1_native_bridge_burn) +- [Function `burn_internal`](#0x1_native_bridge_burn_internal) +- [Function `initiate_bridge_transfer`](#0x1_native_bridge_initiate_bridge_transfer) +- [Function `complete_bridge_transfer`](#0x1_native_bridge_complete_bridge_transfer) +- [Function `charge_bridge_fee`](#0x1_native_bridge_charge_bridge_fee) +- [Function `update_bridge_relayer`](#0x1_native_bridge_update_bridge_relayer) +- [Function `update_bridge_fee`](#0x1_native_bridge_update_bridge_fee) +- [Function `update_insurance_fund`](#0x1_native_bridge_update_insurance_fund) +- [Function `update_insurance_budget_divider`](#0x1_native_bridge_update_insurance_budget_divider) +- [Function `assert_is_caller_relayer`](#0x1_native_bridge_assert_is_caller_relayer) +- [Function `assert_outbound_rate_limit_budget_not_exceeded`](#0x1_native_bridge_assert_outbound_rate_limit_budget_not_exceeded) +- [Function `assert_inbound_rate_limit_budget_not_exceeded`](#0x1_native_bridge_assert_inbound_rate_limit_budget_not_exceeded) +- [Function `test_normalize_u64_to_32_bytes_helper`](#0x1_native_bridge_test_normalize_u64_to_32_bytes_helper) + + +
use 0x1::account;
+use 0x1::aptos_coin;
+use 0x1::aptos_hash;
+use 0x1::bcs;
+use 0x1::coin;
+use 0x1::ethereum;
+use 0x1::event;
+use 0x1::features;
+use 0x1::fungible_asset;
+use 0x1::signer;
+use 0x1::smart_table;
+use 0x1::system_addresses;
+use 0x1::timestamp;
+use 0x1::vector;
+
+ + + + + +## Struct `BridgeConfigRelayerUpdated` + +Event emitted when the bridge relayer is updated. + + +
#[event]
+struct BridgeConfigRelayerUpdated has drop, store
+
+ + + +
+Fields + + +
+
+old_relayer: address +
+
+ +
+
+new_relayer: address +
+
+ +
+
+ + +
+ + + +## Struct `BridgeFeeChangedEvent` + +An event triggered upon change of bridgefee + + +
#[event]
+struct BridgeFeeChangedEvent has drop, store
+
+ + + +
+Fields + + +
+
+old_bridge_fee: u64 +
+
+ +
+
+new_bridge_fee: u64 +
+
+ +
+
+ + +
+ + + +## Struct `BridgeInsuranceBudgetDividerChangedEvent` + +An event triggered upon change of insurance budget divider + + +
#[event]
+struct BridgeInsuranceBudgetDividerChangedEvent has drop, store
+
+ + + +
+Fields + + +
+
+old_insurance_budget_divider: u64 +
+
+ +
+
+new_insurance_budget_divider: u64 +
+
+ +
+
+ + +
+ + + +## Struct `BridgeInsuranceFundChangedEvent` + +An event triggered upon change of insurance fund + + +
#[event]
+struct BridgeInsuranceFundChangedEvent has drop, store
+
+ + + +
+Fields + + +
+
+old_insurance_fund: address +
+
+ +
+
+new_insurance_fund: address +
+
+ +
+
+ + +
+ + + +## Struct `BridgeTransferInitiatedEvent` + +An event triggered upon initiating a bridge transfer + + +
#[event]
+struct BridgeTransferInitiatedEvent has drop, store
+
+ + + +
+Fields + + +
+
+bridge_transfer_id: vector<u8> +
+
+ +
+
+initiator: address +
+
+ +
+
+recipient: vector<u8> +
+
+ +
+
+amount: u64 +
+
+ +
+
+nonce: u64 +
+
+ +
+
+ + +
+ + + +## Struct `BridgeTransferCompletedEvent` + +An event triggered upon completing a bridge transfer + + +
#[event]
+struct BridgeTransferCompletedEvent has drop, store
+
+ + + +
+Fields + + +
+
+bridge_transfer_id: vector<u8> +
+
+ +
+
+initiator: vector<u8> +
+
+ +
+
+recipient: address +
+
+ +
+
+amount: u64 +
+
+ +
+
+nonce: u64 +
+
+ +
+
+ + +
+ + + +## Resource `BridgeEvents` + +This struct will store the event handles for bridge events. + + +
struct BridgeEvents has store, key
+
+ + + +
+Fields + + +
+
+bridge_transfer_initiated_events: event::EventHandle<native_bridge::BridgeTransferInitiatedEvent> +
+
+ +
+
+bridge_transfer_completed_events: event::EventHandle<native_bridge::BridgeTransferCompletedEvent> +
+
+ +
+
+ + +
+ + + +## Resource `AptosCoinBurnCapability` + + + +
struct AptosCoinBurnCapability has key
+
+ + + +
+Fields + + +
+
+burn_cap: coin::BurnCapability<aptos_coin::AptosCoin> +
+
+ +
+
+ + +
+ + + +## Resource `AptosCoinMintCapability` + + + +
struct AptosCoinMintCapability has key
+
+ + + +
+Fields + + +
+
+mint_cap: coin::MintCapability<aptos_coin::AptosCoin> +
+
+ +
+
+ + +
+ + + +## Resource `AptosFABurnCapabilities` + + + +
struct AptosFABurnCapabilities has key
+
+ + + +
+Fields + + +
+
+burn_ref: fungible_asset::BurnRef +
+
+ +
+
+ + +
+ + + +## Resource `AptosFAMintCapabilities` + + + +
struct AptosFAMintCapabilities has key
+
+ + + +
+Fields + + +
+
+burn_ref: fungible_asset::MintRef +
+
+ +
+
+ + +
+ + + +## Resource `Nonce` + +A nonce to ensure the uniqueness of bridge transfers + + +
struct Nonce has key
+
+ + + +
+Fields + + +
+
+value: u64 +
+
+ +
+
+ + +
+ + + +## Resource `OutboundRateLimitBudget` + + + +
struct OutboundRateLimitBudget has store, key
+
+ + + +
+Fields + + +
+
+day: smart_table::SmartTable<u64, u64> +
+
+ +
+
+ + +
+ + + +## Resource `InboundRateLimitBudget` + + + +
struct InboundRateLimitBudget has store, key
+
+ + + +
+Fields + + +
+
+day: smart_table::SmartTable<u64, u64> +
+
+ +
+
+ + +
+ + + +## Resource `SmartTableWrapper` + +A smart table wrapper + + +
struct SmartTableWrapper<K, V> has store, key
+
+ + + +
+Fields + + +
+
+inner: smart_table::SmartTable<K, V> +
+
+ +
+
+ + +
+ + + +## Struct `OutboundTransfer` + +Details on the outbound transfer + + +
struct OutboundTransfer has copy, store
+
+ + + +
+Fields + + +
+
+bridge_transfer_id: vector<u8> +
+
+ +
+
+initiator: address +
+
+ +
+
+recipient: ethereum::EthereumAddress +
+
+ +
+
+amount: u64 +
+
+ +
+
+ + +
+ + + +## Resource `BridgeConfig` + + + +
struct BridgeConfig has key
+
+ + + +
+Fields + + +
+
+bridge_relayer: address +
+
+ +
+
+insurance_fund: address +
+
+ +
+
+insurance_budget_divider: u64 +
+
+ +
+
+bridge_fee: u64 +
+
+ +
+
+ + +
+ + + +## Constants + + + + + + +
const ENATIVE_BRIDGE_NOT_ENABLED: u64 = 8;
+
+ + + + + + + +
const EINVALID_BRIDGE_TRANSFER_ID: u64 = 2;
+
+ + + + + + + +
const EZERO_AMOUNT: u64 = 7;
+
+ + + + + + + +
const EEVENT_NOT_FOUND: u64 = 3;
+
+ + + + + + + +
const EID_NOT_FOUND: u64 = 10;
+
+ + + + + + + +
const EINCORRECT_NONCE: u64 = 9;
+
+ + + + + + + +
const EINVALID_AMOUNT: u64 = 5;
+
+ + + + + + + +
const EINVALID_BRIDGE_RELAYER: u64 = 11;
+
+ + + + + + + +
const EINVALID_NONCE: u64 = 4;
+
+ + + + + + + +
const EINVALID_VALUE: u64 = 3;
+
+ + + + + + + +
const ENONCE_NOT_FOUND: u64 = 6;
+
+ + + + + + + +
const ERATE_LIMIT_EXCEEDED: u64 = 4;
+
+ + + + + + + +
const ESAME_FEE: u64 = 2;
+
+ + + + + + + +
const ETRANSFER_ALREADY_PROCESSED: u64 = 1;
+
+ + + + + +## Function `initialize` + +Initializes the module and stores the EventHandles in the resource. + + +
public fun initialize(aptos_framework: &signer)
+
+ + + +
+Implementation + + +
public fun initialize(aptos_framework: &signer) {
+    system_addresses::assert_aptos_framework(aptos_framework);
+
+    let bridge_config = BridgeConfig {
+        bridge_relayer: signer::address_of(aptos_framework),
+        insurance_fund: signer::address_of(aptos_framework),
+        insurance_budget_divider: 4,
+        bridge_fee: 40_000_000_000,
+    };
+    move_to(aptos_framework, bridge_config);
+
+    // Ensure the nonce is not already initialized
+    assert!(
+        !exists<Nonce>(signer::address_of(aptos_framework)),
+        2
+    );
+
+    // Create the Nonce resource with an initial value of 0
+    move_to<Nonce>(aptos_framework, Nonce {
+        value: 0
+    });
+
+
+    move_to(aptos_framework, BridgeEvents {
+        bridge_transfer_initiated_events: account::new_event_handle<BridgeTransferInitiatedEvent>(aptos_framework),
+        bridge_transfer_completed_events: account::new_event_handle<BridgeTransferCompletedEvent>(aptos_framework),
+    });
+    system_addresses::assert_aptos_framework(aptos_framework);
+
+    let outbound_rate_limit_budget = OutboundRateLimitBudget {
+        day: smart_table::new(),
+    };
+
+    move_to(aptos_framework, outbound_rate_limit_budget);
+
+
+    let inbound_rate_limit_budget = InboundRateLimitBudget {
+        day: smart_table::new(),
+    };
+
+    move_to(aptos_framework, inbound_rate_limit_budget);
+
+    let nonces_to_details = SmartTableWrapper<u64, OutboundTransfer> {
+        inner: smart_table::new(),
+    };
+
+    move_to(aptos_framework, nonces_to_details);
+
+    let ids_to_inbound_nonces = SmartTableWrapper<vector<u8>, u64> {
+        inner: smart_table::new(),
+    };
+
+    move_to(aptos_framework, ids_to_inbound_nonces);
+}
+
+ + + +
+ + + +## Function `normalize_u64_to_32_bytes` + +Converts a u64 to a 32-byte vector. + +@param value The u64 value to convert. +@return A 32-byte vector containing the u64 value in little-endian order. + +How BCS works: https://github.com/zefchain/bcs?tab=readme-ov-file#booleans-and-integers + +@example: a u64 value 0x12_34_56_78_ab_cd_ef_00 is converted to a 32-byte vector: +[0x00, 0x00, ..., 0x00, 0x12, 0x34, 0x56, 0x78, 0xab, 0xcd, 0xef, 0x00] + + +
public(friend) fun normalize_u64_to_32_bytes(value: &u64): vector<u8>
+
+ + + +
+Implementation + + +
public(friend) fun normalize_u64_to_32_bytes(value: &u64): vector<u8> {
+    let r = bcs::to_bytes(&(*value as u256));
+    // BCS returns the bytes in reverse order, so we reverse the result.
+    vector::reverse(&mut r);
+    r
+}
+
+ + + +
+ + + +## Function `is_inbound_nonce_set` + +Checks if a bridge transfer ID is associated with an inbound nonce. +@param bridge_transfer_id The bridge transfer ID. +@return true if the ID is associated with an existing inbound nonce, false otherwise. + + +
public(friend) fun is_inbound_nonce_set(bridge_transfer_id: vector<u8>): bool
+
+ + + +
+Implementation + + +
public(friend) fun is_inbound_nonce_set(bridge_transfer_id: vector<u8>): bool acquires SmartTableWrapper {
+    let table = borrow_global<SmartTableWrapper<vector<u8>, u64>>(@aptos_framework);
+    smart_table::contains(&table.inner, bridge_transfer_id)
+}
+
+ + + +
+ + + +## Function `create_details` + +Creates bridge transfer details with validation. + +@param initiator The initiating party of the transfer. +@param recipient The receiving party of the transfer. +@param amount The amount to be transferred. +@param nonce The unique nonce for the transfer. +@return A BridgeTransferDetails object. +@abort If the amount is zero or locks are invalid. + + +
public(friend) fun create_details(initiator: address, recipient: ethereum::EthereumAddress, amount: u64, nonce: u64): native_bridge::OutboundTransfer
+
+ + + +
+Implementation + + +
public(friend) fun create_details(initiator: address, recipient: EthereumAddress, amount: u64, nonce: u64)
+    : OutboundTransfer {
+    assert!(amount > 0, EZERO_AMOUNT);
+
+    // Create a bridge transfer ID algorithmically
+    let combined_bytes = vector::empty<u8>();
+    vector::append(&mut combined_bytes, bcs::to_bytes(&initiator));
+    vector::append(&mut combined_bytes, bcs::to_bytes(&recipient));
+    vector::append(&mut combined_bytes, bcs::to_bytes(&amount));
+    vector::append(&mut combined_bytes, bcs::to_bytes(&nonce));
+    let bridge_transfer_id = keccak256(combined_bytes);
+
+    OutboundTransfer {
+        bridge_transfer_id,
+        initiator,
+        recipient,
+        amount,
+    }
+}
+
+ + + +
+ + + +## Function `add` + +Record details of an initiated transfer for quick lookup of details, mapping bridge transfer ID to transfer details + +@param bridge_transfer_id Bridge transfer ID. +@param details The bridge transfer details + + +
public(friend) fun add(nonce: u64, details: native_bridge::OutboundTransfer)
+
+ + + +
+Implementation + + +
public(friend) fun add(nonce: u64, details: OutboundTransfer) acquires SmartTableWrapper {
+    assert!(features::abort_native_bridge_enabled(), ENATIVE_BRIDGE_NOT_ENABLED);
+
+    let table = borrow_global_mut<SmartTableWrapper<u64, OutboundTransfer>>(@aptos_framework);
+    smart_table::add(&mut table.inner, nonce, details);
+}
+
+ + + +
+ + + +## Function `set_bridge_transfer_id_to_inbound_nonce` + +Record details of a completed transfer, mapping bridge transfer ID to inbound nonce + +@param bridge_transfer_id Bridge transfer ID. +@param details The bridge transfer details + + +
public(friend) fun set_bridge_transfer_id_to_inbound_nonce(bridge_transfer_id: vector<u8>, inbound_nonce: u64)
+
+ + + +
+Implementation + + +
public(friend) fun set_bridge_transfer_id_to_inbound_nonce(bridge_transfer_id: vector<u8>, inbound_nonce: u64) acquires SmartTableWrapper {
+    assert!(features::abort_native_bridge_enabled(), ENATIVE_BRIDGE_NOT_ENABLED);
+
+    assert_valid_bridge_transfer_id(&bridge_transfer_id);
+    let table = borrow_global_mut<SmartTableWrapper<vector<u8>, u64>>(@aptos_framework);
+    smart_table::add(&mut table.inner, bridge_transfer_id, inbound_nonce);
+}
+
+ + + +
+ + + +## Function `assert_valid_bridge_transfer_id` + +Asserts that the bridge transfer ID is valid. + +@param bridge_transfer_id The bridge transfer ID to validate. +@abort If the ID is invalid. + + +
public(friend) fun assert_valid_bridge_transfer_id(bridge_transfer_id: &vector<u8>)
+
+ + + +
+Implementation + + +
public(friend) fun assert_valid_bridge_transfer_id(bridge_transfer_id: &vector<u8>) {
+    assert!(vector::length(bridge_transfer_id) == 32, EINVALID_BRIDGE_TRANSFER_ID);
+}
+
+ + + +
+ + + +## Function `bridge_transfer_id` + +Generates a unique outbound bridge transfer ID based on transfer details and nonce. + +@param details The bridge transfer details. +@return The generated bridge transfer ID. + + +
public(friend) fun bridge_transfer_id(initiator: address, recipient: ethereum::EthereumAddress, amount: u64, nonce: u64): vector<u8>
+
+ + + +
+Implementation + + +
public(friend) fun bridge_transfer_id(initiator: address, recipient: EthereumAddress, amount: u64, nonce: u64) : vector<u8> {
+    // Serialize each param
+    let initiator_bytes = bcs::to_bytes<address>(&initiator);
+    let recipient_bytes = ethereum::get_inner_ethereum_address(recipient);
+    let amount_bytes = normalize_u64_to_32_bytes(&amount);
+    let nonce_bytes = normalize_u64_to_32_bytes(&nonce);
+    //Contatenate then hash and return bridge transfer ID
+    let combined_bytes = vector::empty<u8>();
+    vector::append(&mut combined_bytes, initiator_bytes);
+    vector::append(&mut combined_bytes, recipient_bytes);
+    vector::append(&mut combined_bytes, amount_bytes);
+    vector::append(&mut combined_bytes, nonce_bytes);
+    keccak256(combined_bytes)
+}
+
+ + + +
+ + + +## Function `bridge_relayer` + +Retrieves the address of the current bridge relayer. + +@return The address of the current bridge relayer. + + +
#[view]
+public fun bridge_relayer(): address
+
+ + + +
+Implementation + + +
public fun bridge_relayer(): address acquires BridgeConfig {
+    borrow_global_mut<BridgeConfig>(@aptos_framework).bridge_relayer
+}
+
+ + + +
+ + + +## Function `insurance_fund` + +Retrieves the address of the current insurance fund. + +@return The address of the current insurance fund. + + +
#[view]
+public fun insurance_fund(): address
+
+ + + +
+Implementation + + +
public fun insurance_fund(): address acquires BridgeConfig {
+    borrow_global_mut<BridgeConfig>(@aptos_framework).insurance_fund
+}
+
+ + + +
+ + + +## Function `insurance_budget_divider` + +Retrieves the current insurance budget divider. + +@return The current insurance budget divider. + + +
#[view]
+public fun insurance_budget_divider(): u64
+
+ + + +
+Implementation + + +
public fun insurance_budget_divider(): u64 acquires BridgeConfig {
+    borrow_global_mut<BridgeConfig>(@aptos_framework).insurance_budget_divider
+}
+
+ + + +
+ + + +## Function `bridge_fee` + +Retrieves the current bridge fee. + +@return The current bridge fee. + + +
#[view]
+public fun bridge_fee(): u64
+
+ + + +
+Implementation + + +
public fun bridge_fee(): u64 acquires BridgeConfig {
+    borrow_global_mut<BridgeConfig>(@aptos_framework).bridge_fee
+}
+
+ + + +
+ + + +## Function `get_bridge_transfer_details_from_nonce` + +Gets the bridge transfer details (OutboundTransfer) from the given nonce. +@param nonce The nonce of the bridge transfer. +@return The OutboundTransfer struct containing the transfer details. +@abort If the nonce is not found in the smart table. + + +
#[view]
+public fun get_bridge_transfer_details_from_nonce(nonce: u64): native_bridge::OutboundTransfer
+
+ + + +
+Implementation + + +
public fun get_bridge_transfer_details_from_nonce(nonce: u64): OutboundTransfer acquires SmartTableWrapper {
+    let table = borrow_global<SmartTableWrapper<u64, OutboundTransfer>>(@aptos_framework);
+
+    // Check if the nonce exists in the table
+    assert!(smart_table::contains(&table.inner, nonce), ENONCE_NOT_FOUND);
+
+    // If it exists, return the associated `OutboundTransfer` details
+    *smart_table::borrow(&table.inner, nonce)
+}
+
+ + + +
+ + + +## Function `get_inbound_nonce_from_bridge_transfer_id` + +Gets inbound nonce from bridge_transfer_id +@param bridge_transfer_id The ID bridge transfer. +@return the nonce +@abort If the nonce is not found in the smart table. + + +
#[view]
+public fun get_inbound_nonce_from_bridge_transfer_id(bridge_transfer_id: vector<u8>): u64
+
+ + + +
+Implementation + + +
public fun get_inbound_nonce_from_bridge_transfer_id(bridge_transfer_id: vector<u8>): u64 acquires SmartTableWrapper {
+    let table = borrow_global<SmartTableWrapper<vector<u8>, u64>>(@aptos_framework);
+
+     // Check if the nonce exists in the table
+    assert!(smart_table::contains(&table.inner, bridge_transfer_id), ENONCE_NOT_FOUND);
+
+    // If it exists, return the associated nonce
+    *smart_table::borrow(&table.inner, bridge_transfer_id)
+}
+
+ + + +
+ + + +## Function `increment_and_get_nonce` + +Increment and get the current nonce + + +
fun increment_and_get_nonce(): u64
+
+ + + +
+Implementation + + +
fun increment_and_get_nonce(): u64 acquires Nonce {
+    let nonce_ref = borrow_global_mut<Nonce>(@aptos_framework);
+    nonce_ref.value = nonce_ref.value + 1;
+    nonce_ref.value
+}
+
+ + + +
+ + + +## Function `store_aptos_coin_burn_cap` + +Stores the burn capability for AptosCoin, converting to a fungible asset reference if the feature is enabled. + +@param aptos_framework The signer representing the Aptos framework. +@param burn_cap The burn capability for AptosCoin. + + +
public fun store_aptos_coin_burn_cap(aptos_framework: &signer, burn_cap: coin::BurnCapability<aptos_coin::AptosCoin>)
+
+ + + +
+Implementation + + +
public fun store_aptos_coin_burn_cap(aptos_framework: &signer, burn_cap: BurnCapability<AptosCoin>) {
+    system_addresses::assert_aptos_framework(aptos_framework);
+    if (features::operations_default_to_fa_apt_store_enabled()) {
+        let burn_ref = coin::convert_and_take_paired_burn_ref(burn_cap);
+        move_to(aptos_framework, AptosFABurnCapabilities { burn_ref });
+    } else {
+        move_to(aptos_framework, AptosCoinBurnCapability { burn_cap })
+    }
+}
+
+ + + +
+ + + +## Function `store_aptos_coin_mint_cap` + +Stores the mint capability for AptosCoin. + +@param aptos_framework The signer representing the Aptos framework. +@param mint_cap The mint capability for AptosCoin. + + +
public fun store_aptos_coin_mint_cap(aptos_framework: &signer, mint_cap: coin::MintCapability<aptos_coin::AptosCoin>)
+
+ + + +
+Implementation + + +
public fun store_aptos_coin_mint_cap(aptos_framework: &signer, mint_cap: MintCapability<AptosCoin>) {
+    system_addresses::assert_aptos_framework(aptos_framework);
+    move_to(aptos_framework, AptosCoinMintCapability { mint_cap })
+}
+
+ + + +
+ + + +## Function `mint_to` + +Mints a specified amount of AptosCoin to a recipient's address. + +@param core_resource The signer representing the core resource account. +@param recipient The address of the recipient to mint coins to. +@param amount The amount of AptosCoin to mint. + + +
public fun mint_to(aptos_framework: &signer, recipient: address, amount: u64)
+
+ + + +
+Implementation + + +
public fun mint_to(aptos_framework: &signer, recipient: address, amount: u64) acquires AptosCoinMintCapability {
+    system_addresses::assert_aptos_framework(aptos_framework);
+    mint_internal(recipient, amount);
+}
+
+ + + +
+ + + +## Function `mint` + +Mints a specified amount of AptosCoin to a recipient's address. + +@param recipient The address of the recipient to mint coins to. +@param amount The amount of AptosCoin to mint. +@abort If the mint capability is not available. + + +
public(friend) fun mint(recipient: address, amount: u64)
+
+ + + +
+Implementation + + +
public(friend) fun mint(recipient: address, amount: u64) acquires AptosCoinMintCapability {
+    assert!(features::abort_native_bridge_enabled(), ENATIVE_BRIDGE_NOT_ENABLED);
+
+    mint_internal(recipient, amount);
+}
+
+ + + +
+ + + +## Function `mint_internal` + +Mints a specified amount of AptosCoin to a recipient's address. + +@param recipient The address of the recipient to mint coins to. +@param amount The amount of AptosCoin to mint. + + +
fun mint_internal(recipient: address, amount: u64)
+
+ + + +
+Implementation + + +
fun mint_internal(recipient: address, amount: u64) acquires AptosCoinMintCapability {
+    coin::deposit(recipient, coin::mint(
+        amount,
+        &borrow_global<AptosCoinMintCapability>(@aptos_framework).mint_cap
+    ));
+}
+
+ + + +
+ + + +## Function `burn_from` + +Burns a specified amount of AptosCoin from an address. + +@param core_resource The signer representing the core resource account. +@param from The address from which to burn AptosCoin. +@param amount The amount of AptosCoin to burn. +@abort If the burn capability is not available. + + +
public fun burn_from(aptos_framework: &signer, from: address, amount: u64)
+
+ + + +
+Implementation + + +
public fun burn_from(aptos_framework: &signer, from: address, amount: u64) acquires AptosCoinBurnCapability {
+    system_addresses::assert_aptos_framework(aptos_framework);
+    burn_internal(from, amount);
+}
+
+ + + +
+ + + +## Function `burn` + +Burns a specified amount of AptosCoin from an address. + +@param from The address from which to burn AptosCoin. +@param amount The amount of AptosCoin to burn. +@abort If the burn capability is not available. + + +
public(friend) fun burn(from: address, amount: u64)
+
+ + + +
+Implementation + + +
public(friend) fun burn(from: address, amount: u64) acquires AptosCoinBurnCapability {
+    assert!(features::abort_native_bridge_enabled(), ENATIVE_BRIDGE_NOT_ENABLED);
+
+    burn_internal(from, amount);
+}
+
+ + + +
+ + + +## Function `burn_internal` + +Burns a specified amount of AptosCoin from an address. + +@param from The address from which to burn AptosCoin. +@param amount The amount of AptosCoin to burn. + + +
fun burn_internal(from: address, amount: u64)
+
+ + + +
+Implementation + + +
fun burn_internal(from: address, amount: u64) acquires AptosCoinBurnCapability {
+    coin::burn_from(
+        from,
+        amount,
+        &borrow_global<AptosCoinBurnCapability>(@aptos_framework).burn_cap,
+    );
+}
+
+ + + +
+ + + +## Function `initiate_bridge_transfer` + +Initiate a bridge transfer of MOVE from Movement to Ethereum +Anyone can initiate a bridge transfer from the source chain +The amount is burnt from the initiator and the module-level nonce is incremented +@param initiator The initiator's Ethereum address as a vector of bytes. +@param recipient The address of the recipient on the Aptos blockchain. +@param amount The amount of assets to be locked. + + +
public entry fun initiate_bridge_transfer(initiator: &signer, recipient: vector<u8>, amount: u64)
+
+ + + +
+Implementation + + +
public entry fun initiate_bridge_transfer(
+    initiator: &signer,
+    recipient: vector<u8>,
+    amount: u64
+) acquires BridgeEvents, Nonce, AptosCoinBurnCapability, AptosCoinMintCapability, SmartTableWrapper, OutboundRateLimitBudget, BridgeConfig {
+    let initiator_address = signer::address_of(initiator);
+    let ethereum_address = ethereum::ethereum_address_20_bytes(recipient);
+
+    // Ensure the amount is enough for the bridge fee and charge for it
+    let new_amount = charge_bridge_fee(amount);
+
+    assert_outbound_rate_limit_budget_not_exceeded(new_amount);
+
+    // Increment and retrieve the nonce
+    let nonce = increment_and_get_nonce();
+
+    // Create bridge transfer details
+    let details = create_details(
+        initiator_address,
+        ethereum_address,
+        new_amount,
+        nonce
+    );
+
+    let bridge_transfer_id = bridge_transfer_id(
+        initiator_address,
+        ethereum_address,
+        new_amount,
+        nonce
+    );
+
+    // Add the transfer details to storage
+    add(nonce, details);
+
+    // Burn the amount from the initiator
+    burn_internal(initiator_address, amount);
+
+    let bridge_events = borrow_global_mut<BridgeEvents>(@aptos_framework);
+
+    // Emit an event with nonce
+    event::emit_event(
+         &mut bridge_events.bridge_transfer_initiated_events,
+        BridgeTransferInitiatedEvent {
+            bridge_transfer_id,
+            initiator: initiator_address,
+            recipient,
+            amount: new_amount,
+            nonce,
+        }
+    );
+}
+
+ + + +
+ + + +## Function `complete_bridge_transfer` + +Completes a bridge transfer on the destination chain. + +@param caller The signer representing the bridge relayer. +@param initiator The initiator's Ethereum address as a vector of bytes. +@param bridge_transfer_id The unique identifier for the bridge transfer. +@param recipient The address of the recipient on the Aptos blockchain. +@param amount The amount of assets to be locked. +@param nonce The unique nonce for the transfer. +@abort If the caller is not the bridge relayer or the transfer has already been processed. + + +
public entry fun complete_bridge_transfer(caller: &signer, bridge_transfer_id: vector<u8>, initiator: vector<u8>, recipient: address, amount: u64, nonce: u64)
+
+ + + +
+Implementation + + +
public entry fun complete_bridge_transfer(
+    caller: &signer,
+    bridge_transfer_id: vector<u8>,
+    initiator: vector<u8>,
+    recipient: address,
+    amount: u64,
+    nonce: u64
+) acquires BridgeEvents, AptosCoinMintCapability, SmartTableWrapper, InboundRateLimitBudget, BridgeConfig {
+    // Ensure the caller is the bridge relayer
+    assert_is_caller_relayer(caller);
+    assert_inbound_rate_limit_budget_not_exceeded(amount);
+
+    // Check if the bridge transfer ID is already associated with an inbound nonce
+    let inbound_nonce_exists = is_inbound_nonce_set(bridge_transfer_id);
+    assert!(!inbound_nonce_exists, ETRANSFER_ALREADY_PROCESSED);
+    assert!(nonce > 0, EINVALID_NONCE);
+
+    // Validate the bridge_transfer_id by reconstructing the hash
+    let recipient_bytes = bcs::to_bytes(&recipient);
+    let amount_bytes = normalize_u64_to_32_bytes(&amount);
+    let nonce_bytes = normalize_u64_to_32_bytes(&nonce);
+
+    let combined_bytes = vector::empty<u8>();
+    vector::append(&mut combined_bytes, initiator);
+    vector::append(&mut combined_bytes, recipient_bytes);
+    vector::append(&mut combined_bytes, amount_bytes);
+    vector::append(&mut combined_bytes, nonce_bytes);
+
+    assert!(keccak256(combined_bytes) == bridge_transfer_id, EINVALID_BRIDGE_TRANSFER_ID);
+
+    // Record the transfer as completed by associating the bridge_transfer_id with the inbound nonce
+    set_bridge_transfer_id_to_inbound_nonce(bridge_transfer_id, nonce);
+
+    // Mint to the recipient
+    mint_internal(recipient, amount);
+
+    // Emit the event
+    let bridge_events = borrow_global_mut<BridgeEvents>(@aptos_framework);
+    event::emit_event(
+        &mut bridge_events.bridge_transfer_completed_events,
+        BridgeTransferCompletedEvent {
+            bridge_transfer_id,
+            initiator,
+            recipient,
+            amount,
+            nonce,
+        },
+    );
+}
+
+ + + +
+ + + +## Function `charge_bridge_fee` + +Charge bridge fee to the initiate bridge transfer. + +@param initiator The signer representing the initiator. +@param amount The amount to be charged. +@return The new amount after deducting the bridge fee. + + +
fun charge_bridge_fee(amount: u64): u64
+
+ + + +
+Implementation + + +
fun charge_bridge_fee(amount: u64) : u64 acquires AptosCoinMintCapability, BridgeConfig {
+    let bridge_fee = bridge_fee();
+    let bridge_relayer = bridge_relayer();
+    assert!(amount > bridge_fee, EINVALID_AMOUNT);
+    let new_amount = amount - bridge_fee;
+    mint_internal(bridge_relayer, bridge_fee);
+    new_amount
+}
+
+ + + +
+ + + +## Function `update_bridge_relayer` + +Updates the bridge relayer, requiring governance validation. + +@param aptos_framework The signer representing the Aptos framework. +@param new_relayer The new address to be set as the bridge relayer. +@abort If the current relayer is the same as the new relayer. + + +
public fun update_bridge_relayer(aptos_framework: &signer, new_relayer: address)
+
+ + + +
+Implementation + + +
public fun update_bridge_relayer(aptos_framework: &signer, new_relayer: address
+)   acquires BridgeConfig {
+    system_addresses::assert_aptos_framework(aptos_framework);
+    let bridge_config = borrow_global_mut<BridgeConfig>(@aptos_framework);
+    let old_relayer = bridge_config.bridge_relayer;
+    assert!(old_relayer != new_relayer, EINVALID_BRIDGE_RELAYER);
+
+    bridge_config.bridge_relayer = new_relayer;
+
+    event::emit(
+        BridgeConfigRelayerUpdated {
+            old_relayer,
+            new_relayer,
+        },
+    );
+}
+
+ + + +
+ + + +## Function `update_bridge_fee` + +Updates the bridge fee, requiring relayer validation. + +@param relayer The signer representing the Relayer. +@param new_bridge_fee The new bridge fee to be set. +@abort If the new bridge fee is the same as the old bridge fee. + + +
public entry fun update_bridge_fee(relayer: &signer, new_bridge_fee: u64)
+
+ + + +
+Implementation + + +
public entry fun update_bridge_fee(relayer: &signer, new_bridge_fee: u64
+) acquires BridgeConfig {
+    assert_is_caller_relayer(relayer);
+    let bridge_config = borrow_global_mut<BridgeConfig>(@aptos_framework);
+    let old_bridge_fee = bridge_config.bridge_fee;
+    assert!(old_bridge_fee != new_bridge_fee, ESAME_FEE);
+    bridge_config.bridge_fee = new_bridge_fee;
+
+    event::emit(
+        BridgeFeeChangedEvent {
+            old_bridge_fee,
+            new_bridge_fee,
+        },
+    );
+}
+
+ + + +
+ + + +## Function `update_insurance_fund` + +Updates the insurance fund, requiring governance validation. + +@param aptos_framework The signer representing the Aptos framework. +@param new_insurance_fund The new insurance fund to be set. +@abort If the new insurance fund is the same as the old insurance fund. + + +
public entry fun update_insurance_fund(aptos_framework: &signer, new_insurance_fund: address)
+
+ + + +
+Implementation + + +
public entry fun update_insurance_fund(aptos_framework: &signer, new_insurance_fund: address
+) acquires BridgeConfig {
+    system_addresses::assert_aptos_framework(aptos_framework);
+    let bridge_config = borrow_global_mut<BridgeConfig>(@aptos_framework);
+    let old_insurance_fund = bridge_config.insurance_fund;
+    assert!(old_insurance_fund != new_insurance_fund, EINVALID_VALUE);
+    bridge_config.insurance_fund = new_insurance_fund;
+
+    event::emit(
+        BridgeInsuranceFundChangedEvent {
+            old_insurance_fund,
+            new_insurance_fund,
+        },
+    );
+}
+
+ + + +
+ + + +## Function `update_insurance_budget_divider` + +Updates the insurance budget divider, requiring governance validation. + +@param aptos_framework The signer representing the Aptos framework. +@param new_insurance_budget_divider The new insurance budget divider to be set. +@abort If the new insurance budget divider is the same as the old insurance budget divider. + + +
public entry fun update_insurance_budget_divider(aptos_framework: &signer, new_insurance_budget_divider: u64)
+
+ + + +
+Implementation + + +
public entry fun update_insurance_budget_divider(aptos_framework: &signer, new_insurance_budget_divider: u64
+) acquires BridgeConfig {
+    system_addresses::assert_aptos_framework(aptos_framework);
+    // Ensure the new insurance budget divider is greater than 1 and different from the old one
+    // Assumes symmetric Insurance Funds on both L1 and L2
+    assert!(new_insurance_budget_divider > 1, EINVALID_VALUE);
+
+    let bridge_config = borrow_global_mut<BridgeConfig>(@aptos_framework);
+    let old_insurance_budget_divider = bridge_config.insurance_budget_divider;
+    assert!(old_insurance_budget_divider != new_insurance_budget_divider, EINVALID_VALUE);
+
+    bridge_config.insurance_budget_divider = new_insurance_budget_divider;
+
+    event::emit(
+        BridgeInsuranceBudgetDividerChangedEvent {
+            old_insurance_budget_divider,
+            new_insurance_budget_divider,
+        },
+    );
+}
+
+ + + +
+ + + +## Function `assert_is_caller_relayer` + +Asserts that the caller is the current bridge relayer. + +@param caller The signer whose authority is being checked. +@abort If the caller is not the current bridge relayer. + + +
public(friend) fun assert_is_caller_relayer(caller: &signer)
+
+ + + +
+Implementation + + +
public(friend) fun assert_is_caller_relayer(caller: &signer
+) acquires BridgeConfig {
+    assert!(borrow_global<BridgeConfig>(@aptos_framework).bridge_relayer == signer::address_of(caller), EINVALID_BRIDGE_RELAYER);
+}
+
+ + + +
+ + + +## Function `assert_outbound_rate_limit_budget_not_exceeded` + +Asserts that the rate limit budget is not exceeded. + +@param amount The amount to be transferred. + + +
fun assert_outbound_rate_limit_budget_not_exceeded(amount: u64)
+
+ + + +
+Implementation + + +
fun assert_outbound_rate_limit_budget_not_exceeded(amount: u64) acquires OutboundRateLimitBudget, BridgeConfig {
+    let insurance_fund = borrow_global<BridgeConfig>(@aptos_framework).insurance_fund;
+    let insurance_budget_divider = borrow_global<BridgeConfig>(@aptos_framework).insurance_budget_divider;
+    let table = borrow_global_mut<OutboundRateLimitBudget>(@aptos_framework);
+
+    let day = timestamp::now_seconds() / 86400;
+    let current_budget = smart_table::borrow_mut_with_default(&mut table.day, day, 0);
+    smart_table::upsert(&mut table.day, day, *current_budget + amount);
+    let rate_limit = coin::balance<AptosCoin>(insurance_fund) / insurance_budget_divider;
+    assert!(*smart_table::borrow(&table.day, day) < rate_limit, ERATE_LIMIT_EXCEEDED);
+}
+
+ + + +
+ + + +## Function `assert_inbound_rate_limit_budget_not_exceeded` + +Asserts that the rate limit budget is not exceeded. + +@param amount The amount to be transferred. + + +
fun assert_inbound_rate_limit_budget_not_exceeded(amount: u64)
+
+ + + +
+Implementation + + +
fun assert_inbound_rate_limit_budget_not_exceeded(amount: u64) acquires InboundRateLimitBudget, BridgeConfig {
+    let insurance_fund = borrow_global<BridgeConfig>(@aptos_framework).insurance_fund;
+    let insurance_budget_divider = borrow_global<BridgeConfig>(@aptos_framework).insurance_budget_divider;
+    let table = borrow_global_mut<InboundRateLimitBudget>(@aptos_framework);
+
+    let day = timestamp::now_seconds() / 86400;
+    let current_budget = smart_table::borrow_mut_with_default(&mut table.day, day, 0);
+    smart_table::upsert(&mut table.day, day, *current_budget + amount);
+    let rate_limit = coin::balance<AptosCoin>(insurance_fund) / insurance_budget_divider;
+    assert!(*smart_table::borrow(&table.day, day) < rate_limit, ERATE_LIMIT_EXCEEDED);
+}
+
+ + + +
+ + + +## Function `test_normalize_u64_to_32_bytes_helper` + +Test serialization of u64 to 32 bytes + + +
fun test_normalize_u64_to_32_bytes_helper(x: u64, expected: vector<u8>)
+
+ + + +
+Implementation + + +
fun test_normalize_u64_to_32_bytes_helper(x: u64, expected: vector<u8>) {
+    let r = normalize_u64_to_32_bytes(&x);
+    assert!(vector::length(&r) == 32, 0);
+    assert!(r == expected, 0);
+}
+
+ + + +
+ + +[move-book]: https://aptos.dev/move/book/SUMMARY diff --git a/aptos-move/framework/aptos-framework/doc/object.md b/aptos-move/framework/aptos-framework/doc/object.md index bba128592ff31..ef2998c62b846 100644 --- a/aptos-move/framework/aptos-framework/doc/object.md +++ b/aptos-move/framework/aptos-framework/doc/object.md @@ -624,7 +624,7 @@ Exceeds maximum nesting for an object transfer. - + The caller does not have ownership permissions diff --git a/aptos-move/framework/aptos-framework/doc/overview.md b/aptos-move/framework/aptos-framework/doc/overview.md index 314baa3612ba9..2605092ef61f5 100644 --- a/aptos-move/framework/aptos-framework/doc/overview.md +++ b/aptos-move/framework/aptos-framework/doc/overview.md @@ -19,6 +19,11 @@ This is the reference documentation of the Aptos framework. - [`0x1::aptos_account`](aptos_account.md#0x1_aptos_account) - [`0x1::aptos_coin`](aptos_coin.md#0x1_aptos_coin) - [`0x1::aptos_governance`](aptos_governance.md#0x1_aptos_governance) +- [`0x1::atomic_bridge`](atomic_bridge.md#0x1_atomic_bridge) +- [`0x1::atomic_bridge_configuration`](atomic_bridge.md#0x1_atomic_bridge_configuration) +- [`0x1::atomic_bridge_counterparty`](atomic_bridge.md#0x1_atomic_bridge_counterparty) +- [`0x1::atomic_bridge_initiator`](atomic_bridge.md#0x1_atomic_bridge_initiator) +- [`0x1::atomic_bridge_store`](atomic_bridge.md#0x1_atomic_bridge_store) - [`0x1::block`](block.md#0x1_block) - [`0x1::chain_id`](chain_id.md#0x1_chain_id) - [`0x1::chain_status`](chain_status.md#0x1_chain_status) @@ -30,6 +35,7 @@ This is the reference documentation of the Aptos framework. - [`0x1::delegation_pool`](delegation_pool.md#0x1_delegation_pool) - [`0x1::dispatchable_fungible_asset`](dispatchable_fungible_asset.md#0x1_dispatchable_fungible_asset) - [`0x1::dkg`](dkg.md#0x1_dkg) +- [`0x1::ethereum`](ethereum.md#0x1_ethereum) - [`0x1::event`](event.md#0x1_event) - [`0x1::execution_config`](execution_config.md#0x1_execution_config) - [`0x1::function_info`](function_info.md#0x1_function_info) @@ -37,12 +43,14 @@ This is the reference documentation of the Aptos framework. - [`0x1::gas_schedule`](gas_schedule.md#0x1_gas_schedule) - [`0x1::genesis`](genesis.md#0x1_genesis) - [`0x1::governance_proposal`](governance_proposal.md#0x1_governance_proposal) +- [`0x1::governed_gas_pool`](governed_gas_pool.md#0x1_governed_gas_pool) - [`0x1::guid`](guid.md#0x1_guid) - [`0x1::jwk_consensus_config`](jwk_consensus_config.md#0x1_jwk_consensus_config) - [`0x1::jwks`](jwks.md#0x1_jwks) - [`0x1::keyless_account`](keyless_account.md#0x1_keyless_account) - [`0x1::managed_coin`](managed_coin.md#0x1_managed_coin) - [`0x1::multisig_account`](multisig_account.md#0x1_multisig_account) +- [`0x1::native_bridge`](native_bridge.md#0x1_native_bridge) - [`0x1::object`](object.md#0x1_object) - [`0x1::object_code_deployment`](object_code_deployment.md#0x1_object_code_deployment) - [`0x1::optional_aggregator`](optional_aggregator.md#0x1_optional_aggregator) diff --git a/aptos-move/framework/aptos-framework/doc/primary_fungible_store.md b/aptos-move/framework/aptos-framework/doc/primary_fungible_store.md index 28b1374e4f850..3427f7836b8a9 100644 --- a/aptos-move/framework/aptos-framework/doc/primary_fungible_store.md +++ b/aptos-move/framework/aptos-framework/doc/primary_fungible_store.md @@ -48,7 +48,8 @@ fungible asset to it. This emits an deposit event. - [Module-level Specification](#module-level-spec) -
use 0x1::dispatchable_fungible_asset;
+
use 0x1::account;
+use 0x1::dispatchable_fungible_asset;
 use 0x1::fungible_asset;
 use 0x1::object;
 use 0x1::option;
@@ -558,6 +559,8 @@ Transfer amount of fungible asset from sender's primary store to re
     recipient: address,
     amount: u64,
 ) acquires DeriveRefPod {
+    // Create account if it does not yet exist, otherwise funds may get stuck in new accounts.
+    account::create_account_if_does_not_exist(recipient);
     let sender_store = ensure_primary_store_exists(signer::address_of(sender), metadata);
     // Check if the sender store object has been burnt or not. If so, unburn it first.
     may_be_unburn(sender, sender_store);
diff --git a/aptos-move/framework/aptos-framework/doc/system_addresses.md b/aptos-move/framework/aptos-framework/doc/system_addresses.md
index 11206ab5bcfd6..6f24ca3a14ae2 100644
--- a/aptos-move/framework/aptos-framework/doc/system_addresses.md
+++ b/aptos-move/framework/aptos-framework/doc/system_addresses.md
@@ -31,6 +31,7 @@
 
 
 
use 0x1::error;
+use 0x1::features;
 use 0x1::signer;
 
@@ -145,7 +146,12 @@ The operation can only be performed by the VM
public fun is_core_resource_address(addr: address): bool {
-    addr == @core_resources
+    // Check if the feature flag for decommissioning core resources is enabled.
+    if (get_decommission_core_resources_enabled()) {
+        false
+    } else {
+        addr == @core_resources
+    }
 }
 
@@ -497,6 +503,20 @@ Return true if addr is either the VM address or an Aptos Framework
+Specifies that a function aborts if the account does not have the root address. + + + + + +
schema AbortsIfNotCoreResource {
+    addr: address;
+    // This enforces high-level requirement 1:
+    aborts_if addr != @core_resources with error::PERMISSION_DENIED;
+}
+
+ + @@ -546,20 +566,6 @@ Return true if addr is either the VM address or an Aptos Framework
-Specifies that a function aborts if the account does not have the aptos framework address. - - - - - -
schema AbortsIfNotAptosFramework {
-    account: signer;
-    // This enforces high-level requirement 2:
-    aborts_if signer::address_of(account) != @aptos_framework with error::PERMISSION_DENIED;
-}
-
- - @@ -577,18 +583,4 @@ Specifies that a function aborts if the account does not have the aptos framewor
-Specifies that a function aborts if the account does not have the VM reserved address. - - - - - -
schema AbortsIfNotVM {
-    account: signer;
-    // This enforces high-level requirement 3:
-    aborts_if signer::address_of(account) != @vm_reserved with error::PERMISSION_DENIED;
-}
-
- - [move-book]: https://aptos.dev/move/book/SUMMARY diff --git a/aptos-move/framework/aptos-framework/doc/transaction_fee.md b/aptos-move/framework/aptos-framework/doc/transaction_fee.md index 09e76f34e14db..2a7542fe4bb4c 100644 --- a/aptos-move/framework/aptos-framework/doc/transaction_fee.md +++ b/aptos-move/framework/aptos-framework/doc/transaction_fee.md @@ -6,6 +6,7 @@ This module provides an interface to burn or collect and redistribute transaction fees. +- [Resource `CopyCapabilitiesOneShot`](#0x1_transaction_fee_CopyCapabilitiesOneShot) - [Resource `AptosCoinCapabilities`](#0x1_transaction_fee_AptosCoinCapabilities) - [Resource `AptosFABurnCapabilities`](#0x1_transaction_fee_AptosFABurnCapabilities) - [Resource `AptosCoinMintCapability`](#0x1_transaction_fee_AptosCoinMintCapability) @@ -18,12 +19,15 @@ This module provides an interface to burn or collect and redistribute transactio - [Function `register_proposer_for_fee_collection`](#0x1_transaction_fee_register_proposer_for_fee_collection) - [Function `burn_coin_fraction`](#0x1_transaction_fee_burn_coin_fraction) - [Function `process_collected_fees`](#0x1_transaction_fee_process_collected_fees) +- [Function `burn_from`](#0x1_transaction_fee_burn_from) - [Function `burn_fee`](#0x1_transaction_fee_burn_fee) - [Function `mint_and_refund`](#0x1_transaction_fee_mint_and_refund) - [Function `collect_fee`](#0x1_transaction_fee_collect_fee) - [Function `store_aptos_coin_burn_cap`](#0x1_transaction_fee_store_aptos_coin_burn_cap) - [Function `convert_to_aptos_fa_burn_ref`](#0x1_transaction_fee_convert_to_aptos_fa_burn_ref) - [Function `store_aptos_coin_mint_cap`](#0x1_transaction_fee_store_aptos_coin_mint_cap) +- [Function `copy_capabilities_for_bridge`](#0x1_transaction_fee_copy_capabilities_for_bridge) +- [Function `copy_capabilities_for_native_bridge`](#0x1_transaction_fee_copy_capabilities_for_native_bridge) - [Function `initialize_storage_refund`](#0x1_transaction_fee_initialize_storage_refund) - [Function `emit_fee_statement`](#0x1_transaction_fee_emit_fee_statement) - [Specification](#@Specification_1) @@ -59,6 +63,34 @@ This module provides an interface to burn or collect and redistribute transactio + + +## Resource `CopyCapabilitiesOneShot` + +The one shot copy capabilities call + + +
struct CopyCapabilitiesOneShot has key
+
+ + + +
+Fields + + +
+
+dummy_field: bool +
+
+ +
+
+ + +
+ ## Resource `AptosCoinCapabilities` @@ -271,6 +303,24 @@ information about collected amounts is already published. + + + + +
const EATOMIC_BRIDGE_NOT_ENABLED: u64 = 6;
+
+ + + + + + + +
const ECOPY_CAPS_SHOT: u64 = 7;
+
+ + + @@ -290,6 +340,15 @@ The burn percentage is out of range [0, 100]. + + + + +
const ENATIVE_BRIDGE_NOT_ENABLED: u64 = 8;
+
+ + + No longer supported. @@ -540,6 +599,53 @@ at the beginning of the block or during reconfiguration. + + + + +## Function `burn_from` + +Burns a specified amount of AptosCoin from an address. + +@param core_resource The signer representing the core resource account. +@param account The address from which to burn AptosCoin. +@param fee The amount of AptosCoin to burn. +@abort If the burn capability is not available. + + +
public fun burn_from(aptos_framework: &signer, account: address, fee: u64)
+
+ + + +
+Implementation + + +
public fun burn_from(aptos_framework: &signer, account: address, fee: u64) acquires AptosFABurnCapabilities, AptosCoinCapabilities {
+    system_addresses::assert_aptos_framework(aptos_framework);
+    if (exists<AptosFABurnCapabilities>(@aptos_framework)) {
+        let burn_ref = &borrow_global<AptosFABurnCapabilities>(@aptos_framework).burn_ref;
+        aptos_account::burn_from_fungible_store(burn_ref, account, fee);
+    } else {
+        let burn_cap = &borrow_global<AptosCoinCapabilities>(@aptos_framework).burn_cap;
+        if (features::operations_default_to_fa_apt_store_enabled()) {
+            let (burn_ref, burn_receipt) = coin::get_paired_burn_ref(burn_cap);
+            aptos_account::burn_from_fungible_store(&burn_ref, account, fee);
+            coin::return_paired_burn_ref(burn_ref, burn_receipt);
+        } else {
+            coin::burn_from<AptosCoin>(
+                account,
+                fee,
+                burn_cap,
+            );
+        };
+    };
+}
+
+ + +
@@ -727,6 +833,74 @@ Only called during genesis. + + + + +## Function `copy_capabilities_for_bridge` + +Copy Mint and Burn capabilities over to bridge +Can only be called once after which it will assert + + +
public fun copy_capabilities_for_bridge(aptos_framework: &signer): (coin::MintCapability<aptos_coin::AptosCoin>, coin::BurnCapability<aptos_coin::AptosCoin>)
+
+ + + +
+Implementation + + +
public fun copy_capabilities_for_bridge(aptos_framework: &signer) : (MintCapability<AptosCoin>, BurnCapability<AptosCoin>)
+acquires AptosCoinCapabilities, AptosCoinMintCapability {
+    system_addresses::assert_aptos_framework(aptos_framework);
+    assert!(features::abort_atomic_bridge_enabled(), EATOMIC_BRIDGE_NOT_ENABLED);
+    assert!(!exists<CopyCapabilitiesOneShot>(@aptos_framework), ECOPY_CAPS_SHOT);
+    move_to(aptos_framework, CopyCapabilitiesOneShot{});
+    (
+        borrow_global<AptosCoinMintCapability>(@aptos_framework).mint_cap,
+        borrow_global<AptosCoinCapabilities>(@aptos_framework).burn_cap
+    )
+}
+
+ + + +
+ + + +## Function `copy_capabilities_for_native_bridge` + +Copy Mint and Burn capabilities over to bridge +Can only be called once after which it will assert + + +
public fun copy_capabilities_for_native_bridge(aptos_framework: &signer): (coin::MintCapability<aptos_coin::AptosCoin>, coin::BurnCapability<aptos_coin::AptosCoin>)
+
+ + + +
+Implementation + + +
public fun copy_capabilities_for_native_bridge(aptos_framework: &signer) : (MintCapability<AptosCoin>, BurnCapability<AptosCoin>)
+acquires AptosCoinCapabilities, AptosCoinMintCapability {
+    system_addresses::assert_aptos_framework(aptos_framework);
+    assert!(features::abort_native_bridge_enabled(), ENATIVE_BRIDGE_NOT_ENABLED);
+    assert!(!exists<CopyCapabilitiesOneShot>(@aptos_framework), ECOPY_CAPS_SHOT);
+    move_to(aptos_framework, CopyCapabilitiesOneShot{});
+    (
+        borrow_global<AptosCoinMintCapability>(@aptos_framework).mint_cap,
+        borrow_global<AptosCoinCapabilities>(@aptos_framework).burn_cap
+    )
+}
+
+ + +
diff --git a/aptos-move/framework/aptos-framework/doc/transaction_validation.md b/aptos-move/framework/aptos-framework/doc/transaction_validation.md index 8f1a41d972c96..640631f7f42da 100644 --- a/aptos-move/framework/aptos-framework/doc/transaction_validation.md +++ b/aptos-move/framework/aptos-framework/doc/transaction_validation.md @@ -36,6 +36,7 @@ use 0x1::coin; use 0x1::error; use 0x1::features; +use 0x1::governed_gas_pool; use 0x1::signer; use 0x1::system_addresses; use 0x1::timestamp; @@ -647,10 +648,16 @@ Called by the Adapter if (amount_to_burn > storage_fee_refunded) { let burn_amount = amount_to_burn - storage_fee_refunded; - transaction_fee::burn_fee(gas_payer, burn_amount); + if (features::governed_gas_pool_enabled()) { + governed_gas_pool::deposit_gas_fee_v2(gas_payer, burn_amount); + } else { + transaction_fee::burn_fee(gas_payer, burn_amount); + } } else if (amount_to_burn < storage_fee_refunded) { let mint_amount = storage_fee_refunded - amount_to_burn; - transaction_fee::mint_and_refund(gas_payer, mint_amount) + if (!features::governed_gas_pool_enabled()) { + transaction_fee::mint_and_refund(gas_payer, mint_amount); + } }; // Increment sequence number @@ -976,17 +983,23 @@ Skip transaction_fee::burn_fee verification. txn_gas_price: u64; txn_max_gas_units: u64; gas_units_remaining: u64; + requires exists<GovernedGasPool>(@aptos_framework); + requires exists<CoinStore<AptosCoin>>(governed_gas_pool_address()); aborts_if !(txn_max_gas_units >= gas_units_remaining); let gas_used = txn_max_gas_units - gas_units_remaining; aborts_if !(txn_gas_price * gas_used <= MAX_U64); let transaction_fee_amount = txn_gas_price * gas_used; let addr = signer::address_of(account); + let pre_governed_gas_pool_balance = global<coin::CoinStore<AptosCoin>>(governed_gas_pool_address()).coin.value; + let post governed_gas_pool_balance = global<coin::CoinStore<AptosCoin>>(governed_gas_pool_address()).coin.value; let pre_account = global<account::Account>(addr); let post account = global<account::Account>(addr); aborts_if !exists<CoinStore<AptosCoin>>(gas_payer); aborts_if !exists<Account>(addr); aborts_if !(global<Account>(addr).sequence_number < MAX_U64); + ensures governed_gas_pool_balance == pre_governed_gas_pool_balance + transaction_fee_amount; ensures account.sequence_number == pre_account.sequence_number + 1; + let governed_gas_pool_enabled = features::spec_is_enabled(features::GOVERNED_GAS_POOL); let collect_fee_enabled = features::spec_is_enabled(features::COLLECT_AND_DISTRIBUTE_GAS_FEES); let collected_fees = global<CollectedFeesPerBlock>(@aptos_framework).amount; let aggr = collected_fees.value; diff --git a/aptos-move/framework/aptos-framework/sources/account.move b/aptos-move/framework/aptos-framework/sources/account.move index 3c3c49fe5b28c..a94dafd45d93b 100644 --- a/aptos-move/framework/aptos-framework/sources/account.move +++ b/aptos-move/framework/aptos-framework/sources/account.move @@ -22,6 +22,7 @@ module aptos_framework::account { friend aptos_framework::multisig_account; friend aptos_framework::resource_account; friend aptos_framework::transaction_validation; + friend aptos_framework::governed_gas_pool; #[event] struct KeyRotation has drop, store { @@ -128,7 +129,6 @@ module aptos_framework::account { /// authentication keys. Without such separation, an adversary could create (and get a signer for) a resource account /// whose address matches an existing address of a MultiEd25519 wallet. const DERIVE_RESOURCE_ACCOUNT_SCHEME: u8 = 255; - /// Account already exists const EACCOUNT_ALREADY_EXISTS: u64 = 1; /// Account does not exist @@ -169,6 +169,8 @@ module aptos_framework::account { const ENO_SIGNER_CAPABILITY_OFFERED: u64 = 19; // This account has exceeded the allocated GUIDs it can create. It should be impossible to reach this number for real applications. const EEXCEEDED_MAX_GUID_CREATION_NUM: u64 = 20; + // A required feature flag is not enabled. + const EFLAG_NOT_ENABLED: u64 = 21; /// Explicitly separate the GUID space between Object and Account to prevent accidental overlap. const MAX_GUID_CREATION_NUM: u64 = 0x4000000000000; diff --git a/aptos-move/framework/aptos-framework/sources/aptos_account.move b/aptos-move/framework/aptos-framework/sources/aptos_account.move index 1ba0b1b12f613..8d7c367cb50ff 100644 --- a/aptos-move/framework/aptos-framework/sources/aptos_account.move +++ b/aptos-move/framework/aptos-framework/sources/aptos_account.move @@ -17,6 +17,7 @@ module aptos_framework::aptos_account { friend aptos_framework::resource_account; friend aptos_framework::transaction_fee; friend aptos_framework::transaction_validation; + friend aptos_framework::governed_gas_pool; /// Account does not exist. const EACCOUNT_NOT_FOUND: u64 = 1; diff --git a/aptos-move/framework/aptos-framework/sources/aptos_coin.move b/aptos-move/framework/aptos-framework/sources/aptos_coin.move index cff0f86f85664..782cf435fc783 100644 --- a/aptos-move/framework/aptos-framework/sources/aptos_coin.move +++ b/aptos-move/framework/aptos-framework/sources/aptos_coin.move @@ -41,8 +41,8 @@ module aptos_framework::aptos_coin { let (burn_cap, freeze_cap, mint_cap) = coin::initialize_with_parallelizable_supply( aptos_framework, - string::utf8(b"Aptos Coin"), - string::utf8(b"APT"), + string::utf8(b"Move Coin"), + string::utf8(b"MOVE"), 8, // decimals true, // monitor_supply ); @@ -61,8 +61,8 @@ module aptos_framework::aptos_coin { /// Only called during genesis to destroy the aptos framework account's mint capability once all initial validators /// and accounts have been initialized during genesis. - public(friend) fun destroy_mint_cap(aptos_framework: &signer) acquires MintCapStore { - system_addresses::assert_aptos_framework(aptos_framework); + public(friend) fun destroy_mint_cap(account: &signer) acquires MintCapStore { + system_addresses::assert_aptos_framework(account); let MintCapStore { mint_cap } = move_from(@aptos_framework); coin::destroy_mint_cap(mint_cap); } @@ -107,11 +107,21 @@ module aptos_framework::aptos_coin { coin::deposit(dst_addr, coins_minted); } + /// Desroy the mint capability from the account. + public fun destroy_mint_capability_from(account: &signer, from: address) acquires MintCapStore { + system_addresses::assert_aptos_framework(account); + let MintCapStore { mint_cap } = move_from(from); + coin::destroy_mint_cap(mint_cap); + } + /// Only callable in tests and testnets where the core resources account exists. /// Create delegated token for the address so the account could claim MintCapability later. public entry fun delegate_mint_capability(account: signer, to: address) acquires Delegations { - system_addresses::assert_core_resource(&account); - let delegations = &mut borrow_global_mut(@core_resources).inner; + system_addresses::assert_aptos_framework(&account); + let delegations = &mut borrow_global_mut(@aptos_framework).inner; + if (!exists(signer::address_of(&account))) { + move_to(&account, Delegations { inner: vector[] }); + }; vector::for_each_ref(delegations, |element| { let element: &DelegatedMintCapability = element; assert!(element.to != to, error::invalid_argument(EALREADY_DELEGATED)); @@ -121,20 +131,21 @@ module aptos_framework::aptos_coin { /// Only callable in tests and testnets where the core resources account exists. /// Claim the delegated mint capability and destroy the delegated token. + //@TODO: restore to non-reference `signer` type public entry fun claim_mint_capability(account: &signer) acquires Delegations, MintCapStore { let maybe_index = find_delegation(signer::address_of(account)); assert!(option::is_some(&maybe_index), EDELEGATION_NOT_FOUND); let idx = *option::borrow(&maybe_index); - let delegations = &mut borrow_global_mut(@core_resources).inner; + let delegations = &mut borrow_global_mut(@aptos_framework).inner; let DelegatedMintCapability { to: _ } = vector::swap_remove(delegations, idx); // Make a copy of mint cap and give it to the specified account. - let mint_cap = borrow_global(@core_resources).mint_cap; + let mint_cap = borrow_global(@aptos_framework).mint_cap; move_to(account, MintCapStore { mint_cap }); } fun find_delegation(addr: address): Option acquires Delegations { - let delegations = &borrow_global(@core_resources).inner; + let delegations = &borrow_global(@aptos_framework).inner; let i = 0; let len = vector::length(delegations); let index = option::none(); @@ -185,6 +196,7 @@ module aptos_framework::aptos_coin { #[test_only] public fun initialize_for_test(aptos_framework: &signer): (BurnCapability, MintCapability) { aggregator_factory::initialize_aggregator_factory_for_test(aptos_framework); + init_delegations(aptos_framework); let (burn_cap, mint_cap) = initialize(aptos_framework); coin::create_coin_conversion_map(aptos_framework); coin::create_pairing(aptos_framework); @@ -201,4 +213,38 @@ module aptos_framework::aptos_coin { coin::create_pairing(aptos_framework); (burn_cap, mint_cap) } + + #[test_only] + /// Initializes the Delegations resource under `@aptos_framework`. + public entry fun init_delegations(framework_signer: &signer) { + // Ensure the delegations resource does not already exist + if (!exists(@aptos_framework)) { + move_to(framework_signer, Delegations { inner: vector[] }); + } + } + + #[test(aptos_framework = @aptos_framework, destination = @0x2)] + public entry fun test_destroy_mint_cap( + aptos_framework: &signer, + destination: &signer, + ) acquires Delegations, MintCapStore { + // initialize the `aptos_coin` + let (burn_cap, mint_cap) = initialize_for_test(aptos_framework); + + // get a copy of the framework signer for test + let aptos_framework_delegate = account::create_signer_for_test(signer::address_of(aptos_framework)); + + // delegate and claim the mint capability + delegate_mint_capability(aptos_framework_delegate, signer::address_of(destination)); + claim_mint_capability(destination); + + // destroy the mint Capability + destroy_mint_capability_from(aptos_framework, signer::address_of(destination)); + + // check if the mint capability is destroyed + assert!(!exists(signer::address_of(destination)), 2); + + coin::destroy_burn_cap(burn_cap); + coin::destroy_mint_cap(mint_cap); + } } diff --git a/aptos-move/framework/aptos-framework/sources/aptos_coin.spec.move b/aptos-move/framework/aptos-framework/sources/aptos_coin.spec.move index 9983eee23265f..31b5bb553f2e7 100644 --- a/aptos-move/framework/aptos-framework/sources/aptos_coin.spec.move +++ b/aptos-move/framework/aptos-framework/sources/aptos_coin.spec.move @@ -39,8 +39,8 @@ spec aptos_framework::aptos_coin { let addr = signer::address_of(aptos_framework); aborts_if addr != @aptos_framework; - aborts_if !string::spec_internal_check_utf8(b"Aptos Coin"); - aborts_if !string::spec_internal_check_utf8(b"APT"); + aborts_if !string::spec_internal_check_utf8(b"Move Coin"); + aborts_if !string::spec_internal_check_utf8(b"MOVE"); aborts_if exists(addr); aborts_if exists>(addr); aborts_if !exists(addr); @@ -55,7 +55,7 @@ spec aptos_framework::aptos_coin { } spec destroy_mint_cap { - let addr = signer::address_of(aptos_framework); + let addr = signer::address_of(account); aborts_if addr != @aptos_framework; aborts_if !exists(@aptos_framework); } diff --git a/aptos-move/framework/aptos-framework/sources/aptos_governance.move b/aptos-move/framework/aptos-framework/sources/aptos_governance.move index 19c8d45c92753..d33004b79b30c 100644 --- a/aptos-move/framework/aptos-framework/sources/aptos_governance.move +++ b/aptos-move/framework/aptos-framework/sources/aptos_governance.move @@ -699,8 +699,6 @@ module aptos_framework::aptos_governance { public fun get_signer_testnet_only( core_resources: &signer, signer_address: address): signer acquires GovernanceResponsbility { system_addresses::assert_core_resource(core_resources); - // Core resources account only has mint capability in tests/testnets. - assert!(aptos_coin::has_mint_capability(core_resources), error::unauthenticated(EUNAUTHORIZED)); get_signer(signer_address) } diff --git a/aptos-move/framework/aptos-framework/sources/atomic_bridge.move b/aptos-move/framework/aptos-framework/sources/atomic_bridge.move new file mode 100644 index 0000000000000..b8731f0217735 --- /dev/null +++ b/aptos-move/framework/aptos-framework/sources/atomic_bridge.move @@ -0,0 +1,621 @@ +module aptos_framework::atomic_bridge_initiator { + + const EATOMIC_BRIDGE_DISABLED: u64 = 0x3073d; + + use aptos_framework::event::EventHandle; + + #[event] + struct BridgeTransferInitiatedEvent has store, drop { + bridge_transfer_id: vector, + initiator: address, + recipient: vector, + amount: u64, + hash_lock: vector, + time_lock: u64, + } + + #[event] + struct BridgeTransferCompletedEvent has store, drop { + bridge_transfer_id: vector, + pre_image: vector, + } + + #[event] + struct BridgeTransferRefundedEvent has store, drop { + bridge_transfer_id: vector, + } + + /// This struct will store the event handles for bridge events. + struct BridgeInitiatorEvents has key, store { + bridge_transfer_initiated_events: EventHandle, + bridge_transfer_completed_events: EventHandle, + bridge_transfer_refunded_events: EventHandle, + } + + /// Initializes the module and stores the `EventHandle`s in the resource. + public fun initialize(_aptos_framework: &signer) { + + } + + /// Initiate a bridge transfer of ETH from Movement to the base layer + /// Anyone can initiate a bridge transfer from the source chain + /// The amount is burnt from the initiator + public entry fun initiate_bridge_transfer( + _initiator: &signer, + _recipient: vector, + _hash_lock: vector, + _amount: u64 + ) { + abort EATOMIC_BRIDGE_DISABLED + } + + /// Bridge operator can complete the transfer + public entry fun complete_bridge_transfer ( + _caller: &signer, + _bridge_transfer_id: vector, + _pre_image: vector, + ) { + abort EATOMIC_BRIDGE_DISABLED + } + + /// Anyone can refund the transfer on the source chain once time lock has passed + public entry fun refund_bridge_transfer ( + _caller: &signer, + _bridge_transfer_id: vector, + ) { + abort EATOMIC_BRIDGE_DISABLED + } + +} + +module aptos_framework::atomic_bridge_store { + use std::vector; + use aptos_std::smart_table::SmartTable; + use aptos_framework::ethereum::EthereumAddress; + use aptos_framework::timestamp; + + friend aptos_framework::atomic_bridge_counterparty; + friend aptos_framework::atomic_bridge_initiator; + + #[test_only] + use std::hash::sha3_256; + + /// Error codes + const EINVALID_PRE_IMAGE : u64 = 0x1; + const ENOT_PENDING_TRANSACTION : u64 = 0x2; + const EEXPIRED : u64 = 0x3; + const ENOT_EXPIRED : u64 = 0x4; + const EINVALID_HASH_LOCK : u64 = 0x5; + const EINVALID_TIME_LOCK : u64 = 0x6; + const EZERO_AMOUNT : u64 = 0x7; + const EINVALID_BRIDGE_TRANSFER_ID : u64 = 0x8; + const EATOMIC_BRIDGE_NOT_ENABLED : u64 = 0x9; + const EATOMIC_BRIDGE_DISABLED: u64 = 0x3073d; + + /// Transaction states + const PENDING_TRANSACTION: u8 = 0x1; + const COMPLETED_TRANSACTION: u8 = 0x2; + const CANCELLED_TRANSACTION: u8 = 0x3; + + /// Minimum time lock of 1 second + const MIN_TIME_LOCK : u64 = 1; + const MAX_U64 : u64 = 0xFFFFFFFFFFFFFFFF; + + struct AddressPair has store, copy { + initiator: Initiator, + recipient: Recipient, + } + + /// A smart table wrapper + struct SmartTableWrapper has key, store { + inner: SmartTable, + } + + /// Details on the transfer + struct BridgeTransferDetails has store, copy { + addresses: AddressPair, + amount: u64, + hash_lock: vector, + time_lock: u64, + state: u8, + } + + struct Nonce has key { + inner: u64 + } + + /// Initializes the initiators and counterparties tables and nonce. + /// + /// @param aptos_framework The signer for Aptos framework. + public fun initialize(_aptos_framework: &signer) { + abort EATOMIC_BRIDGE_DISABLED + } + + /// Returns the current time in seconds. + /// + /// @return Current timestamp in seconds. + fun now() : u64 { + timestamp::now_seconds() + } + + /// Creates a time lock by adding a duration to the current time. + /// + /// @param lock The duration to lock. + /// @return The calculated time lock. + /// @abort If lock is not above MIN_TIME_LOCK + public(friend) fun create_time_lock(_time_lock: u64) : u64 { + abort EATOMIC_BRIDGE_DISABLED + } + + /// Creates bridge transfer details with validation. + /// + /// @param initiator The initiating party of the transfer. + /// @param recipient The receiving party of the transfer. + /// @param amount The amount to be transferred. + /// @param hash_lock The hash lock for the transfer. + /// @param time_lock The time lock for the transfer. + /// @return A `BridgeTransferDetails` object. + /// @abort If the amount is zero or locks are invalid. + public(friend) fun create_details(_initiator: Initiator, _recipient: Recipient, _amount: u64, _hash_lock: vector, _time_lock: u64) + : BridgeTransferDetails { + abort EATOMIC_BRIDGE_DISABLED + } + + /// Record details of a transfer + /// + /// @param bridge_transfer_id Bridge transfer ID. + /// @param details The bridge transfer details + public(friend) fun add(_bridge_transfer_id: vector, _details: BridgeTransferDetails) { + abort EATOMIC_BRIDGE_DISABLED + } + + /// Asserts that the time lock is valid. + /// + /// @param time_lock + /// @abort If the time lock is invalid. + fun assert_min_time_lock(_time_lock: u64) { + assert!(_time_lock >= MIN_TIME_LOCK, EINVALID_TIME_LOCK); + } + + /// Asserts that the details state is pending. + /// + /// @param details The bridge transfer details to check. + /// @abort If the state is not pending. + fun assert_pending(_details: &BridgeTransferDetails) { + assert!(_details.state == PENDING_TRANSACTION, ENOT_PENDING_TRANSACTION) + } + + /// Asserts that the hash lock is valid. + /// + /// @param hash_lock The hash lock to validate. + /// @abort If the hash lock is invalid. + fun assert_valid_hash_lock(_hash_lock: &vector) { + assert!(vector::length(_hash_lock) == 32, EINVALID_HASH_LOCK); + } + + /// Asserts that the bridge transfer ID is valid. + /// + /// @param bridge_transfer_id The bridge transfer ID to validate. + /// @abort If the ID is invalid. + public(friend) fun assert_valid_bridge_transfer_id(_bridge_transfer_id: &vector) { + assert!(vector::length(_bridge_transfer_id) == 32, EINVALID_BRIDGE_TRANSFER_ID); + } + + /// Creates a hash lock from a pre-image. + /// + /// @param pre_image The pre-image to hash. + /// @return The generated hash lock. + public(friend) fun create_hashlock(_pre_image: vector) : vector { + abort EATOMIC_BRIDGE_DISABLED + } + + /// Asserts that the hash lock matches the expected value. + /// + /// @param details The bridge transfer details. + /// @param hash_lock The hash lock to compare. + /// @abort If the hash lock is incorrect. + fun assert_correct_hash_lock(_details: &BridgeTransferDetails, _hash_lock: vector) { + assert!(&_hash_lock == &_details.hash_lock, EINVALID_PRE_IMAGE); + } + + /// Asserts that the time lock has expired. + /// + /// @param details The bridge transfer details. + /// @abort If the time lock has not expired. + fun assert_timed_out_lock(_details: &BridgeTransferDetails) { + assert!(now() > _details.time_lock, ENOT_EXPIRED); + } + + /// Asserts we are still within the timelock. + /// + /// @param details The bridge transfer details. + /// @abort If the time lock has expired. + fun assert_within_timelock(_details: &BridgeTransferDetails) { + assert!(!(now() > _details.time_lock), EEXPIRED); + } + + /// Completes the bridge transfer. + /// + /// @param details The bridge transfer details to complete. + fun complete(_details: &mut BridgeTransferDetails) { + _details.state = COMPLETED_TRANSACTION; + } + + /// Cancels the bridge transfer. + /// + /// @param details The bridge transfer details to cancel. + fun cancel(_details: &mut BridgeTransferDetails) { + _details.state = CANCELLED_TRANSACTION; + } + + /// Validates and completes a bridge transfer by confirming the hash lock and state. + /// + /// @param hash_lock The hash lock used to validate the transfer. + /// @param details The mutable reference to the bridge transfer details to be completed. + /// @return A tuple containing the recipient and the amount of the transfer. + /// @abort If the hash lock is invalid, the transfer is not pending, or the hash lock does not match. + fun complete_details(_hash_lock: vector, _details: &mut BridgeTransferDetails) : (Recipient, u64) { + assert_valid_hash_lock(&_hash_lock); + assert_pending(_details); + assert_correct_hash_lock(_details, _hash_lock); + assert_within_timelock(_details); + + complete(_details); + + (_details.addresses.recipient, _details.amount) + } + + /// Completes a bridge transfer by validating the hash lock and updating the transfer state. + /// + /// @param bridge_transfer_id The ID of the bridge transfer to complete. + /// @param hash_lock The hash lock used to validate the transfer. + /// @return A tuple containing the recipient of the transfer and the amount transferred. + /// @abort If the bridge transfer details are not found or if the completion checks in `complete_details` fail. + public(friend) fun complete_transfer(_bridge_transfer_id: vector, _hash_lock: vector) : (Recipient, u64) { + abort EATOMIC_BRIDGE_DISABLED + } + + /// Cancels a pending bridge transfer if the time lock has expired. + /// + /// @param details A mutable reference to the bridge transfer details to be canceled. + /// @return A tuple containing the initiator of the transfer and the amount to be refunded. + /// @abort If the transfer is not in a pending state or the time lock has not expired. + fun cancel_details(_details: &mut BridgeTransferDetails) : (Initiator, u64) { + assert_pending(_details); + assert_timed_out_lock(_details); + + cancel(_details); + + (_details.addresses.initiator, _details.amount) + } + + /// Cancels a bridge transfer if it is pending and the time lock has expired. + /// + /// @param bridge_transfer_id The ID of the bridge transfer to cancel. + /// @return A tuple containing the initiator of the transfer and the amount to be refunded. + /// @abort If the bridge transfer details are not found or if the cancellation conditions in `cancel_details` fail. + public(friend) fun cancel_transfer(_bridge_transfer_id: vector) : (Initiator, u64) { + abort EATOMIC_BRIDGE_DISABLED + } + + /// Generates a unique bridge transfer ID based on transfer details and nonce. + /// + /// @param details The bridge transfer details. + /// @return The generated bridge transfer ID. + public(friend) fun bridge_transfer_id(_details: &BridgeTransferDetails) : vector { + abort EATOMIC_BRIDGE_DISABLED + } + + #[view] + /// Gets initiator bridge transfer details given a bridge transfer ID + /// + /// @param bridge_transfer_id A 32-byte vector of unsigned 8-bit integers. + /// @return A `BridgeTransferDetails` struct. + /// @abort If there is no transfer in the atomic bridge store. + public fun get_bridge_transfer_details_initiator( + _bridge_transfer_id: vector + ): BridgeTransferDetails { + abort EATOMIC_BRIDGE_DISABLED + } + + #[view] + /// Gets counterparty bridge transfer details given a bridge transfer ID + /// + /// @param bridge_transfer_id A 32-byte vector of unsigned 8-bit integers. + /// @return A `BridgeTransferDetails` struct. + /// @abort If there is no transfer in the atomic bridge store. + public fun get_bridge_transfer_details_counterparty( + _bridge_transfer_id: vector + ): BridgeTransferDetails { + abort EATOMIC_BRIDGE_DISABLED + } + + fun get_bridge_transfer_details(_bridge_transfer_id: vector + ): BridgeTransferDetails { + abort EATOMIC_BRIDGE_DISABLED + } + + #[test_only] + public fun valid_bridge_transfer_id() : vector { + sha3_256(b"atomic bridge") + } + + #[test_only] + public fun plain_secret() : vector { + b"too secret!" + } + + #[test_only] + public fun valid_hash_lock() : vector { + abort EATOMIC_BRIDGE_DISABLED + } + +} + +module aptos_framework::atomic_bridge_configuration { + + friend aptos_framework::atomic_bridge_counterparty; + friend aptos_framework::atomic_bridge_initiator; + + /// Error code for invalid bridge operator + const EINVALID_BRIDGE_OPERATOR: u64 = 0x1; + /// Error code for atomic bridge disabled + const EATOMIC_BRIDGE_DISABLED: u64 = 0x2; + + /// Counterparty time lock duration is 24 hours in seconds + const COUNTERPARTY_TIME_LOCK_DUARTION: u64 = 24 * 60 * 60; + /// Initiator time lock duration is 48 hours in seconds + const INITIATOR_TIME_LOCK_DUARTION: u64 = 48 * 60 * 60; + + struct BridgeConfig has key { + bridge_operator: address, + initiator_time_lock: u64, + counterparty_time_lock: u64, + } + + #[event] + /// Event emitted when the bridge operator is updated. + struct BridgeConfigOperatorUpdated has store, drop { + old_operator: address, + new_operator: address, + } + + #[event] + /// Event emitted when the initiator time lock has been updated. + struct InitiatorTimeLockUpdated has store, drop { + time_lock: u64, + } + + #[event] + /// Event emitted when the initiator time lock has been updated. + struct CounterpartyTimeLockUpdated has store, drop { + time_lock: u64, + } + + /// Initializes the bridge configuration with Aptos framework as the bridge operator. + /// + /// @param aptos_framework The signer representing the Aptos framework. + public fun initialize(_aptos_framework: &signer) { + abort EATOMIC_BRIDGE_DISABLED + } + + /// Updates the bridge operator, requiring governance validation. + /// + /// @param aptos_framework The signer representing the Aptos framework. + /// @param new_operator The new address to be set as the bridge operator. + /// @abort If the current operator is the same as the new operator. + public fun update_bridge_operator(_aptos_framework: &signer, _new_operator: address + ) { + abort EATOMIC_BRIDGE_DISABLED + } + + public fun set_initiator_time_lock_duration(_aptos_framework: &signer, _time_lock: u64 + ) { + abort EATOMIC_BRIDGE_DISABLED + } + + public fun set_counterparty_time_lock_duration(_aptos_framework: &signer, _time_lock: u64 + ) { + abort EATOMIC_BRIDGE_DISABLED + } + + #[view] + public fun initiator_timelock_duration() : u64 { + abort EATOMIC_BRIDGE_DISABLED + } + + #[view] + public fun counterparty_timelock_duration() : u64 { + abort EATOMIC_BRIDGE_DISABLED + } + + #[view] + /// Retrieves the address of the current bridge operator. + /// + /// @return The address of the current bridge operator. + public fun bridge_operator(): address { + abort EATOMIC_BRIDGE_DISABLED + } + + /// Asserts that the caller is the current bridge operator. + /// + /// @param caller The signer whose authority is being checked. + /// @abort If the caller is not the current bridge operator. + public(friend) fun assert_is_caller_operator(_caller: &signer + ) { + abort EATOMIC_BRIDGE_DISABLED + } + +} + +module aptos_framework::atomic_bridge { + use aptos_framework::aptos_coin::AptosCoin; + use aptos_framework::coin::{BurnCapability, MintCapability}; + use aptos_framework::fungible_asset::{BurnRef, MintRef}; + + friend aptos_framework::atomic_bridge_counterparty; + friend aptos_framework::atomic_bridge_initiator; + friend aptos_framework::genesis; + + const EATOMIC_BRIDGE_NOT_ENABLED : u64 = 0x1; + const EATOMIC_BRIDGE_DISABLED: u64 = 0x3073d; + + struct AptosCoinBurnCapability has key { + burn_cap: BurnCapability, + } + + struct AptosCoinMintCapability has key { + mint_cap: MintCapability, + } + + struct AptosFABurnCapabilities has key { + burn_ref: BurnRef, + } + + struct AptosFAMintCapabilities has key { + burn_ref: MintRef, + } + + /// Initializes the atomic bridge by setting up necessary configurations. + /// + /// @param aptos_framework The signer representing the Aptos framework. + public fun initialize(_aptos_framework: &signer) { + abort EATOMIC_BRIDGE_DISABLED + } + + #[test_only] + /// Initializes the atomic bridge for testing purposes, including setting up accounts and timestamps. + /// + /// @param aptos_framework The signer representing the Aptos framework. + public fun initialize_for_test(_aptos_framework: &signer) { + abort EATOMIC_BRIDGE_DISABLED + } + + /// Stores the burn capability for AptosCoin, converting to a fungible asset reference if the feature is enabled. + /// + /// @param aptos_framework The signer representing the Aptos framework. + /// @param burn_cap The burn capability for AptosCoin. + public fun store_aptos_coin_burn_cap(_aptos_framework: &signer, _burn_cap: BurnCapability) { + abort EATOMIC_BRIDGE_DISABLED + } + + /// Stores the mint capability for AptosCoin. + /// + /// @param aptos_framework The signer representing the Aptos framework. + /// @param mint_cap The mint capability for AptosCoin. + public fun store_aptos_coin_mint_cap(_aptos_framework: &signer, _mint_cap: MintCapability) { + abort EATOMIC_BRIDGE_DISABLED + } + + /// Mints a specified amount of AptosCoin to a recipient's address. + /// + /// @param recipient The address of the recipient to mint coins to. + /// @param amount The amount of AptosCoin to mint. + /// @abort If the mint capability is not available. + public(friend) fun mint(_recipient: address, _amount: u64) { + abort EATOMIC_BRIDGE_DISABLED + } + + /// Burns a specified amount of AptosCoin from an address. + /// + /// @param from The address from which to burn AptosCoin. + /// @param amount The amount of AptosCoin to burn. + /// @abort If the burn capability is not available. + public(friend) fun burn(_from: address, _amount: u64) { + abort EATOMIC_BRIDGE_DISABLED + } +} + +module aptos_framework::atomic_bridge_counterparty { + use aptos_framework::account; + use aptos_framework::event::EventHandle; + + const EATOMIC_BRIDGE_DISABLED: u64 = 0x3073d; + + #[event] + /// An event triggered upon locking assets for a bridge transfer + struct BridgeTransferLockedEvent has store, drop { + bridge_transfer_id: vector, + initiator: vector, + recipient: address, + amount: u64, + hash_lock: vector, + time_lock: u64, + } + + #[event] + /// An event triggered upon completing a bridge transfer + struct BridgeTransferCompletedEvent has store, drop { + bridge_transfer_id: vector, + pre_image: vector, + } + + #[event] + /// An event triggered upon cancelling a bridge transfer + struct BridgeTransferCancelledEvent has store, drop { + bridge_transfer_id: vector, + } + + /// This struct will store the event handles for bridge events. + struct BridgeCounterpartyEvents has key, store { + bridge_transfer_locked_events: EventHandle, + bridge_transfer_completed_events: EventHandle, + bridge_transfer_cancelled_events: EventHandle, + } + + /// Initializes the module and stores the `EventHandle`s in the resource. + public fun initialize(aptos_framework: &signer) { + move_to(aptos_framework, BridgeCounterpartyEvents { + bridge_transfer_locked_events: account::new_event_handle(aptos_framework), + bridge_transfer_completed_events: account::new_event_handle(aptos_framework), + bridge_transfer_cancelled_events: account::new_event_handle(aptos_framework), + }); + } + + /// Locks assets for a bridge transfer by the initiator. + /// + /// @param caller The signer representing the bridge operator. + /// @param initiator The initiator's Ethereum address as a vector of bytes. + /// @param bridge_transfer_id The unique identifier for the bridge transfer. + /// @param hash_lock The hash lock for securing the transfer. + /// @param time_lock The time lock duration for the transfer. + /// @param recipient The address of the recipient on the Aptos blockchain. + /// @param amount The amount of assets to be locked. + /// @abort If the caller is not the bridge operator. + public entry fun lock_bridge_transfer_assets ( + _caller: &signer, + _initiator: vector, + _bridge_transfer_id: vector, + _hash_lock: vector, + _recipient: address, + _amount: u64 + ) { + abort EATOMIC_BRIDGE_DISABLED + } + + /// Completes a bridge transfer by revealing the pre-image. + /// + /// @param bridge_transfer_id The unique identifier for the bridge transfer. + /// @param pre_image The pre-image that matches the hash lock to complete the transfer. + /// @abort If the caller is not the bridge operator or the hash lock validation fails. + public entry fun complete_bridge_transfer ( + _bridge_transfer_id: vector, + _pre_image: vector, + ) { + abort EATOMIC_BRIDGE_DISABLED + } + + /// Aborts a bridge transfer if the time lock has expired. + /// + /// @param caller The signer representing the bridge operator. + /// @param bridge_transfer_id The unique identifier for the bridge transfer. + /// @abort If the caller is not the bridge operator or if the time lock has not expired. + public entry fun abort_bridge_transfer ( + _caller: &signer, + _bridge_transfer_id: vector + ) { + abort EATOMIC_BRIDGE_DISABLED + } + +} + diff --git a/aptos-move/framework/aptos-framework/sources/atomic_bridge.spec.move b/aptos-move/framework/aptos-framework/sources/atomic_bridge.spec.move new file mode 100644 index 0000000000000..a7a5a393ed101 --- /dev/null +++ b/aptos-move/framework/aptos-framework/sources/atomic_bridge.spec.move @@ -0,0 +1,3 @@ +spec aptos_framework::atomic_bridge_store { + +} diff --git a/aptos-move/framework/aptos-framework/sources/chain_status.move b/aptos-move/framework/aptos-framework/sources/chain_status.move index 32c2ea069001d..a2ddd72de0996 100644 --- a/aptos-move/framework/aptos-framework/sources/chain_status.move +++ b/aptos-move/framework/aptos-framework/sources/chain_status.move @@ -43,6 +43,6 @@ module aptos_framework::chain_status { /// Helper function to assert genesis state. public fun assert_genesis() { - assert!(is_genesis(), error::invalid_state(ENOT_OPERATING)); + assert!(is_genesis(), error::invalid_state(ENOT_GENESIS)); } } diff --git a/aptos-move/framework/aptos-framework/sources/coin.move b/aptos-move/framework/aptos-framework/sources/coin.move index 19a41f144b1f7..d4e9d12074789 100644 --- a/aptos-move/framework/aptos-framework/sources/coin.move +++ b/aptos-move/framework/aptos-framework/sources/coin.move @@ -24,6 +24,7 @@ module aptos_framework::coin { friend aptos_framework::aptos_coin; friend aptos_framework::genesis; friend aptos_framework::transaction_fee; + friend aptos_framework::governed_gas_pool; // // Errors. @@ -1161,6 +1162,51 @@ module aptos_framework::coin { coin.value } + /// Withdraws a specifed `amount` of coin `CoinType` from the specified `account`. + /// @param account The account from which to withdraw the coin. + /// @param amount The amount of coin to withdraw. + public(friend) fun withdraw_from( + account_addr: address, + amount: u64 + ): Coin acquires CoinStore, CoinConversionMap, CoinInfo, PairedCoinType { + + let (coin_amount_to_withdraw, fa_amount_to_withdraw) = calculate_amount_to_withdraw( + account_addr, + amount + ); + let withdrawn_coin = if (coin_amount_to_withdraw > 0) { + let coin_store = borrow_global_mut>(account_addr); + assert!( + !coin_store.frozen, + error::permission_denied(EFROZEN), + ); + if (std::features::module_event_migration_enabled()) { + event::emit( + CoinWithdraw { + coin_type: type_name(), account: account_addr, amount: coin_amount_to_withdraw + } + ); + }; + event::emit_event( + &mut coin_store.withdraw_events, + WithdrawEvent { amount: coin_amount_to_withdraw }, + ); + extract(&mut coin_store.coin, coin_amount_to_withdraw) + } else { + zero() + }; + if (fa_amount_to_withdraw > 0) { + let store_addr = primary_fungible_store::primary_store_address( + account_addr, + option::destroy_some(paired_metadata()) + ); + let fa = fungible_asset::withdraw_internal(store_addr, fa_amount_to_withdraw); + merge(&mut withdrawn_coin, fungible_asset_to_coin(fa)); + }; + + withdrawn_coin + } + /// Withdraw specified `amount` of coin `CoinType` from the signing account. public fun withdraw( account: &signer, diff --git a/aptos-move/framework/aptos-framework/sources/ethereum.move b/aptos-move/framework/aptos-framework/sources/ethereum.move new file mode 100644 index 0000000000000..0c883393c8729 --- /dev/null +++ b/aptos-move/framework/aptos-framework/sources/ethereum.move @@ -0,0 +1,193 @@ +module aptos_framework::ethereum { + use std::vector; + use aptos_std::aptos_hash::keccak256; + + /// Constants for ASCII character codes + const ASCII_A: u8 = 0x41; + const ASCII_Z: u8 = 0x5A; + const ASCII_A_LOWERCASE: u8 = 0x61; + const ASCII_F_LOWERCASE: u8 = 0x66; + + // Error codes + + const EINVALID_LENGTH: u64 = 1; + + /// Represents an Ethereum address within Aptos smart contracts. + /// Provides structured handling, storage, and validation of Ethereum addresses. + struct EthereumAddress has store, copy, drop { + inner: vector, + } + + /// Validates an Ethereum address against EIP-55 checksum rules and returns a new `EthereumAddress`. + /// + /// @param ethereum_address A 40-byte vector of unsigned 8-bit integers (hexadecimal format). + /// @return A validated `EthereumAddress` struct. + /// @abort If the address does not conform to EIP-55 standards. + public fun ethereum_address(ethereum_address: vector): EthereumAddress { + assert_eip55(ðereum_address); + EthereumAddress { inner: ethereum_address } + } + + /// Returns a new `EthereumAddress` without EIP-55 validation. + /// + /// @param ethereum_address A 40-byte vector of unsigned 8-bit integers (hexadecimal format). + /// @return A validated `EthereumAddress` struct. + /// @abort If the address does not conform to EIP-55 standards. + public fun ethereum_address_no_eip55(ethereum_address: vector): EthereumAddress { + assert_40_char_hex(ðereum_address); + EthereumAddress { inner: ethereum_address } + } + + /// Returns a new 20-byte `EthereumAddress` without EIP-55 validation. + /// + /// @param ethereum_address A 20-byte vector of unsigned 8-bit bytes. + /// @return An `EthereumAddress` struct. + /// @abort If the address does not conform to EIP-55 standards. + public fun ethereum_address_20_bytes(ethereum_address: vector): EthereumAddress { + assert!(vector::length(ðereum_address) == 20, EINVALID_LENGTH); + EthereumAddress { inner: ethereum_address } + } + + /// Gets the inner vector of an `EthereumAddress`. + /// + /// @param ethereum_address A 40-byte vector of unsigned 8-bit integers (hexadecimal format). + /// @return The vector inner value of the EthereumAddress + public fun get_inner_ethereum_address(ethereum_address: EthereumAddress): vector { + ethereum_address.inner + } + + /// Converts uppercase ASCII characters in a vector to their lowercase equivalents. + /// + /// @param input A reference to a vector of ASCII characters. + /// @return A new vector with lowercase equivalents of the input characters. + /// @note Only affects ASCII letters; non-alphabetic characters are unchanged. + public fun to_lowercase(input: &vector): vector { + let lowercase_bytes = vector::empty(); + vector::enumerate_ref(input, |_i, element| { + let lower_byte = if (*element >= ASCII_A && *element <= ASCII_Z) { + *element + 32 + } else { + *element + }; + vector::push_back(&mut lowercase_bytes, lower_byte); + }); + lowercase_bytes + } + + #[test] + fun test_to_lowercase() { + let upper = b"TeST"; + let lower = b"test"; + assert!(to_lowercase(&upper) == lower, 0); + } + + /// Converts an Ethereum address to EIP-55 checksummed format. + /// + /// @param ethereum_address A 40-character vector representing the Ethereum address in hexadecimal format. + /// @return The EIP-55 checksummed version of the input address. + /// @abort If the input address does not have exactly 40 characters. + /// @note Assumes input address is valid and in lowercase hexadecimal format. + public fun to_eip55_checksumed_address(ethereum_address: &vector): vector { + assert!(vector::length(ethereum_address) == 40, 0); + let lowercase = to_lowercase(ethereum_address); + let hash = keccak256(lowercase); + let output = vector::empty(); + + for (index in 0..40) { + let item = *vector::borrow(ethereum_address, index); + if (item >= ASCII_A_LOWERCASE && item <= ASCII_F_LOWERCASE) { + let hash_item = *vector::borrow(&hash, index / 2); + if ((hash_item >> ((4 * (1 - (index % 2))) as u8)) & 0xF >= 8) { + vector::push_back(&mut output, item - 32); + } else { + vector::push_back(&mut output, item); + } + } else { + vector::push_back(&mut output, item); + } + }; + output + } + + public fun get_inner(eth_address: &EthereumAddress): vector { + eth_address.inner + } + + /// Checks if an Ethereum address conforms to the EIP-55 checksum standard. + /// + /// @param ethereum_address A reference to a 40-character vector of an Ethereum address in hexadecimal format. + /// @abort If the address does not match its EIP-55 checksummed version. + /// @note Assumes the address is correctly formatted as a 40-character hexadecimal string. + public fun assert_eip55(ethereum_address: &vector) { + let eip55 = to_eip55_checksumed_address(ethereum_address); + let len = vector::length(&eip55); + for (index in 0..len) { + assert!(vector::borrow(&eip55, index) == vector::borrow(ethereum_address, index), 0); + }; + } + + /// Checks if an Ethereum address is a nonzero 40-character hexadecimal string. + /// + /// @param ethereum_address A reference to a vector of bytes representing the Ethereum address as characters. + /// @abort If the address is not 40 characters long, contains invalid characters, or is all zeros. + public fun assert_40_char_hex(ethereum_address: &vector) { + let len = vector::length(ethereum_address); + + // Ensure the address is exactly 40 characters long + assert!(len == 40, 1); + + // Ensure the address contains only valid hexadecimal characters + let is_zero = true; + for (index in 0..len) { + let char = *vector::borrow(ethereum_address, index); + + // Check if the character is a valid hexadecimal character (0-9, a-f, A-F) + assert!( + (char >= 0x30 && char <= 0x39) || // '0' to '9' + (char >= 0x41 && char <= 0x46) || // 'A' to 'F' + (char >= 0x61 && char <= 0x66), // 'a' to 'f' + 2 + ); + + // Check if the address is nonzero + if (char != 0x30) { // '0' + is_zero = false; + }; + }; + + // Abort if the address is all zeros + assert!(!is_zero, 3); + } + + #[test_only] + public fun eth_address_20_bytes(): vector { + vector[0x32, 0xBe, 0x34, 0x3B, 0x94, 0xf8, 0x60, 0x12, 0x4d, 0xC4, 0xfE, 0xE2, 0x78, 0xFD, 0xCB, 0xD3, 0x8C, 0x10, 0x2D, 0x88] +} + + #[test_only] + public fun valid_eip55(): vector { + b"32Be343B94f860124dC4fEe278FDCBD38C102D88" + } + + #[test_only] + public fun invalid_eip55(): vector { + b"32be343b94f860124dc4fee278fdcbd38c102d88" + } + + #[test] + fun test_valid_eip55_checksum() { + assert_eip55(&valid_eip55()); + } + + #[test] + #[expected_failure(abort_code = 0, location = Self)] + fun test_invalid_eip55_checksum() { + assert_eip55(&invalid_eip55()); + } + + #[test] + #[expected_failure(abort_code = 0, location = Self)] + fun test_simple_invalid_eip55_checksum() { + assert_eip55(&b"0"); + } +} \ No newline at end of file diff --git a/aptos-move/framework/aptos-framework/sources/fungible_asset.move b/aptos-move/framework/aptos-framework/sources/fungible_asset.move index 1d86762e01e73..194cf32d9e0ca 100644 --- a/aptos-move/framework/aptos-framework/sources/fungible_asset.move +++ b/aptos-move/framework/aptos-framework/sources/fungible_asset.move @@ -19,6 +19,7 @@ module aptos_framework::fungible_asset { friend aptos_framework::aptos_account; friend aptos_framework::dispatchable_fungible_asset; + friend aptos_framework::governed_gas_pool; /// Amount cannot be zero. const EAMOUNT_CANNOT_BE_ZERO: u64 = 1; diff --git a/aptos-move/framework/aptos-framework/sources/genesis.move b/aptos-move/framework/aptos-framework/sources/genesis.move index dde48974bc06b..03944b937158f 100644 --- a/aptos-move/framework/aptos-framework/sources/genesis.move +++ b/aptos-move/framework/aptos-framework/sources/genesis.move @@ -10,6 +10,7 @@ module aptos_framework::genesis { use aptos_framework::aptos_account; use aptos_framework::aptos_coin::{Self, AptosCoin}; use aptos_framework::aptos_governance; + use aptos_framework::native_bridge; use aptos_framework::block; use aptos_framework::chain_id; use aptos_framework::chain_status; @@ -29,6 +30,7 @@ module aptos_framework::genesis { use aptos_framework::transaction_validation; use aptos_framework::version; use aptos_framework::vesting; + use aptos_framework::governed_gas_pool; const EDUPLICATE_ACCOUNT: u64 = 1; const EACCOUNT_DOES_NOT_EXIST: u64 = 2; @@ -131,6 +133,7 @@ module aptos_framework::genesis { block::initialize(&aptos_framework_account, epoch_interval_microsecs); state_storage::initialize(&aptos_framework_account); timestamp::set_time_has_started(&aptos_framework_account); + native_bridge::initialize(&aptos_framework_account); } /// Genesis step 2: Initialize Aptos coin. @@ -148,6 +151,13 @@ module aptos_framework::genesis { transaction_fee::store_aptos_coin_mint_cap(aptos_framework, mint_cap); } + fun initialize_governed_gas_pool( + aptos_framework: &signer, + delegation_pool_creation_seed: vector, + ) { + governed_gas_pool::initialize(aptos_framework, delegation_pool_creation_seed); + } + /// Only called for testnets and e2e tests. fun initialize_core_resources_and_aptos_coin( aptos_framework: &signer, @@ -164,7 +174,6 @@ module aptos_framework::genesis { transaction_fee::store_aptos_coin_burn_cap(aptos_framework, burn_cap); // Give transaction_fee module MintCapability so it can mint refunds. transaction_fee::store_aptos_coin_mint_cap(aptos_framework, mint_cap); - let core_resources = account::create_account(@core_resources); account::rotate_authentication_key_internal(&core_resources, core_resources_auth_key); aptos_account::register_apt(&core_resources); // registers APT store diff --git a/aptos-move/framework/aptos-framework/sources/governed_gas_pool.move b/aptos-move/framework/aptos-framework/sources/governed_gas_pool.move new file mode 100644 index 0000000000000..830b00499ec92 --- /dev/null +++ b/aptos-move/framework/aptos-framework/sources/governed_gas_pool.move @@ -0,0 +1,364 @@ +module aptos_framework::governed_gas_pool { + + friend aptos_framework::transaction_validation; + + use std::vector; + use aptos_framework::account::{Self, SignerCapability, create_signer_with_capability}; + use aptos_framework::system_addresses::{Self}; + // use aptos_framework::primary_fungible_store::{Self}; + use aptos_framework::fungible_asset::{Self}; + use aptos_framework::object::{Self}; + use aptos_framework::aptos_coin::AptosCoin; + use aptos_framework::coin::{Self, Coin}; + use std::features; + use aptos_framework::signer; + use aptos_framework::aptos_account::Self; + #[test_only] + use aptos_framework::coin::{BurnCapability, MintCapability}; + #[test_only] + use aptos_framework::fungible_asset::BurnRef; + #[test_only] + use aptos_framework::aptos_coin::Self; + + const MODULE_SALT: vector = b"aptos_framework::governed_gas_pool"; + + /// The Governed Gas Pool + /// Internally, this is a simply wrapper around a resource account. + struct GovernedGasPool has key { + /// The signer capability of the resource account. + signer_capability: SignerCapability, + } + + /// Address of APT Primary Fungible Store + inline fun primary_fungible_store_address(account: address): address { + object::create_user_derived_object_address(account, @aptos_fungible_asset) + } + + /// Create the seed to derive the resource account address. + fun create_resource_account_seed( + delegation_pool_creation_seed: vector, + ): vector { + let seed = vector::empty(); + // include module salt (before any subseeds) to avoid conflicts with other modules creating resource accounts + vector::append(&mut seed, MODULE_SALT); + // include an additional salt in case the same resource account has already been created + vector::append(&mut seed, delegation_pool_creation_seed); + seed + } + + /// Initializes the governed gas pool around a resource account creation seed. + /// @param aptos_framework The signer of the aptos_framework module. + /// @param delegation_pool_creation_seed The seed to be used to create the resource account hosting the delegation pool. + public fun initialize( + aptos_framework: &signer, + delegation_pool_creation_seed: vector, + ) { + system_addresses::assert_aptos_framework(aptos_framework); + + // return if the governed gas pool has already been initialized + if (exists(signer::address_of(aptos_framework))) { + return + }; + + // generate a seed to be used to create the resource account hosting the delegation pool + let seed = create_resource_account_seed(delegation_pool_creation_seed); + + let (governed_gas_pool_signer, governed_gas_pool_signer_cap) = account::create_resource_account(aptos_framework, seed); + + // register apt + aptos_account::register_apt(&governed_gas_pool_signer); + + move_to(aptos_framework, GovernedGasPool{ + signer_capability: governed_gas_pool_signer_cap, + }); + } + + /// Initialize the governed gas pool as a module + /// @param aptos_framework The signer of the aptos_framework module. + fun init_module(aptos_framework: &signer) { + // Initialize the governed gas pool + let seed : vector = b"aptos_framework::governed_gas_pool"; + initialize(aptos_framework, seed); + } + + /// Borrows the signer of the governed gas pool. + /// @return The signer of the governed gas pool. + fun governed_gas_signer(): signer acquires GovernedGasPool { + let signer_cap = &borrow_global(@aptos_framework).signer_capability; + create_signer_with_capability(signer_cap) + } + + #[view] + /// Gets the address of the governed gas pool. + /// @return The address of the governed gas pool. + public fun governed_gas_pool_address(): address acquires GovernedGasPool { + signer::address_of(&governed_gas_signer()) + } + + /// Funds the destination account with a given amount of coin. + /// @param account The account to be funded. + /// @param amount The amount of coin to be funded. + public fun fund(aptos_framework: &signer, account: address, amount: u64) acquires GovernedGasPool { + // Check that the Aptos framework is the caller + // This is what ensures that funding can only be done by the Aptos framework, + // i.e., via a governance proposal. + system_addresses::assert_aptos_framework(aptos_framework); + let governed_gas_signer = &governed_gas_signer(); + coin::deposit(account, coin::withdraw(governed_gas_signer, amount)); + } + + /// Deposits some coin into the governed gas pool. + /// @param coin The coin to be deposited. + fun deposit(coin: Coin) acquires GovernedGasPool { + let governed_gas_pool_address = governed_gas_pool_address(); + coin::deposit(governed_gas_pool_address, coin); + } + + /// Deposits some coin from an account to the governed gas pool. + /// @param account The account from which the coin is to be deposited. + /// @param amount The amount of coin to be deposited. + fun deposit_from(account: address, amount: u64) acquires GovernedGasPool { + deposit(coin::withdraw_from(account, amount)); + } + + /// Deposits some FA from the fungible store. + /// @param aptos_framework The signer of the aptos_framework module. + /// @param account The account from which the FA is to be deposited. + /// @param amount The amount of FA to be deposited. + fun deposit_from_fungible_store(account: address, amount: u64) acquires GovernedGasPool { + if (amount > 0){ + // compute the governed gas pool store address + let governed_gas_pool_address = governed_gas_pool_address(); + let governed_gas_pool_store_address = primary_fungible_store_address(governed_gas_pool_address); + + // compute the account store address + let account_store_address = primary_fungible_store_address(account); + fungible_asset::deposit_internal( + governed_gas_pool_store_address, + fungible_asset::withdraw_internal( + account_store_address, + amount + ) + ); + } + } + + /// Deposits gas fees into the governed gas pool. + /// @param gas_payer The address of the account that paid the gas fees. + /// @param gas_fee The amount of gas fees to be deposited. + public fun deposit_gas_fee(_gas_payer: address, _gas_fee: u64) acquires GovernedGasPool { + // get the sender to preserve the signature but do nothing + governed_gas_pool_address(); + } + + /// Deposits gas fees into the governed gas pool. + /// @param gas_payer The address of the account that paid the gas fees. + /// @param gas_fee The amount of gas fees to be deposited. + public(friend) fun deposit_gas_fee_v2(gas_payer: address, gas_fee: u64) acquires GovernedGasPool { + if (features::operations_default_to_fa_apt_store_enabled()) { + deposit_from_fungible_store(gas_payer, gas_fee); + } else { + deposit_from(gas_payer, gas_fee); + }; + } + + #[view] + /// Gets the balance of a specified coin type in the governed gas pool. + /// @return The balance of the coin in the pool. + public fun get_balance(): u64 acquires GovernedGasPool { + let pool_address = governed_gas_pool_address(); + coin::balance(pool_address) + } + + #[test_only] + /// The AptosCoin mint capability + struct AptosCoinMintCapability has key { + mint_cap: MintCapability, + } + + #[test_only] + /// The AptosCoin burn capability + struct AptosCoinBurnCapability has key { + burn_cap: BurnCapability, + } + + #[test_only] + /// The AptosFA burn capabilities + struct AptosFABurnCapabilities has key { + burn_ref: BurnRef, + } + + + #[test_only] + /// Stores the mint capability for AptosCoin. + /// + /// @param aptos_framework The signer representing the Aptos framework. + /// @param mint_cap The mint capability for AptosCoin. + public fun store_aptos_coin_mint_cap(aptos_framework: &signer, mint_cap: MintCapability) { + system_addresses::assert_aptos_framework(aptos_framework); + move_to(aptos_framework, AptosCoinMintCapability { mint_cap }) + } + + #[test_only] + /// Stores the burn capability for AptosCoin, converting to a fungible asset reference if the feature is enabled. + /// + /// @param aptos_framework The signer representing the Aptos framework. + /// @param burn_cap The burn capability for AptosCoin. + public fun store_aptos_coin_burn_cap(aptos_framework: &signer, burn_cap: BurnCapability) { + system_addresses::assert_aptos_framework(aptos_framework); + if (features::operations_default_to_fa_apt_store_enabled()) { + let burn_ref = coin::convert_and_take_paired_burn_ref(burn_cap); + move_to(aptos_framework, AptosFABurnCapabilities { burn_ref }); + } else { + move_to(aptos_framework, AptosCoinBurnCapability { burn_cap }) + } + } + + #[test_only] + /// Initializes the governed gas pool around a fixed creation seed for testing + /// + /// @param aptos_framework The signer of the aptos_framework module. + public fun initialize_for_test( + aptos_framework: &signer, + ) { + + // initialize the AptosCoin module + let (burn_cap, mint_cap) = aptos_coin::initialize_for_test(aptos_framework); + + // Initialize the governed gas pool + let seed : vector = b"test"; + initialize(aptos_framework, seed); + + // add the mint capability to the governed gas pool + store_aptos_coin_mint_cap(aptos_framework, mint_cap); + store_aptos_coin_burn_cap(aptos_framework, burn_cap); + + } + + #[test_only] + /// Mints some coin to an account for testing purposes. + /// + /// @param account The account to which the coin is to be minted. + /// @param amount The amount of coin to be minted. + public fun mint_for_test(account: address, amount: u64) acquires AptosCoinMintCapability { + coin::deposit(account, coin::mint( + amount, + &borrow_global(@aptos_framework).mint_cap + )); + } + + #[test(aptos_framework = @aptos_framework, depositor = @0xdddd)] + /// Deposits some coin into the governed gas pool. + /// + /// @param aptos_framework is the signer of the aptos_framework module. + fun test_governed_gas_pool_deposit(aptos_framework: &signer, depositor: &signer) acquires GovernedGasPool, AptosCoinMintCapability { + + // initialize the modules + initialize_for_test(aptos_framework); + + // create the depositor account and fund it + aptos_account::create_account(signer::address_of(depositor)); + mint_for_test(signer::address_of(depositor), 1000); + + // get the balances for the depositor and the governed gas pool + let depositor_balance = coin::balance(signer::address_of(depositor)); + let governed_gas_pool_balance = coin::balance(governed_gas_pool_address()); + + // deposit some coin into the governed gas pool + deposit_from(signer::address_of(depositor), 100); + + // check the balances after the deposit + assert!(coin::balance(signer::address_of(depositor)) == depositor_balance - 100, 1); + assert!(coin::balance(governed_gas_pool_address()) == governed_gas_pool_balance + 100, 2); + + } + + #[test(aptos_framework = @aptos_framework, depositor = @0xdddd)] + /// Deposits some coin from an account to the governed gas pool as gas fees. + /// + /// @param aptos_framework is the signer of the aptos_framework module. + /// @param depositor is the signer of the account from which the coin is to be deposited. + fun test_governed_gas_pool_deposit_gas_fee(aptos_framework: &signer, depositor: &signer) acquires GovernedGasPool, AptosCoinMintCapability { + + // initialize the modules + initialize_for_test(aptos_framework); + + // create the depositor account and fund it + aptos_account::create_account(signer::address_of(depositor)); + mint_for_test(signer::address_of(depositor), 1000); + + // get the balances for the depositor and the governed gas pool + let depositor_balance = coin::balance(signer::address_of(depositor)); + let governed_gas_pool_balance = coin::balance(governed_gas_pool_address()); + + // deposit some coin into the governed gas pool as gas fees + deposit_gas_fee_v2(signer::address_of(depositor), 100); + + // check the balances after the deposit + assert!(coin::balance(signer::address_of(depositor)) == depositor_balance - 100, 1); + assert!(coin::balance(governed_gas_pool_address()) == governed_gas_pool_balance + 100, 2); + + } + + #[test(aptos_framework = @aptos_framework)] + /// Test for the get_balance view method. + fun test_governed_gas_pool_get_balance(aptos_framework: &signer) acquires GovernedGasPool, AptosCoinMintCapability { + + // initialize the modules + initialize_for_test(aptos_framework); + + // fund the governed gas pool + let governed_gas_pool_address = governed_gas_pool_address(); + mint_for_test(governed_gas_pool_address, 1000); + + // assert the balance is correct + assert!(get_balance() == 1000, 1); + } + + #[test(aptos_framework = @aptos_framework, depositor = @0xdddd, beneficiary = @0xbbbb)] + /// Funds the destination account with a given amount of coin. + /// + /// @param aptos_framework is the signer of the aptos_framework module. + /// @param depositor is the signer of the account from which the coin is to be funded. + /// @param beneficiary is the address of the account to be funded. + fun test_governed_gas_pool_fund(aptos_framework: &signer, depositor: &signer, beneficiary: &signer) acquires GovernedGasPool, AptosCoinMintCapability { + + // initialize the modules + initialize_for_test(aptos_framework); + + // create the depositor account and fund it + aptos_account::create_account(signer::address_of(depositor)); + mint_for_test(signer::address_of(depositor), 1000); + + // get the balances for the depositor and the governed gas pool + let depositor_balance = coin::balance(signer::address_of(depositor)); + let governed_gas_pool_balance = coin::balance(governed_gas_pool_address()); + + // collect gas fees from the depositor + deposit_gas_fee_v2(signer::address_of(depositor), 100); + + // check the balances after the deposit + assert!(coin::balance(signer::address_of(depositor)) == depositor_balance - 100, 1); + assert!(coin::balance(governed_gas_pool_address()) == governed_gas_pool_balance + 100, 2); + + // ensure the beneficiary account has registered with the AptosCoin module + aptos_account::create_account(signer::address_of(beneficiary)); + aptos_account::register_apt(beneficiary); + + // fund the beneficiary account + fund(aptos_framework, signer::address_of(beneficiary), 100); + + // check the balances after the funding + assert!(coin::balance(governed_gas_pool_address()) == governed_gas_pool_balance, 3); + assert!(coin::balance(signer::address_of(beneficiary)) == 100, 4); + + } + + #[test(aptos_framework = @aptos_framework)] + fun test_initialize_is_idempotent(aptos_framework: &signer) { + // initialize the governed gas pool + initialize_for_test(aptos_framework); + // initialize the governed gas pool again, no abort + initialize(aptos_framework, vector::empty()); + } +} diff --git a/aptos-move/framework/aptos-framework/sources/governed_gas_pool.spec.move b/aptos-move/framework/aptos-framework/sources/governed_gas_pool.spec.move new file mode 100644 index 0000000000000..3b6ee84b31c93 --- /dev/null +++ b/aptos-move/framework/aptos-framework/sources/governed_gas_pool.spec.move @@ -0,0 +1,79 @@ +spec aptos_framework::governed_gas_pool { + use aptos_framework::coin::EINSUFFICIENT_BALANCE; + use aptos_framework::error; + + /// + /// No.: 1 + /// Requirement: The GovernedGasPool resource must exist at the aptos_framework address after initialization. + /// Criticality: Critical + /// Implementation: The initialize function ensures the resource is created at the aptos_framework address. + /// Enforcement: Formally verified via [high-level-req-1](initialize). + /// + /// No.: 2 + /// Requirement: Only the aptos_framework address is allowed to initialize the GovernedGasPool. + /// Criticality: Critical + /// Implementation: The initialize function verifies the signer is the aptos_framework address. + /// Enforcement: Formally verified via [high-level-req-2](initialize). + /// + /// No.: 3 + /// Requirement: Deposits into the GovernedGasPool must be reflected in the pool's balance. + /// Criticality: High + /// Implementation: The deposit and deposit_from functions update the pool's balance. + /// Enforcement: Formally verified via [high-level-req-3](deposit), [high-level-req-3.1](deposit_from). + /// + /// No.: 4 + /// Requirement: Only the aptos_framework address can fund accounts from the GovernedGasPool. + /// Criticality: High + /// Implementation: The fund function verifies the signer is the aptos_framework address. + /// Enforcement: Formally verified via [high-level-req-4](fund). + /// + + spec module { + /// [high-level-req-1] + /// The GovernedGasPool resource must exist at aptos_framework after initialization. + invariant exists(@aptos_framework); + } + + spec initialize(aptos_framework: &signer, delegation_pool_creation_seed: vector) { + requires system_addresses::is_aptos_framework_address(signer::address_of(aptos_framework)); + /// [high-level-req-1] + ensures exists(@aptos_framework); + } + + spec fund(aptos_framework: &signer, account: address, amount: u64) { + pragma aborts_if_is_partial = true; + + /// [high-level-req-4] + // Abort if the caller is not the Aptos framework + aborts_if !system_addresses::is_aptos_framework_address(signer::address_of(aptos_framework)); + + /// Abort if the governed gas pool has insufficient funds + aborts_with coin::EINSUFFICIENT_BALANCE, error::invalid_argument(EINSUFFICIENT_BALANCE), 0x1, 0x5, 0x7; + } + + spec deposit(coin: Coin) { + pragma aborts_if_is_partial = true; + + /* + /// [high-level-req-3] + /// Ensure the deposit increases the value in the CoinStore + + //@TODO: Calling governed_gas_pool_adddress() doesn't work as the boogie gen cant check the signer + // created for the resource account created at runtime + + /// Ensure the governed gas pool resource account exists + //aborts_if !exists>(governed_gas_pool_address()); + + //ensures global>(aptos_framework_address).coin.value == + //old(global>(aptos_framework_address).coin.value) + coin.value; + */ + } + + spec deposit_gas_fee(_gas_payer: address, _gas_fee: u64) { + /* + /// [high-level-req-5] + // ensures governed_gas_pool_balance == old(governed_gas_pool_balance) + gas_fee; + // ensures gas_payer_balance == old(gas_payer_balance) - gas_fee; + */ + } +} diff --git a/aptos-move/framework/aptos-framework/sources/native_bridge.move b/aptos-move/framework/aptos-framework/sources/native_bridge.move new file mode 100644 index 0000000000000..4f8e5c2fca1d5 --- /dev/null +++ b/aptos-move/framework/aptos-framework/sources/native_bridge.move @@ -0,0 +1,436 @@ +module aptos_framework::native_bridge { + use aptos_std::smart_table::SmartTable; + use aptos_framework::ethereum::EthereumAddress; + use aptos_framework::event::EventHandle; + use aptos_framework::aptos_coin::AptosCoin; + use aptos_framework::coin::{BurnCapability, MintCapability}; + use aptos_framework::fungible_asset::{BurnRef, MintRef}; + + const ETRANSFER_ALREADY_PROCESSED: u64 = 1; + const EINVALID_BRIDGE_TRANSFER_ID: u64 = 2; + const EEVENT_NOT_FOUND: u64 = 3; + const EINVALID_NONCE: u64 = 4; + const EINVALID_AMOUNT: u64 = 5; + const ENONCE_NOT_FOUND: u64 = 6; + const EZERO_AMOUNT: u64 = 7; + const ENATIVE_BRIDGE_NOT_ENABLED: u64 = 8; + const EINCORRECT_NONCE: u64 = 9; + const EID_NOT_FOUND: u64 = 10; + const EINVALID_BRIDGE_RELAYER: u64 = 11; + const ESAME_FEE: u64 = 0x2; + const EINVALID_VALUE: u64 = 0x3; + const ERATE_LIMIT_EXCEEDED: u64 = 0x4; + + friend aptos_framework::genesis; + + #[event] + /// Event emitted when the bridge relayer is updated. + struct BridgeConfigRelayerUpdated has store, drop { + old_relayer: address, + new_relayer: address, + } + + #[event] + /// An event triggered upon change of bridgefee + struct BridgeFeeChangedEvent has store, drop { + old_bridge_fee: u64, + new_bridge_fee: u64, + } + + #[event] + /// An event triggered upon change of insurance budget divider + struct BridgeInsuranceBudgetDividerChangedEvent has store, drop { + old_insurance_budget_divider: u64, + new_insurance_budget_divider: u64, + } + + #[event] + /// An event triggered upon change of insurance fund + struct BridgeInsuranceFundChangedEvent has store, drop { + old_insurance_fund: address, + new_insurance_fund: address, + } + + #[event] + /// An event triggered upon initiating a bridge transfer + struct BridgeTransferInitiatedEvent has store, drop { + bridge_transfer_id: vector, + initiator: address, + recipient: vector, + amount: u64, + nonce: u64, + } + + #[event] + /// An event triggered upon completing a bridge transfer + struct BridgeTransferCompletedEvent has store, drop { + bridge_transfer_id: vector, + initiator: vector, + recipient: address, + amount: u64, + nonce: u64, + } + + /// This struct will store the event handles for bridge events. + struct BridgeEvents has key, store { + bridge_transfer_initiated_events: EventHandle, + bridge_transfer_completed_events: EventHandle, + } + + struct AptosCoinBurnCapability has key { + burn_cap: BurnCapability, + } + + struct AptosCoinMintCapability has key { + mint_cap: MintCapability, + } + + struct AptosFABurnCapabilities has key { + burn_ref: BurnRef, + } + + struct AptosFAMintCapabilities has key { + burn_ref: MintRef, + } + + /// A nonce to ensure the uniqueness of bridge transfers + struct Nonce has key { + value: u64 + } + + struct OutboundRateLimitBudget has key, store { + day: SmartTable, + } + + struct InboundRateLimitBudget has key, store { + day: SmartTable, + } + + /// A smart table wrapper + struct SmartTableWrapper has key, store { + inner: SmartTable, + } + + /// Details on the outbound transfer + struct OutboundTransfer has store, copy { + bridge_transfer_id: vector, + initiator: address, + recipient: EthereumAddress, + amount: u64, + } + + struct BridgeConfig has key { + bridge_relayer: address, + insurance_fund: address, + insurance_budget_divider: u64, + bridge_fee: u64, + } + + /// Initializes the module and stores the `EventHandle`s in the resource. + public fun initialize(_aptos_framework: &signer) { + + } + + /// Converts a u64 to a 32-byte vector. + /// + /// @param value The u64 value to convert. + /// @return A 32-byte vector containing the u64 value in little-endian order. + /// + /// How BCS works: https://github.com/zefchain/bcs?tab=readme-ov-file#booleans-and-integers + /// + /// @example: a u64 value 0x12_34_56_78_ab_cd_ef_00 is converted to a 32-byte vector: + /// [0x00, 0x00, ..., 0x00, 0x12, 0x34, 0x56, 0x78, 0xab, 0xcd, 0xef, 0x00] + public(friend) fun normalize_u64_to_32_bytes(_value: &u64): vector { + abort ENATIVE_BRIDGE_NOT_ENABLED + } + + /// Checks if a bridge transfer ID is associated with an inbound nonce. + /// @param bridge_transfer_id The bridge transfer ID. + /// @return `true` if the ID is associated with an existing inbound nonce, `false` otherwise. + public(friend) fun is_inbound_nonce_set(_bridge_transfer_id: vector): bool { + abort ENATIVE_BRIDGE_NOT_ENABLED + } + + /// Creates bridge transfer details with validation. + /// + /// @param initiator The initiating party of the transfer. + /// @param recipient The receiving party of the transfer. + /// @param amount The amount to be transferred. + /// @param nonce The unique nonce for the transfer. + /// @return A `BridgeTransferDetails` object. + /// @abort If the amount is zero or locks are invalid. + public(friend) fun create_details(_initiator: address, _recipient: EthereumAddress, _amount: u64, _nonce: u64) + : OutboundTransfer { + abort ENATIVE_BRIDGE_NOT_ENABLED + } + + /// Record details of an initiated transfer for quick lookup of details, mapping bridge transfer ID to transfer details + /// + /// @param bridge_transfer_id Bridge transfer ID. + /// @param details The bridge transfer details + public(friend) fun add(_nonce: u64, _details: OutboundTransfer) { + abort ENATIVE_BRIDGE_NOT_ENABLED + } + + /// Record details of a completed transfer, mapping bridge transfer ID to inbound nonce + /// + /// @param bridge_transfer_id Bridge transfer ID. + /// @param details The bridge transfer details + public(friend) fun set_bridge_transfer_id_to_inbound_nonce(_bridge_transfer_id: vector, _inbound_nonce: u64) { + abort ENATIVE_BRIDGE_NOT_ENABLED + } + + /// Asserts that the bridge transfer ID is valid. + /// + /// @param bridge_transfer_id The bridge transfer ID to validate. + /// @abort If the ID is invalid. + public(friend) fun assert_valid_bridge_transfer_id(_bridge_transfer_id: &vector) { + abort ENATIVE_BRIDGE_NOT_ENABLED + } + + /// Generates a unique outbound bridge transfer ID based on transfer details and nonce. + /// + /// @param details The bridge transfer details. + /// @return The generated bridge transfer ID. + public(friend) fun bridge_transfer_id(_initiator: address, _recipient: EthereumAddress, _amount: u64, _nonce: u64) : vector { + abort ENATIVE_BRIDGE_NOT_ENABLED + } + + #[view] + /// Retrieves the address of the current bridge relayer. + /// + /// @return The address of the current bridge relayer. + public fun bridge_relayer(): address { + abort ENATIVE_BRIDGE_NOT_ENABLED + } + + #[view] + /// Retrieves the address of the current insurance fund. + /// + /// @return The address of the current insurance fund. + public fun insurance_fund(): address { + abort ENATIVE_BRIDGE_NOT_ENABLED + } + + #[view] + /// Retrieves the current insurance budget divider. + /// + /// @return The current insurance budget divider. + public fun insurance_budget_divider(): u64 { + abort ENATIVE_BRIDGE_NOT_ENABLED + } + + #[view] + /// Retrieves the current bridge fee. + /// + /// @return The current bridge fee. + public fun bridge_fee(): u64 { + abort ENATIVE_BRIDGE_NOT_ENABLED + } + + #[view] + /// Gets the bridge transfer details (`OutboundTransfer`) from the given nonce. + /// @param nonce The nonce of the bridge transfer. + /// @return The `OutboundTransfer` struct containing the transfer details. + /// @abort If the nonce is not found in the smart table. + public fun get_bridge_transfer_details_from_nonce(_nonce: u64): OutboundTransfer { + abort ENATIVE_BRIDGE_NOT_ENABLED + } + + #[view] + /// Gets inbound `nonce` from `bridge_transfer_id` + /// @param bridge_transfer_id The ID bridge transfer. + /// @return the nonce + /// @abort If the nonce is not found in the smart table. + public fun get_inbound_nonce_from_bridge_transfer_id(_bridge_transfer_id: vector): u64 { + abort ENATIVE_BRIDGE_NOT_ENABLED + } + + /// Increment and get the current nonce + fun increment_and_get_nonce(): u64 { + abort ENATIVE_BRIDGE_NOT_ENABLED + } + + #[test_only] + /// Initializes the native bridge for testing purposes + /// + /// @param aptos_framework The signer representing the Aptos framework. + public fun initialize_for_test(_aptos_framework: &signer) { + abort ENATIVE_BRIDGE_NOT_ENABLED + } + + /// Stores the burn capability for AptosCoin, converting to a fungible asset reference if the feature is enabled. + /// + /// @param aptos_framework The signer representing the Aptos framework. + /// @param burn_cap The burn capability for AptosCoin. + public fun store_aptos_coin_burn_cap(_aptos_framework: &signer, _burn_cap: BurnCapability) { + abort ENATIVE_BRIDGE_NOT_ENABLED + } + + /// Stores the mint capability for AptosCoin. + /// + /// @param aptos_framework The signer representing the Aptos framework. + /// @param mint_cap The mint capability for AptosCoin. + public fun store_aptos_coin_mint_cap(_aptos_framework: &signer, _mint_cap: MintCapability) { + abort ENATIVE_BRIDGE_NOT_ENABLED + } + + /// Mints a specified amount of AptosCoin to a recipient's address. + /// + /// @param core_resource The signer representing the core resource account. + /// @param recipient The address of the recipient to mint coins to. + /// @param amount The amount of AptosCoin to mint. + public fun mint_to(_aptos_framework: &signer, _recipient: address, _amount: u64) { + abort ENATIVE_BRIDGE_NOT_ENABLED + } + + /// Mints a specified amount of AptosCoin to a recipient's address. + /// + /// @param recipient The address of the recipient to mint coins to. + /// @param amount The amount of AptosCoin to mint. + /// @abort If the mint capability is not available. + public(friend) fun mint(_recipient: address, _amount: u64) { + abort ENATIVE_BRIDGE_NOT_ENABLED + } + + /// Mints a specified amount of AptosCoin to a recipient's address. + /// + /// @param recipient The address of the recipient to mint coins to. + /// @param amount The amount of AptosCoin to mint. + fun mint_internal(_recipient: address, _amount: u64) { + abort ENATIVE_BRIDGE_NOT_ENABLED + } + + /// Burns a specified amount of AptosCoin from an address. + /// + /// @param core_resource The signer representing the core resource account. + /// @param from The address from which to burn AptosCoin. + /// @param amount The amount of AptosCoin to burn. + /// @abort If the burn capability is not available. + public fun burn_from(_aptos_framework: &signer, _from: address, _amount: u64) { + abort ENATIVE_BRIDGE_NOT_ENABLED + } + + /// Burns a specified amount of AptosCoin from an address. + /// + /// @param from The address from which to burn AptosCoin. + /// @param amount The amount of AptosCoin to burn. + /// @abort If the burn capability is not available. + public(friend) fun burn(_from: address, _amount: u64) { + abort ENATIVE_BRIDGE_NOT_ENABLED + } + + /// Burns a specified amount of AptosCoin from an address. + /// + /// @param from The address from which to burn AptosCoin. + /// @param amount The amount of AptosCoin to burn. + fun burn_internal(_from: address, _amount: u64) { + abort ENATIVE_BRIDGE_NOT_ENABLED + } + + /// Initiate a bridge transfer of MOVE from Movement to Ethereum + /// Anyone can initiate a bridge transfer from the source chain + /// The amount is burnt from the initiator and the module-level nonce is incremented + /// @param initiator The initiator's Ethereum address as a vector of bytes. + /// @param recipient The address of the recipient on the Aptos blockchain. + /// @param amount The amount of assets to be locked. + public entry fun initiate_bridge_transfer( + _initiator: &signer, + _recipient: vector, + _amount: u64 + ) { + abort ENATIVE_BRIDGE_NOT_ENABLED + } + + /// Completes a bridge transfer on the destination chain. + /// + /// @param caller The signer representing the bridge relayer. + /// @param initiator The initiator's Ethereum address as a vector of bytes. + /// @param bridge_transfer_id The unique identifier for the bridge transfer. + /// @param recipient The address of the recipient on the Aptos blockchain. + /// @param amount The amount of assets to be locked. + /// @param nonce The unique nonce for the transfer. + /// @abort If the caller is not the bridge relayer or the transfer has already been processed. + public entry fun complete_bridge_transfer( + _caller: &signer, + _bridge_transfer_id: vector, + _initiator: vector, + _recipient: address, + _amount: u64, + _nonce: u64 + ) { + abort ENATIVE_BRIDGE_NOT_ENABLED + } + + /// Charge bridge fee to the initiate bridge transfer. + /// + /// @param initiator The signer representing the initiator. + /// @param amount The amount to be charged. + /// @return The new amount after deducting the bridge fee. + fun charge_bridge_fee(_amount: u64): u64 { + abort ENATIVE_BRIDGE_NOT_ENABLED + } + + /// Updates the bridge relayer, requiring governance validation. + /// + /// @param aptos_framework The signer representing the Aptos framework. + /// @param new_relayer The new address to be set as the bridge relayer. + /// @abort If the current relayer is the same as the new relayer. + public fun update_bridge_relayer(_aptos_framework: &signer, _new_relayer: address) { + abort ENATIVE_BRIDGE_NOT_ENABLED + } + + /// Updates the bridge fee, requiring relayer validation. + /// + /// @param relayer The signer representing the Relayer. + /// @param new_bridge_fee The new bridge fee to be set. + /// @abort If the new bridge fee is the same as the old bridge fee. + public entry fun update_bridge_fee(_relayer: &signer, _new_bridge_fee: u64) { + abort ENATIVE_BRIDGE_NOT_ENABLED + } + + /// Updates the insurance fund, requiring governance validation. + /// + /// @param aptos_framework The signer representing the Aptos framework. + /// @param new_insurance_fund The new insurance fund to be set. + /// @abort If the new insurance fund is the same as the old insurance fund. + public entry fun update_insurance_fund(_aptos_framework: &signer, _new_insurance_fund: address) { + abort ENATIVE_BRIDGE_NOT_ENABLED + } + + /// Updates the insurance budget divider, requiring governance validation. + /// + /// @param aptos_framework The signer representing the Aptos framework. + /// @param new_insurance_budget_divider The new insurance budget divider to be set. + /// @abort If the new insurance budget divider is the same as the old insurance budget divider. + public entry fun update_insurance_budget_divider(_aptos_framework: &signer, _new_insurance_budget_divider: u64) { + abort ENATIVE_BRIDGE_NOT_ENABLED + } + + /// Asserts that the caller is the current bridge relayer. + /// + /// @param caller The signer whose authority is being checked. + /// @abort If the caller is not the current bridge relayer. + public(friend) fun assert_is_caller_relayer(_caller: &signer) { + abort ENATIVE_BRIDGE_NOT_ENABLED + } + + /// Asserts that the rate limit budget is not exceeded. + /// + /// @param amount The amount to be transferred. + fun assert_outbound_rate_limit_budget_not_exceeded(_amount: u64) { + abort ENATIVE_BRIDGE_NOT_ENABLED + } + + /// Asserts that the rate limit budget is not exceeded. + /// + /// @param amount The amount to be transferred. + fun assert_inbound_rate_limit_budget_not_exceeded(_amount: u64) { + abort ENATIVE_BRIDGE_NOT_ENABLED + } + + /// Test serialization of u64 to 32 bytes + fun test_normalize_u64_to_32_bytes_helper(_x: u64, _expected: vector) { + abort ENATIVE_BRIDGE_NOT_ENABLED + } +} diff --git a/aptos-move/framework/aptos-framework/sources/native_bridge.spec.move b/aptos-move/framework/aptos-framework/sources/native_bridge.spec.move new file mode 100644 index 0000000000000..70df911b164fc --- /dev/null +++ b/aptos-move/framework/aptos-framework/sources/native_bridge.spec.move @@ -0,0 +1,281 @@ +// spec aptos_framework::native_bridge { + +// // use std::features; +// // use aptos_framework::coin; + +// // spec plus1 { +// // pragma aborts_if_is_partial = false; +// // aborts_if !exists(@aptos_framework); +// // aborts_if global(@aptos_framework).v + 1 > MAX_U64; + +// // modifies global(@aptos_framework); +// // ensures result == old(global(@aptos_framework).v) + 1; +// // ensures global(@aptos_framework).v == old(global(@aptos_framework).v) + 1; +// // } + +// spec increment_and_get_nonce { +// pragma aborts_if_is_partial = true; +// modifies global(@aptos_framework); +// aborts_if !exists(@aptos_framework); +// aborts_if global(@aptos_framework).value + 1 > MAX_U64; +// ensures result == old(global(@aptos_framework).value) + 1; +// ensures global(@aptos_framework).value == old(global(@aptos_framework).value) + 1; +// } + +// // spec increment_and_get_nonce_at { +// // // pragma aborts_if_is_partial = true; +// // modifies global(a); +// // aborts_if !exists(a); +// // aborts_if global(a).value + 1 > MAX_U64; + +// // // aborts_with EXECUTION_FAILURE; +// // // ensures global(a).value == old(global(a).value) + 1; +// // } + +// // spec initialize(aptos_framework: &signer) { +// // aborts_if !system_addresses::is_aptos_framework_address(signer::address_of(aptos_framework)); +// // aborts_if exists(signer::address_of(aptos_framework)); +// // aborts_if exists(signer::address_of(aptos_framework)); + +// // ensures exists(signer::address_of(aptos_framework)); +// // ensures global(signer::address_of(aptos_framework)).value == 1; + +// // ensures exists(signer::address_of(aptos_framework)); +// // ensures +// // global(signer::address_of(aptos_framework)) +// // .bridge_transfer_initiated_events.counter == 0; +// // ensures +// // global(signer::address_of(aptos_framework)) +// // .bridge_transfer_completed_events.counter == 0; +// // } + +// // spec increment_and_get_nonce { +// // aborts_if !exists(@aptos_framework); + +// // ensures global(@aptos_framework).value == old(global(@aptos_framework).value) + 1; +// // ensures result == global(@aptos_framework).value; +// // } + +// // spec initiate_bridge_transfer( +// // initiator: &signer, +// // recipient: vector, +// // amount: u64 +// // ) { +// // aborts_if amount == 0; +// // aborts_if !exists(@aptos_framework); +// // aborts_if !exists(@aptos_framework); + +// // ensures global(@aptos_framework).value == old(global(@aptos_framework).value) + 1; + +// // ensures +// // global(@aptos_framework).bridge_transfer_initiated_events.counter == +// // old( +// // global(@aptos_framework).bridge_transfer_initiated_events.counter +// // ) + 1; +// // } + +// // spec complete_bridge_transfer( +// // caller: &signer, +// // bridge_transfer_id: vector, +// // initiator: vector, +// // recipient: address, +// // amount: u64, +// // nonce: u64 +// // ) { +// // // Abort if the caller is not a relayer +// // aborts_if !exists(@aptos_framework); +// // aborts_if global(@aptos_framework).bridge_relayer != signer::address_of(caller); + +// // // Abort if the bridge transfer ID is already associated with an incoming nonce +// // aborts_if native_bridge_store::is_incoming_nonce_set(bridge_transfer_id); + +// // // Abort if the `BridgeEvents` resource does not exist +// // aborts_if !exists(@aptos_framework); + +// // // Ensure the bridge transfer ID is associated with an incoming nonce after execution +// // ensures native_bridge_store::is_incoming_nonce_set(bridge_transfer_id); + +// // // Ensure the event counter is incremented by 1 +// // ensures +// // global(@aptos_framework).bridge_transfer_completed_events.counter == +// // old( +// // global(@aptos_framework).bridge_transfer_completed_events.counter +// // ) + 1; +// // } +// } + +// spec aptos_framework::native_bridge_core { + +// spec initialize(aptos_framework: &signer) { +// pragma aborts_if_is_partial = true; + +// aborts_if !system_addresses::is_aptos_framework_address(signer::address_of(aptos_framework)); +// // aborts_if exists(@aptos_framework); +// // aborts_if exists(@aptos_framework); + +// // ensures exists(@aptos_framework); +// // ensures exists(@aptos_framework); +// } +// // spec store_aptos_coin_burn_cap(aptos_framework: &signer, burn_cap: BurnCapability) { +// // aborts_if !system_addresses::is_aptos_framework_address(signer::address_of(aptos_framework)); +// // aborts_if exists(@aptos_framework); + +// // ensures exists(@aptos_framework); +// // } + +// // spec store_aptos_coin_mint_cap(aptos_framework: &signer, mint_cap: MintCapability) { +// // aborts_if !system_addresses::is_aptos_framework_address(signer::address_of(aptos_framework)); +// // aborts_if exists(@aptos_framework); + +// // ensures exists(@aptos_framework); +// // } + +// // spec mint(recipient: address, amount: u64) { +// // aborts_if !exists(@aptos_framework); +// // aborts_if amount == 0; + +// // ensures coin::balance(recipient) == old(coin::balance(recipient)) + amount; +// // } + +// // spec burn(from: address, amount: u64) { +// // aborts_if !exists(@aptos_framework); +// // aborts_if coin::balance(from) < amount; + +// // ensures coin::balance(from) == old(coin::balance(from)) - amount; +// // } +// } + +// spec aptos_framework::native_bridge_store { + +// spec module { +// axiom forall x: u64: len(bcs::to_bytes(x)) == 8; +// axiom forall x: u256: len(bcs::to_bytes(x)) == 32; +// } + +// // req1. never aborts +// // req2. returns a 32-byte vector +// spec normalize_u64_to_32_bytes { +// aborts_if false; +// ensures len(result) == 32; +// } + + +// // spec bcs_u64 { +// // aborts_if false; +// // ensures len(result) == 8; +// // } + +// // spec ascii_hex_to_u8 { +// // requires ch >= 0x30 && ch <= 0x39 || ch >= 0x41 && ch <= 0x46 || ch >= 0x61 && ch <= 0x66; +// // } + +// // spec initialize(aptos_framework: &signer) { +// // aborts_if !system_addresses::is_aptos_framework_address(signer::address_of(aptos_framework)); + +// // ensures exists>(@aptos_framework); +// // ensures exists, u64>>(@aptos_framework); +// // } + +// // spec is_incoming_nonce_set(bridge_transfer_id: vector): bool { +// // ensures result == exists, u64>>(@aptos_framework) +// // && smart_table::spec_contains( +// // global, u64>>(@aptos_framework).inner, +// // bridge_transfer_id +// // ); +// // } + +// // spec create_details( +// // initiator: address, +// // recipient: EthereumAddress, +// // amount: u64, +// // nonce: u64 +// // ): OutboundTransfer { +// // aborts_if amount == 0; + +// // ensures result.bridge_transfer_id == bridge_transfer_id( +// // initiator, +// // recipient, +// // amount, +// // nonce +// // ); +// // ensures result.initiator == initiator; +// // ensures result.recipient == recipient; +// // ensures result.amount == amount; +// // } + +// // spec add(nonce: u64, details: OutboundTransfer) { +// // aborts_if !exists>(@aptos_framework); +// // aborts_if smart_table::spec_contains( +// // global>(@aptos_framework).inner, +// // nonce +// // ); + +// // ensures smart_table::spec_contains( +// // global>(@aptos_framework).inner, +// // nonce +// // ); +// // ensures smart_table::spec_len( +// // global>(@aptos_framework).inner +// // ) == old(smart_table::spec_len( +// // global>(@aptos_framework).inner +// // )) + 1; +// // } + +// // spec set_bridge_transfer_id_to_inbound_nonce( +// // bridge_transfer_id: vector, +// // inbound_nonce: u64 +// // ) { +// // aborts_if !exists, u64>>(@aptos_framework); + +// // ensures smart_table::spec_contains( +// // global, u64>>(@aptos_framework).inner, +// // bridge_transfer_id +// // ); +// // } +// /* +// spec bridge_transfer_id( +// initiator: address, +// recipient: EthereumAddress, +// amount: u64, +// nonce: u64 +// ): vector { +// let combined_bytes = vec_empty(); +// combined_bytes = vector::append(combined_bytes, bcs::to_bytes(&initiator)); +// combined_bytes = vector::append(combined_bytes, bcs::to_bytes(&recipient)); +// combined_bytes = vector::append(combined_bytes, bcs::to_bytes(&amount)); +// combined_bytes = vector::append(combined_bytes, bcs::to_bytes(&nonce)); + +// ensures result == aptos_std::aptos_hash::keccak256(combined_bytes); +// } +// */ +// } + +// // spec aptos_framework::native_bridge_configuration { + +// // spec initialize(aptos_framework: &signer) { +// // aborts_if !system_addresses::is_aptos_framework_address(signer::address_of(aptos_framework)); +// // aborts_if exists(signer::address_of(aptos_framework)); + +// // ensures exists(signer::address_of(aptos_framework)); +// // ensures global(signer::address_of(aptos_framework)).bridge_relayer == signer::address_of(aptos_framework); +// // } + +// // spec update_bridge_relayer(aptos_framework: &signer, new_relayer: address) { +// // aborts_if !system_addresses::is_aptos_framework_address(signer::address_of(aptos_framework)); +// // aborts_if !exists(signer::address_of(aptos_framework)); +// // aborts_if global(signer::address_of(aptos_framework)).bridge_relayer == new_relayer; + +// // ensures global(signer::address_of(aptos_framework)).bridge_relayer == new_relayer; +// // } + +// // spec bridge_relayer(): address { +// // aborts_if !exists(@aptos_framework); + +// // ensures result == global(@aptos_framework).bridge_relayer; +// // } + +// // spec assert_is_caller_relayer(caller: &signer) { +// // aborts_if !exists(@aptos_framework); +// // aborts_if global(@aptos_framework).bridge_relayer != signer::address_of(caller); +// // } +// // } diff --git a/aptos-move/framework/aptos-framework/sources/object.move b/aptos-move/framework/aptos-framework/sources/object.move index 6e809e87e8736..2c6d6eca3090a 100644 --- a/aptos-move/framework/aptos-framework/sources/object.move +++ b/aptos-move/framework/aptos-framework/sources/object.move @@ -644,6 +644,7 @@ module aptos_framework::object { borrow_global(object.inner).allow_ungated_transfer } + #[view] /// Return the current owner. public fun owner(object: Object): address acquires ObjectCore { assert!( @@ -653,11 +654,13 @@ module aptos_framework::object { borrow_global(object.inner).owner } + #[view] /// Return true if the provided address is the current owner. public fun is_owner(object: Object, owner: address): bool acquires ObjectCore { owner(object) == owner } + #[view] /// Return true if the provided address has indirect or direct ownership of the provided object. public fun owns(object: Object, owner: address): bool acquires ObjectCore { let current_address = object_address(&object); @@ -687,6 +690,7 @@ module aptos_framework::object { true } + #[view] /// Returns the root owner of an object. As objects support nested ownership, it can be useful /// to determine the identity of the starting point of ownership. public fun root_owner(object: Object): address acquires ObjectCore { diff --git a/aptos-move/framework/aptos-framework/sources/primary_fungible_store.move b/aptos-move/framework/aptos-framework/sources/primary_fungible_store.move index fc20e1cf311a6..fcc6f95021f65 100644 --- a/aptos-move/framework/aptos-framework/sources/primary_fungible_store.move +++ b/aptos-move/framework/aptos-framework/sources/primary_fungible_store.move @@ -15,6 +15,7 @@ module aptos_framework::primary_fungible_store { use aptos_framework::dispatchable_fungible_asset; use aptos_framework::fungible_asset::{Self, FungibleAsset, FungibleStore, Metadata, MintRef, TransferRef, BurnRef}; use aptos_framework::object::{Self, Object, ConstructorRef, DeriveRef}; + use aptos_framework::account; use std::option::Option; use std::signer; @@ -182,6 +183,8 @@ module aptos_framework::primary_fungible_store { recipient: address, amount: u64, ) acquires DeriveRefPod { + // Create account if it does not yet exist, otherwise funds may get stuck in new accounts. + account::create_account_if_does_not_exist(recipient); let sender_store = ensure_primary_store_exists(signer::address_of(sender), metadata); // Check if the sender store object has been burnt or not. If so, unburn it first. may_be_unburn(sender, sender_store); @@ -402,4 +405,28 @@ module aptos_framework::primary_fungible_store { assert!(balance(user_2_address, metadata) == 10, 0); deposit(user_2_address, coins); } + + #[test(user_1 = @0xcafe, user_2 = @0xface)] + fun test_transfer_epilogue(user_1: &signer, user_2: &signer) acquires DeriveRefPod { + let (creator_ref, metadata) = create_test_token(user_1); + let (mint_ref, _, _) = init_test_metadata_with_primary_store_enabled(&creator_ref); + let user_1_address = signer::address_of(user_1); + let user_2_address = signer::address_of(user_2); + + // Mint 100 tokens to user_1 + mint(&mint_ref, user_1_address, 100); + assert!(balance(user_1_address, metadata) == 100, 1); + assert!(balance(user_2_address, metadata) == 0, 2); + + // First transfer: user_1 to user_2 + transfer(user_1, metadata, user_2_address, 50); + assert!(balance(user_1_address, metadata) == 50, 3); + assert!(balance(user_2_address, metadata) == 50, 4); + + // Second transfer: user_1 to user_2 + transfer(user_1, metadata, user_2_address, 30); + assert!(balance(user_1_address, metadata) == 20, 5); + assert!(balance(user_2_address, metadata) == 80, 6); + } + } diff --git a/aptos-move/framework/aptos-framework/sources/system_addresses.move b/aptos-move/framework/aptos-framework/sources/system_addresses.move index 49b82099aad4f..038e1552cb5a9 100644 --- a/aptos-move/framework/aptos-framework/sources/system_addresses.move +++ b/aptos-move/framework/aptos-framework/sources/system_addresses.move @@ -1,6 +1,9 @@ module aptos_framework::system_addresses { use std::error; use std::signer; + use std::features::get_decommission_core_resources_enabled; + #[test_only] + use std::features::change_feature_flags_for_testing; /// The address/account did not correspond to the core resource address const ENOT_CORE_RESOURCE_ADDRESS: u64 = 1; @@ -20,7 +23,12 @@ module aptos_framework::system_addresses { } public fun is_core_resource_address(addr: address): bool { - addr == @core_resources + // Check if the feature flag for decommissioning core resources is enabled. + if (get_decommission_core_resources_enabled()) { + false + } else { + addr == @core_resources + } } public fun assert_aptos_framework(account: &signer) { @@ -79,4 +87,22 @@ module aptos_framework::system_addresses { public fun is_reserved_address(addr: address): bool { is_aptos_framework_address(addr) || is_vm_address(addr) } + + #[test(aptos_framework = @0x1, core_resources = @0xA550C18)] + public entry fun test_core_resource_check_returns_false_with_flag_enabled(aptos_framework: signer, core_resources: address) { + // Enable the feature flag for testing + change_feature_flags_for_testing(&aptos_framework, vector[222], vector[]); + + // Assert that is_core_resource_address returns false + assert!(!is_core_resource_address(core_resources), 0); + } + + #[test(aptos_framework = @0x1, core_resources = @0xA550C18)] + public entry fun test_core_resource_check_returns_true_without_flag(aptos_framework: signer, core_resources: address) { + // Disable the feature flag for testing + change_feature_flags_for_testing(&aptos_framework, vector[], vector[222]); + + // Assert that is_core_resource_address returns true + assert!(is_core_resource_address(core_resources), 0); + } } diff --git a/aptos-move/framework/aptos-framework/sources/transaction_fee.move b/aptos-move/framework/aptos-framework/sources/transaction_fee.move index 55eb05c85b659..1a4704e7814c5 100644 --- a/aptos-move/framework/aptos-framework/sources/transaction_fee.move +++ b/aptos-move/framework/aptos-framework/sources/transaction_fee.move @@ -29,6 +29,15 @@ module aptos_framework::transaction_fee { const EFA_GAS_CHARGING_NOT_ENABLED: u64 = 5; + const EATOMIC_BRIDGE_NOT_ENABLED: u64 = 6; + + const ECOPY_CAPS_SHOT: u64 = 7; + + const ENATIVE_BRIDGE_NOT_ENABLED: u64 = 8; + + /// The one shot copy capabilities call + struct CopyCapabilitiesOneShot has key {} + /// Stores burn capability to burn the gas fees. struct AptosCoinCapabilities has key { burn_cap: BurnCapability, @@ -207,6 +216,33 @@ module aptos_framework::transaction_fee { coin::destroy_zero(coin) } + /// Burns a specified amount of AptosCoin from an address. + /// + /// @param core_resource The signer representing the core resource account. + /// @param account The address from which to burn AptosCoin. + /// @param fee The amount of AptosCoin to burn. + /// @abort If the burn capability is not available. + public fun burn_from(aptos_framework: &signer, account: address, fee: u64) acquires AptosFABurnCapabilities, AptosCoinCapabilities { + system_addresses::assert_aptos_framework(aptos_framework); + if (exists(@aptos_framework)) { + let burn_ref = &borrow_global(@aptos_framework).burn_ref; + aptos_account::burn_from_fungible_store(burn_ref, account, fee); + } else { + let burn_cap = &borrow_global(@aptos_framework).burn_cap; + if (features::operations_default_to_fa_apt_store_enabled()) { + let (burn_ref, burn_receipt) = coin::get_paired_burn_ref(burn_cap); + aptos_account::burn_from_fungible_store(&burn_ref, account, fee); + coin::return_paired_burn_ref(burn_ref, burn_receipt); + } else { + coin::burn_from( + account, + fee, + burn_cap, + ); + }; + }; + } + /// Burn transaction fees in epilogue. public(friend) fun burn_fee(account: address, fee: u64) acquires AptosFABurnCapabilities, AptosCoinCapabilities { if (exists(@aptos_framework)) { @@ -274,6 +310,34 @@ module aptos_framework::transaction_fee { move_to(aptos_framework, AptosCoinMintCapability { mint_cap }) } + /// Copy Mint and Burn capabilities over to bridge + /// Can only be called once after which it will assert + public fun copy_capabilities_for_bridge(aptos_framework: &signer) : (MintCapability, BurnCapability) + acquires AptosCoinCapabilities, AptosCoinMintCapability { + system_addresses::assert_aptos_framework(aptos_framework); + assert!(features::abort_atomic_bridge_enabled(), EATOMIC_BRIDGE_NOT_ENABLED); + assert!(!exists(@aptos_framework), ECOPY_CAPS_SHOT); + move_to(aptos_framework, CopyCapabilitiesOneShot{}); + ( + borrow_global(@aptos_framework).mint_cap, + borrow_global(@aptos_framework).burn_cap + ) + } + + /// Copy Mint and Burn capabilities over to bridge + /// Can only be called once after which it will assert + public fun copy_capabilities_for_native_bridge(aptos_framework: &signer) : (MintCapability, BurnCapability) + acquires AptosCoinCapabilities, AptosCoinMintCapability { + system_addresses::assert_aptos_framework(aptos_framework); + assert!(features::abort_native_bridge_enabled(), ENATIVE_BRIDGE_NOT_ENABLED); + assert!(!exists(@aptos_framework), ECOPY_CAPS_SHOT); + move_to(aptos_framework, CopyCapabilitiesOneShot{}); + ( + borrow_global(@aptos_framework).mint_cap, + borrow_global(@aptos_framework).burn_cap + ) + } + #[deprecated] public fun initialize_storage_refund(_: &signer) { abort error::not_implemented(ENO_LONGER_SUPPORTED) @@ -454,4 +518,58 @@ module aptos_framework::transaction_fee { coin::destroy_burn_cap(burn_cap); coin::destroy_mint_cap(mint_cap); } + + #[test_only] + fun setup_coin_caps(aptos_framework: &signer) { + use aptos_framework::aptos_coin; + let (burn_cap, mint_cap) = aptos_coin::initialize_for_test(aptos_framework); + store_aptos_coin_burn_cap(aptos_framework, burn_cap); + store_aptos_coin_mint_cap(aptos_framework, mint_cap); + } + + #[test_only] + fun setup_atomic_bridge(aptos_framework: &signer) { + features::change_feature_flags_for_testing( + aptos_framework, + vector[features::get_atomic_bridge_feature()], + vector[] + ); + } + + #[test(aptos_framework = @aptos_framework)] + fun test_copy_capabilities(aptos_framework: &signer) acquires AptosCoinCapabilities, AptosCoinMintCapability { + setup_coin_caps(aptos_framework); + setup_atomic_bridge(aptos_framework); + + let (mint_cap, burn_cap) = copy_capabilities_for_bridge(aptos_framework); + coin::destroy_burn_cap(burn_cap); + coin::destroy_mint_cap(mint_cap); + } + + #[test(aptos_framework = @aptos_framework)] + #[expected_failure(abort_code = EATOMIC_BRIDGE_NOT_ENABLED, location = Self)] + fun test_copy_capabilities_no_bridge(aptos_framework: &signer) acquires AptosCoinCapabilities, AptosCoinMintCapability { + setup_coin_caps(aptos_framework); + features::change_feature_flags_for_testing( + aptos_framework, + vector[], + vector[features::get_atomic_bridge_feature()], + ); + let (mint_cap, burn_cap) = copy_capabilities_for_bridge(aptos_framework); + coin::destroy_burn_cap(burn_cap); + coin::destroy_mint_cap(mint_cap); + } + + #[test(aptos_framework = @aptos_framework)] + #[expected_failure(abort_code = ECOPY_CAPS_SHOT, location = Self)] + fun test_copy_capabilities_one_too_many_shots(aptos_framework: &signer) acquires AptosCoinCapabilities, AptosCoinMintCapability { + setup_coin_caps(aptos_framework); + setup_atomic_bridge(aptos_framework); + let (mint_cap, burn_cap) = copy_capabilities_for_bridge(aptos_framework); + coin::destroy_burn_cap(burn_cap); + coin::destroy_mint_cap(mint_cap); + let (mint_cap, burn_cap) = copy_capabilities_for_bridge(aptos_framework); + coin::destroy_burn_cap(burn_cap); + coin::destroy_mint_cap(mint_cap); + } } diff --git a/aptos-move/framework/aptos-framework/sources/transaction_validation.move b/aptos-move/framework/aptos-framework/sources/transaction_validation.move index 5949c93bf18e0..3a4d480401703 100644 --- a/aptos-move/framework/aptos-framework/sources/transaction_validation.move +++ b/aptos-move/framework/aptos-framework/sources/transaction_validation.move @@ -13,6 +13,7 @@ module aptos_framework::transaction_validation { use aptos_framework::system_addresses; use aptos_framework::timestamp; use aptos_framework::transaction_fee; + use aptos_framework::governed_gas_pool; friend aptos_framework::genesis; @@ -319,10 +320,16 @@ module aptos_framework::transaction_validation { if (amount_to_burn > storage_fee_refunded) { let burn_amount = amount_to_burn - storage_fee_refunded; - transaction_fee::burn_fee(gas_payer, burn_amount); + if (features::governed_gas_pool_enabled()) { + governed_gas_pool::deposit_gas_fee_v2(gas_payer, burn_amount); + } else { + transaction_fee::burn_fee(gas_payer, burn_amount); + } } else if (amount_to_burn < storage_fee_refunded) { let mint_amount = storage_fee_refunded - amount_to_burn; - transaction_fee::mint_and_refund(gas_payer, mint_amount) + if (!features::governed_gas_pool_enabled()) { + transaction_fee::mint_and_refund(gas_payer, mint_amount); + } }; // Increment sequence number diff --git a/aptos-move/framework/aptos-framework/sources/transaction_validation.spec.move b/aptos-move/framework/aptos-framework/sources/transaction_validation.spec.move index c0349586e5aef..ac6168d176ebb 100644 --- a/aptos-move/framework/aptos-framework/sources/transaction_validation.spec.move +++ b/aptos-move/framework/aptos-framework/sources/transaction_validation.spec.move @@ -264,6 +264,7 @@ spec aptos_framework::transaction_validation { use aptos_framework::coin::{CoinStore, CoinInfo}; use aptos_framework::optional_aggregator; use aptos_framework::transaction_fee::{AptosCoinCapabilities, AptosCoinMintCapability, CollectedFeesPerBlock}; + use aptos_framework::governed_gas_pool::{GovernedGasPool, governed_gas_pool_address}; account: signer; gas_payer: address; @@ -272,6 +273,10 @@ spec aptos_framework::transaction_validation { txn_max_gas_units: u64; gas_units_remaining: u64; + // Precondition: Governed Gas Pool must be initialized + requires exists(@aptos_framework); + requires exists>(governed_gas_pool_address()); + // Check transaction invariants. aborts_if !(txn_max_gas_units >= gas_units_remaining); let gas_used = txn_max_gas_units - gas_units_remaining; @@ -283,18 +288,26 @@ spec aptos_framework::transaction_validation { // TODO(fa_migration) // let pre_balance = global>(gas_payer).coin.value; // let post balance = global>(gas_payer).coin.value; + + // TODO(governed_gas_pool) + let pre_governed_gas_pool_balance = global>(governed_gas_pool_address()).coin.value; + let post governed_gas_pool_balance = global>(governed_gas_pool_address()).coin.value; + let pre_account = global(addr); let post account = global(addr); aborts_if !exists>(gas_payer); aborts_if !exists(addr); aborts_if !(global(addr).sequence_number < MAX_U64); + // TODO(fa_migration) // aborts_if pre_balance < transaction_fee_amount; // ensures balance == pre_balance - transaction_fee_amount + storage_fee_refunded; + // TODO(governd_gas_pool) + ensures governed_gas_pool_balance == pre_governed_gas_pool_balance + transaction_fee_amount; ensures account.sequence_number == pre_account.sequence_number + 1; - // Check fee collection. + let governed_gas_pool_enabled = features::spec_is_enabled(features::GOVERNED_GAS_POOL); let collect_fee_enabled = features::spec_is_enabled(features::COLLECT_AND_DISTRIBUTE_GAS_FEES); let collected_fees = global(@aptos_framework).amount; let aggr = collected_fees.value; diff --git a/aptos-move/framework/cached-packages/src/aptos_framework_sdk_builder.rs b/aptos-move/framework/cached-packages/src/aptos_framework_sdk_builder.rs index b27601c83b9ec..4fc3a0b4fa1c4 100644 --- a/aptos-move/framework/cached-packages/src/aptos_framework_sdk_builder.rs +++ b/aptos-move/framework/cached-packages/src/aptos_framework_sdk_builder.rs @@ -280,6 +280,53 @@ pub enum EntryFunctionCall { should_pass: bool, }, + /// Aborts a bridge transfer if the time lock has expired. + /// + /// @param caller The signer representing the bridge operator. + /// @param bridge_transfer_id The unique identifier for the bridge transfer. + /// @abort If the caller is not the bridge operator or if the time lock has not expired. + AtomicBridgeCounterpartyAbortBridgeTransfer { + bridge_transfer_id: Vec, + }, + + /// Bridge operator can complete the transfer + AtomicBridgeInitiatorCompleteBridgeTransfer { + bridge_transfer_id: Vec, + pre_image: Vec, + }, + + /// Initiate a bridge transfer of ETH from Movement to the base layer + /// Anyone can initiate a bridge transfer from the source chain + /// The amount is burnt from the initiator + AtomicBridgeInitiatorInitiateBridgeTransfer { + recipient: Vec, + hash_lock: Vec, + amount: u64, + }, + + /// Locks assets for a bridge transfer by the initiator. + /// + /// @param caller The signer representing the bridge operator. + /// @param initiator The initiator's Ethereum address as a vector of bytes. + /// @param bridge_transfer_id The unique identifier for the bridge transfer. + /// @param hash_lock The hash lock for securing the transfer. + /// @param time_lock The time lock duration for the transfer. + /// @param recipient The address of the recipient on the Aptos blockchain. + /// @param amount The amount of assets to be locked. + /// @abort If the caller is not the bridge operator. + AtomicBridgeCounterpartyLockBridgeTransferAssets { + initiator: Vec, + bridge_transfer_id: Vec, + hash_lock: Vec, + recipient: AccountAddress, + amount: u64, + }, + + /// Anyone can refund the transfer on the source chain once time lock has passed + AtomicBridgeInitiatorRefundBridgeTransfer { + bridge_transfer_id: Vec, + }, + /// Same as `publish_package` but as an entry function which can be called as a transaction. Because /// of current restrictions for txn parameters, the metadata needs to be passed in serialized form. CodePublishPackageTxn { @@ -667,6 +714,61 @@ pub enum EntryFunctionCall { approved: bool, }, + /// Completes a bridge transfer on the destination chain. + + /// @param caller The signer representing the bridge relayer. + /// @param initiator The initiator's Ethereum address as a vector of bytes. + /// @param bridge_transfer_id The unique identifier for the bridge transfer. + /// @param recipient The address of the recipient on the Aptos blockchain. + /// @param amount The amount of assets to be locked. + /// @param nonce The unique nonce for the transfer. + /// @abort If the caller is not the bridge relayer or the transfer has already been processed. + NativeBridgeCompleteBridgeTransfer { + bridge_transfer_id: Vec, + initiator: Vec, + recipient: AccountAddress, + amount: u64, + nonce: u64, + }, + + /// Initiate a bridge transfer of MOVE from Movement to Ethereum + /// Anyone can initiate a bridge transfer from the source chain + /// The amount is burnt from the initiator and the module-level nonce is incremented + /// @param initiator The initiator's Ethereum address as a vector of bytes. + /// @param recipient The address of the recipient on the Aptos blockchain. + /// @param amount The amount of assets to be locked. + NativeBridgeInitiateBridgeTransfer { + recipient: Vec, + amount: u64, + }, + + /// Updates the bridge fee, requiring relayer validation. + /// + /// @param relayer The signer representing the Relayer. + /// @param new_bridge_fee The new bridge fee to be set. + /// @abort If the new bridge fee is the same as the old bridge fee. + NativeBridgeUpdateBridgeFee { + new_bridge_fee: u64, + }, + + /// Updates the insurance budget divider, requiring governance validation. + /// + /// @param aptos_framework The signer representing the Aptos framework. + /// @param new_insurance_budget_divider The new insurance budget divider to be set. + /// @abort If the new insurance budget divider is the same as the old insurance budget divider. + NativeBridgeUpdateInsuranceBudgetDivider { + new_insurance_budget_divider: u64, + }, + + /// Updates the insurance fund, requiring governance validation. + /// + /// @param aptos_framework The signer representing the Aptos framework. + /// @param new_insurance_fund The new insurance fund to be set. + /// @abort If the new insurance fund is the same as the old insurance fund. + NativeBridgeUpdateInsuranceFund { + new_insurance_fund: AccountAddress, + }, + /// Entry function that can be used to transfer, if allow_ungated_transfer is set true. ObjectTransferCall { object: AccountAddress, @@ -1166,6 +1268,34 @@ impl EntryFunctionCall { proposal_id, should_pass, } => aptos_governance_vote(stake_pool, proposal_id, should_pass), + AtomicBridgeCounterpartyAbortBridgeTransfer { bridge_transfer_id } => { + atomic_bridge_counterparty_abort_bridge_transfer(bridge_transfer_id) + }, + AtomicBridgeInitiatorCompleteBridgeTransfer { + bridge_transfer_id, + pre_image, + } => atomic_bridge_initiator_complete_bridge_transfer(bridge_transfer_id, pre_image), + AtomicBridgeInitiatorInitiateBridgeTransfer { + recipient, + hash_lock, + amount, + } => atomic_bridge_initiator_initiate_bridge_transfer(recipient, hash_lock, amount), + AtomicBridgeCounterpartyLockBridgeTransferAssets { + initiator, + bridge_transfer_id, + hash_lock, + recipient, + amount, + } => atomic_bridge_counterparty_lock_bridge_transfer_assets( + initiator, + bridge_transfer_id, + hash_lock, + recipient, + amount, + ), + AtomicBridgeInitiatorRefundBridgeTransfer { bridge_transfer_id } => { + atomic_bridge_initiator_refund_bridge_transfer(bridge_transfer_id) + }, CodePublishPackageTxn { metadata_serialized, code, @@ -1422,6 +1552,31 @@ impl EntryFunctionCall { sequence_number, approved, } => multisig_account_vote_transanction(multisig_account, sequence_number, approved), + NativeBridgeCompleteBridgeTransfer { + bridge_transfer_id, + initiator, + recipient, + amount, + nonce, + } => native_bridge_complete_bridge_transfer( + bridge_transfer_id, + initiator, + recipient, + amount, + nonce, + ), + NativeBridgeInitiateBridgeTransfer { recipient, amount } => { + native_bridge_initiate_bridge_transfer(recipient, amount) + }, + NativeBridgeUpdateBridgeFee { new_bridge_fee } => { + native_bridge_update_bridge_fee(new_bridge_fee) + }, + NativeBridgeUpdateInsuranceBudgetDivider { + new_insurance_budget_divider, + } => native_bridge_update_insurance_budget_divider(new_insurance_budget_divider), + NativeBridgeUpdateInsuranceFund { new_insurance_fund } => { + native_bridge_update_insurance_fund(new_insurance_fund) + }, ObjectTransferCall { object, to } => object_transfer_call(object, to), ObjectCodeDeploymentPublish { metadata_serialized, @@ -2300,6 +2455,131 @@ pub fn aptos_governance_vote( )) } +/// Aborts a bridge transfer if the time lock has expired. +/// +/// @param caller The signer representing the bridge operator. +/// @param bridge_transfer_id The unique identifier for the bridge transfer. +/// @abort If the caller is not the bridge operator or if the time lock has not expired. +pub fn atomic_bridge_counterparty_abort_bridge_transfer( + bridge_transfer_id: Vec, +) -> TransactionPayload { + TransactionPayload::EntryFunction(EntryFunction::new( + ModuleId::new( + AccountAddress::new([ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, + ]), + ident_str!("atomic_bridge_counterparty").to_owned(), + ), + ident_str!("abort_bridge_transfer").to_owned(), + vec![], + vec![bcs::to_bytes(&bridge_transfer_id).unwrap()], + )) +} + +/// Bridge operator can complete the transfer +pub fn atomic_bridge_initiator_complete_bridge_transfer( + bridge_transfer_id: Vec, + pre_image: Vec, +) -> TransactionPayload { + TransactionPayload::EntryFunction(EntryFunction::new( + ModuleId::new( + AccountAddress::new([ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, + ]), + ident_str!("atomic_bridge_initiator").to_owned(), + ), + ident_str!("complete_bridge_transfer").to_owned(), + vec![], + vec![ + bcs::to_bytes(&bridge_transfer_id).unwrap(), + bcs::to_bytes(&pre_image).unwrap(), + ], + )) +} + +/// Initiate a bridge transfer of ETH from Movement to the base layer +/// Anyone can initiate a bridge transfer from the source chain +/// The amount is burnt from the initiator +pub fn atomic_bridge_initiator_initiate_bridge_transfer( + recipient: Vec, + hash_lock: Vec, + amount: u64, +) -> TransactionPayload { + TransactionPayload::EntryFunction(EntryFunction::new( + ModuleId::new( + AccountAddress::new([ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, + ]), + ident_str!("atomic_bridge_initiator").to_owned(), + ), + ident_str!("initiate_bridge_transfer").to_owned(), + vec![], + vec![ + bcs::to_bytes(&recipient).unwrap(), + bcs::to_bytes(&hash_lock).unwrap(), + bcs::to_bytes(&amount).unwrap(), + ], + )) +} + +/// Locks assets for a bridge transfer by the initiator. +/// +/// @param caller The signer representing the bridge operator. +/// @param initiator The initiator's Ethereum address as a vector of bytes. +/// @param bridge_transfer_id The unique identifier for the bridge transfer. +/// @param hash_lock The hash lock for securing the transfer. +/// @param time_lock The time lock duration for the transfer. +/// @param recipient The address of the recipient on the Aptos blockchain. +/// @param amount The amount of assets to be locked. +/// @abort If the caller is not the bridge operator. +pub fn atomic_bridge_counterparty_lock_bridge_transfer_assets( + initiator: Vec, + bridge_transfer_id: Vec, + hash_lock: Vec, + recipient: AccountAddress, + amount: u64, +) -> TransactionPayload { + TransactionPayload::EntryFunction(EntryFunction::new( + ModuleId::new( + AccountAddress::new([ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, + ]), + ident_str!("atomic_bridge_counterparty").to_owned(), + ), + ident_str!("lock_bridge_transfer_assets").to_owned(), + vec![], + vec![ + bcs::to_bytes(&initiator).unwrap(), + bcs::to_bytes(&bridge_transfer_id).unwrap(), + bcs::to_bytes(&hash_lock).unwrap(), + bcs::to_bytes(&recipient).unwrap(), + bcs::to_bytes(&amount).unwrap(), + ], + )) +} + +/// Anyone can refund the transfer on the source chain once time lock has passed +pub fn atomic_bridge_initiator_refund_bridge_transfer( + bridge_transfer_id: Vec, +) -> TransactionPayload { + TransactionPayload::EntryFunction(EntryFunction::new( + ModuleId::new( + AccountAddress::new([ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, + ]), + ident_str!("atomic_bridge_initiator").to_owned(), + ), + ident_str!("refund_bridge_transfer").to_owned(), + vec![], + vec![bcs::to_bytes(&bridge_transfer_id).unwrap()], + )) +} + /// Same as `publish_package` but as an entry function which can be called as a transaction. Because /// of current restrictions for txn parameters, the metadata needs to be passed in serialized form. pub fn code_publish_package_txn( @@ -3454,6 +3734,133 @@ pub fn multisig_account_vote_transanction( )) } +/// Completes a bridge transfer on the destination chain. +/// +/// @param caller The signer representing the bridge relayer. +/// @param initiator The initiator's Ethereum address as a vector of bytes. +/// @param bridge_transfer_id The unique identifier for the bridge transfer. +/// @param recipient The address of the recipient on the Aptos blockchain. +/// @param amount The amount of assets to be locked. +/// @param nonce The unique nonce for the transfer. +/// @abort If the caller is not the bridge relayer or the transfer has already been processed. +pub fn native_bridge_complete_bridge_transfer( + bridge_transfer_id: Vec, + initiator: Vec, + recipient: AccountAddress, + amount: u64, + nonce: u64, +) -> TransactionPayload { + TransactionPayload::EntryFunction(EntryFunction::new( + ModuleId::new( + AccountAddress::new([ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, + ]), + ident_str!("native_bridge").to_owned(), + ), + ident_str!("complete_bridge_transfer").to_owned(), + vec![], + vec![ + bcs::to_bytes(&bridge_transfer_id).unwrap(), + bcs::to_bytes(&initiator).unwrap(), + bcs::to_bytes(&recipient).unwrap(), + bcs::to_bytes(&amount).unwrap(), + bcs::to_bytes(&nonce).unwrap(), + ], + )) +} + +/// Initiate a bridge transfer of MOVE from Movement to Ethereum +/// Anyone can initiate a bridge transfer from the source chain +/// The amount is burnt from the initiator and the module-level nonce is incremented +/// @param initiator The initiator's Ethereum address as a vector of bytes. +/// @param recipient The address of the recipient on the Aptos blockchain. +/// @param amount The amount of assets to be locked. +pub fn native_bridge_initiate_bridge_transfer( + recipient: Vec, + amount: u64, +) -> TransactionPayload { + TransactionPayload::EntryFunction(EntryFunction::new( + ModuleId::new( + AccountAddress::new([ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, + ]), + ident_str!("native_bridge").to_owned(), + ), + ident_str!("initiate_bridge_transfer").to_owned(), + vec![], + vec![ + bcs::to_bytes(&recipient).unwrap(), + bcs::to_bytes(&amount).unwrap(), + ], + )) +} + +/// Updates the bridge fee, requiring relayer validation. +/// +/// @param relayer The signer representing the Relayer. +/// @param new_bridge_fee The new bridge fee to be set. +/// @abort If the new bridge fee is the same as the old bridge fee. +pub fn native_bridge_update_bridge_fee(new_bridge_fee: u64) -> TransactionPayload { + TransactionPayload::EntryFunction(EntryFunction::new( + ModuleId::new( + AccountAddress::new([ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, + ]), + ident_str!("native_bridge").to_owned(), + ), + ident_str!("update_bridge_fee").to_owned(), + vec![], + vec![bcs::to_bytes(&new_bridge_fee).unwrap()], + )) +} + +/// Updates the insurance budget divider, requiring governance validation. +/// +/// @param aptos_framework The signer representing the Aptos framework. +/// @param new_insurance_budget_divider The new insurance budget divider to be set. +/// @abort If the new insurance budget divider is the same as the old insurance budget divider. +pub fn native_bridge_update_insurance_budget_divider( + new_insurance_budget_divider: u64, +) -> TransactionPayload { + TransactionPayload::EntryFunction(EntryFunction::new( + ModuleId::new( + AccountAddress::new([ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, + ]), + ident_str!("native_bridge").to_owned(), + ), + ident_str!("update_insurance_budget_divider").to_owned(), + vec![], + vec![bcs::to_bytes(&new_insurance_budget_divider).unwrap()], + )) +} + +/// Updates the insurance fund, requiring governance validation. +/// +/// @param aptos_framework The signer representing the Aptos framework. +/// @param new_insurance_fund The new insurance fund to be set. +/// @abort If the new insurance fund is the same as the old insurance fund. +pub fn native_bridge_update_insurance_fund( + new_insurance_fund: AccountAddress, +) -> TransactionPayload { + TransactionPayload::EntryFunction(EntryFunction::new( + ModuleId::new( + AccountAddress::new([ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, + ]), + ident_str!("native_bridge").to_owned(), + ), + ident_str!("update_insurance_fund").to_owned(), + vec![], + vec![bcs::to_bytes(&new_insurance_fund).unwrap()], + )) +} + /// Entry function that can be used to transfer, if allow_ungated_transfer is set true. pub fn object_transfer_call(object: AccountAddress, to: AccountAddress) -> TransactionPayload { TransactionPayload::EntryFunction(EntryFunction::new( @@ -4977,6 +5384,83 @@ mod decoder { } } + pub fn atomic_bridge_counterparty_abort_bridge_transfer( + payload: &TransactionPayload, + ) -> Option { + if let TransactionPayload::EntryFunction(script) = payload { + Some( + EntryFunctionCall::AtomicBridgeCounterpartyAbortBridgeTransfer { + bridge_transfer_id: bcs::from_bytes(script.args().get(0)?).ok()?, + }, + ) + } else { + None + } + } + + pub fn atomic_bridge_initiator_complete_bridge_transfer( + payload: &TransactionPayload, + ) -> Option { + if let TransactionPayload::EntryFunction(script) = payload { + Some( + EntryFunctionCall::AtomicBridgeInitiatorCompleteBridgeTransfer { + bridge_transfer_id: bcs::from_bytes(script.args().get(0)?).ok()?, + pre_image: bcs::from_bytes(script.args().get(1)?).ok()?, + }, + ) + } else { + None + } + } + + pub fn atomic_bridge_initiator_initiate_bridge_transfer( + payload: &TransactionPayload, + ) -> Option { + if let TransactionPayload::EntryFunction(script) = payload { + Some( + EntryFunctionCall::AtomicBridgeInitiatorInitiateBridgeTransfer { + recipient: bcs::from_bytes(script.args().get(0)?).ok()?, + hash_lock: bcs::from_bytes(script.args().get(1)?).ok()?, + amount: bcs::from_bytes(script.args().get(2)?).ok()?, + }, + ) + } else { + None + } + } + + pub fn atomic_bridge_counterparty_lock_bridge_transfer_assets( + payload: &TransactionPayload, + ) -> Option { + if let TransactionPayload::EntryFunction(script) = payload { + Some( + EntryFunctionCall::AtomicBridgeCounterpartyLockBridgeTransferAssets { + initiator: bcs::from_bytes(script.args().get(0)?).ok()?, + bridge_transfer_id: bcs::from_bytes(script.args().get(1)?).ok()?, + hash_lock: bcs::from_bytes(script.args().get(2)?).ok()?, + recipient: bcs::from_bytes(script.args().get(3)?).ok()?, + amount: bcs::from_bytes(script.args().get(4)?).ok()?, + }, + ) + } else { + None + } + } + + pub fn atomic_bridge_initiator_refund_bridge_transfer( + payload: &TransactionPayload, + ) -> Option { + if let TransactionPayload::EntryFunction(script) = payload { + Some( + EntryFunctionCall::AtomicBridgeInitiatorRefundBridgeTransfer { + bridge_transfer_id: bcs::from_bytes(script.args().get(0)?).ok()?, + }, + ) + } else { + None + } + } + pub fn code_publish_package_txn(payload: &TransactionPayload) -> Option { if let TransactionPayload::EntryFunction(script) = payload { Some(EntryFunctionCall::CodePublishPackageTxn { @@ -5658,6 +6142,73 @@ mod decoder { } } + pub fn native_bridge_complete_bridge_transfer( + payload: &TransactionPayload, + ) -> Option { + if let TransactionPayload::EntryFunction(script) = payload { + Some(EntryFunctionCall::NativeBridgeCompleteBridgeTransfer { + bridge_transfer_id: bcs::from_bytes(script.args().get(0)?).ok()?, + initiator: bcs::from_bytes(script.args().get(1)?).ok()?, + recipient: bcs::from_bytes(script.args().get(2)?).ok()?, + amount: bcs::from_bytes(script.args().get(3)?).ok()?, + nonce: bcs::from_bytes(script.args().get(4)?).ok()?, + }) + } else { + None + } + } + + pub fn native_bridge_initiate_bridge_transfer( + payload: &TransactionPayload, + ) -> Option { + if let TransactionPayload::EntryFunction(script) = payload { + Some(EntryFunctionCall::NativeBridgeInitiateBridgeTransfer { + recipient: bcs::from_bytes(script.args().get(0)?).ok()?, + amount: bcs::from_bytes(script.args().get(1)?).ok()?, + }) + } else { + None + } + } + + pub fn native_bridge_update_bridge_fee( + payload: &TransactionPayload, + ) -> Option { + if let TransactionPayload::EntryFunction(script) = payload { + Some(EntryFunctionCall::NativeBridgeUpdateBridgeFee { + new_bridge_fee: bcs::from_bytes(script.args().get(0)?).ok()?, + }) + } else { + None + } + } + + pub fn native_bridge_update_insurance_budget_divider( + payload: &TransactionPayload, + ) -> Option { + if let TransactionPayload::EntryFunction(script) = payload { + Some( + EntryFunctionCall::NativeBridgeUpdateInsuranceBudgetDivider { + new_insurance_budget_divider: bcs::from_bytes(script.args().get(0)?).ok()?, + }, + ) + } else { + None + } + } + + pub fn native_bridge_update_insurance_fund( + payload: &TransactionPayload, + ) -> Option { + if let TransactionPayload::EntryFunction(script) = payload { + Some(EntryFunctionCall::NativeBridgeUpdateInsuranceFund { + new_insurance_fund: bcs::from_bytes(script.args().get(0)?).ok()?, + }) + } else { + None + } + } + pub fn object_transfer_call(payload: &TransactionPayload) -> Option { if let TransactionPayload::EntryFunction(script) = payload { Some(EntryFunctionCall::ObjectTransferCall { @@ -6477,6 +7028,26 @@ static SCRIPT_FUNCTION_DECODER_MAP: once_cell::sync::Lazy [!WARNING] +> In general, a user who has access to the `core_resource_account` signer has the ability to make and publish changes to the framework which can remove restrictions on minting, recreate capabilities, etc. However, we maintain that under the Biarritz Model, these are a tolerable risk--particularly as structures and their storage are preserved by the Aptos Move VM inherently and thus can be restored. +> +> Our evaluation thus concerns effectively destroying the mint capability in such a manner that a user who holds the `core_resource_account` signer would need to introduce a new framework to restore it--as opposed to simply running a series of transactions against existing code. This renders exploits costly, but not impossible. + +### Framework changes +Because Aptos Move scripts cannot borrow structs but instead need to call `public` functions, we must update the framework to expose an `aptos_coin::destory_mint_capability_v2` which wraps the existing `public(friend) aptos_coin::destory_mint_capability`. The body of this function would be as follows: + +```rust +public fun destroy_mint_capability_from(account: signer, from: account) acquires Delegations { + system_addresses::assert_aptos_framework(aptos_framework); + let MintCapStore { mint_cap } = move_from(from); + coin::destroy_mint_cap(mint_cap); +} +``` + +Even though `delegate_mint_capability` does not assert that the `core_resource_account` still has the mint capability, when the capability is copied in the [`claim_mint_capability`](https://github.com/movementlabsxyz/aptos-core/blob/aa45303216be96ea30d361ab7eb2e95fb08c2dcb/aptos-move/framework/aptos-framework/sources/aptos_coin.move#L124) function, the borrow would fail. Thus, the resource account both can no longer use the mint capability and cannot delegate it to another account. + +### Script +The script to burn the mint capability would then be as follows: + +```rust +script { + use aptos_framework::aptos_governance; + use aptos_framework::aptos_coin; + + fun main(core_resources: &signer) { + + let core_signer = aptos_governance::get_signer_testnet_only(core_resources, @0x1); + + let framework_signer = &core_signer; + + // for core signer + aptos_coin::destroy_mint_capability_from(framework_signer, @0x1); + + // for other signers + aptos_governance::destroy_mint_capability_from(framework_signer, an_account); + aptos_governance::destroy_mint_capability_from(framework_signer, another_account); + + } +} +``` + +## Reversing the procedure +To reverse the procedure, a user would need to introduce a new version of the framework which exposes a `create_mint_capability` function. This function would mimic the initialization procedure and look as follows: + +```rust +public fun create_mint_capability_v2(account: signer, to: address) { + system_addresses::assert_aptos_framework(aptos_framework); + let mint_cap = coin::create_mint_cap(); + let mint_cap_store = MintCapStore { mint_cap }; + move_to(to, mint_cap_store); +} +``` + +In a subsequent script, the user would then call this function to recreate the mint capability and use it as needed. + +## Call sites +Call sites for the Aptos Coin mint were identified in the follow ways: + +1. **Relevant `.mint_cap` borrows:** we searched for borrows of the `AptosCoinCapabilites` struct that used the `mint_cap` member field. +2. **`aptos_coin` internals:** We searched for direct usages of the `mint` capability struct within the `aptos_coin` module (this is the only place that struct can be used directly) and subsequent call sites. + +### Relevant `.mint_cap` borrows +- **[`distribute_rewards`](https://github.com/movementlabsxyz/aptos-core/blob/aa45303216be96ea30d361ab7eb2e95fb08c2dcb/aptos-move/framework/aptos-framework/sources/stake.move#L1648):** is method used to issue rewards to validators from the reward aggregator pool. We assert that this is not called under the GGP feature flag in the block `epilogue` below. +- **[`mint_and_refund`](https://github.com/movementlabsxyz/aptos-core/blob/aa45303216be96ea30d361ab7eb2e95fb08c2dcb/aptos-move/framework/aptos-framework/sources/transaction_fee.move#L268):** is a method used to mint and refund transaction fees. We assert that this is not called under the GGP feature flag in the block `epilogue` below. + +### `aptos_coin` internals +We identified the following methods, all of which are used faucet or test branches of execution: + +1. [`claim_mint_capability`](https://github.com/search?q=repo%3Amovementlabsxyz%2Faptos-core%20claim_mint_capability&type=code) +2. [`delegate_mint_capability`](https://github.com/search?q=repo%3Amovementlabsxyz%2Faptos-core+delegate_mint_capability&type=code) + +## Usages and side effects + +### Prologue and epilogue + +#### Prologue +There are distinct prologues for executing blocks and transactions within blocks in the Aptos Framework. + +##### [`block_prologue`](https://github.com/movementlabsxyz/aptos-core/blob/aa45303216be96ea30d361ab7eb2e95fb08c2dcb/aptos-move/framework/aptos-framework/sources/block.move#L224) + +The [`block_prologue`](https://github.com/movementlabsxyz/aptos-core/blob/aa45303216be96ea30d361ab7eb2e95fb08c2dcb/aptos-move/framework/aptos-framework/sources/block.move#L224) and its DKG variant `block_prologue_ext` both primarily call to [`block_prologue_common`](https://github.com/movementlabsxyz/aptos-core/blob/aa45303216be96ea30d361ab7eb2e95fb08c2dcb/aptos-move/framework/aptos-framework/sources/block.move#L155). + +We did not identify any usages of `.mint_cap` on any of the `block_prologue_common` branches. + +##### Transaction `prologue` +All transactions now call one of the [`*_script_prologue`](https://github.com/movementlabsxyz/aptos-core/blob/aa45303216be96ea30d361ab7eb2e95fb08c2dcb/aptos-move/aptos-vm/src/aptos_vm.rs#L2244) functions, which in turn call [`prologue_common`](https://github.com/movementlabsxyz/aptos-core/blob/aa45303216be96ea30d361ab7eb2e95fb08c2dcb/aptos-move/framework/aptos-framework/sources/transaction_validation.move#L74). + +We did not identify any usages of `.mint_cap` on any of the `prologue_common` branches. + +#### Epilogue +There are distinct epilogues for executing blocks and transactions within blocks in the Aptos Framework. + +##### Block epilogue +The Block Epilogue does not map neatly to a single function. Importantly, it can trigger `reconfiguration::reconfigure`(https://github.com/movementlabsxyz/aptos-core/blob/aa45303216be96ea30d361ab7eb2e95fb08c2dcb/aptos-move/framework/aptos-framework/sources/reconfiguration.move#L107) which calls the following coin invoking methods: + +- `transaction_fee::process_collected_fees` which does not invoke any minting capabilities. +- `stake::on_new_epoch` which mints rewards for validators in `distribute_rewards`[https://github.com/movementlabsxyz/aptos-core/blob/aa45303216be96ea30d361ab7eb2e95fb08c2dcb/aptos-move/framework/aptos-framework/sources/stake.move#L1648]. + +To ensure the block epilogue does not `abort` on the `mint` branch, we would need to either set the reward rate to zero or add logic to skip the minting of rewards under a given feature flag. + +##### Transaction [`epilogue`](https://github.com/movementlabsxyz/aptos-core/blob/aa45303216be96ea30d361ab7eb2e95fb08c2dcb/aptos-move/framework/aptos-framework/sources/transaction_validation.move#L262) + +The transaction [`epilogue`](https://github.com/movementlabsxyz/aptos-core/blob/aa45303216be96ea30d361ab7eb2e95fb08c2dcb/aptos-move/framework/aptos-framework/sources/transaction_validation.move#L330) does make a call to `mint_and_refund` in the `mint` branch. However, this is [disabled](https://github.com/movementlabsxyz/aptos-core/blob/aa45303216be96ea30d361ab7eb2e95fb08c2dcb/aptos-move/framework/aptos-framework/sources/transaction_validation.move#L330) when the `ggp` feature flag is set. + +### Token transfers +- [`coin::transfer`](https://github.com/movementlabsxyz/aptos-core/blob/aa45303216be96ea30d361ab7eb2e95fb08c2dcb/aptos-move/framework/aptos-framework/sources/coin.move#L1151) does not invoke the mint capability (note the lack of an `acquires MintCapability` in the function signature and the lack of an argument requesting the capability). +- [`fa::transfer`](https://github.com/movementlabsxyz/aptos-core/blob/aa45303216be96ea30d361ab7eb2e95fb08c2dcb/aptos-move/framework/aptos-framework/sources/fungible_asset.move#L655) does not invoke the mint capability (note the lack of an `acquires MintCapability` in the function signature and the lack of an argument requesting the capability). + +### FA migration +We did not identify any usages of the mint capability on the original coin in the FA migration features, however, minting new representations coin balances is a core feature of the FA migration process. diff --git a/aptos-move/framework/move-stdlib/doc/features.md b/aptos-move/framework/move-stdlib/doc/features.md index d35bb996c55c8..03b8c23d86c3d 100644 --- a/aptos-move/framework/move-stdlib/doc/features.md +++ b/aptos-move/framework/move-stdlib/doc/features.md @@ -129,6 +129,14 @@ return true. - [Function `default_to_concurrent_fungible_balance_enabled`](#0x1_features_default_to_concurrent_fungible_balance_enabled) - [Function `get_abort_if_multisig_payload_mismatch_feature`](#0x1_features_get_abort_if_multisig_payload_mismatch_feature) - [Function `abort_if_multisig_payload_mismatch_enabled`](#0x1_features_abort_if_multisig_payload_mismatch_enabled) +- [Function `get_atomic_bridge_feature`](#0x1_features_get_atomic_bridge_feature) +- [Function `abort_atomic_bridge_enabled`](#0x1_features_abort_atomic_bridge_enabled) +- [Function `get_native_bridge_feature`](#0x1_features_get_native_bridge_feature) +- [Function `abort_native_bridge_enabled`](#0x1_features_abort_native_bridge_enabled) +- [Function `get_governed_gas_pool_feature`](#0x1_features_get_governed_gas_pool_feature) +- [Function `governed_gas_pool_enabled`](#0x1_features_governed_gas_pool_enabled) +- [Function `get_decommission_core_resources_feature`](#0x1_features_get_decommission_core_resources_feature) +- [Function `get_decommission_core_resources_enabled`](#0x1_features_get_decommission_core_resources_enabled) - [Function `change_feature_flags`](#0x1_features_change_feature_flags) - [Function `change_feature_flags_internal`](#0x1_features_change_feature_flags_internal) - [Function `change_feature_flags_for_next_epoch`](#0x1_features_change_feature_flags_for_next_epoch) @@ -269,6 +277,17 @@ Lifetime: transient + + +Whether the Atomic bridge is available +Lifetime: transient + + +
const ATOMIC_BRIDGE: u64 = 71;
+
+ + + Whether the new BLAKE2B-256 hash function native is enabled. @@ -410,6 +429,16 @@ Lifetime: transient + + +Lifetime: transient + + +
const DECOMMISSION_CORE_RESOURCES: u64 = 222;
+
+ + + Whether to default new Fungible Store to the concurrent variant. @@ -535,6 +564,18 @@ Lifetime: transient + + +Whether the Governed Gas Pool is used to capture gas fees + +Lifetime: permanent + + +
const GOVERNED_GAS_POOL: u64 = 73;
+
+ + + Deprecated by aptos_framework::jwk_consensus_config::JWKConsensusConfig. @@ -658,6 +699,17 @@ Lifetime: transient + + +Whether the Atomic bridge is available +Lifetime: transient + + +
const NATIVE_BRIDGE: u64 = 72;
+
+ + + Lifetime: transient @@ -3152,6 +3204,191 @@ Lifetime: transient + + + + +## Function `get_atomic_bridge_feature` + + + +
public fun get_atomic_bridge_feature(): u64
+
+ + + +
+Implementation + + +
public fun get_atomic_bridge_feature(): u64 { ATOMIC_BRIDGE }
+
+ + + +
+ + + +## Function `abort_atomic_bridge_enabled` + + + +
public fun abort_atomic_bridge_enabled(): bool
+
+ + + +
+Implementation + + +
public fun abort_atomic_bridge_enabled(): bool acquires Features {
+    is_enabled(ATOMIC_BRIDGE)
+}
+
+ + + +
+ + + +## Function `get_native_bridge_feature` + + + +
public fun get_native_bridge_feature(): u64
+
+ + + +
+Implementation + + +
public fun get_native_bridge_feature(): u64 { NATIVE_BRIDGE }
+
+ + + +
+ + + +## Function `abort_native_bridge_enabled` + + + +
public fun abort_native_bridge_enabled(): bool
+
+ + + +
+Implementation + + +
public fun abort_native_bridge_enabled(): bool acquires Features {
+    is_enabled(NATIVE_BRIDGE)
+}
+
+ + + +
+ + + +## Function `get_governed_gas_pool_feature` + +Whether the Governed Gas Pool is enabled. + + +
public fun get_governed_gas_pool_feature(): u64
+
+ + + +
+Implementation + + +
public fun get_governed_gas_pool_feature(): u64 { GOVERNED_GAS_POOL }
+
+ + + +
+ + + +## Function `governed_gas_pool_enabled` + + + +
public fun governed_gas_pool_enabled(): bool
+
+ + + +
+Implementation + + +
public fun governed_gas_pool_enabled(): bool acquires Features {
+    is_enabled(GOVERNED_GAS_POOL)
+}
+
+ + + +
+ + + +## Function `get_decommission_core_resources_feature` + + + +
public fun get_decommission_core_resources_feature(): u64
+
+ + + +
+Implementation + + +
public fun get_decommission_core_resources_feature(): u64 { DECOMMISSION_CORE_RESOURCES }
+
+ + + +
+ + + +## Function `get_decommission_core_resources_enabled` + + + +
public fun get_decommission_core_resources_enabled(): bool
+
+ + + +
+Implementation + + +
public fun get_decommission_core_resources_enabled(): bool acquires Features {
+    is_enabled(DECOMMISSION_CORE_RESOURCES)
+}
+
+ + +
@@ -3162,10 +3399,12 @@ Deprecated to prevent validator set changes during DKG. Genesis/tests should use change_feature_flags_internal() for feature vec initialization. +This can be used on testnet prior to successful DKG. + Governance proposals should use change_feature_flags_for_next_epoch() to enable/disable features. -
public fun change_feature_flags(_framework: &signer, _enable: vector<u64>, _disable: vector<u64>)
+
public fun change_feature_flags(framework: &signer, enable: vector<u64>, disable: vector<u64>)
 
@@ -3174,8 +3413,8 @@ Governance proposals should use change_feature_flags(_framework: &signer, _enable: vector<u64>, _disable: vector<u64>) { - abort (error::invalid_state(EAPI_DISABLED)) +
public fun change_feature_flags(framework: &signer, enable: vector<u64>, disable: vector<u64>) acquires Features {
+    change_feature_flags_internal(framework, enable, disable)
 }
 
diff --git a/aptos-move/framework/move-stdlib/sources/configs/features.move b/aptos-move/framework/move-stdlib/sources/configs/features.move index a1e55fc0653d0..c270ebd1cf7f0 100644 --- a/aptos-move/framework/move-stdlib/sources/configs/features.move +++ b/aptos-move/framework/move-stdlib/sources/configs/features.move @@ -489,7 +489,7 @@ module std::features { public fun get_coin_to_fungible_asset_migration_feature(): u64 { COIN_TO_FUNGIBLE_ASSET_MIGRATION } public fun coin_to_fungible_asset_migration_feature_enabled(): bool acquires Features { - is_enabled(COIN_TO_FUNGIBLE_ASSET_MIGRATION) + is_enabled(COIN_TO_FUNGIBLE_ASSET_MIGRATION) } const PRIMARY_APT_FUNGIBLE_STORE_AT_USER_ADDRESS: u64 = 61; @@ -582,6 +582,48 @@ module std::features { is_enabled(ABORT_IF_MULTISIG_PAYLOAD_MISMATCH) } + /// Whether the Atomic bridge is available + /// Lifetime: transient + const ATOMIC_BRIDGE: u64 = 71; + + public fun get_atomic_bridge_feature(): u64 { ATOMIC_BRIDGE } + + public fun abort_atomic_bridge_enabled(): bool acquires Features { + is_enabled(ATOMIC_BRIDGE) + } + + + /// Whether the Atomic bridge is available + /// Lifetime: transient + const NATIVE_BRIDGE: u64 = 72; + + public fun get_native_bridge_feature(): u64 { NATIVE_BRIDGE } + + public fun abort_native_bridge_enabled(): bool acquires Features { + is_enabled(NATIVE_BRIDGE) + } + + /// Whether the Governed Gas Pool is used to capture gas fees + /// + /// Lifetime: permanent + const GOVERNED_GAS_POOL: u64 = 73; + + /// Whether the Governed Gas Pool is enabled. + public fun get_governed_gas_pool_feature(): u64 { GOVERNED_GAS_POOL } + + public fun governed_gas_pool_enabled(): bool acquires Features { + is_enabled(GOVERNED_GAS_POOL) + } + + /// Lifetime: transient + const DECOMMISSION_CORE_RESOURCES: u64 = 222; + + public fun get_decommission_core_resources_feature(): u64 { DECOMMISSION_CORE_RESOURCES } + + public fun get_decommission_core_resources_enabled(): bool acquires Features { + is_enabled(DECOMMISSION_CORE_RESOURCES) + } + // ============================================================================================ // Feature Flag Implementation @@ -603,9 +645,11 @@ module std::features { /// /// Genesis/tests should use `change_feature_flags_internal()` for feature vec initialization. /// + /// This can be used on testnet prior to successful DKG. + /// /// Governance proposals should use `change_feature_flags_for_next_epoch()` to enable/disable features. - public fun change_feature_flags(_framework: &signer, _enable: vector, _disable: vector) { - abort (error::invalid_state(EAPI_DISABLED)) + public fun change_feature_flags(framework: &signer, enable: vector, disable: vector) acquires Features { + change_feature_flags_internal(framework, enable, disable) } /// Update feature flags directly. Only used in genesis/tests. diff --git a/aptos-move/move-examples/fungible_asset/managed_fungible_asset/sources/managed_fungible_asset.move b/aptos-move/move-examples/fungible_asset/managed_fungible_asset/sources/managed_fungible_asset.move index 316d022642496..03a389fc8af41 100644 --- a/aptos-move/move-examples/fungible_asset/managed_fungible_asset/sources/managed_fungible_asset.move +++ b/aptos-move/move-examples/fungible_asset/managed_fungible_asset/sources/managed_fungible_asset.move @@ -347,12 +347,12 @@ module example_addr::managed_fungible_asset { #[test_only] fun create_test_mfa(creator: &signer): Object { - let constructor_ref = &object::create_named_object(creator, b"APT"); + let constructor_ref = &object::create_named_object(creator, b"MOVE"); initialize( constructor_ref, 0, - utf8(b"Aptos Token"), /* name */ - utf8(b"APT"), /* symbol */ + utf8(b"Move Token"), /* name */ + utf8(b"MOVE"), /* symbol */ 8, /* decimals */ utf8(b"http://example.com/favicon.ico"), /* icon */ utf8(b"http://example.com"), /* project */ diff --git a/aptos-move/vm-genesis/Cargo.toml b/aptos-move/vm-genesis/Cargo.toml index 59927cdd791a7..3434295311c3a 100644 --- a/aptos-move/vm-genesis/Cargo.toml +++ b/aptos-move/vm-genesis/Cargo.toml @@ -17,7 +17,7 @@ aptos-cached-packages = { workspace = true } aptos-crypto = { workspace = true } aptos-framework = { workspace = true } aptos-gas-schedule = { workspace = true } -aptos-types = { workspace = true } +aptos-types = { workspace = true, features = ["testing"] } aptos-vm = { workspace = true } bcs = { workspace = true } bytes = { workspace = true } diff --git a/aptos-move/vm-genesis/src/lib.rs b/aptos-move/vm-genesis/src/lib.rs index bb1333021ca07..a9c984b50185a 100644 --- a/aptos-move/vm-genesis/src/lib.rs +++ b/aptos-move/vm-genesis/src/lib.rs @@ -71,6 +71,7 @@ const RANDOMNESS_CONFIG_MODULE_NAME: &str = "randomness_config"; const RANDOMNESS_MODULE_NAME: &str = "randomness"; const RECONFIGURATION_STATE_MODULE_NAME: &str = "reconfiguration_state"; +#[allow(dead_code)] const NUM_SECONDS_PER_YEAR: u64 = 365 * 24 * 60 * 60; const MICRO_SECONDS_PER_SECOND: u64 = 1_000_000; const APTOS_COINS_BASE_WITH_DECIMALS: u64 = u64::pow(10, 8); @@ -282,6 +283,17 @@ pub fn encode_genesis_change_set( initialize_jwk_consensus_config(&mut session, &jwk_consensus_config); initialize_jwks_resources(&mut session); initialize_keyless_accounts(&mut session, chain_id); + + // initialize governed gas pool only if feature is enabled + match &genesis_config.initial_features_override { + Some(features) => { + if features.is_enabled(FeatureFlag::GOVERNED_GAS_POOL) { + initialize_governed_gas_pool(&mut session); + } + }, + None => {}, + } + set_genesis_end(&mut session); // Reconfiguration should happen after all on-chain invocations. @@ -338,8 +350,8 @@ fn validate_genesis_config(genesis_config: &GenesisConfiguration) { "Recurring lockup duration must be at least as long as epoch duration" ); assert!( - genesis_config.rewards_apy_percentage > 0 && genesis_config.rewards_apy_percentage < 100, - "Rewards APY must be > 0% and < 100%" + genesis_config.rewards_apy_percentage < 100, + "Rewards APY must be >= 0% and < 100%" ); assert!( genesis_config.voting_duration_secs > 0, @@ -384,6 +396,20 @@ fn exec_function( }); } +// Calculates the per-epoch rewards rate, represented as 2 separate ints (numerator and +// denominator). +fn rewards_rate(genesis_config: &GenesisConfiguration) -> (u64, u64) { + const REWARDS_RATE_DENOMINATOR: u64 = 1_000_000_000; + // Multiplication before division to minimize rounding errors due to integer division. + // To convert the percentage to the fractional value, divide by 100, which can be folded + // into the constant denominator scaling factor. + let rewards_rate_numerator = genesis_config.rewards_apy_percentage + * (REWARDS_RATE_DENOMINATOR / 100) + * genesis_config.epoch_duration_secs + / NUM_SECONDS_PER_YEAR; + (rewards_rate_numerator, REWARDS_RATE_DENOMINATOR) +} + fn initialize( session: &mut SessionExt, chain_id: ChainId, @@ -401,14 +427,7 @@ fn initialize( let execution_config_bytes = bcs::to_bytes(execution_config).expect("Failure serializing genesis consensus config"); - // Calculate the per-epoch rewards rate, represented as 2 separate ints (numerator and - // denominator). - let rewards_rate_denominator = 1_000_000_000; - let num_epochs_in_a_year = NUM_SECONDS_PER_YEAR / genesis_config.epoch_duration_secs; - // Multiplication before division to minimize rounding errors due to integer division. - let rewards_rate_numerator = (genesis_config.rewards_apy_percentage * rewards_rate_denominator - / 100) - / num_epochs_in_a_year; + let (rewards_rate_numerator, rewards_rate_denominator) = rewards_rate(genesis_config); // Block timestamps are in microseconds and epoch_interval is used to check if a block timestamp // has crossed into a new epoch. So epoch_interval also needs to be in micro seconds. @@ -466,6 +485,19 @@ fn initialize_aptos_coin(session: &mut SessionExt) { ); } +fn initialize_governed_gas_pool(session: &mut SessionExt) { + exec_function( + session, + GENESIS_MODULE_NAME, + "initialize_governed_gas_pool", + vec![], + serialize_values(&vec![ + MoveValue::Signer(CORE_CODE_ADDRESS), + MoveValue::Vector(vec![MoveValue::U8(22)]), + ]), + ); +} + fn initialize_config_buffer(session: &mut SessionExt) { exec_function( session, @@ -763,13 +795,19 @@ fn publish_package(session: &mut SessionExt, pack: &ReleasePackage) { }); // Call the initialize function with the metadata. - exec_function(session, CODE_MODULE_NAME, "initialize", vec![], vec![ - MoveValue::Signer(CORE_CODE_ADDRESS) - .simple_serialize() - .unwrap(), - MoveValue::Signer(addr).simple_serialize().unwrap(), - bcs::to_bytes(pack.package_metadata()).unwrap(), - ]); + exec_function( + session, + CODE_MODULE_NAME, + "initialize", + vec![], + vec![ + MoveValue::Signer(CORE_CODE_ADDRESS) + .simple_serialize() + .unwrap(), + MoveValue::Signer(addr).simple_serialize().unwrap(), + bcs::to_bytes(pack.package_metadata()).unwrap(), + ], + ); } /// Trigger a reconfiguration. This emits an event that will be passed along to the storage layer. @@ -1047,266 +1085,343 @@ pub struct ValidatorWithCommissionRate { pub join_during_genesis: bool, } -#[test] -pub fn test_genesis_module_publishing() { - // create a state view for move_vm - let mut state_view = GenesisStateView::new(); - for (module_bytes, module) in - aptos_cached_packages::head_release_bundle().code_and_compiled_modules() - { - state_view.add_module(&module.self_id(), module_bytes); - } +#[cfg(test)] +mod tests { + use super::*; + + #[test] + pub fn test_genesis_module_publishing() { + // create a state view for move_vm + let mut state_view = GenesisStateView::new(); + for (module_bytes, module) in + aptos_cached_packages::head_release_bundle().code_and_compiled_modules() + { + state_view.add_module(&module.self_id(), module_bytes); + } - let vm = GenesisMoveVM::new(ChainId::test()); - let resolver = state_view.as_move_resolver(); + let vm = GenesisMoveVM::new(ChainId::test()); + let resolver = state_view.as_move_resolver(); - let mut session = vm.new_genesis_session(&resolver, HashValue::zero()); - publish_framework(&mut session, aptos_cached_packages::head_release_bundle()); -} + let mut session = vm.new_genesis_session(&resolver, HashValue::zero()); + publish_framework(&mut session, aptos_cached_packages::head_release_bundle()); + } -#[test] -pub fn test_mainnet_end_to_end() { - use aptos_types::{ - account_address, - on_chain_config::ValidatorSet, - state_store::state_key::StateKey, - write_set::{TransactionWrite, WriteSet}, - }; + #[test] + pub fn test_mainnet_end_to_end() { + use aptos_types::{ + account_address, + on_chain_config::ValidatorSet, + state_store::state_key::StateKey, + write_set::{TransactionWrite, WriteSet}, + }; - let balance = 10_000_000 * APTOS_COINS_BASE_WITH_DECIMALS; - let non_validator_balance = 10 * APTOS_COINS_BASE_WITH_DECIMALS; - - // currently just test that all functions have the right interface - let account44 = AccountAddress::from_hex_literal("0x44").unwrap(); - let account45 = AccountAddress::from_hex_literal("0x45").unwrap(); - let account46 = AccountAddress::from_hex_literal("0x46").unwrap(); - let account47 = AccountAddress::from_hex_literal("0x47").unwrap(); - let account48 = AccountAddress::from_hex_literal("0x48").unwrap(); - let account49 = AccountAddress::from_hex_literal("0x49").unwrap(); - let operator0 = AccountAddress::from_hex_literal("0x100").unwrap(); - let operator1 = AccountAddress::from_hex_literal("0x101").unwrap(); - let operator2 = AccountAddress::from_hex_literal("0x102").unwrap(); - let operator3 = AccountAddress::from_hex_literal("0x103").unwrap(); - let operator4 = AccountAddress::from_hex_literal("0x104").unwrap(); - let operator5 = AccountAddress::from_hex_literal("0x105").unwrap(); - let voter0 = AccountAddress::from_hex_literal("0x200").unwrap(); - let voter1 = AccountAddress::from_hex_literal("0x201").unwrap(); - let voter2 = AccountAddress::from_hex_literal("0x202").unwrap(); - let voter3 = AccountAddress::from_hex_literal("0x203").unwrap(); - let admin0 = AccountAddress::from_hex_literal("0x300").unwrap(); - let admin1 = AccountAddress::from_hex_literal("0x301").unwrap(); - let admin2 = AccountAddress::from_hex_literal("0x302").unwrap(); - - let accounts = vec![ - AccountBalance { - account_address: account44, - balance, - }, - AccountBalance { - account_address: account45, - balance: balance * 3, // Three times the balance so it can host 2 operators. - }, - AccountBalance { - account_address: account46, - balance, - }, - AccountBalance { - account_address: account47, - balance, - }, - AccountBalance { - account_address: account48, - balance, - }, - AccountBalance { - account_address: account49, - balance, - }, - AccountBalance { - account_address: admin0, - balance: non_validator_balance, - }, - AccountBalance { - account_address: admin1, - balance: non_validator_balance, - }, - AccountBalance { - account_address: admin2, - balance: non_validator_balance, - }, - AccountBalance { - account_address: operator0, - balance: non_validator_balance, - }, - AccountBalance { - account_address: operator1, - balance: non_validator_balance, - }, - AccountBalance { - account_address: operator2, - balance: non_validator_balance, - }, - AccountBalance { - account_address: operator3, - balance: non_validator_balance, - }, - AccountBalance { - account_address: operator4, - balance: non_validator_balance, - }, - AccountBalance { - account_address: operator5, - balance: non_validator_balance, - }, - AccountBalance { - account_address: voter0, - balance: non_validator_balance, - }, - AccountBalance { - account_address: voter1, - balance: non_validator_balance, - }, - AccountBalance { - account_address: voter2, - balance: non_validator_balance, - }, - AccountBalance { - account_address: voter3, - balance: non_validator_balance, - }, - ]; - - let test_validators = TestValidator::new_test_set(Some(6), Some(balance * 9 / 10)); - let mut employee_validator_1 = test_validators[0].data.clone(); - employee_validator_1.owner_address = admin0; - employee_validator_1.operator_address = operator0; - employee_validator_1.voter_address = voter0; - let mut employee_validator_2 = test_validators[1].data.clone(); - employee_validator_2.owner_address = admin1; - employee_validator_2.operator_address = operator1; - employee_validator_2.voter_address = voter1; - let mut zero_commission_validator = test_validators[2].data.clone(); - zero_commission_validator.owner_address = account44; - zero_commission_validator.operator_address = operator2; - zero_commission_validator.voter_address = voter2; - let mut same_owner_validator_1 = test_validators[3].data.clone(); - same_owner_validator_1.owner_address = account45; - same_owner_validator_1.operator_address = operator3; - same_owner_validator_1.voter_address = voter3; - let mut same_owner_validator_2 = test_validators[4].data.clone(); - same_owner_validator_2.owner_address = account45; - same_owner_validator_2.operator_address = operator4; - same_owner_validator_2.voter_address = voter3; - let mut same_owner_validator_3 = test_validators[5].data.clone(); - same_owner_validator_3.owner_address = account45; - same_owner_validator_3.operator_address = operator5; - same_owner_validator_3.voter_address = voter3; - - let employees = vec![ - EmployeePool { - accounts: vec![account46, account47], - validator: ValidatorWithCommissionRate { - validator: employee_validator_1, + let balance = 10_000_000 * APTOS_COINS_BASE_WITH_DECIMALS; + let non_validator_balance = 10 * APTOS_COINS_BASE_WITH_DECIMALS; + + // currently just test that all functions have the right interface + let account44 = AccountAddress::from_hex_literal("0x44").unwrap(); + let account45 = AccountAddress::from_hex_literal("0x45").unwrap(); + let account46 = AccountAddress::from_hex_literal("0x46").unwrap(); + let account47 = AccountAddress::from_hex_literal("0x47").unwrap(); + let account48 = AccountAddress::from_hex_literal("0x48").unwrap(); + let account49 = AccountAddress::from_hex_literal("0x49").unwrap(); + let operator0 = AccountAddress::from_hex_literal("0x100").unwrap(); + let operator1 = AccountAddress::from_hex_literal("0x101").unwrap(); + let operator2 = AccountAddress::from_hex_literal("0x102").unwrap(); + let operator3 = AccountAddress::from_hex_literal("0x103").unwrap(); + let operator4 = AccountAddress::from_hex_literal("0x104").unwrap(); + let operator5 = AccountAddress::from_hex_literal("0x105").unwrap(); + let voter0 = AccountAddress::from_hex_literal("0x200").unwrap(); + let voter1 = AccountAddress::from_hex_literal("0x201").unwrap(); + let voter2 = AccountAddress::from_hex_literal("0x202").unwrap(); + let voter3 = AccountAddress::from_hex_literal("0x203").unwrap(); + let admin0 = AccountAddress::from_hex_literal("0x300").unwrap(); + let admin1 = AccountAddress::from_hex_literal("0x301").unwrap(); + let admin2 = AccountAddress::from_hex_literal("0x302").unwrap(); + + let accounts = vec![ + AccountBalance { + account_address: account44, + balance, + }, + AccountBalance { + account_address: account45, + balance: balance * 3, // Three times the balance so it can host 2 operators. + }, + AccountBalance { + account_address: account46, + balance, + }, + AccountBalance { + account_address: account47, + balance, + }, + AccountBalance { + account_address: account48, + balance, + }, + AccountBalance { + account_address: account49, + balance, + }, + AccountBalance { + account_address: admin0, + balance: non_validator_balance, + }, + AccountBalance { + account_address: admin1, + balance: non_validator_balance, + }, + AccountBalance { + account_address: admin2, + balance: non_validator_balance, + }, + AccountBalance { + account_address: operator0, + balance: non_validator_balance, + }, + AccountBalance { + account_address: operator1, + balance: non_validator_balance, + }, + AccountBalance { + account_address: operator2, + balance: non_validator_balance, + }, + AccountBalance { + account_address: operator3, + balance: non_validator_balance, + }, + AccountBalance { + account_address: operator4, + balance: non_validator_balance, + }, + AccountBalance { + account_address: operator5, + balance: non_validator_balance, + }, + AccountBalance { + account_address: voter0, + balance: non_validator_balance, + }, + AccountBalance { + account_address: voter1, + balance: non_validator_balance, + }, + AccountBalance { + account_address: voter2, + balance: non_validator_balance, + }, + AccountBalance { + account_address: voter3, + balance: non_validator_balance, + }, + ]; + + let test_validators = TestValidator::new_test_set(Some(6), Some(balance * 9 / 10)); + let mut employee_validator_1 = test_validators[0].data.clone(); + employee_validator_1.owner_address = admin0; + employee_validator_1.operator_address = operator0; + employee_validator_1.voter_address = voter0; + let mut employee_validator_2 = test_validators[1].data.clone(); + employee_validator_2.owner_address = admin1; + employee_validator_2.operator_address = operator1; + employee_validator_2.voter_address = voter1; + let mut zero_commission_validator = test_validators[2].data.clone(); + zero_commission_validator.owner_address = account44; + zero_commission_validator.operator_address = operator2; + zero_commission_validator.voter_address = voter2; + let mut same_owner_validator_1 = test_validators[3].data.clone(); + same_owner_validator_1.owner_address = account45; + same_owner_validator_1.operator_address = operator3; + same_owner_validator_1.voter_address = voter3; + let mut same_owner_validator_2 = test_validators[4].data.clone(); + same_owner_validator_2.owner_address = account45; + same_owner_validator_2.operator_address = operator4; + same_owner_validator_2.voter_address = voter3; + let mut same_owner_validator_3 = test_validators[5].data.clone(); + same_owner_validator_3.owner_address = account45; + same_owner_validator_3.operator_address = operator5; + same_owner_validator_3.voter_address = voter3; + + let employees = vec![ + EmployeePool { + accounts: vec![account46, account47], + validator: ValidatorWithCommissionRate { + validator: employee_validator_1, + validator_commission_percentage: 10, + join_during_genesis: true, + }, + vesting_schedule_numerators: vec![3, 3, 3, 3, 1], + vesting_schedule_denominator: 48, + beneficiary_resetter: AccountAddress::ZERO, + }, + EmployeePool { + accounts: vec![account48, account49], + validator: ValidatorWithCommissionRate { + validator: employee_validator_2, + validator_commission_percentage: 10, + join_during_genesis: false, + }, + vesting_schedule_numerators: vec![3, 3, 3, 3, 1], + vesting_schedule_denominator: 48, + beneficiary_resetter: account44, + }, + ]; + + let validators = vec![ + ValidatorWithCommissionRate { + validator: same_owner_validator_1, validator_commission_percentage: 10, join_during_genesis: true, }, - vesting_schedule_numerators: vec![3, 3, 3, 3, 1], - vesting_schedule_denominator: 48, - beneficiary_resetter: AccountAddress::ZERO, - }, - EmployeePool { - accounts: vec![account48, account49], - validator: ValidatorWithCommissionRate { - validator: employee_validator_2, + ValidatorWithCommissionRate { + validator: same_owner_validator_2, + validator_commission_percentage: 15, + join_during_genesis: true, + }, + ValidatorWithCommissionRate { + validator: same_owner_validator_3, validator_commission_percentage: 10, join_during_genesis: false, }, - vesting_schedule_numerators: vec![3, 3, 3, 3, 1], - vesting_schedule_denominator: 48, - beneficiary_resetter: account44, - }, - ]; - - let validators = vec![ - ValidatorWithCommissionRate { - validator: same_owner_validator_1, - validator_commission_percentage: 10, - join_during_genesis: true, - }, - ValidatorWithCommissionRate { - validator: same_owner_validator_2, - validator_commission_percentage: 15, - join_during_genesis: true, - }, - ValidatorWithCommissionRate { - validator: same_owner_validator_3, - validator_commission_percentage: 10, - join_during_genesis: false, - }, - ValidatorWithCommissionRate { - validator: zero_commission_validator, - validator_commission_percentage: 0, - join_during_genesis: true, - }, - ]; - - let transaction = encode_aptos_mainnet_genesis_transaction( - &accounts, - &employees, - &validators, - aptos_cached_packages::head_release_bundle(), - ChainId::mainnet(), - &mainnet_genesis_config(), - ); + ValidatorWithCommissionRate { + validator: zero_commission_validator, + validator_commission_percentage: 0, + join_during_genesis: true, + }, + ]; + + let transaction = encode_aptos_mainnet_genesis_transaction( + &accounts, + &employees, + &validators, + aptos_cached_packages::head_release_bundle(), + ChainId::mainnet(), + &mainnet_genesis_config(), + ); - let direct_writeset = if let Transaction::GenesisTransaction(direct_writeset) = transaction { - direct_writeset - } else { - panic!("Invalid GenesisTransaction"); - }; + let direct_writeset = if let Transaction::GenesisTransaction(direct_writeset) = transaction + { + direct_writeset + } else { + panic!("Invalid GenesisTransaction"); + }; - let changeset = if let WriteSetPayload::Direct(changeset) = direct_writeset { - changeset - } else { - panic!("Invalid WriteSetPayload"); - }; + let changeset = if let WriteSetPayload::Direct(changeset) = direct_writeset { + changeset + } else { + panic!("Invalid WriteSetPayload"); + }; - let WriteSet::V0(writeset) = changeset.write_set(); + let WriteSet::V0(writeset) = changeset.write_set(); + + let state_key = StateKey::on_chain_config::().unwrap(); + let bytes = writeset + .get(&state_key) + .unwrap() + .extract_raw_bytes() + .unwrap(); + let validator_set: ValidatorSet = bcs::from_bytes(&bytes).unwrap(); + let validator_set_addresses = validator_set + .active_validators + .iter() + .map(|v| v.account_address) + .collect::>(); + + let zero_commission_validator_pool_address = + account_address::default_stake_pool_address(account44, operator2); + let same_owner_validator_1_pool_address = + account_address::default_stake_pool_address(account45, operator3); + let same_owner_validator_2_pool_address = + account_address::default_stake_pool_address(account45, operator4); + let same_owner_validator_3_pool_address = + account_address::default_stake_pool_address(account45, operator5); + let employee_1_pool_address = + account_address::create_vesting_pool_address(admin0, operator0, 0, &[]); + let employee_2_pool_address = + account_address::create_vesting_pool_address(admin1, operator1, 0, &[]); + + assert!(validator_set_addresses.contains(&zero_commission_validator_pool_address)); + assert!(validator_set_addresses.contains(&employee_1_pool_address)); + // This validator should not be in the genesis validator set as they specified + // join_during_genesis = false. + assert!(!validator_set_addresses.contains(&employee_2_pool_address)); + assert!(validator_set_addresses.contains(&same_owner_validator_1_pool_address)); + assert!(validator_set_addresses.contains(&same_owner_validator_2_pool_address)); + // This validator should not be in the genesis validator set as they specified + // join_during_genesis = false. + assert!(!validator_set_addresses.contains(&same_owner_validator_3_pool_address)); + } - let state_key = StateKey::on_chain_config::().unwrap(); - let bytes = writeset - .get(&state_key) - .unwrap() - .extract_raw_bytes() - .unwrap(); - let validator_set: ValidatorSet = bcs::from_bytes(&bytes).unwrap(); - let validator_set_addresses = validator_set - .active_validators - .iter() - .map(|v| v.account_address) - .collect::>(); + #[test] + fn test_zero_rewards_apy_percentage() { + let test_validators = TestValidator::new_test_set(Some(1), Some(100_000_000)); + let validators: Vec = test_validators.into_iter().map(|t| t.data).collect(); + + let _genesis = encode_genesis_change_set( + &GENESIS_KEYPAIR.1, + &validators, + aptos_cached_packages::head_release_bundle(), + ChainId::test(), + &GenesisConfiguration { + allow_new_validators: true, + epoch_duration_secs: 3600, + is_test: true, + min_stake: 0, + min_voting_threshold: 0, + // 1M APTOS coins (with 8 decimals). + max_stake: 100_000_000_000_000, + recurring_lockup_duration_secs: 7200, + required_proposer_stake: 0, + rewards_apy_percentage: 0, + voting_duration_secs: 3600, + voting_power_increase_limit: 50, + employee_vesting_start: 1663456089, + employee_vesting_period_duration: 5 * 60, // 5 minutes + initial_features_override: None, + randomness_config_override: None, + jwk_consensus_config_override: None, + }, + &OnChainConsensusConfig::default_for_genesis(), + &OnChainExecutionConfig::default_for_genesis(), + &default_gas_schedule(), + ); + } - let zero_commission_validator_pool_address = - account_address::default_stake_pool_address(account44, operator2); - let same_owner_validator_1_pool_address = - account_address::default_stake_pool_address(account45, operator3); - let same_owner_validator_2_pool_address = - account_address::default_stake_pool_address(account45, operator4); - let same_owner_validator_3_pool_address = - account_address::default_stake_pool_address(account45, operator5); - let employee_1_pool_address = - account_address::create_vesting_pool_address(admin0, operator0, 0, &[]); - let employee_2_pool_address = - account_address::create_vesting_pool_address(admin1, operator1, 0, &[]); - - assert!(validator_set_addresses.contains(&zero_commission_validator_pool_address)); - assert!(validator_set_addresses.contains(&employee_1_pool_address)); - // This validator should not be in the genesis validator set as they specified - // join_during_genesis = false. - assert!(!validator_set_addresses.contains(&employee_2_pool_address)); - assert!(validator_set_addresses.contains(&same_owner_validator_1_pool_address)); - assert!(validator_set_addresses.contains(&same_owner_validator_2_pool_address)); - // This validator should not be in the genesis validator set as they specified - // join_during_genesis = false. - assert!(!validator_set_addresses.contains(&same_owner_validator_3_pool_address)); + #[test] + fn test_pathological_epoch_duration() { + let epoch_duration_secs: u64 = 60 * 60 * 24 * 1024 * 128; + let test_validators = TestValidator::new_test_set(Some(1), Some(100_000_000)); + let validators: Vec = test_validators.into_iter().map(|t| t.data).collect(); + + let _genesis = encode_genesis_change_set( + &GENESIS_KEYPAIR.1, + &validators, + aptos_cached_packages::head_release_bundle(), + ChainId::test(), + &GenesisConfiguration { + allow_new_validators: true, + epoch_duration_secs, + is_test: true, + min_stake: 0, + min_voting_threshold: 0, + // 1M APTOS coins (with 8 decimals). + max_stake: 100_000_000_000_000, + recurring_lockup_duration_secs: epoch_duration_secs * 2, + required_proposer_stake: 0, + rewards_apy_percentage: 0, // nonzero will crash in MoveVM + voting_duration_secs: epoch_duration_secs, + voting_power_increase_limit: 50, + employee_vesting_start: 1663456089, + employee_vesting_period_duration: 5 * 60, // 5 minutes + initial_features_override: None, + randomness_config_override: None, + jwk_consensus_config_override: None, + }, + &OnChainConsensusConfig::default_for_genesis(), + &OnChainExecutionConfig::default_for_genesis(), + &default_gas_schedule(), + ); + } } diff --git a/aptos-node/src/main.rs b/aptos-node/src/main.rs deleted file mode 100644 index a309501758097..0000000000000 --- a/aptos-node/src/main.rs +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright Š Aptos Foundation -// Parts of the project are originally copyright Š Meta Platforms, Inc. -// SPDX-License-Identifier: Apache-2.0 - -#![forbid(unsafe_code)] - -use aptos_node::{utils::ERROR_MSG_BAD_FEATURE_FLAGS, AptosNodeArgs}; -use clap::Parser; - -#[cfg(unix)] -#[global_allocator] -static ALLOC: jemallocator::Jemalloc = jemallocator::Jemalloc; - -fn main() { - // Check that we are not including any Move test natives - aptos_vm::natives::assert_no_test_natives(ERROR_MSG_BAD_FEATURE_FLAGS); - - // Start the node - AptosNodeArgs::parse().run() -} diff --git a/consensus/src/counters.rs b/consensus/src/counters.rs index b08f89c579d51..12cb0c515bc22 100644 --- a/consensus/src/counters.rs +++ b/consensus/src/counters.rs @@ -515,7 +515,7 @@ pub static CONSENSUS_LAST_TIMEOUT_VOTE_ROUND: Lazy = Lazy::new(|| { pub static CURRENT_ROUND: Lazy = Lazy::new(|| { register_int_gauge!( "aptos_consensus_current_round", - "This counter is set to the last round reported by the local round_state." + "Current consensus round" ) .unwrap() }); @@ -546,11 +546,14 @@ pub static TIMEOUT_COUNT: Lazy = Lazy::new(|| { register_int_counter!("aptos_consensus_timeout_count", "Count the number of timeouts a node experienced since last restart (close to 0 in happy path).").unwrap() }); -/// The timeout of the current round. -pub static ROUND_TIMEOUT_MS: Lazy = Lazy::new(|| { - register_int_gauge!( - "aptos_consensus_round_timeout_s", - "The timeout of the current round." +/// Round timeout in milliseconds +pub static ROUND_TIMEOUT_MS: Lazy = Lazy::new(|| { + register_histogram!( + "aptos_consensus_round_timeout_ms", + "Round timeout in milliseconds", + vec![ + 100.0, 200.0, 500.0, 1000.0, 2000.0, 5000.0, 10000.0, 20000.0, 50000.0, 100000.0 + ] ) .unwrap() }); @@ -638,8 +641,8 @@ pub static ORDER_VOTE_BROADCASTED: Lazy = Lazy::new(|| { /// Counts the number of times the sync info message has been set since last restart. pub static SYNC_INFO_MSGS_SENT_COUNT: Lazy = Lazy::new(|| { register_int_counter!( - "aptos_consensus_sync_info_msg_sent_count", - "Counts the number of times the sync info message has been set since last restart." + "aptos_consensus_sync_info_msgs_sent_count", + "Number of sync info messages sent" ) .unwrap() }); @@ -792,6 +795,16 @@ pub static WAIT_DURATION_S: Lazy = Lazy::new(|| { CONSENSUS_WAIT_DURATION_BUCKETS.to_vec()).unwrap()) }); +/// Wait duration in milliseconds +pub static WAIT_DURATION_MS: Lazy = Lazy::new(|| { + register_histogram!( + "aptos_consensus_wait_duration_ms", + "Wait duration in milliseconds", + exponential_buckets(/*start=*/ 1.0, /*factor=*/ 2.0, /*count=*/ 30).unwrap(), + ) + .unwrap() +}); + const VERIFY_BUCKETS: &[f64] = &[ 0.0001, 0.00025, 0.0005, 0.001, 0.0015, 0.002, 0.0025, 0.003, 0.0035, 0.004, 0.005, 0.006, 0.007, 0.008, 0.009, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1.0, diff --git a/consensus/src/liveness/proposal_generator.rs b/consensus/src/liveness/proposal_generator.rs index c412278506712..2ff6b058a99de 100644 --- a/consensus/src/liveness/proposal_generator.rs +++ b/consensus/src/liveness/proposal_generator.rs @@ -421,7 +421,7 @@ impl ProposalGenerator { timestamp: Duration, round: Round, ) -> (u64, u64, Option, Duration) { - let mut values_max_block_txns = vec![self.max_block_txns]; + let mut values_max_block_txns = vec![self.max_block_unique_txns]; let mut values_max_block_bytes = vec![self.max_block_bytes]; let mut values_proposal_delay = vec![Duration::ZERO]; let mut values_max_txns_from_block_to_execute = vec![]; diff --git a/consensus/src/quorum_store/utils.rs b/consensus/src/quorum_store/utils.rs index 433dd9846d89f..23a48a7c78729 100644 --- a/consensus/src/quorum_store/utils.rs +++ b/consensus/src/quorum_store/utils.rs @@ -460,6 +460,9 @@ impl ProofQueue { byte_size = cur_bytes, block_total_txns = cur_all_txns, block_unique_txns = cur_unique_txns, + max_txns = max_txns, + max_unique_txns = max_unique_txns, + max_bytes = max_bytes, batch_count = ret.len(), full = full, return_non_full = return_non_full, diff --git a/consensus/src/round_manager.rs b/consensus/src/round_manager.rs index 2a4dd84a4a96e..461abf58d6dfa 100644 --- a/consensus/src/round_manager.rs +++ b/consensus/src/round_manager.rs @@ -333,7 +333,7 @@ impl RoundManager { new_round_event: NewRoundEvent, ) -> anyhow::Result<()> { counters::CURRENT_ROUND.set(new_round_event.round as i64); - counters::ROUND_TIMEOUT_MS.set(new_round_event.timeout.as_millis() as i64); + counters::ROUND_TIMEOUT_MS.observe(new_round_event.timeout.as_millis() as f64); match new_round_event.reason { NewRoundReason::QCReady => { counters::QC_ROUNDS_COUNT.inc(); diff --git a/crates/aptos-dkg/Cargo.toml b/crates/aptos-dkg/Cargo.toml index 67f8660a49e3c..dd70a9528fe7b 100644 --- a/crates/aptos-dkg/Cargo.toml +++ b/crates/aptos-dkg/Cargo.toml @@ -8,7 +8,6 @@ edition = "2021" anyhow = { workspace = true } aptos-crypto = { workspace = true } aptos-crypto-derive = { workspace = true } -aptos-runtimes = { workspace = true } bcs = { workspace = true } blst = { workspace = true } blstrs = { workspace = true } @@ -32,6 +31,7 @@ sha3 = { workspace = true } static_assertions = { workspace = true } [dev-dependencies] +aptos-runtimes = { workspace = true } num_cpus = { workspace = true } [features] diff --git a/crates/aptos-faucet/core/src/server/run.rs b/crates/aptos-faucet/core/src/server/run.rs index cffc2c179c664..2a20e791fa503 100644 --- a/crates/aptos-faucet/core/src/server/run.rs +++ b/crates/aptos-faucet/core/src/server/run.rs @@ -323,7 +323,7 @@ impl Run { #[derive(Clone, Debug, Parser)] pub struct RunSimple { #[clap(flatten)] - api_connection_config: ApiConnectionConfig, + pub api_connection_config: ApiConnectionConfig, /// What address to listen on. #[clap(long, default_value = "0.0.0.0")] diff --git a/crates/aptos-inspection-service/src/server/custom_metrics.rs b/crates/aptos-inspection-service/src/server/custom_metrics.rs new file mode 100644 index 0000000000000..5a07e750835ff --- /dev/null +++ b/crates/aptos-inspection-service/src/server/custom_metrics.rs @@ -0,0 +1,72 @@ +use crate::server::utils::{get_all_metrics, CONTENT_TYPE_TEXT}; +use hyper::{Body, StatusCode}; +use prometheus::TextEncoder; + +/// Handles a request for consensus metrics +pub fn handle_consensus_metrics_request() -> (StatusCode, Body, String) { + let all_metrics = get_all_metrics(); + + // Filter for consensus metrics + let consensus_metrics: Vec = all_metrics + .iter() + .filter_map(|(key, value)| { + if key.starts_with("aptos_consensus") { + Some(format!("{} {}", key, value)) + } else { + None + } + }) + .collect(); + + ( + StatusCode::OK, + Body::from(consensus_metrics.join("\n")), + CONTENT_TYPE_TEXT.into(), + ) +} + +/// Handles a request for mempool metrics +pub fn handle_mempool_metrics_request() -> (StatusCode, Body, String) { + let all_metrics = get_all_metrics(); + + // Filter for mempool metrics + let mempool_metrics: Vec = all_metrics + .iter() + .filter_map(|(key, value)| { + if key.starts_with("aptos_mempool") || key.starts_with("aptos_core_mempool") { + Some(format!("{} {}", key, value)) + } else { + None + } + }) + .collect(); + + ( + StatusCode::OK, + Body::from(mempool_metrics.join("\n")), + CONTENT_TYPE_TEXT.into(), + ) +} + +/// Handles a request for storage metrics +pub fn handle_storage_metrics_request() -> (StatusCode, Body, String) { + let all_metrics = get_all_metrics(); + + // Filter for storage metrics + let storage_metrics: Vec = all_metrics + .iter() + .filter_map(|(key, value)| { + if key.starts_with("aptos_storage") || key.starts_with("aptos_schemadb") { + Some(format!("{} {}", key, value)) + } else { + None + } + }) + .collect(); + + ( + StatusCode::OK, + Body::from(storage_metrics.join("\n")), + CONTENT_TYPE_TEXT.into(), + ) +} \ No newline at end of file diff --git a/crates/aptos-inspection-service/src/server/index.rs b/crates/aptos-inspection-service/src/server/index.rs index ef8ccfea8f24a..08ead1a57fff0 100644 --- a/crates/aptos-inspection-service/src/server/index.rs +++ b/crates/aptos-inspection-service/src/server/index.rs @@ -2,8 +2,9 @@ // SPDX-License-Identifier: Apache-2.0 use crate::{ - server::utils::CONTENT_TYPE_TEXT, CONFIGURATION_PATH, FORGE_METRICS_PATH, JSON_METRICS_PATH, - METRICS_PATH, PEER_INFORMATION_PATH, SYSTEM_INFORMATION_PATH, + server::utils::CONTENT_TYPE_TEXT, CONFIGURATION_PATH, CONSENSUS_METRICS_PATH, FORGE_METRICS_PATH, + JSON_METRICS_PATH, MEMPOOL_METRICS_PATH, METRICS_PATH, PEER_INFORMATION_PATH, + STORAGE_METRICS_PATH, SYSTEM_INFORMATION_PATH, }; use hyper::{Body, StatusCode}; @@ -25,10 +26,13 @@ fn get_index_response() -> String { index_response.push("Welcome to the Aptos Inspection Service!".into()); index_response.push("The following endpoints are available:".into()); index_response.push(format!("\t- {}", CONFIGURATION_PATH)); + index_response.push(format!("\t- {}", CONSENSUS_METRICS_PATH)); index_response.push(format!("\t- {}", FORGE_METRICS_PATH)); index_response.push(format!("\t- {}", JSON_METRICS_PATH)); + index_response.push(format!("\t- {}", MEMPOOL_METRICS_PATH)); index_response.push(format!("\t- {}", METRICS_PATH)); index_response.push(format!("\t- {}", PEER_INFORMATION_PATH)); + index_response.push(format!("\t- {}", STORAGE_METRICS_PATH)); index_response.push(format!("\t- {}", SYSTEM_INFORMATION_PATH)); index_response.join("\n") // Separate each entry with a newline diff --git a/crates/aptos-inspection-service/src/server/mod.rs b/crates/aptos-inspection-service/src/server/mod.rs index c352d4de373a8..fdd99fea6ab42 100644 --- a/crates/aptos-inspection-service/src/server/mod.rs +++ b/crates/aptos-inspection-service/src/server/mod.rs @@ -18,6 +18,7 @@ use std::{ }; mod configuration; +mod custom_metrics; mod index; mod json_encoder; mod metrics; @@ -37,6 +38,11 @@ pub const METRICS_PATH: &str = "/metrics"; pub const PEER_INFORMATION_PATH: &str = "/peer_information"; pub const SYSTEM_INFORMATION_PATH: &str = "/system_information"; +// New custom metrics paths +pub const CONSENSUS_METRICS_PATH: &str = "/consensus_metrics"; +pub const MEMPOOL_METRICS_PATH: &str = "/mempool_metrics"; +pub const STORAGE_METRICS_PATH: &str = "/storage_metrics"; + // Useful string constants pub const HEADER_CONTENT_TYPE: &str = "Content-Type"; pub const INVALID_ENDPOINT_MESSAGE: &str = "The requested endpoint is invalid!"; @@ -131,6 +137,21 @@ async fn serve_requests( // Exposes text encoded metrics metrics::handle_metrics_request() }, + CONSENSUS_METRICS_PATH => { + // /consensus_metrics + // Exposes consensus metrics only + custom_metrics::handle_consensus_metrics_request() + }, + MEMPOOL_METRICS_PATH => { + // /mempool_metrics + // Exposes mempool metrics only + custom_metrics::handle_mempool_metrics_request() + }, + STORAGE_METRICS_PATH => { + // /storage_metrics + // Exposes storage metrics only + custom_metrics::handle_storage_metrics_request() + }, PEER_INFORMATION_PATH => { // /peer_information // Exposes the peer information diff --git a/crates/aptos-inspection-service/src/server/tests.rs b/crates/aptos-inspection-service/src/server/tests.rs index 219201ec5f56a..fc29fc905e274 100644 --- a/crates/aptos-inspection-service/src/server/tests.rs +++ b/crates/aptos-inspection-service/src/server/tests.rs @@ -4,11 +4,13 @@ use crate::{ server::{ configuration::CONFIGURATION_DISABLED_MESSAGE, - peer_information::PEER_INFO_DISABLED_MESSAGE, serve_requests, + peer_information::PEER_INFO_DISABLED_MESSAGE, system_information::SYS_INFO_DISABLED_MESSAGE, utils::get_all_metrics, + serve_requests, }, - CONFIGURATION_PATH, FORGE_METRICS_PATH, INDEX_PATH, JSON_METRICS_PATH, METRICS_PATH, - PEER_INFORMATION_PATH, SYSTEM_INFORMATION_PATH, + CONFIGURATION_PATH, CONSENSUS_METRICS_PATH, FORGE_METRICS_PATH, INDEX_PATH, JSON_METRICS_PATH, + MEMPOOL_METRICS_PATH, METRICS_PATH, PEER_INFORMATION_PATH, STORAGE_METRICS_PATH, + SYSTEM_INFORMATION_PATH, }; use aptos_config::config::{AptosDataClientConfig, BaseConfig, NodeConfig}; use aptos_data_client::client::AptosDataClient; @@ -180,6 +182,77 @@ async fn test_inspect_peer_information() { assert!(response_body_string.contains("State sync metadata")); } +#[tokio::test] +async fn test_inspect_consensus_metrics() { + // Create a validator config + let config = NodeConfig::get_default_validator_config(); + + // Increment a counter and get the metrics + INT_COUNTER.inc(); + let mut response = send_get_request_to_path(&config, CONSENSUS_METRICS_PATH).await; + let response_body = body::to_bytes(response.body_mut()).await.unwrap(); + let response_body_string = read_to_string(response_body.as_ref()).unwrap(); + + // Verify that the response contains only consensus metrics + assert_eq!(response.status(), StatusCode::OK); + + // For test environments, response might be empty, but should still return OK + if !response_body_string.is_empty() { + for line in response_body_string.lines() { + assert!(line.starts_with("aptos_consensus"), + "Expected consensus metrics only, but found: {}", line); + } + } +} + +#[tokio::test] +async fn test_inspect_mempool_metrics() { + // Create a validator config + let config = NodeConfig::get_default_validator_config(); + + // Get the mempool metrics + let mut response = send_get_request_to_path(&config, MEMPOOL_METRICS_PATH).await; + let response_body = body::to_bytes(response.body_mut()).await.unwrap(); + let response_body_string = read_to_string(response_body.as_ref()).unwrap(); + + // Verify that the response contains only mempool metrics + assert_eq!(response.status(), StatusCode::OK); + + // For test environments, response might be empty, but should still return OK + if !response_body_string.is_empty() { + for line in response_body_string.lines() { + assert!( + line.starts_with("aptos_mempool") || line.starts_with("aptos_core_mempool"), + "Expected mempool metrics only, but found: {}", line + ); + } + } +} + +#[tokio::test] +async fn test_inspect_storage_metrics() { + // Create a validator config + let config = NodeConfig::get_default_validator_config(); + + // Get the storage metrics + let mut response = send_get_request_to_path(&config, STORAGE_METRICS_PATH).await; + let response_body = body::to_bytes(response.body_mut()).await.unwrap(); + let response_body_string = read_to_string(response_body.as_ref()).unwrap(); + + // Verify that the response contains only storage metrics + assert_eq!(response.status(), StatusCode::OK); + + // For test environments, response might be empty, but should still return OK + if !response_body_string.is_empty() { + for line in response_body_string.lines() { + assert!( + line.starts_with("aptos_storage") || line.starts_with("aptos_schemadb"), + "Expected storage metrics only, but found: {}", line + ); + } + } +} + rusty_fork_test! { #[test] fn test_gather_metrics() { diff --git a/crates/aptos-jwk-consensus/src/epoch_manager.rs b/crates/aptos-jwk-consensus/src/epoch_manager.rs index 31609b06504fd..373791be2a4e3 100644 --- a/crates/aptos-jwk-consensus/src/epoch_manager.rs +++ b/crates/aptos-jwk-consensus/src/epoch_manager.rs @@ -148,6 +148,7 @@ impl EpochManager

{ } async fn start_new_epoch(&mut self, payload: OnChainConfigPayload

) { + println!("Starting new epoch."); let validator_set: ValidatorSet = payload .get() .expect("failed to get ValidatorSet from payload"); @@ -239,6 +240,7 @@ impl EpochManager

{ } async fn on_new_epoch(&mut self, reconfig_notification: ReconfigNotification

) -> Result<()> { + println!("EpochManager received new epoch notification."); self.shutdown_current_processor().await; self.start_new_epoch(reconfig_notification.on_chain_configs) .await; diff --git a/crates/aptos-metrics-core/src/const_metric.rs b/crates/aptos-metrics-core/src/const_metric.rs index c354b0eed4921..744ff1b7c989c 100644 --- a/crates/aptos-metrics-core/src/const_metric.rs +++ b/crates/aptos-metrics-core/src/const_metric.rs @@ -37,7 +37,7 @@ impl ConstMetric { let mut metric = Metric::default(); metric.set_counter(counter); - metric.set_label(labels); + metric.set_label(labels.into()); Ok(ConstMetric { desc, @@ -63,7 +63,7 @@ impl ConstMetric { let mut metric = Metric::default(); metric.set_gauge(guage); - metric.set_label(labels); + metric.set_label(labels.into()); Ok(ConstMetric { desc, @@ -84,7 +84,7 @@ impl Collector for ConstMetric { met.set_name(self.desc.fq_name.clone()); met.set_help(self.desc.help.clone()); met.set_field_type(self.metric_type); - met.set_metric(vec![self.metric.clone()]); + met.set_metric(vec![self.metric.clone()].into()); vec![met] } diff --git a/crates/aptos-rosetta-cli/Cargo.toml b/crates/aptos-rosetta-cli/Cargo.toml index ff37ec922ae04..7f5cda8bd27b8 100644 --- a/crates/aptos-rosetta-cli/Cargo.toml +++ b/crates/aptos-rosetta-cli/Cargo.toml @@ -14,7 +14,7 @@ rust-version = { workspace = true } [dependencies] anyhow = { workspace = true } -aptos = { workspace = true } +movement = { workspace = true } aptos-logger = { workspace = true } aptos-rosetta = { workspace = true } aptos-types = { workspace = true } diff --git a/crates/aptos-rosetta-cli/src/account.rs b/crates/aptos-rosetta-cli/src/account.rs index 0f734884b8445..daa6958f1f0b3 100644 --- a/crates/aptos-rosetta-cli/src/account.rs +++ b/crates/aptos-rosetta-cli/src/account.rs @@ -42,7 +42,7 @@ pub struct AccountBalanceCommand { #[clap(long)] filter_currency: bool, /// Account to list the balance - #[clap(long, value_parser = aptos::common::types::load_account_arg)] + #[clap(long, value_parser = movement::common::types::load_account_arg)] account: AccountAddress, /// Whether to show the amount of stake instead of the normal balance #[clap(long)] diff --git a/crates/aptos-rosetta-cli/src/construction.rs b/crates/aptos-rosetta-cli/src/construction.rs index c0b6485fc157a..8232759e4e521 100644 --- a/crates/aptos-rosetta-cli/src/construction.rs +++ b/crates/aptos-rosetta-cli/src/construction.rs @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 use crate::common::{format_output, NetworkArgs, UrlArgs}; -use aptos::common::types::{EncodingOptions, PrivateKeyInputOptions, ProfileOptions}; +use movement::common::types::{EncodingOptions, PrivateKeyInputOptions, ProfileOptions}; use aptos_logger::info; use aptos_rosetta::types::TransactionIdentifier; use aptos_types::account_address::AccountAddress; @@ -96,10 +96,10 @@ pub struct CreateAccountCommand { txn_args: TransactionArgs, /// The sending account, since the private key doesn't always match the /// AccountAddress if it rotates - #[clap(long, value_parser = aptos::common::types::load_account_arg)] + #[clap(long, value_parser = movement::common::types::load_account_arg)] sender: Option, /// The new account (TODO: Maybe we want to take in the public key instead) - #[clap(long, value_parser = aptos::common::types::load_account_arg)] + #[clap(long, value_parser = movement::common::types::load_account_arg)] new_account: AccountAddress, } @@ -146,10 +146,10 @@ pub struct TransferCommand { txn_args: TransactionArgs, /// The sending account, since the private key doesn't always match the /// AccountAddress if it rotates - #[clap(long, value_parser = aptos::common::types::load_account_arg)] + #[clap(long, value_parser = movement::common::types::load_account_arg)] sender: Option, /// The receiving account - #[clap(long, value_parser = aptos::common::types::load_account_arg)] + #[clap(long, value_parser = movement::common::types::load_account_arg)] receiver: AccountAddress, /// The amount of coins to send #[clap(long)] @@ -199,13 +199,13 @@ pub struct SetOperatorCommand { txn_args: TransactionArgs, /// The sending account, since the private key doesn't always match the /// AccountAddress if it rotates - #[clap(long, value_parser = aptos::common::types::load_account_arg)] + #[clap(long, value_parser = movement::common::types::load_account_arg)] sender: Option, /// The old operator of the stake pool - #[clap(long, value_parser = aptos::common::types::load_account_arg)] + #[clap(long, value_parser = movement::common::types::load_account_arg)] old_operator: Option, /// The new operator of the stake pool - #[clap(long, value_parser = aptos::common::types::load_account_arg)] + #[clap(long, value_parser = movement::common::types::load_account_arg)] new_operator: AccountAddress, } @@ -252,13 +252,13 @@ pub struct SetVoterCommand { txn_args: TransactionArgs, /// The sending account, since the private key doesn't always match the /// AccountAddress if it rotates - #[clap(long, value_parser = aptos::common::types::load_account_arg)] + #[clap(long, value_parser = movement::common::types::load_account_arg)] sender: Option, /// The operator of the stake pool - #[clap(long, value_parser = aptos::common::types::load_account_arg)] + #[clap(long, value_parser = movement::common::types::load_account_arg)] operator: Option, /// The new voter for the stake pool - #[clap(long, value_parser = aptos::common::types::load_account_arg)] + #[clap(long, value_parser = movement::common::types::load_account_arg)] new_voter: AccountAddress, } @@ -305,13 +305,13 @@ pub struct CreateStakePoolCommand { txn_args: TransactionArgs, /// The sending account, since the private key doesn't always match the /// AccountAddress if it rotates - #[clap(long, value_parser = aptos::common::types::load_account_arg)] + #[clap(long, value_parser = movement::common::types::load_account_arg)] sender: Option, /// Operator - #[clap(long, value_parser = aptos::common::types::load_account_arg)] + #[clap(long, value_parser = movement::common::types::load_account_arg)] operator: Option, /// Voter - #[clap(long, value_parser = aptos::common::types::load_account_arg)] + #[clap(long, value_parser = movement::common::types::load_account_arg)] voter: Option, /// Amount #[clap(long)] diff --git a/crates/aptos-telemetry/README.md b/crates/aptos-telemetry/README.md new file mode 100644 index 0000000000000..acc49067ab075 --- /dev/null +++ b/crates/aptos-telemetry/README.md @@ -0,0 +1,174 @@ +# Aptos Telemetry Enhancements + +1. **Enhanced Consensus Metrics**: + - Added metrics for committed blocks and transactions + - Included consensus round and version information + - Added metrics for consensus timing and performance + - Added sync information metrics + +2. **Enhanced Transaction Metrics**: + - Added mempool transaction processing metrics + - Added metrics for transaction broadcast performance + - Included pending transaction counts + +3. **Enhanced Storage Metrics**: + - Added latency metrics for transaction retrieval + - Added latency metrics for transaction commits + - Added latency metrics for transaction saving + +4. **Test Suite**: + - Added unit tests to verify telemetry metrics collection + - Added integration tests for telemetry end-to-end testing + +## Running Locally + +To run and test the telemetry implementation locally: + +### 1. Install Prometheus + +```bash +brew install prometheus +``` + +### 2. Install Grafana + +```bash +brew install grafana +``` + +## Configuration + +### 1. Prometheus Setup + +Create or modify `/opt/homebrew/etc/prometheus.yml`: + +```yaml +global: + scrape_interval: 15s + evaluation_interval: 15s + +scrape_configs: + - job_name: 'aptos' + static_configs: + - targets: ['127.0.0.1:9101'] + metrics_path: '/metrics' + scheme: 'http' +``` + +### 2. Start Services + +1. Start Prometheus: +```bash +brew services start prometheus +``` + +2. Start Grafana: +```bash +brew services start grafana +``` + +3. Start the node: +```bash +cargo run -p movement -- node run-local-testnet +``` + +### 3. Grafana Dashboard Setup + +1. Access Grafana UI: + - Open `http://localhost:3000` in your browser + - Default login: + - Username: `admin` + - Password: `admin` + +2. Add Prometheus Data Source: + - Go to Connections (âš™ī¸) > Data Sources + - Click "Add data source" + - Select "Prometheus" + - Set URL to `http://localhost:9090` + - Click "Save & Test" + +3. Import Dashboard: + - Click the "+" icon in the sidebar + - Select "Import" + - Upload the provided [`aptos.json`](../grafana/dashboards/aptos.json) + - Select your Prometheus data source + - Click "Import" + +## Verification + +1. Check Prometheus targets: + - Visit `http://localhost:9090/targets` + - Verify the Aptos target is "UP" + +2. Check Grafana metrics: + - View the imported dashboard + - Verify metrics are being displayed + - Check for: + - Consensus metrics + - Storage metrics + - Mempool metrics + - State sync metrics + +## Troubleshooting + +1. If metrics aren't showing: + - Verify Aptos node is running + - Check metrics endpoint: `curl http://localhost:9101/metrics` + - Verify Prometheus target status + - Check Grafana data source connection + +2. Service management: + ```bash + # Restart services + brew services restart prometheus + brew services restart grafana + + # Check service status + brew services list + + # View Prometheus logs + tail -f /opt/homebrew/var/log/prometheus.log + + # View Grafana logs + tail -f /opt/homebrew/var/log/grafana.log + ``` + +## Stopping Services + +```bash +brew services stop prometheus +brew services stop grafana +``` + +## Telemetry Metrics + +The following key metrics have been added: + +### Consensus Metrics + +| Metric Name | Description | +|-------------|-------------| +| `consensus_last_committed_version` | The last committed ledger version | +| `consensus_committed_blocks_count` | Number of blocks committed since node start | +| `consensus_committed_txns_count` | Number of transactions committed since node start | +| `consensus_current_round` | Current consensus round | +| `consensus_round_timeout_secs` | Average round timeout in seconds | +| `consensus_sync_info_msg_sent_count` | Number of sync info messages sent | +| `consensus_wait_duration_s` | Average wait duration in seconds | + +### Mempool Metrics + +| Metric Name | Description | +|-------------|-------------| +| `mempool_txns_processed_success` | Number of successfully processed transactions | +| `mempool_txns_processed_total` | Total number of transactions received | +| `mempool_avg_txn_broadcast_size` | Average transaction broadcast size | +| `mempool_pending_txns` | Number of pending transactions in mempool | + +### Storage Metrics + +| Metric Name | Description | +|-------------|-------------| +| `storage_get_transaction_latency_s` | Average latency for transaction retrieval | +| `storage_commit_latency_s` | Average latency for transaction commits | +| `storage_save_transactions_latency_s` | Average latency for saving transactions | diff --git a/crates/aptos-telemetry/src/constants.rs b/crates/aptos-telemetry/src/constants.rs index abadb85d847bc..cb53f30d19da9 100644 --- a/crates/aptos-telemetry/src/constants.rs +++ b/crates/aptos-telemetry/src/constants.rs @@ -29,8 +29,8 @@ pub(crate) const APTOS_GA_API_SECRET: &str = "ArtslKPTTjeiMi1n-IR39g"; // See: https://developers.google.com/analytics/devguides/collection/protocol/v1/reference#transport pub(crate) const GA4_URL: &str = "https://www.google-analytics.com/mp/collect"; pub(crate) const HTTPBIN_URL: &str = "https://httpbin.org/ip"; -pub(crate) const TELEMETRY_SERVICE_URL: &str = "https://telemetry.aptoslabs.com"; -pub(crate) const MAINNET_TELEMETRY_SERVICE_URL: &str = "https://telemetry.mainnet.aptoslabs.com"; +pub(crate) const DEFAULT_TELEMETRY_SERVICE_URL: &str = "http://localhost:9464"; +pub(crate) const DEFAULT_MAINNET_TELEMETRY_SERVICE_URL: &str = "http://localhost:9464"; // Frequencies for the various metrics and pushes pub(crate) const NODE_BUILD_INFO_FREQ_SECS: u64 = 60 * 60; // 60 minutes diff --git a/crates/aptos-telemetry/src/core_metrics.rs b/crates/aptos-telemetry/src/core_metrics.rs index b836b0ab1ece2..e76af2eab5d3f 100644 --- a/crates/aptos-telemetry/src/core_metrics.rs +++ b/crates/aptos-telemetry/src/core_metrics.rs @@ -1,11 +1,16 @@ // Copyright Š Aptos Foundation +// Parts of the project are originally copyright Š Meta Platforms, Inc. // SPDX-License-Identifier: Apache-2.0 use crate::{utils, utils::sum_all_histogram_counts}; use aptos_config::config::NodeConfig; use aptos_state_sync_driver::metrics::StorageSynchronizerOperations; use aptos_telemetry_service::types::telemetry::TelemetryEvent; -use prometheus::core::Collector; +use once_cell::sync::Lazy; +use prometheus::{ + core::{Collector, GenericGauge}, + Histogram, IntCounter, IntCounterVec, +}; use std::collections::BTreeMap; /// Core metrics event name @@ -15,6 +20,13 @@ const APTOS_NODE_CORE_METRICS: &str = "APTOS_NODE_CORE_METRICS"; const CONSENSUS_LAST_COMMITTED_ROUND: &str = "consensus_last_committed_round"; const CONSENSUS_PROPOSALS_COUNT: &str = "consensus_proposals_count"; const CONSENSUS_TIMEOUT_COUNT: &str = "consensus_timeout_count"; +const CONSENSUS_LAST_COMMITTED_VERSION: &str = "consensus_last_committed_version"; +const CONSENSUS_COMMITTED_BLOCKS_COUNT: &str = "consensus_committed_blocks_count"; +const CONSENSUS_COMMITTED_TXNS_COUNT: &str = "consensus_committed_txns_count"; +const CONSENSUS_ROUND_TIMEOUT_MS: &str = "consensus_round_timeout_ms"; +const CONSENSUS_SYNC_INFO_MSG_SENT_COUNT: &str = "consensus_sync_info_msg_sent_count"; +const CONSENSUS_CURRENT_ROUND: &str = "consensus_current_round"; +const CONSENSUS_WAIT_DURATION_MS: &str = "consensus_wait_duration_ms"; const MEMPOOL_CORE_MEMPOOL_INDEX_SIZE: &str = "mempool_core_mempool_index_size"; const REST_RESPONSE_COUNT: &str = "rest_response_count"; const ROLE_TYPE: &str = "role_type"; @@ -66,21 +78,82 @@ fn collect_core_metrics(core_metrics: &mut BTreeMap, node_config /// Collects the consensus metrics and appends it to the given map fn collect_consensus_metrics(core_metrics: &mut BTreeMap) { + // Helper function to safely get consensus counter metric + let get_counter_metric = |metric: &'static Lazy| -> String { + Lazy::get(metric).map_or("0".to_string(), |counter| counter.get().to_string()) + }; + + // Helper function to safely get consensus gauge metric + let get_gauge_metric = |metric: &'static Lazy>| -> String { + Lazy::get(metric).map_or("0".to_string(), |gauge| gauge.get().to_string()) + }; + + let get_counter_vec_metric = |metric: &'static Lazy| -> String { + Lazy::get(metric).map_or("0".to_string(), |counter| { + counter.with_label_values(&["success"]).get().to_string() + }) + }; + + // Helper function to safely get histogram values + let get_histogram_values = |metric: &'static Lazy| -> String { + Lazy::get(metric).map_or("0".to_string(), |histogram| { + let sum = histogram.get_sample_sum(); + let count = histogram.get_sample_count(); + format!("{} {}", sum, count) // Report sum and count for dashboard aggregation + }) + }; + + // Collect basic consensus metrics core_metrics.insert( CONSENSUS_PROPOSALS_COUNT.into(), - aptos_consensus::counters::PROPOSALS_COUNT.get().to_string(), + get_counter_metric(&aptos_consensus::counters::PROPOSALS_COUNT), ); core_metrics.insert( CONSENSUS_LAST_COMMITTED_ROUND.into(), - aptos_consensus::counters::LAST_COMMITTED_ROUND - .get() - .to_string(), + get_gauge_metric(&aptos_consensus::counters::LAST_COMMITTED_ROUND), ); core_metrics.insert( CONSENSUS_TIMEOUT_COUNT.into(), - aptos_consensus::counters::TIMEOUT_COUNT.get().to_string(), + get_counter_metric(&aptos_consensus::counters::TIMEOUT_COUNT), + ); + + // Enhanced consensus metrics + core_metrics.insert( + CONSENSUS_LAST_COMMITTED_VERSION.into(), + get_gauge_metric(&aptos_consensus::counters::LAST_COMMITTED_VERSION), + ); + core_metrics.insert( + CONSENSUS_COMMITTED_BLOCKS_COUNT.into(), + get_counter_metric(&aptos_consensus::counters::COMMITTED_BLOCKS_COUNT), + ); + core_metrics.insert( + CONSENSUS_COMMITTED_TXNS_COUNT.into(), + get_counter_vec_metric(&aptos_consensus::counters::COMMITTED_TXNS_COUNT), + ); + + // Get the current round + core_metrics.insert( + CONSENSUS_CURRENT_ROUND.into(), + get_gauge_metric(&aptos_consensus::counters::CURRENT_ROUND), + ); + + // Get the round timeout in milliseconds + core_metrics.insert( + CONSENSUS_ROUND_TIMEOUT_MS.into(), + get_histogram_values(&aptos_consensus::counters::ROUND_TIMEOUT_MS), + ); + + // Get sync info messages count + core_metrics.insert( + CONSENSUS_SYNC_INFO_MSG_SENT_COUNT.into(), + get_counter_metric(&aptos_consensus::counters::SYNC_INFO_MSGS_SENT_COUNT), + ); + + // Get wait duration histogram values (sum and count) + core_metrics.insert( + CONSENSUS_WAIT_DURATION_MS.into(), + get_histogram_values(&aptos_consensus::counters::WAIT_DURATION_MS), ); - //TODO(joshlind): add block tracing and back pressure! } /// Collects the mempool metrics and appends it to the given map @@ -92,11 +165,56 @@ fn collect_mempool_metrics(core_metrics: &mut BTreeMap) { .get() .to_string(), ); + + // Add additional mempool metrics for transaction processing + core_metrics.insert( + "mempool_txns_processed_success".into(), + aptos_mempool::counters::SHARED_MEMPOOL_TRANSACTIONS_PROCESSED + .with_label_values(&["success", "local"]) + .get() + .to_string(), + ); + + core_metrics.insert( + "mempool_txns_processed_total".into(), + aptos_mempool::counters::SHARED_MEMPOOL_TRANSACTIONS_PROCESSED + .with_label_values(&["received", "local"]) + .get() + .to_string(), + ); + + // Get average transaction broadcast size from HistogramVec + let broadcast_size = &aptos_mempool::counters::SHARED_MEMPOOL_TRANSACTION_BROADCAST_SIZE; + let mut total_sum = 0.0; + let mut total_count = 0.0; + + // Sum up values across all label combinations + for label_values in broadcast_size.get_metric_with_label_values(&["success"]).iter() { + total_sum += label_values.get_sample_sum(); + total_count += label_values.get_sample_count() as f64; + } + + let avg_broadcast_size = if total_count > 0.0 { + total_sum / total_count + } else { + 0.0 + }; + core_metrics.insert("mempool_avg_txn_broadcast_size".into(), avg_broadcast_size.to_string()); + + // Get pending transaction count in mempool + core_metrics.insert( + "mempool_pending_txns".into(), + aptos_mempool::counters::CORE_MEMPOOL_INDEX_SIZE + .with_label_values(&["system_ttl"]) + .get() + .to_string(), + ); } /// Collects the REST metrics and appends it to the given map fn collect_rest_metrics(core_metrics: &mut BTreeMap) { - let rest_response_metrics = aptos_api::metrics::RESPONSE_STATUS.collect(); + let rest_response_metrics = Lazy::get(&aptos_api::metrics::RESPONSE_STATUS) + .map_or(Vec::new(), |metrics| metrics.collect()); let rest_response_count = sum_all_histogram_counts(&rest_response_metrics); core_metrics.insert(REST_RESPONSE_COUNT.into(), rest_response_count.to_string()); } @@ -143,44 +261,85 @@ fn collect_state_sync_metrics( /// Collects the storage metrics and appends it to the given map fn collect_storage_metrics(core_metrics: &mut BTreeMap) { - core_metrics.insert( - STORAGE_LEDGER_VERSION.into(), - aptos_db::metrics::LEDGER_VERSION.get().to_string(), - ); + // Helper function to safely get metric value + let get_metric_value = |metric_name: &str, label_values: &[&str]| -> String { + if let Some(metric) = Lazy::get(&aptos_db::metrics::PRUNER_VERSIONS) { + if let Ok(m) = metric.get_metric_with_label_values(label_values) { + return m.get().to_string(); + } + } + "0".to_string() + }; + + // Get basic storage metrics + if let Some(ledger_version) = Lazy::get(&aptos_db::metrics::LEDGER_VERSION) { + core_metrics.insert( + STORAGE_LEDGER_VERSION.into(), + ledger_version.get().to_string(), + ); + } + + // Get pruner metrics safely core_metrics.insert( STORAGE_MIN_READABLE_LEDGER_VERSION.into(), - aptos_db::metrics::PRUNER_VERSIONS - .with_label_values(&["ledger_pruner", "min_readable"]) - .get() - .to_string(), + get_metric_value("pruner_versions", &["ledger_pruner", "min_readable"]), ); core_metrics.insert( STORAGE_MIN_READABLE_STATE_MERKLE_VERSION.into(), - aptos_db::metrics::PRUNER_VERSIONS - .with_label_values(&["state_merkle_pruner", "min_readable"]) - .get() - .to_string(), + get_metric_value("pruner_versions", &["state_merkle_pruner", "min_readable"]), ); core_metrics.insert( STORAGE_MIN_READABLE_STATE_KV_VERSION.into(), - aptos_db::metrics::PRUNER_VERSIONS - .with_label_values(&["state_kv_pruner", "min_readable"]) - .get() - .to_string(), + get_metric_value("pruner_versions", &["state_kv_pruner", "min_readable"]), ); - // TODO(joshlind): add storage latencies! + + // Add storage latency metrics safely + if let Some(get_latency) = Lazy::get(&aptos_db::metrics::APTOS_SCHEMADB_GET_LATENCY_SECONDS) { + if let Ok(get_txn_histogram) = get_latency.get_metric_with_label_values(&["transaction_schema"]) { + let avg_get_txn_latency = if get_txn_histogram.get_sample_count() > 0 { + get_txn_histogram.get_sample_sum() / get_txn_histogram.get_sample_count() as f64 + } else { + 0.0 + }; + core_metrics.insert("storage_get_transaction_latency_s".into(), avg_get_txn_latency.to_string()); + } + } + + // Add commit latency metrics safely + if let Some(commit_histogram) = Lazy::get(&aptos_db::metrics::APTOS_STORAGE_SERVICE_COMMIT_LATENCY_SECONDS) { + let avg_commit_latency = if commit_histogram.get_sample_count() > 0 { + commit_histogram.get_sample_sum() / commit_histogram.get_sample_count() as f64 + } else { + 0.0 + }; + core_metrics.insert("storage_commit_latency_s".into(), avg_commit_latency.to_string()); + } + + // Add save transactions latency safely + if let Some(save_txns_histogram) = Lazy::get(&aptos_db::metrics::APTOS_STORAGE_SERVICE_SAVE_TRANSACTIONS_LATENCY_SECONDS) { + let avg_save_txns_latency = if save_txns_histogram.get_sample_count() > 0 { + save_txns_histogram.get_sample_sum() / save_txns_histogram.get_sample_count() as f64 + } else { + 0.0 + }; + core_metrics.insert("storage_save_transactions_latency_s".into(), avg_save_txns_latency.to_string()); + } } /// Collects the telemetry metrics and appends it to the given map fn collect_telemetry_metrics(core_metrics: &mut BTreeMap) { - let telemetry_failure_metrics = crate::metrics::APTOS_TELEMETRY_FAILURE.collect(); + // Get failure metrics, defaulting to empty vec if not initialized + let telemetry_failure_metrics = Lazy::get(&crate::metrics::APTOS_TELEMETRY_FAILURE) + .map_or(Vec::new(), |metrics| metrics.collect()); let telemetry_failure_count = utils::sum_all_gauges(&telemetry_failure_metrics); core_metrics.insert( TELEMETRY_FAILURE_COUNT.into(), telemetry_failure_count.to_string(), ); - let telemetry_success_metrics = crate::metrics::APTOS_TELEMETRY_SUCCESS.collect(); + // Get success metrics, defaulting to empty vec if not initialized + let telemetry_success_metrics = Lazy::get(&crate::metrics::APTOS_TELEMETRY_SUCCESS) + .map_or(Vec::new(), |metrics| metrics.collect()); let telemetry_success_count = utils::sum_all_gauges(&telemetry_success_metrics); core_metrics.insert( TELEMETRY_SUCCESS_COUNT.into(), diff --git a/crates/aptos-telemetry/src/lib.rs b/crates/aptos-telemetry/src/lib.rs index 37c6e69295b3b..74c83209bf164 100644 --- a/crates/aptos-telemetry/src/lib.rs +++ b/crates/aptos-telemetry/src/lib.rs @@ -14,3 +14,6 @@ pub mod cli_metrics; pub mod service; pub mod system_information; pub mod utils; + +#[cfg(test)] +mod tests; diff --git a/crates/aptos-telemetry/src/service.rs b/crates/aptos-telemetry/src/service.rs index 8a2d064a3ec1f..c4bd60449f609 100644 --- a/crates/aptos-telemetry/src/service.rs +++ b/crates/aptos-telemetry/src/service.rs @@ -136,9 +136,9 @@ async fn spawn_telemetry_service( ) { let telemetry_svc_url = env::var(ENV_TELEMETRY_SERVICE_URL).unwrap_or_else(|_| { if chain_id == ChainId::mainnet() { - MAINNET_TELEMETRY_SERVICE_URL.into() + DEFAULT_MAINNET_TELEMETRY_SERVICE_URL.into() } else { - TELEMETRY_SERVICE_URL.into() + DEFAULT_TELEMETRY_SERVICE_URL.into() } }); @@ -146,9 +146,9 @@ async fn spawn_telemetry_service( warn!( "Unable to parse telemetry service URL {}. Make sure {} is unset or is set properly: {}. Defaulting to {}.", telemetry_svc_url, - ENV_TELEMETRY_SERVICE_URL, err, TELEMETRY_SERVICE_URL + ENV_TELEMETRY_SERVICE_URL, err, DEFAULT_TELEMETRY_SERVICE_URL ); - Url::parse(TELEMETRY_SERVICE_URL) + Url::parse(DEFAULT_TELEMETRY_SERVICE_URL) .expect("unable to parse telemetry service default URL") }); diff --git a/crates/aptos-telemetry/src/tests/metrics_tests.rs b/crates/aptos-telemetry/src/tests/metrics_tests.rs new file mode 100644 index 0000000000000..48279ee700115 --- /dev/null +++ b/crates/aptos-telemetry/src/tests/metrics_tests.rs @@ -0,0 +1,99 @@ +use crate::{ + core_metrics::get_core_metrics, + network_metrics::get_network_metrics, + system_information::get_system_information, +}; +use aptos_config::config::NodeConfig; +use std::collections::BTreeMap; + +#[test] +fn test_core_metrics_collection() { + let node_config = NodeConfig::default(); + let core_metrics = get_core_metrics(&node_config); + + assert!(!core_metrics.is_empty(), "Core metrics should not be empty"); + + for (key, value) in &core_metrics { + println!("Core metric: {} = {}", key, value); + } + + verify_metric_key_exists(&core_metrics, "consensus_proposals_count"); + verify_metric_key_exists(&core_metrics, "consensus_last_committed_round"); + verify_metric_key_exists(&core_metrics, "consensus_timeout_count"); + verify_metric_key_exists(&core_metrics, "consensus_last_committed_version"); + verify_metric_key_exists(&core_metrics, "consensus_committed_blocks_count"); + verify_metric_key_exists(&core_metrics, "consensus_committed_txns_count"); + verify_metric_key_exists(&core_metrics, "consensus_round_timeout_secs"); + verify_metric_key_exists(&core_metrics, "consensus_sync_info_msg_sent_count"); + verify_metric_key_exists(&core_metrics, "consensus_current_round"); + verify_metric_key_exists(&core_metrics, "consensus_wait_duration_s"); + + verify_metric_key_exists(&core_metrics, "mempool_core_mempool_index_size"); + verify_metric_key_exists(&core_metrics, "mempool_txns_processed_success"); + verify_metric_key_exists(&core_metrics, "mempool_txns_processed_total"); + verify_metric_key_exists(&core_metrics, "mempool_avg_txn_broadcast_size"); + verify_metric_key_exists(&core_metrics, "mempool_pending_txns"); + + verify_metric_key_exists(&core_metrics, "storage_ledger_version"); + verify_metric_key_exists(&core_metrics, "storage_min_readable_ledger_version"); + verify_metric_key_exists(&core_metrics, "storage_min_readable_state_merkle_version"); + verify_metric_key_exists(&core_metrics, "storage_min_readable_state_kv_version"); + verify_metric_key_exists(&core_metrics, "storage_get_transaction_latency_s"); + verify_metric_key_exists(&core_metrics, "storage_commit_latency_s"); + verify_metric_key_exists(&core_metrics, "storage_save_transactions_latency_s"); + + verify_metric_key_exists(&core_metrics, "role_type"); +} + +#[test] +fn test_network_metrics_collection() { + let network_metrics = get_network_metrics(); + + + for (key, value) in &network_metrics { + println!("Network metric: {} = {}", key, value); + } +} + +#[test] +fn test_system_information_collection() { + let system_information = get_system_information(); + + assert!(!system_information.is_empty(), "System information should not be empty"); + + for (key, value) in &system_information { + println!("System info: {} = {}", key, value); + } + + verify_metric_key_exists(&system_information, "cpu_count"); + verify_metric_key_exists(&system_information, "memory_total"); + verify_metric_key_exists(&system_information, "system_name"); +} + +#[test] +fn test_all_telemetry_metrics() { + let node_config = NodeConfig::default(); + + let core_metrics = get_core_metrics(&node_config); + let network_metrics = get_network_metrics(); + let system_information = get_system_information(); + + assert!(!core_metrics.is_empty(), "Core metrics should not be empty"); + assert!(!system_information.is_empty(), "System information should not be empty"); + + println!( + "Total metrics collected: {} (Core: {}, Network: {}, System: {})", + core_metrics.len() + network_metrics.len() + system_information.len(), + core_metrics.len(), + network_metrics.len(), + system_information.len() + ); +} + +fn verify_metric_key_exists(metrics: &BTreeMap, key: &str) { + assert!( + metrics.contains_key(key), + "Expected metric key '{}' not found in metrics", + key + ); +} \ No newline at end of file diff --git a/crates/aptos-telemetry/src/tests/mod.rs b/crates/aptos-telemetry/src/tests/mod.rs new file mode 100644 index 0000000000000..398bcefbc6af3 --- /dev/null +++ b/crates/aptos-telemetry/src/tests/mod.rs @@ -0,0 +1 @@ +pub mod metrics_tests; \ No newline at end of file diff --git a/crates/aptos/CHANGELOG.md b/crates/aptos/CHANGELOG.md index c5afa9e567e26..14aba5280b8d8 100644 --- a/crates/aptos/CHANGELOG.md +++ b/crates/aptos/CHANGELOG.md @@ -1,9 +1,17 @@ -# Aptos CLI Changelog +# Movement CLI Changelog -All notable changes to the Aptos CLI will be captured in this file. This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html) and the format set out by [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). +All notable changes to the Movement CLI will be captured in this file. This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html) and the format set out by [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). + +Note, all changes listed up to version 3.5.0 were for Aptos CLI, from which Movement CLI was derived. ## Unreleased + +## [3.5.0] - 2024/07/06 - Add balance command to easily get account balances for APT currently +- Add network to config file +- Add explorer links to initialized accounts, and transaction submissions +- Alias some move commands as common misnomers (e.g. build -> compile, deploy -> publish) +- Add "hello_blockchain" template to move init command ## [3.4.1] - 2024/05/31 - Upgraded indexer processors for localnet from ca60e51b53c3be6f9517de7c73d4711e9c1f7236 to 5244b84fa5ed872e5280dc8df032d744d62ad29d. Upgraded Hasura metadata accordingly. diff --git a/crates/aptos/Cargo.toml b/crates/aptos/Cargo.toml index 7c5d986e6710e..bf72e4c7756e2 100644 --- a/crates/aptos/Cargo.toml +++ b/crates/aptos/Cargo.toml @@ -1,7 +1,7 @@ [package] -name = "aptos" -description = "Aptos tool for management of nodes and interacting with the blockchain" -version = "3.4.1" +name = "movement" +description = "Movement tool for management of nodes and interacting with Movement" +version = "3.5.0" # Workspace inherited keys authors = { workspace = true } @@ -56,9 +56,7 @@ chrono = { workspace = true } clap = { workspace = true, features = ["env", "unstable-styles"] } clap_complete = { workspace = true } dashmap = { workspace = true } -diesel = { workspace = true, features = [ - "postgres_backend", -] } +diesel = { workspace = true, features = ["postgres_backend"] } diesel-async = { workspace = true } dirs = { workspace = true } futures = { workspace = true } @@ -83,14 +81,17 @@ pathsearch = { workspace = true } poem = { workspace = true } # We set default-features to false so we don't onboard the libpq dep. See more here: # https://github.com/aptos-labs/aptos-core/pull/12568 -processor = { git = "https://github.com/aptos-labs/aptos-indexer-processors.git", rev = "5244b84fa5ed872e5280dc8df032d744d62ad29d", default-features = false } +processor = { workspace = true } rand = { workspace = true } reqwest = { workspace = true } -self_update = { git = "https://github.com/banool/self_update.git", rev = "8306158ad0fd5b9d4766a3c6bf967e7ef0ea5c4b", features = ["archive-zip", "compression-zip-deflate"] } +self_update = { git = "https://github.com/banool/self_update.git", rev = "8306158ad0fd5b9d4766a3c6bf967e7ef0ea5c4b", features = [ + "archive-zip", + "compression-zip-deflate", +] } serde = { workspace = true } serde_json = { workspace = true } serde_yaml = { workspace = true } -server-framework = { git = "https://github.com/aptos-labs/aptos-indexer-processors.git", rev = "5244b84fa5ed872e5280dc8df032d744d62ad29d" } +server-framework = { workspace = true } tempfile = { workspace = true } thiserror = { workspace = true } tokio = { workspace = true } diff --git a/crates/aptos/README.md b/crates/aptos/README.md index e04ee0773aeca..42b451e3bc703 100644 --- a/crates/aptos/README.md +++ b/crates/aptos/README.md @@ -1,5 +1,5 @@ -# Aptos Command Line Interface (CLI) Tool +# Movement Command Line Interface (CLI) Tool -The `aptos` tool is a command line interface (CLI) for debugging, development, and node operation. +The `movement` tool is a command line interface (CLI) for debugging, development, and node operation. -See [Aptos CLI Documentation](https://aptos.dev/tools/aptos-cli/) for how to install the `aptos` CLI tool and how to use it. +See [Movement CLI Documentation](https://docs.movementlabs.xyz) for how to install the `movement` CLI tool and how to use it. diff --git a/crates/aptos/e2e/local_testnet.py b/crates/aptos/e2e/local_testnet.py index 3d024219ba9fc..11ff78dafdb00 100644 --- a/crates/aptos/e2e/local_testnet.py +++ b/crates/aptos/e2e/local_testnet.py @@ -17,7 +17,7 @@ def run_node(network: Network, image_repo_with_project: str, pull=True): image_name = build_image_name(image_repo_with_project, network) container_name = f"aptos-tools-{network}" - LOG.info(f"Trying to run aptos CLI localnet from image: {image_name}") + LOG.info(f"Trying to run movement CLI localnet from image: {image_name}") # Confirm that the Docker daemon is running. try: @@ -75,7 +75,7 @@ def run_node(network: Network, image_repo_with_project: str, pull=True): **kwargs, ) - LOG.info(f"Running aptos CLI localnet from image: {image_name}. Container name: {container_name}") + LOG.info(f"Running movement CLI localnet from image: {image_name}. Container name: {container_name}") return container_name diff --git a/crates/aptos/homebrew/README.md b/crates/aptos/homebrew/README.md index 16242bea2174a..8639ea40ece72 100644 --- a/crates/aptos/homebrew/README.md +++ b/crates/aptos/homebrew/README.md @@ -3,15 +3,14 @@ Homebrew is a package manager that works for MacOS Silicon and Intel chips as well as Linux distributions like Debian and Ubuntu. -The [Aptos command line interface (CLI)](https://aptos.dev/tools/aptos-cli/install-cli/) may be installed -via [Homebrew](https://brew.sh/) for simplicity. This is an in-depth overview of Homebrew and the Aptos formula. In this +The [Movement command line interface (CLI)](https://github.com/movementlabsxyz/aptos-core) may be installed +via [Homebrew](https://brew.sh/) for simplicity. This is an in-depth overview of Homebrew and the Movement formula. In this guide, we go over each section of the Homebrew formula and steps to implement changes in the future. ## Quick guide -- [Formula in Homebrew GitHub](https://github.com/Homebrew/homebrew-core/blob/master/Formula/aptos.rb) -- [Aptos 1.0.3 New Formula PR for GitHub](https://github.com/Homebrew/homebrew-core/pull/119832) -- [Aptos Formula Fix PR to use build_cli_release.sh](https://github.com/Homebrew/homebrew-core/pull/120051) +- [Formula in Homebrew GitHub](https://github.com/Homebrew/homebrew-core/blob/master/Formula/movement.rb) +- [Movement New Formula PR for GitHub]() ## Getting started @@ -27,29 +26,29 @@ brew help Once homebrew is installed, run ```bash -brew install aptos +brew install movement ``` to test that it installed correctly, try ```bash -aptos --help +movement --help # This should return something like -# aptos 1.0.5 -# Aptos Labs -# Command Line Interface (CLI) for developing and interacting with the Aptos blockchain +# movement 3.3.1 +# Movement Labs +# Command Line Interface (CLI) for developing and interacting with the Movement network # ... ``` ## Change guide -Note: This guide is for developers who are trying to update the Aptos homebrew formula. +Note: This guide is for developers who are trying to update the Movement homebrew formula. -You can get the latest formula here: https://github.com/Homebrew/homebrew-core/blob/master/Formula/a/aptos.rb +You can get the latest formula here: https://github.com/Homebrew/homebrew-core/blob/master/Formula/aptos.rb -Copy the `aptos.rb` file to your `homebrew` `formula` directory. For example, on macOS with an M1, this will likely be: +Copy the `movement.rb` file to your `homebrew` `formula` directory. For example, on macOS with an M1, this will likely be: ```bash /opt/homebrew/Library/Taps/homebrew/homebrew-core/Formula @@ -57,7 +56,7 @@ Copy the `aptos.rb` file to your `homebrew` `formula` directory. For example, on ### Development -After you've copied `aptos.rb` to your local `homebrew` `formula` directory, you can modify it and use the commands +After you've copied `movement.rb` to your local `homebrew` `formula` directory, you can modify it and use the commands below for testing. ```bash @@ -65,17 +64,17 @@ below for testing. /opt/homebrew/Library/Taps/homebrew/homebrew-core/Formula # Before submitting changes run -brew audit --new-formula aptos # For new formula -brew audit aptos --strict --online -brew install aptos -brew test aptos +brew audit --new-formula movement # For new formula +brew audit movement --strict --online +brew install movement +brew test movement # For debugging issues during the installation process you can do -brew install aptos --interactive # Interactive, gives you access to the shell -brew install aptos -d # Debug mode +brew install movement --interactive # Interactive, gives you access to the shell +brew install movement -d # Debug mode # Livecheck -brew livecheck --debug aptos +brew livecheck --debug movement ``` ### Committing changes @@ -92,11 +91,11 @@ Once you have audited and tested your brew formula using the commands above, mak ### Header ```ruby -class Aptos < Formula - desc "Layer 1 blockchain built to support fair access to decentralized assets for all" - homepage "https://aptoslabs.com/" - url "https://github.com/aptos-labs/aptos-core/archive/refs/tags/aptos-cli-v1.0.3.tar.gz" - sha256 "670bb6cb841cb8a65294878af9a4f03d4cba2a598ab4550061fed3a4b1fe4e98" +class Movement < Formula + desc "The first MoveVM Zk Layer 2 on Ethereum" + homepage "https://movementlabs.xyz" + url "" + sha256 "" license "Apache-2.0" ... ``` @@ -152,7 +151,7 @@ discussion. To run livecheck for testing, we recommend including the `--debug` argument: ```bash -brew livecheck --debug aptos +brew livecheck --debug movement ``` ### Depends on and installation @@ -203,7 +202,7 @@ brew livecheck --debug aptos To conduct tests, run: ```bash -brew test aptos +brew test movement ``` The current test generates a new key via the Aptos CLI and ensures the shell output matches the filename(s) for that diff --git a/crates/aptos/src/account/list.rs b/crates/aptos/src/account/list.rs index 75cf1af3b7472..9ee32ce7ecdd4 100644 --- a/crates/aptos/src/account/list.rs +++ b/crates/aptos/src/account/list.rs @@ -82,7 +82,7 @@ impl CliCommand> for ListAccount { account } else { return Err(CliError::CommandArgumentError( - "Please provide an account using --account or run aptos init".to_string(), + "Please provide an account using --account or run movement init".to_string(), )); }; diff --git a/crates/aptos/src/common/init.rs b/crates/aptos/src/common/init.rs index 904ca225706ec..e9459b5f49207 100644 --- a/crates/aptos/src/common/init.rs +++ b/crates/aptos/src/common/init.rs @@ -9,7 +9,7 @@ use crate::{ ConfigSearchMode, EncodingOptions, HardwareWalletOptions, PrivateKeyInputOptions, ProfileConfig, ProfileOptions, PromptOptions, RngArgs, DEFAULT_PROFILE, }, - utils::{fund_account, prompt_yes_with_override, read_line}, + utils::{explorer_account_link, fund_account, prompt_yes_with_override, read_line}, }, }; use aptos_crypto::{ed25519::Ed25519PrivateKey, PrivateKey, ValidCryptoMaterialStringExt}; @@ -22,14 +22,18 @@ use async_trait::async_trait; use clap::Parser; use reqwest::Url; use serde::{Deserialize, Serialize}; -use std::{collections::BTreeMap, str::FromStr}; +use std::{ + collections::BTreeMap, + fmt::{Display, Formatter}, + str::FromStr, +}; /// 1 APT (might not actually get that much, depending on the faucet) const NUM_DEFAULT_OCTAS: u64 = 100000000; -/// Tool to initialize current directory for the aptos tool +/// Tool to initialize current directory for the Movement tool /// -/// Configuration will be pushed into .aptos/config.yaml +/// Configuration will be pushed into .movement/config.yaml #[derive(Debug, Parser)] pub struct InitTool { /// Network to use for default settings @@ -97,7 +101,7 @@ impl CliCommand<()> for InitTool { // Select profile we're using let mut profile_config = if let Some(profile_config) = config.remove_profile(profile_name) { - prompt_yes_with_override(&format!("Aptos already initialized for profile {}, do you want to overwrite the existing config?", profile_name), self.prompt_options)?; + prompt_yes_with_override(&format!("Movement already initialized for profile {}, do you want to overwrite the existing config?", profile_name), self.prompt_options)?; profile_config } else { ProfileConfig::default() @@ -110,7 +114,7 @@ impl CliCommand<()> for InitTool { network } else { eprintln!( - "Choose network from [devnet, testnet, mainnet, local, custom | defaults to devnet]" + "Choose network from [devnet, testnet, local, custom | defaults to devnet]. For testnet, start over and run movement init --skip-faucet" ); let input = read_line("network")?; let input = input.trim(); @@ -122,22 +126,31 @@ impl CliCommand<()> for InitTool { } }; + if network == Network::Testnet && !self.skip_faucet { + return Err(CliError::CommandArgumentError(format!( + "For testnet, start over and run movement init --skip-faucet" + ))); + } + + // Ensure the config contains the network used + profile_config.network = Some(network); + // Ensure that there is at least a REST URL set for the network match network { - Network::Mainnet => { - profile_config.rest_url = - Some("https://fullnode.mainnet.aptoslabs.com".to_string()); - profile_config.faucet_url = None; - }, + // Network::Mainnet => { + // profile_config.rest_url = + // Some("https://fullnode.mainnet.aptoslabs.com".to_string()); + // profile_config.faucet_url = None; + // }, Network::Testnet => { profile_config.rest_url = - Some("https://fullnode.testnet.aptoslabs.com".to_string()); + Some("https://aptos.testnet.suzuka.movementlabs.xyz/v1/".to_string()); profile_config.faucet_url = - Some("https://faucet.testnet.aptoslabs.com".to_string()); + Some("https://faucet.testnet.suzuka.movementlabs.xyz/".to_string()); }, Network::Devnet => { - profile_config.rest_url = Some("https://fullnode.devnet.aptoslabs.com".to_string()); - profile_config.faucet_url = Some("https://faucet.devnet.aptoslabs.com".to_string()); + profile_config.rest_url = Some("https://aptos.devnet.inola.movementlabs.xyz/v1".to_string()); + profile_config.faucet_url = Some("https://faucet.devnet.inola.movementlabs.xyz".to_string()); }, Network::Local => { profile_config.rest_url = Some("http://localhost:8080".to_string()); @@ -321,9 +334,9 @@ impl CliCommand<()> for InitTool { } } else if account_exists { eprintln!("Account {} has been already found onchain", address); - } else if network == Network::Mainnet { + } /* else if network == Network::Mainnet { eprintln!("Account {} does not exist, you will need to create and fund the account by transferring funds from another account", address); - } else { + } */ else { eprintln!("Account {} has been initialized locally, but you must transfer coins to it to create the account onchain", address); } @@ -337,7 +350,18 @@ impl CliCommand<()> for InitTool { .expect("Must have profiles, as created above") .insert(profile_name.to_string(), profile_config); config.save()?; - eprintln!("\n---\nAptos CLI is now set up for account {} as profile {}! Run `aptos --help` for more information about commands", address, self.profile_options.profile_name().unwrap_or(DEFAULT_PROFILE)); + let profile_name = self + .profile_options + .profile_name() + .unwrap_or(DEFAULT_PROFILE); + eprintln!( + "\n---\nMovement CLI is now set up for account {} as profile {}!\n See the account here: {}\n + Run `movement --help` for more information about commands. \n + Visit https://faucet.movementlabs.xyz to use the testnet faucet.", + address, + profile_name, + explorer_account_link(address, Some(network)) + ); Ok(()) } } @@ -424,26 +448,38 @@ impl InitTool { /// Any command using this, will be simpler to setup as profiles #[derive(Copy, Clone, Debug, Serialize, Deserialize, Eq, PartialEq)] pub enum Network { - Mainnet, + // Mainnet, Testnet, Devnet, Local, Custom, } +impl Display for Network { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + write!(f, "{}", match self { + // Network::Mainnet => "mainnet", + Network::Testnet => "testnet", + Network::Devnet => "devnet", + Network::Local => "local", + Network::Custom => "custom", + }) + } +} + impl FromStr for Network { type Err = CliError; fn from_str(s: &str) -> Result { Ok(match s.to_lowercase().trim() { - "mainnet" => Self::Mainnet, + // "mainnet" => Self::Mainnet, "testnet" => Self::Testnet, "devnet" => Self::Devnet, "local" => Self::Local, "custom" => Self::Custom, str => { return Err(CliError::CommandArgumentError(format!( - "Invalid network {}. Must be one of [devnet, testnet, mainnet, local, custom]", + "Invalid network {}. Must be one of [devnet, testnet, local, custom]", str ))); }, diff --git a/crates/aptos/src/common/types.rs b/crates/aptos/src/common/types.rs index 496bc523dae72..905f211565365 100644 --- a/crates/aptos/src/common/types.rs +++ b/crates/aptos/src/common/types.rs @@ -1,7 +1,7 @@ // Copyright Š Aptos Foundation // SPDX-License-Identifier: Apache-2.0 -use super::utils::fund_account; +use super::utils::{explorer_transaction_link, fund_account}; use crate::{ common::{ init::Network, @@ -96,7 +96,7 @@ pub enum CliError { CommandArgumentError(String), #[error("Unable to load config: {0} {1}")] ConfigLoadError(String, String), - #[error("Unable to find config {0}, have you run `aptos init`?")] + #[error("Unable to find config {0}, have you run `movement init`?")] ConfigNotFoundError(String), #[error("Error accessing '{0}': {1}")] IO(String, #[source] std::io::Error), @@ -227,11 +227,12 @@ pub struct CliConfig { const CONFIG_FILE: &str = "config.yaml"; const LEGACY_CONFIG_FILE: &str = "config.yml"; -pub const CONFIG_FOLDER: &str = ".aptos"; +pub const CONFIG_FOLDER: &str = ".movement"; /// An individual profile #[derive(Debug, Default, Serialize, Deserialize)] pub struct ProfileConfig { + /// Name of network being used, if setup from aptos init #[serde(skip_serializing_if = "Option::is_none")] pub network: Option, /// Private key for commands. @@ -1716,25 +1717,19 @@ impl TransactionOptions { adjusted_max_gas }; - // Sign and submit transaction + // Build a transaction let transaction_factory = TransactionFactory::new(chain_id) .with_gas_unit_price(gas_unit_price) .with_max_gas_amount(max_gas) .with_transaction_expiration_time(self.gas_options.expiration_secs); - match self.get_transaction_account_type() { + // Sign it with the appropriate signer + let transaction = match self.get_transaction_account_type() { Ok(AccountType::Local) => { let (private_key, _) = self.get_key_and_address()?; let sender_account = &mut LocalAccount::new(sender_address, private_key, sequence_number); - let transaction = sender_account - .sign_with_transaction_builder(transaction_factory.payload(payload)); - let response = client - .submit_and_wait(&transaction) - .await - .map_err(|err| CliError::ApiError(err.to_string()))?; - - Ok(response.into_inner()) + sender_account.sign_with_transaction_builder(transaction_factory.payload(payload)) }, Ok(AccountType::HardwareWallet) => { let sender_account = &mut HardwareWalletAccount::new( @@ -1747,17 +1742,33 @@ impl TransactionOptions { HardwareWalletType::Ledger, sequence_number, ); - let transaction = sender_account - .sign_with_transaction_builder(transaction_factory.payload(payload))?; - let response = client - .submit_and_wait(&transaction) - .await - .map_err(|err| CliError::ApiError(err.to_string()))?; - - Ok(response.into_inner()) + sender_account + .sign_with_transaction_builder(transaction_factory.payload(payload))? }, - Err(err) => Err(err), - } + Err(err) => return Err(err), + }; + + // Submit the transaction, printing out a useful transaction link + client + .submit_bcs(&transaction) + .await + .map_err(|err| CliError::ApiError(err.to_string()))?; + let transaction_hash = transaction.clone().committed_hash(); + let network = self + .profile_options + .profile() + .ok() + .and_then(|profile| profile.network); + eprintln!( + "Transaction submitted: {}", + explorer_transaction_link(transaction_hash, network) + ); + let response = client + .wait_for_signed_transaction(&transaction) + .await + .map_err(|err| CliError::ApiError(err.to_string()))?; + + Ok(response.into_inner()) } /// Simulates a transaction locally, using the debugger to fetch required data from remote. diff --git a/crates/aptos/src/common/utils.rs b/crates/aptos/src/common/utils.rs index 9fcd7bc507c08..6ff29b11605c8 100644 --- a/crates/aptos/src/common/utils.rs +++ b/crates/aptos/src/common/utils.rs @@ -2,9 +2,12 @@ // SPDX-License-Identifier: Apache-2.0 use crate::{ - common::types::{ - account_address_from_public_key, CliError, CliTypedResult, PromptOptions, - TransactionOptions, TransactionSummary, + common::{ + init::Network, + types::{ + account_address_from_public_key, CliError, CliTypedResult, PromptOptions, + TransactionOptions, TransactionSummary, + }, }, config::GlobalConfig, CliResult, @@ -563,3 +566,31 @@ pub fn view_json_option_str(option_ref: &serde_json::Value) -> CliTypedResult) -> String { + // For now, default to what the browser is already on, though the link could be wrong + if let Some(network) = network { + format!( + "https://explorer.movementlabs.xyz/account/{}?network={}", + hash, network + ) + } else { + format!("https://explorer.movementlabs.xyz/account/{}", hash) + } +} + +pub fn explorer_transaction_link( + hash: aptos_crypto::HashValue, + network: Option, +) -> String { + // For now, default to what the browser is already on, though the link could be wrong + if let Some(network) = network { + format!( + "https://explorer.movementlabs.xyz/txn/{}?network={}", + hash.to_hex_literal(), + network + ) + } else { + format!("https://explorer.movementlabs.xyz/txn/{}", hash) + } +} diff --git a/crates/aptos/src/config/mod.rs b/crates/aptos/src/config/mod.rs index 00e8fc401b81a..bd1dd77edf26c 100644 --- a/crates/aptos/src/config/mod.rs +++ b/crates/aptos/src/config/mod.rs @@ -19,7 +19,7 @@ use clap_complete::Shell; use serde::{Deserialize, Serialize}; use std::{collections::BTreeMap, fmt::Formatter, path::PathBuf, str::FromStr}; -/// Tool for interacting with configuration of the Aptos CLI tool +/// Tool for interacting with configuration of the Movement CLI tool /// /// This tool handles the global configuration of the CLI tool for /// default configuration, and user specific settings. @@ -64,7 +64,7 @@ impl CliCommand<()> for GenerateShellCompletions { } async fn execute(self) -> CliTypedResult<()> { - generate_cli_completions::("aptos", self.shell, self.output_file.as_path()) + generate_cli_completions::("movement", self.shell, self.output_file.as_path()) .map_err(|err| CliError::IO(self.output_file.display().to_string(), err)) } } @@ -76,8 +76,8 @@ impl CliCommand<()> for GenerateShellCompletions { pub struct SetGlobalConfig { /// A configuration for where to place and use the config /// - /// `Workspace` will put the `.aptos/` folder in the current directory, where - /// `Global` will put the `.aptos/` folder in your home directory + /// `Workspace` will put the `.movement/` folder in the current directory, where + /// `Global` will put the `.movement/` folder in your home directory #[clap(long)] config_type: Option, /// A configuration for how to expect the prompt response @@ -273,9 +273,9 @@ const WORKSPACE: &str = "workspace"; /// Global allows for one config for every part of the code #[derive(Debug, Copy, Clone, Serialize, Deserialize, ValueEnum)] pub enum ConfigType { - /// Per system user configuration put in `/.aptos` + /// Per system user configuration put in `/.movement` Global, - /// Per directory configuration put in `/.aptos` + /// Per directory configuration put in `/.movement` Workspace, } diff --git a/crates/aptos/src/lib.rs b/crates/aptos/src/lib.rs index 49a0d3c79816b..03dce8730aedc 100644 --- a/crates/aptos/src/lib.rs +++ b/crates/aptos/src/lib.rs @@ -25,7 +25,7 @@ use async_trait::async_trait; use clap::Parser; use std::collections::BTreeMap; -/// Command Line Interface (CLI) for developing and interacting with the Aptos blockchain +/// Command Line Interface (CLI) for developing and interacting with Movement #[derive(Parser)] #[clap(name = "aptos", author, version, propagate_version = true, styles = aptos_cli_common::aptos_cli_style())] pub enum Tool { diff --git a/crates/aptos/src/main.rs b/crates/aptos/src/main.rs index 86d950d2098bd..f85244f6a2d2c 100644 --- a/crates/aptos/src/main.rs +++ b/crates/aptos/src/main.rs @@ -9,7 +9,7 @@ #[global_allocator] static ALLOC: jemallocator::Jemalloc = jemallocator::Jemalloc; -use aptos::{move_tool, Tool}; +use movement::{move_tool, Tool}; use clap::Parser; use std::{process::exit, time::Duration}; diff --git a/crates/aptos/src/move_tool/mod.rs b/crates/aptos/src/move_tool/mod.rs index d5dee099d6d2e..109a3c308b813 100644 --- a/crates/aptos/src/move_tool/mod.rs +++ b/crates/aptos/src/move_tool/mod.rs @@ -69,14 +69,18 @@ use tokio::task; use url::Url; mod aptos_debug_natives; -mod bytecode; +pub mod bytecode; pub mod coverage; -mod manifest; +pub mod manifest; pub mod package_hooks; -mod show; +pub mod show; pub mod stored_package; -/// Tool for Move related operations +const HELLO_BLOCKCHAIN_EXAMPLE: &str = include_str!( + "../../../../aptos-move/move-examples/hello_blockchain/sources/hello_blockchain.move" +); + +/// Tool for Move smart contract related operations /// /// This tool lets you compile, test, and publish Move code, in addition /// to run any other tools that help run, verify, or provide information @@ -85,7 +89,9 @@ pub mod stored_package; pub enum MoveTool { BuildPublishPayload(BuildPublishPayload), Clean(CleanPackage), + #[clap(alias = "build")] Compile(CompilePackage), + #[clap(alias = "build-script")] CompileScript(CompileScript), #[clap(subcommand)] Coverage(coverage::CoveragePackage), @@ -94,11 +100,13 @@ pub enum MoveTool { CreateResourceAccountAndPublishPackage(CreateResourceAccountAndPublishPackage), Disassemble(Disassemble), Decompile(Decompile), + #[clap(alias = "doc")] Document(DocumentPackage), Download(DownloadPackage), Init(InitPackage), List(ListPackage), Prove(ProvePackage), + #[clap(alias = "deploy")] Publish(PublishPackage), Run(RunFunction), RunScript(RunScript), @@ -201,24 +209,30 @@ impl FrameworkPackageArgs { // Add the framework dependency if it's provided let mut dependencies = BTreeMap::new(); if let Some(ref path) = self.framework_local_dir { - dependencies.insert(APTOS_FRAMEWORK.to_string(), Dependency { - local: Some(path.display().to_string()), - git: None, - rev: None, - subdir: None, - aptos: None, - address: None, - }); + dependencies.insert( + APTOS_FRAMEWORK.to_string(), + Dependency { + local: Some(path.display().to_string()), + git: None, + rev: None, + subdir: None, + aptos: None, + address: None, + }, + ); } else { let git_rev = self.framework_git_rev.as_deref().unwrap_or(DEFAULT_BRANCH); - dependencies.insert(APTOS_FRAMEWORK.to_string(), Dependency { - local: None, - git: Some(APTOS_GIT_PATH.to_string()), - rev: Some(git_rev.to_string()), - subdir: Some(SUBDIR_PATH.to_string()), - aptos: None, - address: None, - }); + dependencies.insert( + APTOS_FRAMEWORK.to_string(), + Dependency { + local: None, + git: Some(APTOS_GIT_PATH.to_string()), + rev: Some(git_rev.to_string()), + subdir: Some(SUBDIR_PATH.to_string()), + aptos: None, + address: None, + }, + ); } let manifest = MovePackageManifest { @@ -244,6 +258,11 @@ impl FrameworkPackageArgs { } } +#[derive(ValueEnum, Clone, Copy, Debug)] +pub enum Template { + HelloBlockchain, +} + /// Creates a new Move package at the given location /// /// This will create a directory for a Move package and a corresponding @@ -272,6 +291,10 @@ pub struct InitPackage { )] pub(crate) named_addresses: BTreeMap, + /// Template name for initialization + #[clap(long)] + pub(crate) template: Option