Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 1b4236bd24 |
@@ -10,17 +10,15 @@ RUN apt-get update && apt-get upgrade -y && \
|
||||
libcurl4-openssl-dev \
|
||||
libgmp-dev \
|
||||
libssl-dev \
|
||||
libusb-1.0-0-dev \
|
||||
llvm-7-dev \
|
||||
ninja-build \
|
||||
pkg-config \
|
||||
python3 \
|
||||
python3-numpy \
|
||||
python3-pip \
|
||||
software-properties-common \
|
||||
zlib1g-dev \
|
||||
zstd
|
||||
|
||||
RUN python3 -m pip install dataclasses
|
||||
|
||||
# GitHub's actions/checkout requires git 2.18+ but Ubuntu 18 only provides 2.17
|
||||
RUN add-apt-repository ppa:git-core/ppa && apt update && apt install -y git
|
||||
|
||||
|
||||
@@ -10,7 +10,8 @@ RUN apt-get update && apt-get upgrade -y && \
|
||||
libcurl4-openssl-dev \
|
||||
libgmp-dev \
|
||||
libssl-dev \
|
||||
libusb-1.0-0-dev \
|
||||
llvm-11-dev \
|
||||
ninja-build \
|
||||
python3-numpy \
|
||||
pkg-config \
|
||||
zstd
|
||||
|
||||
@@ -10,7 +10,8 @@ RUN apt-get update && apt-get upgrade -y && \
|
||||
libcurl4-openssl-dev \
|
||||
libgmp-dev \
|
||||
libssl-dev \
|
||||
libusb-1.0-0-dev \
|
||||
llvm-11-dev \
|
||||
ninja-build \
|
||||
python3-numpy \
|
||||
pkg-config \
|
||||
zstd
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
name: 'Parallel ctest'
|
||||
description: 'Runs a set of labeled ctests in parallel via multiple docker containers'
|
||||
inputs:
|
||||
container:
|
||||
required: true
|
||||
error-log-paths:
|
||||
required: true
|
||||
log-tarball-prefix:
|
||||
required: true
|
||||
tests-label:
|
||||
required: true
|
||||
runs:
|
||||
using: 'node16'
|
||||
main: 'dist/index.mjs'
|
||||
File diff suppressed because one or more lines are too long
@@ -1,69 +0,0 @@
|
||||
import child_process from 'node:child_process';
|
||||
import process from 'node:process';
|
||||
import stream from 'node:stream';
|
||||
import fs from 'node:fs';
|
||||
import zlib from 'node:zlib';
|
||||
import tar from 'tar-stream';
|
||||
import core from '@actions/core'
|
||||
|
||||
const container = core.getInput('container', {required: true});
|
||||
const error_log_paths = JSON.parse(core.getInput('error-log-paths', {required: true}));
|
||||
const log_tarball_prefix = core.getInput('log-tarball-prefix', {required: true});
|
||||
const tests_label = core.getInput('tests-label', {required: true});
|
||||
|
||||
try {
|
||||
if(child_process.spawnSync("docker", ["run", "--name", "base", "-v", `${process.cwd()}/build.tar.zst:/build.tar.zst`, "--workdir", "/__w/leap/leap", container, "sh", "-c", "zstdcat /build.tar.zst | tar x"], {stdio:"inherit"}).status)
|
||||
throw new Error("Failed to create base container");
|
||||
if(child_process.spawnSync("docker", ["commit", "base", "baseimage"], {stdio:"inherit"}).status)
|
||||
throw new Error("Failed to create base image");
|
||||
if(child_process.spawnSync("docker", ["rm", "base"], {stdio:"inherit"}).status)
|
||||
throw new Error("Failed to remove base container");
|
||||
|
||||
// the correct approach is by far "--show-only=json-v1" and then pluck out .tests[].name; but that doesn't work on U18's cmake 3.10 since it lacks json-v1 output
|
||||
const test_query_result = child_process.spawnSync("docker", ["run", "--rm", "baseimage", "bash", "-e", "-o", "pipefail", "-c", `cd build; ctest -L '${tests_label}' --show-only | head -n -1 | cut -d ':' -f 2 -s | jq -cnR '[inputs | select(length>0)[1:]]'`]);
|
||||
if(test_query_result.status)
|
||||
throw new Error("Failed to discover tests with label")
|
||||
const tests = JSON.parse(test_query_result.stdout);
|
||||
|
||||
let subprocesses = [];
|
||||
tests.forEach(t => {
|
||||
subprocesses.push(new Promise(resolve => {
|
||||
child_process.spawn("docker", ["run", "--security-opt", "seccomp=unconfined", "-e", "GITHUB_ACTIONS=True", "--name", t, "--init", "baseimage", "bash", "-c", `cd build; ctest --output-on-failure -R '^${t}$'`], {stdio:"inherit"}).on('close', code => resolve(code));
|
||||
}));
|
||||
});
|
||||
|
||||
const results = await Promise.all(subprocesses);
|
||||
|
||||
for(let i = 0; i < results.length; ++i) {
|
||||
if(results[i] === 0)
|
||||
continue;
|
||||
|
||||
//failing test
|
||||
core.setFailed("Some tests failed");
|
||||
|
||||
let extractor = tar.extract();
|
||||
let packer = tar.pack();
|
||||
|
||||
extractor.on('entry', (header, stream, next) => {
|
||||
if(!header.name.startsWith(`__w/leap/leap/build`)) {
|
||||
stream.on('end', () => next());
|
||||
stream.resume();
|
||||
return;
|
||||
}
|
||||
|
||||
header.name = header.name.substring(`__w/leap/leap/`.length);
|
||||
if(header.name !== "build/" && error_log_paths.filter(p => header.name.startsWith(p)).length === 0) {
|
||||
stream.on('end', () => next());
|
||||
stream.resume();
|
||||
return;
|
||||
}
|
||||
|
||||
stream.pipe(packer.entry(header, next));
|
||||
}).on('finish', () => {packer.finalize()});
|
||||
|
||||
child_process.spawn("docker", ["export", tests[i]]).stdout.pipe(extractor);
|
||||
stream.promises.pipeline(packer, zlib.createGzip(), fs.createWriteStream(`${log_tarball_prefix}-${tests[i]}-logs.tar.gz`));
|
||||
}
|
||||
} catch(e) {
|
||||
core.setFailed(`Uncaught exception ${e.message}`);
|
||||
}
|
||||
@@ -1,351 +0,0 @@
|
||||
{
|
||||
"name": "parallel-ctest-containers",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"dependencies": {
|
||||
"@actions/core": "^1.9.1",
|
||||
"@vercel/ncc": "^0.34.0",
|
||||
"tar-stream": "^2.2.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@actions/core": {
|
||||
"version": "1.9.1",
|
||||
"resolved": "https://registry.npmjs.org/@actions/core/-/core-1.9.1.tgz",
|
||||
"integrity": "sha512-5ad+U2YGrmmiw6du20AQW5XuWo7UKN2052FjSV7MX+Wfjf8sCqcsZe62NfgHys4QI4/Y+vQvLKYL8jWtA1ZBTA==",
|
||||
"dependencies": {
|
||||
"@actions/http-client": "^2.0.1",
|
||||
"uuid": "^8.3.2"
|
||||
}
|
||||
},
|
||||
"node_modules/@actions/http-client": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.0.1.tgz",
|
||||
"integrity": "sha512-PIXiMVtz6VvyaRsGY268qvj57hXQEpsYogYOu2nrQhlf+XCGmZstmuZBbAybUl1nQGnvS1k1eEsQ69ZoD7xlSw==",
|
||||
"dependencies": {
|
||||
"tunnel": "^0.0.6"
|
||||
}
|
||||
},
|
||||
"node_modules/@vercel/ncc": {
|
||||
"version": "0.34.0",
|
||||
"resolved": "https://registry.npmjs.org/@vercel/ncc/-/ncc-0.34.0.tgz",
|
||||
"integrity": "sha512-G9h5ZLBJ/V57Ou9vz5hI8pda/YQX5HQszCs3AmIus3XzsmRn/0Ptic5otD3xVST8QLKk7AMk7AqpsyQGN7MZ9A==",
|
||||
"bin": {
|
||||
"ncc": "dist/ncc/cli.js"
|
||||
}
|
||||
},
|
||||
"node_modules/base64-js": {
|
||||
"version": "1.5.1",
|
||||
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
|
||||
"integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/feross"
|
||||
},
|
||||
{
|
||||
"type": "patreon",
|
||||
"url": "https://www.patreon.com/feross"
|
||||
},
|
||||
{
|
||||
"type": "consulting",
|
||||
"url": "https://feross.org/support"
|
||||
}
|
||||
]
|
||||
},
|
||||
"node_modules/bl": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
|
||||
"integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
|
||||
"dependencies": {
|
||||
"buffer": "^5.5.0",
|
||||
"inherits": "^2.0.4",
|
||||
"readable-stream": "^3.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/buffer": {
|
||||
"version": "5.7.1",
|
||||
"resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
|
||||
"integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/feross"
|
||||
},
|
||||
{
|
||||
"type": "patreon",
|
||||
"url": "https://www.patreon.com/feross"
|
||||
},
|
||||
{
|
||||
"type": "consulting",
|
||||
"url": "https://feross.org/support"
|
||||
}
|
||||
],
|
||||
"dependencies": {
|
||||
"base64-js": "^1.3.1",
|
||||
"ieee754": "^1.1.13"
|
||||
}
|
||||
},
|
||||
"node_modules/end-of-stream": {
|
||||
"version": "1.4.4",
|
||||
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
|
||||
"integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
|
||||
"dependencies": {
|
||||
"once": "^1.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/fs-constants": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
|
||||
"integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="
|
||||
},
|
||||
"node_modules/ieee754": {
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
|
||||
"integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/feross"
|
||||
},
|
||||
{
|
||||
"type": "patreon",
|
||||
"url": "https://www.patreon.com/feross"
|
||||
},
|
||||
{
|
||||
"type": "consulting",
|
||||
"url": "https://feross.org/support"
|
||||
}
|
||||
]
|
||||
},
|
||||
"node_modules/inherits": {
|
||||
"version": "2.0.4",
|
||||
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
|
||||
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
|
||||
},
|
||||
"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==",
|
||||
"dependencies": {
|
||||
"wrappy": "1"
|
||||
}
|
||||
},
|
||||
"node_modules/readable-stream": {
|
||||
"version": "3.6.0",
|
||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
|
||||
"integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
|
||||
"dependencies": {
|
||||
"inherits": "^2.0.3",
|
||||
"string_decoder": "^1.1.1",
|
||||
"util-deprecate": "^1.0.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 6"
|
||||
}
|
||||
},
|
||||
"node_modules/safe-buffer": {
|
||||
"version": "5.2.1",
|
||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
|
||||
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/feross"
|
||||
},
|
||||
{
|
||||
"type": "patreon",
|
||||
"url": "https://www.patreon.com/feross"
|
||||
},
|
||||
{
|
||||
"type": "consulting",
|
||||
"url": "https://feross.org/support"
|
||||
}
|
||||
]
|
||||
},
|
||||
"node_modules/string_decoder": {
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
|
||||
"integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
|
||||
"dependencies": {
|
||||
"safe-buffer": "~5.2.0"
|
||||
}
|
||||
},
|
||||
"node_modules/tar-stream": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
|
||||
"integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
|
||||
"dependencies": {
|
||||
"bl": "^4.0.3",
|
||||
"end-of-stream": "^1.4.1",
|
||||
"fs-constants": "^1.0.0",
|
||||
"inherits": "^2.0.3",
|
||||
"readable-stream": "^3.1.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/tunnel": {
|
||||
"version": "0.0.6",
|
||||
"resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
|
||||
"integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==",
|
||||
"engines": {
|
||||
"node": ">=0.6.11 <=0.7.0 || >=0.7.3"
|
||||
}
|
||||
},
|
||||
"node_modules/util-deprecate": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
|
||||
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
|
||||
},
|
||||
"node_modules/uuid": {
|
||||
"version": "8.3.2",
|
||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
|
||||
"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
|
||||
"bin": {
|
||||
"uuid": "dist/bin/uuid"
|
||||
}
|
||||
},
|
||||
"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=="
|
||||
}
|
||||
},
|
||||
"dependencies": {
|
||||
"@actions/core": {
|
||||
"version": "1.9.1",
|
||||
"resolved": "https://registry.npmjs.org/@actions/core/-/core-1.9.1.tgz",
|
||||
"integrity": "sha512-5ad+U2YGrmmiw6du20AQW5XuWo7UKN2052FjSV7MX+Wfjf8sCqcsZe62NfgHys4QI4/Y+vQvLKYL8jWtA1ZBTA==",
|
||||
"requires": {
|
||||
"@actions/http-client": "^2.0.1",
|
||||
"uuid": "^8.3.2"
|
||||
}
|
||||
},
|
||||
"@actions/http-client": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.0.1.tgz",
|
||||
"integrity": "sha512-PIXiMVtz6VvyaRsGY268qvj57hXQEpsYogYOu2nrQhlf+XCGmZstmuZBbAybUl1nQGnvS1k1eEsQ69ZoD7xlSw==",
|
||||
"requires": {
|
||||
"tunnel": "^0.0.6"
|
||||
}
|
||||
},
|
||||
"@vercel/ncc": {
|
||||
"version": "0.34.0",
|
||||
"resolved": "https://registry.npmjs.org/@vercel/ncc/-/ncc-0.34.0.tgz",
|
||||
"integrity": "sha512-G9h5ZLBJ/V57Ou9vz5hI8pda/YQX5HQszCs3AmIus3XzsmRn/0Ptic5otD3xVST8QLKk7AMk7AqpsyQGN7MZ9A=="
|
||||
},
|
||||
"base64-js": {
|
||||
"version": "1.5.1",
|
||||
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
|
||||
"integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
|
||||
},
|
||||
"bl": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
|
||||
"integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
|
||||
"requires": {
|
||||
"buffer": "^5.5.0",
|
||||
"inherits": "^2.0.4",
|
||||
"readable-stream": "^3.4.0"
|
||||
}
|
||||
},
|
||||
"buffer": {
|
||||
"version": "5.7.1",
|
||||
"resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
|
||||
"integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
|
||||
"requires": {
|
||||
"base64-js": "^1.3.1",
|
||||
"ieee754": "^1.1.13"
|
||||
}
|
||||
},
|
||||
"end-of-stream": {
|
||||
"version": "1.4.4",
|
||||
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
|
||||
"integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
|
||||
"requires": {
|
||||
"once": "^1.4.0"
|
||||
}
|
||||
},
|
||||
"fs-constants": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
|
||||
"integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="
|
||||
},
|
||||
"ieee754": {
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
|
||||
"integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
|
||||
},
|
||||
"inherits": {
|
||||
"version": "2.0.4",
|
||||
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
|
||||
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
|
||||
},
|
||||
"once": {
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
|
||||
"integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
|
||||
"requires": {
|
||||
"wrappy": "1"
|
||||
}
|
||||
},
|
||||
"readable-stream": {
|
||||
"version": "3.6.0",
|
||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
|
||||
"integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
|
||||
"requires": {
|
||||
"inherits": "^2.0.3",
|
||||
"string_decoder": "^1.1.1",
|
||||
"util-deprecate": "^1.0.1"
|
||||
}
|
||||
},
|
||||
"safe-buffer": {
|
||||
"version": "5.2.1",
|
||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
|
||||
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
|
||||
},
|
||||
"string_decoder": {
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
|
||||
"integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
|
||||
"requires": {
|
||||
"safe-buffer": "~5.2.0"
|
||||
}
|
||||
},
|
||||
"tar-stream": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
|
||||
"integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
|
||||
"requires": {
|
||||
"bl": "^4.0.3",
|
||||
"end-of-stream": "^1.4.1",
|
||||
"fs-constants": "^1.0.0",
|
||||
"inherits": "^2.0.3",
|
||||
"readable-stream": "^3.1.1"
|
||||
}
|
||||
},
|
||||
"tunnel": {
|
||||
"version": "0.0.6",
|
||||
"resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
|
||||
"integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg=="
|
||||
},
|
||||
"util-deprecate": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
|
||||
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
|
||||
},
|
||||
"uuid": {
|
||||
"version": "8.3.2",
|
||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
|
||||
"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
|
||||
},
|
||||
"wrappy": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
|
||||
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
{
|
||||
"dependencies": {
|
||||
"@actions/core": "^1.9.1",
|
||||
"@vercel/ncc": "^0.34.0",
|
||||
"tar-stream": "^2.2.0"
|
||||
}
|
||||
}
|
||||
@@ -7,9 +7,13 @@ on:
|
||||
- "release/*"
|
||||
pull_request:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
run-lr-tests:
|
||||
description: 'Run long running tests'
|
||||
type: boolean
|
||||
|
||||
permissions:
|
||||
packages: read
|
||||
packages: write
|
||||
contents: read
|
||||
|
||||
defaults:
|
||||
@@ -40,9 +44,6 @@ jobs:
|
||||
matrix:
|
||||
platform: ${{fromJSON(needs.d.outputs.missing-platforms)}}
|
||||
runs-on: ["self-hosted", "enf-x86-beefy"]
|
||||
permissions:
|
||||
packages: write
|
||||
contents: read
|
||||
steps:
|
||||
- name: Login to Container Registry
|
||||
uses: docker/login-action@v2
|
||||
@@ -56,7 +57,6 @@ jobs:
|
||||
push: true
|
||||
tags: ${{fromJSON(needs.d.outputs.p)[matrix.platform].image}}
|
||||
file: ${{fromJSON(needs.d.outputs.p)[matrix.platform].dockerfile}}
|
||||
|
||||
Build:
|
||||
needs: [d, build-platforms]
|
||||
if: always() && needs.d.result == 'success' && (needs.build-platforms.result == 'success' || needs.build-platforms.result == 'skipped')
|
||||
@@ -64,6 +64,8 @@ jobs:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
platform: [ubuntu18, ubuntu20, ubuntu22]
|
||||
outputs:
|
||||
lr-tests: ${{steps.build.outputs.lr-tests}}
|
||||
runs-on: ["self-hosted", "enf-x86-beefy"]
|
||||
container: ${{fromJSON(needs.d.outputs.p)[matrix.platform].image}}
|
||||
steps:
|
||||
@@ -79,38 +81,25 @@ jobs:
|
||||
cd build
|
||||
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr -GNinja ..
|
||||
ninja
|
||||
tar -pc -C .. --exclude "*.o" build | zstd --long -T0 -9 > ../build.tar.zst
|
||||
# the correct approach is by far "--show-only=json-v1 | jq '.tests[].name' | jq -sc" but that doesn't work on U18's cmake 3.10 since it lacks json-v1
|
||||
echo ::set-output name=lr-tests::$(ctest -L "long_running_tests" --show-only | head -n -1 | cut -d ':' -f 2 -s | jq -cnR '[inputs | select(length>0)[1:]]')
|
||||
tar -pc -C .. --exclude "*.a" --exclude "*.o" build | zstd --long -T0 -9 > ../build.tar.gz
|
||||
- name: Upload builddir
|
||||
uses: AntelopeIO/upload-artifact-large-chunks-action@v1
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: ${{matrix.platform}}-build
|
||||
path: build.tar.zst
|
||||
|
||||
dev-package:
|
||||
name: Build leap-dev package
|
||||
needs: [d, Build]
|
||||
if: always() && needs.Build.result == 'success'
|
||||
runs-on: ubuntu-latest
|
||||
container: ${{fromJSON(needs.d.outputs.p)['ubuntu20'].image}}
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
submodules: true
|
||||
- name: Download builddir
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: ubuntu20-build
|
||||
- name: Build dev package
|
||||
run: |
|
||||
zstdcat build.tar.zst | tar x
|
||||
cd build
|
||||
cpack
|
||||
- name: Upload dev package
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: leap-dev-ubuntu20-amd64
|
||||
path: build/leap-dev*.deb
|
||||
|
||||
path: build.tar.gz
|
||||
- name: Build dev package (Ubuntu 20 only)
|
||||
if: matrix.platform == 'ubuntu20'
|
||||
run: |
|
||||
cd build
|
||||
ninja package
|
||||
- name: Upload dev package (Ubuntu 20 only)
|
||||
if: matrix.platform == 'ubuntu20'
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: leap-dev-ubuntu20-amd64
|
||||
path: build/leap-dev*.deb
|
||||
tests:
|
||||
name: Tests
|
||||
needs: [d, Build]
|
||||
@@ -118,13 +107,13 @@ jobs:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
platform: [ubuntu20, ubuntu22]
|
||||
runs-on: ["self-hosted", "enf-x86-hightier"]
|
||||
container:
|
||||
image: ${{fromJSON(needs.d.outputs.p)[matrix.platform].image}}
|
||||
options: --security-opt seccomp=unconfined
|
||||
platform: [ubuntu20]
|
||||
runs-on: ["self-hosted", "enf-x86-beefy"]
|
||||
container: ${{fromJSON(needs.d.outputs.p)[matrix.platform].image}}
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
submodules: true
|
||||
- name: Download builddir
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
@@ -133,13 +122,9 @@ jobs:
|
||||
run: |
|
||||
# https://github.com/actions/runner/issues/2033 -- need this because of full version label test looking at git revs
|
||||
chown -R $(id -u):$(id -g) $PWD
|
||||
# jammy's boost 1.74 can stumble on an EXDEV via copy_file_range() it doesn't have a fallback for; re-eval once moving to std::filesystem
|
||||
export TMPDIR="$PWD/tmp"
|
||||
mkdir -p $TMPDIR
|
||||
zstdcat build.tar.zst | tar x
|
||||
zstdcat build.tar.gz | tar x
|
||||
cd build
|
||||
ctest --output-on-failure -j $(nproc) -LE "(nonparallelizable_tests|long_running_tests)"
|
||||
|
||||
np-tests:
|
||||
name: NP Tests
|
||||
needs: [d, Build]
|
||||
@@ -147,62 +132,70 @@ jobs:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
platform: [ubuntu18, ubuntu20, ubuntu22]
|
||||
runs-on: ["self-hosted", "enf-x86-midtier"]
|
||||
platform: [ubuntu20]
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: ${{fromJSON(needs.d.outputs.p)[matrix.platform].image}}
|
||||
options: --init
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Download builddir
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: ${{matrix.platform}}-build
|
||||
- name: Run tests in parallel containers
|
||||
uses: ./.github/actions/parallel-ctest-containers
|
||||
with:
|
||||
container: ${{fromJSON(needs.d.outputs.p)[matrix.platform].image}}
|
||||
error-log-paths: '["build/etc", "build/var", "build/leap-ignition-wd", "build/TestLogs"]'
|
||||
log-tarball-prefix: ${{matrix.platform}}
|
||||
tests-label: nonparallelizable_tests
|
||||
- name: Run NP Tests
|
||||
run: |
|
||||
zstdcat build.tar.gz | tar x
|
||||
cd build
|
||||
ctest --output-on-failure -L "nonparallelizable_tests"
|
||||
- name: Bundle logs from failed tests
|
||||
if: failure()
|
||||
run: tar -czf ${{matrix.platform}}-serial-logs.tar.gz build/var build/etc build/leap-ignition-wd
|
||||
- name: Upload logs from failed tests
|
||||
uses: actions/upload-artifact@v3
|
||||
if: failure()
|
||||
with:
|
||||
name: ${{matrix.platform}}-np-logs
|
||||
path: '*-logs.tar.gz'
|
||||
|
||||
name: ${{matrix.platform}}-serial-logs
|
||||
path: ${{matrix.platform}}-serial-logs.tar.gz
|
||||
lr-tests:
|
||||
name: LR Tests
|
||||
needs: [d, Build]
|
||||
if: always() && needs.Build.result == 'success'
|
||||
if: always() && needs.Build.result == 'success' && (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/heads/release/') || inputs.run-lr-tests)
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
platform: [ubuntu18, ubuntu20, ubuntu22]
|
||||
runs-on: ["self-hosted", "enf-x86-lowtier"]
|
||||
platform: [ubuntu20]
|
||||
test-name: ${{fromJSON(needs.Build.outputs.lr-tests)}}
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: ${{fromJSON(needs.d.outputs.p)[matrix.platform].image}}
|
||||
options: --init
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Download builddir
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: ${{matrix.platform}}-build
|
||||
- name: Run tests in parallel containers
|
||||
uses: ./.github/actions/parallel-ctest-containers
|
||||
with:
|
||||
container: ${{fromJSON(needs.d.outputs.p)[matrix.platform].image}}
|
||||
error-log-paths: '["build/etc", "build/var", "build/leap-ignition-wd", "build/TestLogs"]'
|
||||
log-tarball-prefix: ${{matrix.platform}}
|
||||
tests-label: long_running_tests
|
||||
- name: Upload logs from failed tests
|
||||
- name: Run ${{matrix.test-name}} Test
|
||||
run: |
|
||||
zstdcat build.tar.gz | tar x
|
||||
cd build
|
||||
ctest --output-on-failure -R ${{matrix.test-name}}
|
||||
- name: Bundle logs from failed tests
|
||||
if: failure()
|
||||
run: tar -czf ${{matrix.platform}}-${{matrix.test-name}}-logs.tar.gz build/var build/etc build/leap-ignition-wd
|
||||
- name: Upload logs from failed tests
|
||||
uses: actions/upload-artifact@v3
|
||||
if: failure()
|
||||
with:
|
||||
name: ${{matrix.platform}}-lr-logs
|
||||
path: '*-logs.tar.gz'
|
||||
name: ${{matrix.platform}}-${{matrix.test-name}}-logs
|
||||
path: ${{matrix.platform}}-${{matrix.test-name}}-logs.tar.gz
|
||||
|
||||
all-passing:
|
||||
name: All Required Tests Passed
|
||||
needs: [dev-package, tests, np-tests]
|
||||
needs: [tests, np-tests]
|
||||
if: always()
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- if: needs.dev-package.result != 'success' || needs.tests.result != 'success' || needs.np-tests.result != 'success'
|
||||
- if: needs.tests.result != 'success' || needs.np-tests.result != 'success'
|
||||
run: false
|
||||
|
||||
@@ -1,42 +0,0 @@
|
||||
name: Jira Issue Creator
|
||||
on:
|
||||
issues:
|
||||
types:
|
||||
- labeled
|
||||
|
||||
jobs:
|
||||
create-jira-issue:
|
||||
runs-on: ubuntu-latest
|
||||
if: github.event.label.name == 'OCI'
|
||||
steps:
|
||||
- name: Create json issue file
|
||||
run: |
|
||||
cat << EOF > issue.json
|
||||
{
|
||||
"fields": {
|
||||
"project":
|
||||
{
|
||||
"key": "$JIRA_PROJECT_KEY"
|
||||
},
|
||||
"summary": "$JIRA_ISSUE_SUMMARY",
|
||||
"description": "$JIRA_ISSUE_DESCRIPTION",
|
||||
"issuetype": {
|
||||
"name": "$JIRA_ISSUE_TYPE_NAME"
|
||||
}
|
||||
}
|
||||
}
|
||||
EOF
|
||||
env:
|
||||
JIRA_PROJECT_KEY: ${{ secrets.JIRA_PROJECT_KEY }}
|
||||
JIRA_ISSUE_SUMMARY: ${{ github.event.issue.title }}
|
||||
JIRA_ISSUE_DESCRIPTION: "${{ github.event.issue.url }}\\n\\n${{ github.event.issue.html_url }}"
|
||||
JIRA_ISSUE_TYPE_NAME: "Story"
|
||||
- name: Check issue json
|
||||
run: |
|
||||
cat issue.json
|
||||
- name: Trigger jira issue creation
|
||||
run: |
|
||||
curl -u $JIRA_AUTH -X POST --data @issue.json -H "Content-Type: application/json" --url $JIRA_PROJECT_URL
|
||||
env:
|
||||
JIRA_AUTH: ${{ secrets.JIRA_USN_AND_TOKEN }}
|
||||
JIRA_PROJECT_URL: ${{ secrets.JIRA_PROJECT_URL }}
|
||||
@@ -1,18 +0,0 @@
|
||||
name: Label New Issue
|
||||
|
||||
on:
|
||||
issues:
|
||||
types: opened
|
||||
|
||||
jobs:
|
||||
label_new_issue:
|
||||
uses: AntelopeIO/issue-project-labeler-workflow/.github/workflows/issue-project-labeler.yaml@v1
|
||||
with:
|
||||
issue-id: ${{github.event.issue.node_id}}
|
||||
label: triage
|
||||
org-project: 'Team Backlog'
|
||||
project-field: Status=Todo
|
||||
skip-if-existing-project: true
|
||||
secrets:
|
||||
token: ${{secrets.ENFCIBOT_REPO_AND_PROJECTS}}
|
||||
|
||||
+3
-6
@@ -10,7 +10,6 @@
|
||||
*.abi.hpp
|
||||
*.cmake
|
||||
!.cicd
|
||||
!package.cmake
|
||||
!CMakeModules/*.cmake
|
||||
*.ninja
|
||||
\#*
|
||||
@@ -77,17 +76,15 @@ witness_node_data_dir
|
||||
|
||||
Testing/*
|
||||
build.tar.gz
|
||||
[Bb]uild*/*
|
||||
deps/*
|
||||
dependencies/*
|
||||
build/*
|
||||
build-debug/*
|
||||
|
||||
etc/eosio/node_*
|
||||
TestLogs*
|
||||
var/lib/node_*
|
||||
.vscode
|
||||
.idea/
|
||||
*.iws
|
||||
.DS_Store
|
||||
CMakeLists.txt.user
|
||||
|
||||
!*.swagger.*
|
||||
|
||||
|
||||
+9
-18
@@ -7,27 +7,18 @@
|
||||
[submodule "libraries/eos-vm"]
|
||||
path = libraries/eos-vm
|
||||
url = https://github.com/AntelopeIO/eos-vm
|
||||
[submodule "libraries/fc"]
|
||||
path = libraries/fc
|
||||
url = https://github.com/AntelopeIO/fc
|
||||
[submodule "libraries/softfloat"]
|
||||
path = libraries/softfloat
|
||||
url = https://github.com/AntelopeIO/berkeley-softfloat-3
|
||||
[submodule "libraries/rapidjson"]
|
||||
path = libraries/rapidjson
|
||||
url = https://github.com/Tencent/rapidjson/
|
||||
[submodule "libraries/yubihsm"]
|
||||
path = libraries/yubihsm
|
||||
url = https://github.com/Yubico/yubihsm-shell
|
||||
[submodule "tests/abieos"]
|
||||
path = tests/abieos
|
||||
url = https://github.com/AntelopeIO/abieos
|
||||
[submodule "libraries/libfc/include/fc/crypto/webauthn_json"]
|
||||
path = libraries/libfc/include/fc/crypto/webauthn_json
|
||||
url = https://github.com/Tencent/rapidjson/
|
||||
[submodule "libraries/libfc/secp256k1/secp256k1"]
|
||||
path = libraries/libfc/secp256k1/secp256k1
|
||||
url = https://github.com/bitcoin-core/secp256k1
|
||||
[submodule "libraries/prometheus/prometheus-cpp"]
|
||||
path = libraries/prometheus/prometheus-cpp
|
||||
url = https://github.com/jupp0r/prometheus-cpp.git
|
||||
[submodule "libraries/libfc/libraries/bn256"]
|
||||
path = libraries/libfc/libraries/bn256
|
||||
url = https://github.com/AntelopeIO/bn256
|
||||
[submodule "libraries/cli11/cli11"]
|
||||
path = libraries/cli11/cli11
|
||||
url = https://github.com/AntelopeIO/CLI11.git
|
||||
[submodule "wasm-spec-tests"]
|
||||
path = wasm-spec-tests
|
||||
url = https://github.com/AntelopeIO/wasm-spec-tests
|
||||
|
||||
+43
-89
@@ -13,10 +13,10 @@ set( CMAKE_CXX_STANDARD 17 )
|
||||
set( CMAKE_CXX_EXTENSIONS ON )
|
||||
set( CXX_STANDARD_REQUIRED ON)
|
||||
|
||||
set(VERSION_MAJOR 4)
|
||||
set(VERSION_MAJOR 3)
|
||||
set(VERSION_MINOR 1)
|
||||
set(VERSION_PATCH 0)
|
||||
set(VERSION_SUFFIX dev)
|
||||
#set(VERSION_SUFFIX rc4)
|
||||
|
||||
if(VERSION_SUFFIX)
|
||||
set(VERSION_FULL "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}-${VERSION_SUFFIX}")
|
||||
@@ -24,16 +24,9 @@ else()
|
||||
set(VERSION_FULL "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}")
|
||||
endif()
|
||||
|
||||
|
||||
# Options
|
||||
option(ENABLE_WERROR "Enable `-Werror` compilation flag." Off)
|
||||
option(ENABLE_WEXTRA "Enable `-Wextra` compilation flag." Off)
|
||||
|
||||
|
||||
set( CLI_CLIENT_EXECUTABLE_NAME cleos )
|
||||
set( NODE_EXECUTABLE_NAME nodeos )
|
||||
set( KEY_STORE_EXECUTABLE_NAME keosd )
|
||||
set( LEAP_UTIL_EXECUTABLE_NAME leap-util )
|
||||
|
||||
# http://stackoverflow.com/a/18369825
|
||||
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
|
||||
@@ -60,12 +53,10 @@ set(ENABLE_MULTIVERSION_PROTOCOL_TEST FALSE CACHE BOOL "Enable nodeos multiversi
|
||||
|
||||
# add defaults for openssl
|
||||
if(APPLE AND UNIX AND "${OPENSSL_ROOT_DIR}" STREQUAL "")
|
||||
if(CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64")
|
||||
set(OPENSSL_ROOT_DIR "/opt/homebrew/opt/openssl@3;/opt/homebrew/opt/openssl@1.1")
|
||||
else()
|
||||
set(OPENSSL_ROOT_DIR "/usr/local/opt/openssl@3;/usr/local/opt/openssl@1.1")
|
||||
endif()
|
||||
set(OPENSSL_ROOT_DIR "/usr/local/opt/openssl@3;/usr/local/opt/openssl@1.1")
|
||||
endif()
|
||||
# fc also adds these definitions to its public interface. once fc becomes the sole importer of openssl, this should be removed
|
||||
add_definitions(-DOPENSSL_API_COMPAT=0x10100000L -DOPENSSL_NO_DEPRECATED)
|
||||
|
||||
option(ENABLE_OC "Enable eosvm-oc on supported platforms" ON)
|
||||
|
||||
@@ -132,16 +123,6 @@ else()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(ENABLE_WERROR)
|
||||
set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror" )
|
||||
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror" )
|
||||
endif()
|
||||
if(ENABLE_WEXTRA)
|
||||
set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wextra" )
|
||||
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wextra" )
|
||||
endif()
|
||||
|
||||
|
||||
option(EOSIO_ENABLE_DEVELOPER_OPTIONS "enable developer options for Leap" OFF)
|
||||
|
||||
# based on http://www.delorie.com/gnu/docs/gdb/gdb_70.html
|
||||
@@ -196,10 +177,16 @@ add_subdirectory( scripts )
|
||||
add_subdirectory( unittests )
|
||||
add_subdirectory( tests )
|
||||
add_subdirectory( tools )
|
||||
add_subdirectory( benchmark )
|
||||
|
||||
option(DISABLE_WASM_SPEC_TESTS "disable building of wasm spec unit tests" OFF)
|
||||
|
||||
if (NOT DISABLE_WASM_SPEC_TESTS)
|
||||
add_subdirectory( wasm-spec-tests/generated-tests )
|
||||
endif()
|
||||
|
||||
install(FILES testnet.template DESTINATION ${CMAKE_INSTALL_FULL_SYSCONFDIR}/eosio/launcher COMPONENT dev EXCLUDE_FROM_ALL)
|
||||
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/testnet.template ${CMAKE_CURRENT_BINARY_DIR}/etc/eosio/launcher/testnet.template COPYONLY)
|
||||
|
||||
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/eosio.version.in ${CMAKE_CURRENT_BINARY_DIR}/eosio.version.hpp)
|
||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/eosio.version.hpp DESTINATION ${CMAKE_INSTALL_FULL_INCLUDEDIR} COMPONENT dev EXCLUDE_FROM_ALL)
|
||||
|
||||
@@ -226,71 +213,35 @@ install(FILES ${CMAKE_BINARY_DIR}/modules/leap-config.cmake DESTINATION ${CMAKE_
|
||||
install(FILES ${CMAKE_BINARY_DIR}/modules/EosioTester.cmake DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR}/cmake/leap COMPONENT dev EXCLUDE_FROM_ALL)
|
||||
install(FILES ${CMAKE_SOURCE_DIR}/CMakeModules/EosioCheckVersion.cmake DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR}/cmake/leap COMPONENT dev EXCLUDE_FROM_ALL)
|
||||
|
||||
configure_file(LICENSE licenses/leap/LICENSE COPYONLY)
|
||||
configure_file(libraries/softfloat/COPYING.txt licenses/leap/LICENSE.softfloat COPYONLY)
|
||||
configure_file(libraries/wasm-jit/LICENSE licenses/leap/LICENSE.wavm COPYONLY)
|
||||
configure_file(libraries/libfc/secp256k1/secp256k1/COPYING licenses/leap/LICENSE.secp256k1 COPYONLY)
|
||||
configure_file(libraries/libfc/include/fc/crypto/webauthn_json/license.txt licenses/leap/LICENSE.rapidjson COPYONLY)
|
||||
configure_file(libraries/eos-vm/LICENSE licenses/leap/LICENSE.eos-vm COPYONLY)
|
||||
configure_file(libraries/prometheus/prometheus-cpp/LICENSE licenses/leap/LICENSE.prom COPYONLY)
|
||||
configure_file(programs/cleos/LICENSE.CLI11 licenses/leap/LICENSE.CLI11 COPYONLY)
|
||||
configure_file(${CMAKE_SOURCE_DIR}/LICENSE
|
||||
${CMAKE_BINARY_DIR}/licenses/leap/LICENSE COPYONLY)
|
||||
configure_file(${CMAKE_SOURCE_DIR}/libraries/softfloat/COPYING.txt
|
||||
${CMAKE_BINARY_DIR}/licenses/leap/LICENSE.softfloat COPYONLY)
|
||||
configure_file(${CMAKE_SOURCE_DIR}/libraries/wasm-jit/LICENSE
|
||||
${CMAKE_BINARY_DIR}/licenses/leap/LICENSE.wavm COPYONLY)
|
||||
configure_file(${CMAKE_SOURCE_DIR}/libraries/fc/secp256k1/secp256k1/COPYING
|
||||
${CMAKE_BINARY_DIR}/licenses/leap/LICENSE.secp256k1 COPYONLY)
|
||||
configure_file(${CMAKE_SOURCE_DIR}/libraries/fc/include/fc/crypto/webauthn_json/license.txt
|
||||
${CMAKE_BINARY_DIR}/licenses/leap/LICENSE.rapidjson COPYONLY)
|
||||
configure_file(${CMAKE_SOURCE_DIR}/libraries/fc/src/network/LICENSE.go
|
||||
${CMAKE_BINARY_DIR}/licenses/leap/LICENSE.go COPYONLY)
|
||||
configure_file(${CMAKE_SOURCE_DIR}/libraries/yubihsm/LICENSE
|
||||
${CMAKE_BINARY_DIR}/licenses/leap/LICENSE.yubihsm COPYONLY)
|
||||
configure_file(${CMAKE_SOURCE_DIR}/libraries/eos-vm/LICENSE
|
||||
${CMAKE_BINARY_DIR}/licenses/leap/LICENSE.eos-vm COPYONLY)
|
||||
configure_file(${CMAKE_SOURCE_DIR}/programs/cleos/LICENSE.CLI11
|
||||
${CMAKE_BINARY_DIR}/programs/cleos/LICENSE.CLI11 COPYONLY)
|
||||
|
||||
install(DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/licenses/leap" DESTINATION "${CMAKE_INSTALL_FULL_DATAROOTDIR}/licenses/" COMPONENT base)
|
||||
|
||||
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/libraries/testing/contracts DESTINATION ${CMAKE_INSTALL_FULL_DATAROOTDIR}/leap_testing/libraries/testing COMPONENT dev EXCLUDE_FROM_ALL
|
||||
PATTERN "CMakeFiles" EXCLUDE
|
||||
PATTERN "*.cmake" EXCLUDE
|
||||
PATTERN "Makefile" EXCLUDE)
|
||||
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/unittests/contracts DESTINATION ${CMAKE_INSTALL_FULL_DATAROOTDIR}/leap_testing/unittests COMPONENT dev EXCLUDE_FROM_ALL
|
||||
PATTERN "CMakeFiles" EXCLUDE
|
||||
PATTERN "*.cmake" EXCLUDE
|
||||
PATTERN "Makefile" EXCLUDE)
|
||||
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/tests/TestHarness DESTINATION ${CMAKE_INSTALL_FULL_DATAROOTDIR}/leap_testing/tests COMPONENT dev EXCLUDE_FROM_ALL
|
||||
FILES_MATCHING
|
||||
PATTERN "*.py"
|
||||
PATTERN "*.json"
|
||||
PATTERN "__pycache__" EXCLUDE
|
||||
PATTERN "CMakeFiles" EXCLUDE)
|
||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/tests/launcher.py DESTINATION ${CMAKE_INSTALL_FULL_DATAROOTDIR}/leap_testing/tests COMPONENT dev EXCLUDE_FROM_ALL)
|
||||
|
||||
if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.21)
|
||||
# Cmake versions < 3.21 did not support installing symbolic links to a directory via install(FILES ...)
|
||||
# Cmake 3.21 fixed this (https://gitlab.kitware.com/cmake/cmake/-/commit/d71a7cc19d6e03f89581efdaa8d63db216184d40)
|
||||
# If/when the lowest cmake version supported becomes >= 3.21, the else block as well as the postinit and prerm scripts
|
||||
# would be a good option to remove in favor of using the facilities in cmake / cpack directly.
|
||||
|
||||
add_custom_target(link_target ALL
|
||||
COMMAND ${CMAKE_COMMAND} -E make_directory lib/python3/dist-packages
|
||||
COMMAND ${CMAKE_COMMAND} -E create_symlink ../../../share/leap_testing/tests/TestHarness lib/python3/dist-packages/TestHarness
|
||||
COMMAND ${CMAKE_COMMAND} -E make_directory share/leap_testing
|
||||
COMMAND ${CMAKE_COMMAND} -E create_symlink ../../bin share/leap_testing/bin)
|
||||
|
||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/lib/python3/dist-packages/TestHarness DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR}/python3/dist-packages COMPONENT dev EXCLUDE_FROM_ALL)
|
||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/share/leap_testing/bin DESTINATION ${CMAKE_INSTALL_FULL_DATAROOTDIR}/leap_testing COMPONENT dev EXCLUDE_FROM_ALL)
|
||||
else()
|
||||
# The following install(CODE ...) steps are necessary for `make dev-install` to work on cmake versions < 3.21.
|
||||
# However, it can flag as an error if using `make package` instead of `make dev-install` for installation.
|
||||
# This is due to those directories and symbolic links being created in the postinit script during the package install instead.
|
||||
|
||||
# Note If/when doing `make package`, it is not a true error if you see:
|
||||
# Error creating directory "/<leap_install_dir>/lib/python3/dist-packages".
|
||||
# CMake Error: failed to create symbolic link '/<leap_install_dir>/lib/python3/dist-packages/TestHarness': no such file or directory
|
||||
# CMake Error: failed to create symbolic link '/<leap_install_dir>/share/leap_testing/bin': no such file or directory
|
||||
|
||||
install(CODE "execute_process( COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_INSTALL_FULL_LIBDIR}/python3/dist-packages)" COMPONENT dev EXCLUDE_FROM_ALL)
|
||||
install(CODE "execute_process( COMMAND ${CMAKE_COMMAND} -E create_symlink ../../../share/leap_testing/tests/TestHarness ${CMAKE_INSTALL_FULL_LIBDIR}/python3/dist-packages/TestHarness)" COMPONENT dev EXCLUDE_FROM_ALL)
|
||||
install(CODE "execute_process( COMMAND ${CMAKE_COMMAND} -E create_symlink ../../bin ${CMAKE_INSTALL_FULL_DATAROOTDIR}/leap_testing/bin)" COMPONENT dev EXCLUDE_FROM_ALL)
|
||||
|
||||
# The `make package` installation of symlinks happens via the `postinst` script installed in cmake.package via the line below
|
||||
endif()
|
||||
|
||||
configure_file(${CMAKE_SOURCE_DIR}/libraries/cli11/bash-completion/completions/leap-util
|
||||
${CMAKE_BINARY_DIR}/programs/leap-util/bash-completion/completions/leap-util COPYONLY)
|
||||
configure_file(${CMAKE_SOURCE_DIR}/libraries/cli11/bash-completion/completions/cleos
|
||||
${CMAKE_BINARY_DIR}/programs/cleos/bash-completion/completions/cleos COPYONLY)
|
||||
|
||||
install(FILES libraries/cli11/bash-completion/completions/leap-util DESTINATION ${CMAKE_INSTALL_FULL_DATAROOTDIR}/bash-completion/completions COMPONENT base)
|
||||
install(FILES libraries/cli11/bash-completion/completions/cleos DESTINATION ${CMAKE_INSTALL_FULL_DATAROOTDIR}/bash-completion/completions COMPONENT base)
|
||||
install(FILES LICENSE DESTINATION ${CMAKE_INSTALL_FULL_DATAROOTDIR}/licenses/leap/ COMPONENT base)
|
||||
install(FILES libraries/softfloat/COPYING.txt DESTINATION ${CMAKE_INSTALL_FULL_DATAROOTDIR}/licenses/leap/ RENAME LICENSE.softfloat COMPONENT base)
|
||||
install(FILES libraries/wasm-jit/LICENSE DESTINATION ${CMAKE_INSTALL_FULL_DATAROOTDIR}/licenses/leap/ RENAME LICENSE.wavm COMPONENT base)
|
||||
install(FILES libraries/fc/secp256k1/secp256k1/COPYING DESTINATION ${CMAKE_INSTALL_FULL_DATAROOTDIR}/licenses/leap/ RENAME LICENSE.secp256k1 COMPONENT base)
|
||||
install(FILES libraries/fc/include/fc/crypto/webauthn_json/license.txt DESTINATION ${CMAKE_INSTALL_FULL_DATAROOTDIR}/licenses/leap/ RENAME LICENSE.rapidjson COMPONENT base)
|
||||
install(FILES libraries/fc/src/network/LICENSE.go DESTINATION ${CMAKE_INSTALL_FULL_DATAROOTDIR}/licenses/leap/ COMPONENT base)
|
||||
install(FILES libraries/yubihsm/LICENSE DESTINATION ${CMAKE_INSTALL_FULL_DATAROOTDIR}/licenses/leap/ RENAME LICENSE.yubihsm COMPONENT base)
|
||||
install(FILES libraries/eos-vm/LICENSE DESTINATION ${CMAKE_INSTALL_FULL_DATAROOTDIR}/licenses/leap/ RENAME LICENSE.eos-vm COMPONENT base)
|
||||
install(FILES libraries/fc/libraries/ff/LICENSE DESTINATION ${CMAKE_INSTALL_FULL_DATAROOTDIR}/licenses/leap/ RENAME LICENSE.libff COMPONENT base)
|
||||
install(FILES programs/cleos/LICENSE.CLI11 DESTINATION ${CMAKE_INSTALL_FULL_DATAROOTDIR}/licenses/leap/ COMPONENT base)
|
||||
|
||||
add_custom_target(dev-install
|
||||
COMMAND "${CMAKE_COMMAND}" --build "${CMAKE_BINARY_DIR}"
|
||||
@@ -299,6 +250,9 @@ add_custom_target(dev-install
|
||||
USES_TERMINAL
|
||||
)
|
||||
|
||||
get_property(_CTEST_CUSTOM_TESTS_IGNORE GLOBAL PROPERTY CTEST_CUSTOM_TESTS_IGNORE)
|
||||
file(WRITE "${CMAKE_BINARY_DIR}/CTestCustom.cmake" "SET(CTEST_CUSTOM_TESTS_IGNORE ${_CTEST_CUSTOM_TESTS_IGNORE})")
|
||||
|
||||
include(doxygen)
|
||||
|
||||
include(package.cmake)
|
||||
|
||||
@@ -54,10 +54,15 @@ find_package(Boost @Boost_MAJOR_VERSION@.@Boost_MINOR_VERSION@ EXACT REQUIRED CO
|
||||
|
||||
find_library(libtester eosio_testing @CMAKE_INSTALL_FULL_LIBDIR@ NO_DEFAULT_PATH)
|
||||
find_library(libchain eosio_chain @CMAKE_INSTALL_FULL_LIBDIR@ NO_DEFAULT_PATH)
|
||||
find_library(libfc fc @CMAKE_INSTALL_FULL_LIBDIR@ NO_DEFAULT_PATH)
|
||||
find_library(libsecp256k1 secp256k1 @CMAKE_INSTALL_FULL_LIBDIR@ NO_DEFAULT_PATH)
|
||||
find_library(libbn256 bn256 @CMAKE_INSTALL_FULL_LIBDIR@ NO_DEFAULT_PATH)
|
||||
if ( "${CMAKE_BUILD_TYPE}" STREQUAL "Debug" )
|
||||
find_library(libfc fc_debug @CMAKE_INSTALL_FULL_LIBDIR@ NO_DEFAULT_PATH)
|
||||
find_library(libsecp256k1 secp256k1_debug @CMAKE_INSTALL_FULL_LIBDIR@ NO_DEFAULT_PATH)
|
||||
else()
|
||||
find_library(libfc fc @CMAKE_INSTALL_FULL_LIBDIR@ NO_DEFAULT_PATH)
|
||||
find_library(libsecp256k1 secp256k1 @CMAKE_INSTALL_FULL_LIBDIR@ NO_DEFAULT_PATH)
|
||||
endif()
|
||||
|
||||
find_library(libff ff @CMAKE_INSTALL_FULL_LIBDIR@ NO_DEFAULT_PATH)
|
||||
find_library(libwasm WASM @CMAKE_INSTALL_FULL_LIBDIR@ NO_DEFAULT_PATH)
|
||||
find_library(libwast WAST @CMAKE_INSTALL_FULL_LIBDIR@ NO_DEFAULT_PATH)
|
||||
find_library(libir IR @CMAKE_INSTALL_FULL_LIBDIR@ NO_DEFAULT_PATH)
|
||||
@@ -98,7 +103,7 @@ macro(add_eosio_test_executable test_name)
|
||||
${libchainbase}
|
||||
${libbuiltins}
|
||||
${libsecp256k1}
|
||||
${libbn256}
|
||||
${libff}
|
||||
@GMP_LIBRARY@
|
||||
|
||||
${Boost_FILESYSTEM_LIBRARY}
|
||||
@@ -115,7 +120,7 @@ macro(add_eosio_test_executable test_name)
|
||||
${WRAP_MAIN}
|
||||
Threads::Threads
|
||||
)
|
||||
|
||||
|
||||
#adds -ltr. Ubuntu eosio.contracts build breaks without this
|
||||
if(UNIX AND NOT APPLE)
|
||||
target_link_libraries(${test_name} ${LIBRT})
|
||||
|
||||
@@ -51,10 +51,16 @@ find_package(Boost @Boost_MAJOR_VERSION@.@Boost_MINOR_VERSION@ EXACT REQUIRED CO
|
||||
|
||||
find_library(libtester eosio_testing @CMAKE_BINARY_DIR@/libraries/testing NO_DEFAULT_PATH)
|
||||
find_library(libchain eosio_chain @CMAKE_BINARY_DIR@/libraries/chain NO_DEFAULT_PATH)
|
||||
find_library(libfc fc @CMAKE_BINARY_DIR@/libraries/libfc NO_DEFAULT_PATH)
|
||||
find_library(libsecp256k1 secp256k1 @CMAKE_BINARY_DIR@/libraries/libfc/secp256k1 NO_DEFAULT_PATH)
|
||||
find_library(libbn256 bn256 @CMAKE_BINARY_DIR@/libraries/libfc/libraries/bn256/src NO_DEFAULT_PATH)
|
||||
if ( "${CMAKE_BUILD_TYPE}" STREQUAL "Debug" )
|
||||
find_library(libfc fc_debug @CMAKE_BINARY_DIR@/libraries/fc NO_DEFAULT_PATH)
|
||||
find_library(libsecp256k1 secp256k1_debug @CMAKE_BINARY_DIR@/libraries/fc/secp256k1 NO_DEFAULT_PATH)
|
||||
|
||||
else()
|
||||
find_library(libfc fc @CMAKE_BINARY_DIR@/libraries/fc NO_DEFAULT_PATH)
|
||||
find_library(libsecp256k1 secp256k1 @CMAKE_BINARY_DIR@/libraries/fc/secp256k1 NO_DEFAULT_PATH)
|
||||
endif()
|
||||
|
||||
find_library(libff ff @CMAKE_BINARY_DIR@/libraries/fc/libraries/ff/libff NO_DEFAULT_PATH)
|
||||
find_library(libwasm WASM @CMAKE_BINARY_DIR@/libraries/wasm-jit/Source/WASM NO_DEFAULT_PATH)
|
||||
find_library(libwast WAST @CMAKE_BINARY_DIR@/libraries/wasm-jit/Source/WAST NO_DEFAULT_PATH)
|
||||
find_library(libir IR @CMAKE_BINARY_DIR@/libraries/wasm-jit/Source/IR NO_DEFAULT_PATH)
|
||||
@@ -95,7 +101,7 @@ macro(add_eosio_test_executable test_name)
|
||||
${libchainbase}
|
||||
${libbuiltins}
|
||||
${libsecp256k1}
|
||||
${libbn256}
|
||||
${libff}
|
||||
@GMP_LIBRARY@
|
||||
|
||||
${Boost_FILESYSTEM_LIBRARY}
|
||||
@@ -112,7 +118,7 @@ macro(add_eosio_test_executable test_name)
|
||||
${WRAP_MAIN}
|
||||
Threads::Threads
|
||||
)
|
||||
|
||||
|
||||
#adds -ltr. Ubuntu eosio.contracts build breaks without this
|
||||
if(UNIX AND NOT APPLE)
|
||||
target_link_libraries(${test_name} ${LIBRT})
|
||||
@@ -123,7 +129,7 @@ macro(add_eosio_test_executable test_name)
|
||||
@OPENSSL_INCLUDE_DIR@
|
||||
@CMAKE_SOURCE_DIR@/libraries/chain/include
|
||||
@CMAKE_BINARY_DIR@/libraries/chain/include
|
||||
@CMAKE_SOURCE_DIR@/libraries/libfc/include
|
||||
@CMAKE_SOURCE_DIR@/libraries/fc/include
|
||||
@CMAKE_SOURCE_DIR@/libraries/softfloat/source/include
|
||||
@CMAKE_SOURCE_DIR@/libraries/appbase/include
|
||||
@CMAKE_SOURCE_DIR@/libraries/chainbase/include
|
||||
@@ -170,7 +176,7 @@ if(ENABLE_COVERAGE_TESTING)
|
||||
|
||||
COMMAND ${LCOV_PATH} --directory . --capture --gcov-tool ${CMAKE_SOURCE_DIR}/tools/llvm-gcov.sh --output-file ${Coverage_NAME}.info
|
||||
|
||||
COMMAND ${LCOV_PATH} -remove ${Coverage_NAME}.info '*/boost/*' '/usr/lib/*' '/usr/include/*' '*/externals/*' '*/libfc/*' '*/wasm-jit/*' --output-file ${Coverage_NAME}_filtered.info
|
||||
COMMAND ${LCOV_PATH} -remove ${Coverage_NAME}.info '*/boost/*' '/usr/lib/*' '/usr/include/*' '*/externals/*' '*/fc/*' '*/wasm-jit/*' --output-file ${Coverage_NAME}_filtered.info
|
||||
|
||||
COMMAND ${GENHTML_PATH} -o ${Coverage_NAME} ${PROJECT_BINARY_DIR}/${Coverage_NAME}_filtered.info
|
||||
|
||||
|
||||
@@ -1,260 +1,126 @@
|
||||
# Leap
|
||||
Leap is a C++ implementation of the [Antelope](https://github.com/AntelopeIO) protocol. It contains blockchain node software and supporting tools for developers and node operators.
|
||||
|
||||
## Branches
|
||||
The `main` branch is the development branch; do not use it for production. Refer to the [release page](https://github.com/AntelopeIO/leap/releases) for current information on releases, pre-releases, and obsolete releases, as well as the corresponding tags for those releases.
|
||||
Leap is blockchain node software and supporting tools that implements the [Antelope](https://github.com/AntelopeIO) protocol.
|
||||
|
||||
## Supported Operating Systems
|
||||
We currently support the following operating systems.
|
||||
- Ubuntu 22.04 Jammy
|
||||
- Ubuntu 20.04 Focal
|
||||
- Ubuntu 18.04 Bionic
|
||||
## Repo Organization
|
||||
|
||||
Other Unix derivatives such as macOS are tended to on a best-effort basis and may not be full featured. If you aren't using Ubuntu, please visit the "[Build Unsupported OS](./docs/00_install/01_build-from-source/00_build-unsupported-os.md)" page to explore your options.
|
||||
`main` branch is the development branch: do not use this for production. Refer to the [release page](https://github.com/AntelopeIO/leap/releases) for current information on releases, pre-releases, and obsolete releases as well as the corresponding tags for those releases.
|
||||
|
||||
If you are running an unsupported Ubuntu derivative, such as Linux Mint, you can find the version of Ubuntu your distribution was based on by using this command:
|
||||
```bash
|
||||
cat /etc/upstream-release/lsb-release
|
||||
## Software Installation
|
||||
|
||||
Visit the [release page](https://github.com/AntelopeIO/leap/releases) for Ubuntu binaries. This is the fastest way to get started with the software.
|
||||
|
||||
### Building From Source
|
||||
|
||||
Recent Ubuntu LTS releases are the only Linux distributions that we fully support. Other Linux distros and other POSIX operating systems (such as macOS) are tended to on a best-effort basis and may not be full featured. Notable requirements to build are:
|
||||
* C++17 compiler and standard library
|
||||
* boost 1.67+
|
||||
* CMake 3.8+
|
||||
* (for Linux only) LLVM 7 - 11 (newer versions do not work)
|
||||
|
||||
A few other common libraries are tools also required such as openssl 1.1+, libcurl, curl, libusb, GMP, Python 3, and zlib.
|
||||
|
||||
**A Warning On Parallel Compilation Jobs (`-j` flag)**: When building C/C++ software often the build is performed in parallel via a command such as `make -j $(nproc)` which uses the number of CPU cores as the number of compilation jobs to perform simultaneously. However, be aware that some compilation units (.cpp files) in Leap are extremely complex and will consume nearly 4GB of memory to compile. You may need to reduce the level of parallelization depending on the amount of memory on your build host. e.g. instead of `make -j $(nproc)` run `make -j2`. Failures due to memory exhaustion will typically but not always manifest as compiler crashes.
|
||||
|
||||
Generally we recommend performing what we refer to as a "pinned build" which ensures the compiler and boost version remain the same between builds of different Leap versions (Leap requires these versions remain the same otherwise its state needs to be repopulated from a portable snapshot).
|
||||
|
||||
#### Building Pinned Build Binary Packages
|
||||
In the directory `<leap src>/scripts` you will find the two scripts `install_deps.sh` and `pinned_build.sh`. If you haven't installed build dependencies then run `install_deps.sh`. Then run `pinned_build.sh <dependencies directory> <leap build directory> <number of jobs>`.
|
||||
|
||||
The dependencies directory is where the script will pull the C++ dependencies that need to be built with the pinned compiler for building the pinned binaries for binary packaging.
|
||||
|
||||
The binary package will be produced in the Leap build directory that was supplied.
|
||||
|
||||
#### Manual (non "pinned") Build Instructions
|
||||
|
||||
<details>
|
||||
<summary>Ubuntu 20.04 & 22.04 Build Instructions</summary>
|
||||
|
||||
Install required dependencies:
|
||||
```
|
||||
Your best bet is to follow the instructions for your Ubuntu base, but we make no guarantees.
|
||||
|
||||
## Binary Installation
|
||||
This is the fastest way to get started. From the [latest release](https://github.com/AntelopeIO/leap/releases/latest) page, download a binary for one of our [supported operating systems](#supported-operating-systems), or visit the [release tags](https://github.com/AntelopeIO/leap/releases) page to download a binary for a specific version of Leap.
|
||||
|
||||
Once you have a `*.deb` file downloaded for your version of Ubuntu, you can install it as follows:
|
||||
```bash
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y ~/Downloads/leap*.deb
|
||||
apt-get update && apt-get install \
|
||||
build-essential \
|
||||
cmake \
|
||||
curl \
|
||||
git \
|
||||
libboost-all-dev \
|
||||
libcurl4-openssl-dev \
|
||||
libgmp-dev \
|
||||
libssl-dev \
|
||||
libusb-1.0-0-dev \
|
||||
llvm-11-dev \
|
||||
pkg-config
|
||||
```
|
||||
Your download path may vary. If you are in an Ubuntu docker container, omit `sudo` because you run as `root` by default.
|
||||
|
||||
Finally, verify Leap was installed correctly:
|
||||
```bash
|
||||
nodeos --full-version
|
||||
and perform the build:
|
||||
```
|
||||
You should see a [semantic version](https://semver.org) string followed by a `git` commit hash with no errors. For example:
|
||||
```
|
||||
v3.1.2-0b64f879e3ebe2e4df09d2e62f1fc164cc1125d1
|
||||
```
|
||||
|
||||
## Build and Install from Source
|
||||
You can also build and install Leap from source.
|
||||
|
||||
### Prerequisites
|
||||
You will need to build on a [supported operating system](#supported-operating-systems).
|
||||
|
||||
Requirements to build:
|
||||
- C++17 compiler and standard library
|
||||
- boost 1.67+
|
||||
- CMake 3.8+
|
||||
- LLVM 7 - 11 - for Linux only
|
||||
- newer versions do not work
|
||||
- openssl 1.1+
|
||||
- curl
|
||||
- libcurl 7.40.0+
|
||||
- git
|
||||
- GMP
|
||||
- Python 3
|
||||
- python3-numpy
|
||||
- zlib
|
||||
|
||||
### Step 1 - Clone
|
||||
If you don't have the Leap repo cloned to your computer yet, [open a terminal](https://itsfoss.com/open-terminal-ubuntu) and navigate to the folder where you want to clone the Leap repository:
|
||||
```bash
|
||||
cd ~/Downloads
|
||||
```
|
||||
Clone Leap using either HTTPS...
|
||||
```bash
|
||||
git clone --recursive https://github.com/AntelopeIO/leap.git
|
||||
```
|
||||
...or SSH:
|
||||
```bash
|
||||
git clone --recursive git@github.com:AntelopeIO/leap.git
|
||||
```
|
||||
|
||||
> ℹ️ **HTTPS vs. SSH Clone** ℹ️
|
||||
Both an HTTPS or SSH git clone will yield the same result - a folder named `leap` containing our source code. It doesn't matter which type you use.
|
||||
|
||||
Navigate into that folder:
|
||||
```bash
|
||||
cd leap
|
||||
```
|
||||
|
||||
### Step 2 - Checkout Release Tag or Branch
|
||||
Choose which [release](https://github.com/AntelopeIO/leap/releases) or [branch](#branches) you would like to build, then check it out. If you are not sure, use the [latest release](https://github.com/AntelopeIO/leap/releases/latest). For example, if you want to build release 3.1.2 then you would check it out using its tag, `v3.1.2`. In the example below, replace `v0.0.0` with your selected release tag accordingly:
|
||||
```bash
|
||||
git fetch --all --tags
|
||||
git checkout v0.0.0
|
||||
```
|
||||
|
||||
Once you are on the branch or release tag you want to build, make sure everything is up-to-date:
|
||||
```bash
|
||||
git pull
|
||||
git submodule update --init --recursive
|
||||
```
|
||||
|
||||
### Step 3 - Build
|
||||
Select build instructions below for a [pinned build](#pinned-build) (preferred) or an [unpinned build](#unpinned-build).
|
||||
|
||||
> ℹ️ **Pinned vs. Unpinned Build** ℹ️
|
||||
We have two types of builds for Leap: "pinned" and "unpinned." The only difference is that pinned builds use specific versions for some dependencies hand-picked by the Leap engineers - they are "pinned" to those versions. In contrast, unpinned builds use the default dependency versions available on the build system at the time. We recommend performing a "pinned" build to ensure the compiler and boost versions remain the same between builds of different Leap versions. Leap requires these versions to remain the same, otherwise its state might need to be recovered from a portable snapshot or the chain needs to be replayed.
|
||||
|
||||
> ⚠️ **A Warning On Parallel Compilation Jobs (`-j` flag)** ⚠️
|
||||
When building C/C++ software, often the build is performed in parallel via a command such as `make -j "$(nproc)"` which uses all available CPU threads. However, be aware that some compilation units (`*.cpp` files) in Leap will consume nearly 4GB of memory. Failures due to memory exhaustion will typically, but not always, manifest as compiler crashes. Using all available CPU threads may also prevent you from doing other things on your computer during compilation. For these reasons, consider reducing this value.
|
||||
|
||||
> 🐋 **Docker and `sudo`** 🐋
|
||||
If you are in an Ubuntu docker container, omit `sudo` from all commands because you run as `root` by default. Most other docker containers also exclude `sudo`, especially Debian-family containers. If your shell prompt is a hash tag (`#`), omit `sudo`.
|
||||
|
||||
#### Pinned Build
|
||||
Make sure you are in the root of the `leap` repo, then run the `install_depts.sh` script to install dependencies:
|
||||
```bash
|
||||
sudo scripts/install_deps.sh
|
||||
```
|
||||
|
||||
Next, run the pinned build script. You have to give it three arguments in the following order:
|
||||
1. A temporary folder, for all dependencies that need to be built from source.
|
||||
1. A build folder, where the binaries you need to install will be built to.
|
||||
1. The number of jobs or CPU cores/threads to use (note the [jobs flag](#step-3---build) warning above).
|
||||
|
||||
> 🔒 You do not need to run this script with `sudo` or as root.
|
||||
|
||||
For example, the following command runs the `pinned_build.sh` script, specifies a `deps` and `build` folder in the root of the Leap repo for the first two arguments, then builds the packages using all of your computer's CPU threads:
|
||||
```bash
|
||||
scripts/pinned_build.sh deps build "$(nproc)"
|
||||
```
|
||||
Now you can optionally [test](#step-4---test) your build, or [install](#step-5---install) the `*.deb` binary packages, which will be in the root of your build directory.
|
||||
|
||||
#### Unpinned Build
|
||||
The following instructions are valid for this branch. Other release branches may have different requirements, so ensure you follow the directions in the branch or release you intend to build. If you are in an Ubuntu docker container, omit `sudo` because you run as `root` by default.
|
||||
|
||||
<details> <summary>Ubuntu 22.04 Jammy & Ubuntu 20.04 Focal</summary>
|
||||
|
||||
Install dependencies:
|
||||
```bash
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y \
|
||||
build-essential \
|
||||
cmake \
|
||||
curl \
|
||||
git \
|
||||
libboost-all-dev \
|
||||
libcurl4-openssl-dev \
|
||||
libgmp-dev \
|
||||
libssl-dev \
|
||||
llvm-11-dev \
|
||||
python3-numpy
|
||||
```
|
||||
To build, make sure you are in the root of the `leap` repo, then run the following command:
|
||||
```bash
|
||||
mkdir -p build
|
||||
mkdir build
|
||||
cd build
|
||||
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH=/usr/lib/llvm-11 ..
|
||||
make -j "$(nproc)" package
|
||||
make -j $(nproc) package
|
||||
```
|
||||
</details>
|
||||
|
||||
<details> <summary>Ubuntu 18.04 Bionic</summary>
|
||||
<details>
|
||||
<summary>Ubuntu 18.04 Build Instructions</summary>
|
||||
|
||||
Install dependencies:
|
||||
```bash
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y \
|
||||
build-essential \
|
||||
cmake \
|
||||
curl \
|
||||
g++-8 \
|
||||
git \
|
||||
libcurl4-openssl-dev \
|
||||
libgmp-dev \
|
||||
libssl-dev \
|
||||
llvm-7-dev \
|
||||
python3 \
|
||||
python3-numpy \
|
||||
python3-pip \
|
||||
Install required dependencies. You will need to build Boost from source on this distribution.
|
||||
```
|
||||
apt-get update && apt-get install \
|
||||
build-essential \
|
||||
cmake \
|
||||
curl \
|
||||
g++-8 \
|
||||
git \
|
||||
libcurl4-openssl-dev \
|
||||
libgmp-dev \
|
||||
libssl-dev \
|
||||
libusb-1.0-0-dev \
|
||||
llvm-7-dev \
|
||||
pkg-config \
|
||||
python3 \
|
||||
zlib1g-dev
|
||||
|
||||
python3 -m pip install dataclasses
|
||||
|
||||
curl -L https://boostorg.jfrog.io/artifactory/main/release/1.79.0/source/boost_1_79_0.tar.bz2 | tar jx && \
|
||||
cd boost_1_79_0 && \
|
||||
./bootstrap.sh --prefix=$HOME/boost1.79 && \
|
||||
./b2 --with-iostreams --with-date_time --with-filesystem --with-system \
|
||||
--with-program_options --with-chrono --with-test -j$(nproc) install && \
|
||||
cd ..
|
||||
```
|
||||
You need to build Boost from source on this distribution:
|
||||
```bash
|
||||
curl -fL https://boostorg.jfrog.io/artifactory/main/release/1.79.0/source/boost_1_79_0.tar.bz2 -o ~/Downloads/boost_1_79_0.tar.bz2
|
||||
tar -jvxf ~/Downloads/boost_1_79_0.tar.bz2 -C ~/Downloads/
|
||||
pushd ~/Downloads/boost_1_79_0
|
||||
./bootstrap.sh --prefix="$HOME/boost1.79"
|
||||
./b2 --with-iostreams --with-date_time --with-filesystem --with-system --with-program_options --with-chrono --with-test -j "$(nproc)" install
|
||||
popd
|
||||
and perform the build:
|
||||
```
|
||||
The Boost `*.tar.bz2` download and `boost_1_79_0` folder can be removed now if you want more space.
|
||||
```bash
|
||||
rm -r ~/Downloads/boost_1_79_0.tar.bz2 ~/Downloads/boost_1_79_0
|
||||
```
|
||||
From a terminal in the root of the `leap` repo, build.
|
||||
```bash
|
||||
mkdir -p build
|
||||
git submodule update --init --recursive
|
||||
mkdir build
|
||||
cd build
|
||||
cmake -DCMAKE_C_COMPILER=gcc-8 -DCMAKE_CXX_COMPILER=g++-8 -DCMAKE_PREFIX_PATH="$HOME/boost1.79;/usr/lib/llvm-7/" -DCMAKE_BUILD_TYPE=Release ..
|
||||
make -j "$(nproc)" package
|
||||
cmake -DCMAKE_C_COMPILER=gcc-8 -DCMAKE_CXX_COMPILER=g++-8 \
|
||||
-DCMAKE_PREFIX_PATH="$HOME/boost1.79;/usr/lib/llvm-7/" -DCMAKE_BUILD_TYPE=Release .. \
|
||||
make -j $(nproc) package
|
||||
```
|
||||
After building, you may remove the `~/boost1.79` directory or you may keep it around for your next build.
|
||||
After building you may remove the `$HOME/boost1.79` directory, or you may keep it around until next time building the software.
|
||||
</details>
|
||||
|
||||
Now you can optionally [test](#step-4---test) your build, or [install](#step-5---install) the `*.deb` binary packages, which will be in the root of your build directory.
|
||||
### Running Tests
|
||||
|
||||
### Step 4 - Test
|
||||
Leap supports the following test suites:
|
||||
When building from source it's recommended to run at least what we refer to as the "parallelizable tests". Not included by default in the "parallelizable tests" are the WASM spec tests which can add additional coverage and can also be run in parallel.
|
||||
|
||||
Test Suite | Test Type | [Test Size](https://testing.googleblog.com/2010/12/test-sizes.html) | Notes
|
||||
---|:---:|:---:|---
|
||||
[Parallelizable tests](#parallelizable-tests) | Unit tests | Small
|
||||
[WASM spec tests](#wasm-spec-tests) | Unit tests | Small | Unit tests for our WASM runtime, each short but _very_ CPU-intensive
|
||||
[Serial tests](#serial-tests) | Component/Integration | Medium
|
||||
[Long-running tests](#long-running-tests) | Integration | Medium-to-Large | Tests which take an extraordinarily long amount of time to run
|
||||
```
|
||||
cd build
|
||||
|
||||
When building from source, we recommended running at least the [parallelizable tests](#parallelizable-tests).
|
||||
# "parallelizable tests": the minimum test set that should be run
|
||||
ctest -j $(nproc) -LE _tests
|
||||
|
||||
#### Parallelizable Tests
|
||||
This test suite consists of any test that does not require shared resources, such as file descriptors, specific folders, or ports, and can therefore be run concurrently in different threads without side effects (hence, easily parallelized). These are mostly unit tests and [small tests](https://testing.googleblog.com/2010/12/test-sizes.html) which complete in a short amount of time.
|
||||
|
||||
You can invoke them by running `ctest` from a terminal in your Leap build directory and specifying the following arguments:
|
||||
```bash
|
||||
ctest -j "$(nproc)" -LE _tests
|
||||
# Also consider running the WASM spec tests for more coverage
|
||||
ctest -j $(nproc) -L wasm_spec_tests
|
||||
```
|
||||
|
||||
#### WASM Spec Tests
|
||||
The WASM spec tests verify that our WASM execution engine is compliant with the web assembly standard. These are very [small](https://testing.googleblog.com/2010/12/test-sizes.html), very fast unit tests. However, there are over a thousand of them so the suite can take a little time to run. These tests are extremely CPU-intensive.
|
||||
|
||||
You can invoke them by running `ctest` from a terminal in your Leap build directory and specifying the following arguments:
|
||||
```bash
|
||||
ctest -j "$(nproc)" -L wasm_spec_tests
|
||||
Some other tests are available and recommended but be aware they can be sensitive to other software running on the same host and they may **SIGKILL** other nodeos instances running on the host.
|
||||
```
|
||||
We have observed severe performance issues when multiple virtual machines are running this test suite on the same physical host at the same time, for example in a CICD system. This can be resolved by disabling hyperthreading on the host.
|
||||
cd build
|
||||
|
||||
#### Serial Tests
|
||||
The serial test suite consists of [medium](https://testing.googleblog.com/2010/12/test-sizes.html) component or integration tests that use specific paths, ports, rely on process names, or similar, and cannot be run concurrently with other tests. Serial tests can be sensitive to other software running on the same host and they may `SIGKILL` other `nodeos` processes. These tests take a moderate amount of time to complete, but we recommend running them.
|
||||
|
||||
You can invoke them by running `ctest` from a terminal in your Leap build directory and specifying the following arguments:
|
||||
```bash
|
||||
# These tests can't run in parallel but are recommended.
|
||||
ctest -L "nonparallelizable_tests"
|
||||
```
|
||||
|
||||
#### Long-Running Tests
|
||||
The long-running tests are [medium-to-large](https://testing.googleblog.com/2010/12/test-sizes.html) integration tests that rely on shared resources and take a very long time to run.
|
||||
|
||||
You can invoke them by running `ctest` from a terminal in your Leap build directory and specifying the following arguments:
|
||||
```bash
|
||||
# These tests can't run in parallel. They also take a long time to run.
|
||||
ctest -L "long_running_tests"
|
||||
```
|
||||
|
||||
### Step 5 - Install
|
||||
Once you have [built](#step-3---build-the-source-code) Leap and [tested](#step-4---test) your build, you can install Leap on your system. Don't forget to omit `sudo` if you are running in a docker container.
|
||||
|
||||
We recommend installing the binary package you just built. Navigate to your Leap build directory in a terminal and run this command:
|
||||
```bash
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y ./leap[-_][0-9]*.deb
|
||||
```
|
||||
|
||||
It is also possible to install using `make` instead:
|
||||
```bash
|
||||
sudo make install
|
||||
```
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
file(GLOB BENCHMARK "*.cpp")
|
||||
add_executable( benchmark ${BENCHMARK} )
|
||||
|
||||
target_link_libraries( benchmark fc Boost::program_options bn256)
|
||||
target_include_directories( benchmark PUBLIC
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}"
|
||||
)
|
||||
@@ -1,112 +0,0 @@
|
||||
#include <iostream>
|
||||
|
||||
#include <bn256/bn256.h>
|
||||
|
||||
#include <benchmark.hpp>
|
||||
|
||||
namespace benchmark {
|
||||
|
||||
using bytes = std::vector<char>;
|
||||
using g1g2_pair = std::vector<std::string>;
|
||||
|
||||
void add_benchmarking() {
|
||||
const unsigned char point1[64] = {
|
||||
12,175,215,144,98,95,151,228,179,85,31,170,172,159,40,255,250,252,68,28,235,65,172,180,69,164,153,29,187,239,220,201, // x
|
||||
18,102,219,76,79,148,120,28,39,149,42,172,41,248,120,249,255,69,42,51,160,239,13,219,239,183,77,174,217,158,130,10,}; // y
|
||||
const unsigned char point2[64] = {
|
||||
12,144,10,32,104,85,103,36,222,232,48,152,108,217,40,145,230,48,8,54,0,7,134,164,7,10,139,110,95,205,124,121, // x
|
||||
22,254,176,251,18,168,78,220,142,100,102,113,58,176,83,186,212,62,154,138,235,135,34,46,237,117,54,36,198,40,79,73,}; // y
|
||||
|
||||
unsigned char ans[64] ={};
|
||||
|
||||
|
||||
auto f = [&]() {
|
||||
auto res = bn256::g1_add(point1, point2, ans);
|
||||
if (res == -1) {
|
||||
std::cout << "alt_bn128_add failed" << std::endl;
|
||||
}
|
||||
};
|
||||
|
||||
benchmarking("alt_bn128_add", f);
|
||||
}
|
||||
|
||||
void mul_benchmarking() {
|
||||
const unsigned char point[64] = {
|
||||
12,175,215,144,98,95,151,228,179,85,31,170,172,159,40,255,250,252,68,28,235,65,172,180,69,164,153,29,187,239,220,201, // x
|
||||
18,102,219,76,79,148,120,28,39,149,42,172,41,248,120,249,255,69,42,51,160,239,13,219,239,183,77,174,217,158,130,10,}; // y
|
||||
const unsigned char scalar[32] = {
|
||||
25,62,182,170,104,140,135,90,37,150,0,77,2,77,146,71,54,101,113,69,177,216,157,4,229,213,33,215,169,99,150,91, }; // scaler size 256 bits
|
||||
|
||||
unsigned char ans[64] = {};
|
||||
|
||||
auto f = [&]() {
|
||||
auto res = bn256::g1_scalar_mul(point, scalar, ans);
|
||||
if (res == -1) {
|
||||
std::cout << "alt_bn128_mul failed" << std::endl;
|
||||
}
|
||||
};
|
||||
|
||||
benchmarking("alt_bn128_mul", f);
|
||||
}
|
||||
|
||||
void pair_benchmarking() {
|
||||
const unsigned char g1_g2_pairs[] = {
|
||||
/* pair 1 */
|
||||
12,175,215,144,98,95,151,228,179,85,31,170,172,159,40,255,250,252,68,28,235,65,172,180,69,164,153,29,187,239,220,201,18,102,219,76,79,148,120,28,39,149,42,172,41,248,120,249,255,69,42,51,160,239,13,219,239,183,77,174,217,158,130,10,
|
||||
46,24,234,176,148,82,198,136,44,30,157,18,217,25,49,241,63,197,2,151,14,150,136,210,114,4,74,124,145,225,131,139,13,60,0,50,236,103,39,15,150,226,246,189,209,113,0,46,151,39,41,6,87,119,228,213,45,225,29,234,161,110,43,87,3,237,74,227,93,23,171,129,49,118,228,173,154,111,168,220,161,46,140,103,155,56,168,207,254,90,228,76,188,232,25,34,44,102,159,35,193,216,177,31,131,247,226,19,170,222,26,227,86,37,81,149,202,144,188,126,120,168,9,195,32,169,147,161,
|
||||
/* pair,2,*/
|
||||
12,144,10,32,104,85,103,36,222,232,48,152,108,217,40,145,230,48,8,54,0,7,134,164,7,10,139,110,95,205,124,121,22,254,176,251,18,168,78,220,142,100,102,113,58,176,83,186,212,62,154,138,235,135,34,46,237,117,54,36,198,40,79,73,
|
||||
0,186,148,242,227,252,208,242,165,128,1,160,59,2,6,195,30,54,69,118,8,28,223,92,254,98,110,219,90,92,7,113,26,8,119,98,122,61,119,91,216,107,29,179,122,218,203,6,84,109,119,140,44,12,57,157,203,90,14,108,218,54,94,44,42,77,118,169,232,192,189,60,129,213,156,157,215,160,91,214,138,130,119,145,167,89,237,149,225,85,151,33,89,181,224,235,2,91,213,225,37,226,214,14,255,84,254,117,142,211,28,164,78,254,64,11,126,217,25,124,203,220,52,181,39,32,78,132,
|
||||
/* pair 3 */
|
||||
48,58,116,183,56,3,62,111,104,127,0,7,202,204,146,2,236,192,214,213,231,100,12,17,104,47,76,49,149,39,35,179,2,162,218,104,52,130,61,134,223,111,123,225,186,122,171,2,144,236,110,29,26,142,113,183,238,44,130,30,76,212,52,15,
|
||||
19,206,16,79,220,158,153,194,12,48,10,79,173,10,97,199,113,25,255,87,220,3,102,235,164,170,50,240,177,237,223,205,11,75,211,28,143,229,192,35,171,167,172,238,138,235,82,134,111,165,144,29,118,150,179,21,158,9,202,2,242,109,33,148,14,188,33,145,213,186,0,126,178,10,131,168,121,66,121,193,106,209,176,34,176,41,145,227,3,55,245,150,82,218,232,155,31,153,213,183,157,2,159,247,25,69,49,215,219,36,46,5,192,205,201,182,72,189,84,62,61,47,136,81,51,65,231,161,
|
||||
/* pair 4 */
|
||||
27,31,150,92,17,82,135,210,46,161,0,24,16,199,200,165,29,165,157,168,222,9,83,17,44,27,64,226,208,112,223,128,20,253,182,130,45,130,249,9,168,206,153,86,197,214,59,248,241,191,93,113,70,113,247,244,43,214,240,246,24,38,33,50,
|
||||
23,76,241,195,191,99,69,237,123,173,212,42,74,85,138,108,39,80,105,135,226,11,84,237,39,73,180,224,42,230,246,76,26,61,86,57,253,213,223,2,93,42,38,186,38,38,206,38,209,138,153,181,57,89,16,187,234,2,110,23,12,14,252,240,32,231,237,147,16,62,220,6,160,64,154,167,57,238,243,112,255,35,80,36,100,173,21,58,96,244,77,245,75,202,24,63,35,178,46,215,219,69,120,221,70,119,111,195,145,45,109,84,206,76,254,205,98,167,30,72,117,5,128,129,156,128,196,192,
|
||||
/* pair 5 */
|
||||
33,230,106,254,43,77,114,126,9,205,25,63,9,170,62,237,149,102,198,184,60,31,185,213,103,120,71,249,28,106,238,107,1,133,60,180,58,152,18,177,142,248,46,186,90,34,94,200,235,158,242,255,209,32,143,133,102,195,19,107,153,42,207,228,
|
||||
30,43,165,137,133,231,242,156,65,126,94,159,26,27,78,164,165,159,225,150,220,158,247,118,118,170,195,122,12,125,8,34,39,57,159,231,167,233,3,47,243,142,174,224,162,38,147,65,74,191,98,144,126,125,81,177,75,140,161,27,34,97,46,249,8,65,220,15,139,144,78,12,72,239,54,163,39,6,30,147,154,208,89,111,170,126,6,214,32,181,195,140,215,53,218,239,44,43,229,0,169,242,16,227,163,185,224,21,142,203,135,66,60,53,91,80,48,112,8,13,226,206,58,249,163,52,196,53,
|
||||
/* pair 6 */
|
||||
14,157,100,136,255,206,130,101,56,187,235,39,67,209,67,124,40,174,153,135,155,26,166,170,118,193,244,21,70,71,120,150,3,189,254,120,183,98,23,175,175,28,195,233,165,224,35,95,247,132,40,64,26,208,70,206,247,92,134,105,118,181,21,242,
|
||||
16,159,200,208,93,99,234,139,8,222,239,67,3,187,15,125,5,144,190,196,146,171,15,218,92,36,37,130,2,201,241,182,36,31,104,164,95,29,73,231,87,50,174,142,209,72,31,75,48,13,70,237,118,193,39,85,97,88,228,50,77,163,209,112,7,202,214,212,235,15,224,247,229,179,101,15,72,130,125,8,62,227,46,20,109,53,26,168,10,237,222,85,169,133,181,196,25,36,112,182,41,208,39,132,100,181,199,189,44,99,238,140,6,187,19,197,99,93,243,63,159,132,211,0,230,118,153,54,
|
||||
/* pair 7 */
|
||||
31,60,154,8,188,169,224,107,69,183,223,15,60,32,61,51,81,226,85,38,72,88,241,202,216,204,253,98,0,250,116,167,21,255,0,81,80,3,108,196,240,102,114,33,33,122,116,155,188,19,232,217,42,217,54,195,91,187,88,188,249,218,240,146,
|
||||
12,28,171,60,8,166,151,19,125,237,128,127,207,183,19,1,188,189,105,181,170,172,8,180,30,175,4,108,191,252,197,161,37,122,14,151,117,34,172,227,236,154,84,99,189,197,91,46,43,148,174,218,83,61,196,48,131,45,242,61,92,242,56,251,39,125,111,11,24,37,76,62,151,59,183,3,156,187,249,232,229,56,230,171,55,2,246,70,74,102,0,156,185,237,126,90,0,30,248,164,199,146,66,237,158,134,139,168,128,189,126,55,35,198,48,18,112,40,63,70,254,246,88,111,254,67,213,223,
|
||||
/* pair 8 */
|
||||
27,106,52,232,120,148,201,234,161,123,171,160,223,151,6,105,206,47,94,147,47,22,27,21,248,20,223,51,116,192,29,221,25,149,109,33,131,198,32,101,157,94,62,164,205,151,23,108,214,43,231,7,95,228,183,1,242,205,19,62,124,79,48,203,
|
||||
37,186,150,204,63,241,145,219,169,250,247,76,247,18,135,175,140,58,209,133,113,144,185,191,101,197,252,253,50,126,188,177,45,103,105,194,21,229,145,210,89,135,244,248,238,64,102,155,129,232,252,32,208,82,51,131,113,100,25,174,253,19,211,18,6,77,66,232,173,42,146,120,106,72,92,144,51,233,117,184,113,60,33,118,209,83,119,93,170,253,126,41,58,13,85,111,30,233,117,238,183,18,219,38,216,163,244,98,219,254,156,189,57,246,220,178,17,190,88,84,13,41,8,236,181,155,85,198,
|
||||
/* pair 9 */
|
||||
25,62,182,170,104,140,135,90,37,150,0,77,2,77,146,71,54,101,113,69,177,216,157,4,229,213,33,215,169,99,150,91,5,185,157,10,152,12,220,171,39,188,1,48,87,129,192,101,36,179,99,212,123,207,13,76,89,78,8,154,75,239,117,189,
|
||||
19,87,226,242,101,183,176,42,195,135,40,225,195,207,13,62,60,37,28,251,13,165,96,198,173,250,251,107,25,141,77,68,45,115,128,233,135,104,231,12,192,206,60,249,137,191,114,141,3,235,34,189,208,170,23,59,231,12,197,116,5,188,52,20,11,153,186,15,96,240,54,123,212,242,168,141,151,187,17,38,185,238,196,242,26,194,193,18,34,107,95,238,108,154,140,224,13,76,71,149,81,56,85,83,56,59,203,183,170,10,167,200,128,135,105,19,93,203,131,146,116,209,62,27,81,80,234,172,
|
||||
/* pair 10 */
|
||||
30,204,212,77,212,159,135,173,195,194,165,112,62,248,180,204,66,73,253,99,65,111,39,171,19,211,171,203,35,66,146,20,33,241,46,6,167,133,80,76,238,165,59,232,120,58,211,157,50,212,86,191,95,6,134,164,36,227,79,58,119,98,108,171,
|
||||
48,49,12,141,166,151,158,56,136,255,197,138,114,195,39,59,71,236,82,57,149,249,170,55,187,95,193,171,14,124,45,87,7,157,47,178,153,237,194,157,142,194,100,14,40,51,61,201,244,93,61,196,154,59,14,135,209,72,102,186,14,228,228,152,40,246,109,82,93,249,92,105,191,121,77,108,20,87,3,87,167,173,171,255,189,34,155,239,218,95,181,153,222,20,120,195,27,28,47,82,113,3,218,129,54,210,185,165,206,99,126,61,217,19,237,5,12,90,148,246,128,231,63,53,37,223,204,195
|
||||
};
|
||||
|
||||
// benchmarking 1 pair of points
|
||||
auto f_1_pair = [&]() {
|
||||
auto res = bn256::pairing_check({ g1_g2_pairs, 384}, [](){});
|
||||
if (res == -1) {
|
||||
std::cout << "alt_bn128_pair 1 pair failed" << std::endl;
|
||||
}
|
||||
};
|
||||
benchmarking("alt_bn128_pair (1 pair)", f_1_pair);
|
||||
|
||||
// benchmarking 10 pair of points
|
||||
auto f_10_pairs = [&]() {
|
||||
auto res = bn256::pairing_check(g1_g2_pairs, [](){});
|
||||
if (res == -1) {
|
||||
std::cout << "alt_bn128_pair 10 pair failed" << std::endl;
|
||||
}
|
||||
};
|
||||
|
||||
benchmarking("alt_bn128_pair (10 pairs)", f_10_pairs);
|
||||
}
|
||||
|
||||
void alt_bn_128_benchmarking() {
|
||||
add_benchmarking();
|
||||
mul_benchmarking();
|
||||
pair_benchmarking();
|
||||
}
|
||||
|
||||
} // benchmark
|
||||
@@ -1,82 +0,0 @@
|
||||
#include <chrono>
|
||||
#include <iostream>
|
||||
#include <iomanip>
|
||||
#include <locale>
|
||||
|
||||
#include <benchmark.hpp>
|
||||
|
||||
namespace benchmark {
|
||||
|
||||
// update this map when a new feature is supported
|
||||
// key is the name and value is the function doing benchmarking
|
||||
std::map<std::string, std::function<void()>> features {
|
||||
{ "alt_bn_128", alt_bn_128_benchmarking },
|
||||
{ "modexp", modexp_benchmarking },
|
||||
{ "key", key_benchmarking },
|
||||
{ "hash", hash_benchmarking },
|
||||
{ "blake2", blake2_benchmarking },
|
||||
};
|
||||
|
||||
// values to control cout format
|
||||
constexpr auto name_width = 28;
|
||||
constexpr auto runs_width = 5;
|
||||
constexpr auto time_width = 12;
|
||||
constexpr auto ns_width = 2;
|
||||
|
||||
uint32_t num_runs = 1;
|
||||
|
||||
std::map<std::string, std::function<void()>> get_features() {
|
||||
return features;
|
||||
}
|
||||
|
||||
void set_num_runs(uint32_t runs) {
|
||||
num_runs = runs;
|
||||
}
|
||||
|
||||
void print_header() {
|
||||
std::cout << std::left << std::setw(name_width) << "function"
|
||||
<< std::setw(runs_width) << "runs"
|
||||
<< std::setw(time_width + ns_width) << std::right << "average"
|
||||
<< std::setw(time_width + ns_width) << "minimum"
|
||||
<< std::setw(time_width + ns_width) << "maximum"
|
||||
<< std::endl << std::endl;
|
||||
}
|
||||
|
||||
void print_results(std::string name, uint32_t runs, uint64_t total, uint64_t min, uint64_t max) {
|
||||
std::cout.imbue(std::locale(""));
|
||||
std::cout
|
||||
<< std::setw(name_width) << std::left << name
|
||||
<< std::setw(runs_width) << runs
|
||||
// std::fixed for not printing 1234 in 1.234e3.
|
||||
// setprecision(0) for not printing fractions
|
||||
<< std::right << std::fixed << std::setprecision(0)
|
||||
<< std::setw(time_width) << total/runs << std::setw(ns_width) << " ns"
|
||||
<< std::setw(time_width) << min << std::setw(ns_width) << " ns"
|
||||
<< std::setw(time_width) << max << std::setw(ns_width) << " ns"
|
||||
<< std::endl;
|
||||
}
|
||||
|
||||
bytes to_bytes(const std::string& source) {
|
||||
bytes output(source.length()/2);
|
||||
fc::from_hex(source, output.data(), output.size());
|
||||
return output;
|
||||
};
|
||||
|
||||
void benchmarking(std::string name, const std::function<void()>& func) {
|
||||
uint64_t total {0}, min {std::numeric_limits<uint64_t>::max()}, max {0};
|
||||
|
||||
for (auto i = 0U; i < num_runs; ++i) {
|
||||
auto start_time = std::chrono::high_resolution_clock::now();
|
||||
func();
|
||||
auto end_time = std::chrono::high_resolution_clock::now();
|
||||
|
||||
uint64_t duration = std::chrono::duration_cast<std::chrono::nanoseconds>(end_time - start_time).count();
|
||||
total += duration;
|
||||
min = std::min(min, duration);
|
||||
max = std::max(max, duration);
|
||||
}
|
||||
|
||||
print_results(name, num_runs, total, min, max);
|
||||
}
|
||||
|
||||
} // benchmark
|
||||
@@ -1,25 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#include <functional>
|
||||
#include <map>
|
||||
#include <vector>
|
||||
|
||||
#include <fc/crypto/hex.hpp>
|
||||
|
||||
namespace benchmark {
|
||||
using bytes = std::vector<char>;
|
||||
|
||||
void set_num_runs(uint32_t runs);
|
||||
std::map<std::string, std::function<void()>> get_features();
|
||||
void print_header();
|
||||
bytes to_bytes(const std::string& source);
|
||||
|
||||
void alt_bn_128_benchmarking();
|
||||
void modexp_benchmarking();
|
||||
void key_benchmarking();
|
||||
void hash_benchmarking();
|
||||
void blake2_benchmarking();
|
||||
|
||||
void benchmarking(std::string name, const std::function<void()>& func);
|
||||
|
||||
} // benchmark
|
||||
@@ -1,21 +0,0 @@
|
||||
#include <fc/crypto/blake2.hpp>
|
||||
|
||||
#include <benchmark.hpp>
|
||||
|
||||
namespace benchmark {
|
||||
|
||||
void blake2_benchmarking() {
|
||||
uint32_t _rounds = 0x0C;
|
||||
bytes _h = to_bytes( "48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa5d182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b");
|
||||
bytes _m = to_bytes("6162630000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000");
|
||||
bytes _t0_offset = to_bytes("0300000000000000");
|
||||
bytes _t1_offset = to_bytes("0000000000000000");
|
||||
bool _f = false;
|
||||
|
||||
auto blake2_f = [&]() {
|
||||
fc::blake2b(_rounds, _h, _m, _t0_offset, _t1_offset, _f, [](){});;
|
||||
};
|
||||
benchmarking("blake2", blake2_f);
|
||||
}
|
||||
|
||||
} // benchmark
|
||||
@@ -1,89 +0,0 @@
|
||||
#include <fc/crypto/hex.hpp>
|
||||
#include <fc/crypto/sha1.hpp>
|
||||
#include <fc/crypto/sha3.hpp>
|
||||
#include <fc/crypto/sha256.hpp>
|
||||
#include <fc/crypto/sha512.hpp>
|
||||
#include <fc/crypto/ripemd160.hpp>
|
||||
#include <fc/utility.hpp>
|
||||
|
||||
#include <benchmark.hpp>
|
||||
|
||||
using namespace fc;
|
||||
|
||||
namespace benchmark {
|
||||
|
||||
void hash_benchmarking() {
|
||||
std::string small_message = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ01";
|
||||
|
||||
// build a large message
|
||||
constexpr auto large_msg_size = 4096;
|
||||
std::string large_message;
|
||||
large_message.reserve(large_msg_size);
|
||||
uint32_t num_concats = large_msg_size/small_message.length();
|
||||
for (uint32_t i = 0; i < num_concats; ++i) {
|
||||
large_message += small_message;
|
||||
}
|
||||
|
||||
auto sha1_small_msg = [&]() {
|
||||
fc::sha1::hash(small_message);
|
||||
};
|
||||
benchmarking("sha1 (" + std::to_string(small_message.length()) + " bytes)", sha1_small_msg);
|
||||
|
||||
auto sha1_large_msg = [&]() {
|
||||
fc::sha1::hash(large_message);
|
||||
};
|
||||
benchmarking("sha1 (" + std::to_string(large_message.length()) + " bytes)", sha1_large_msg);
|
||||
|
||||
auto sha256_small_msg = [&]() {
|
||||
fc::sha256::hash(small_message);
|
||||
};
|
||||
benchmarking("sha256 (" + std::to_string(small_message.length()) + " bytes)", sha256_small_msg);
|
||||
|
||||
auto sha256_large_msg = [&]() {
|
||||
fc::sha256::hash(large_message);
|
||||
};
|
||||
benchmarking("sha256 (" + std::to_string(large_message.length()) + " bytes)", sha256_large_msg);
|
||||
|
||||
auto sha512_small_msg = [&]() {
|
||||
fc::sha512::hash(small_message);
|
||||
};
|
||||
benchmarking("sha512 (" + std::to_string(small_message.length()) + " bytes)", sha512_small_msg);
|
||||
|
||||
auto sha512_large_msg = [&]() {
|
||||
fc::sha512::hash(large_message);
|
||||
};
|
||||
benchmarking("sha512 (" + std::to_string(large_message.length()) + " bytes)", sha512_large_msg);
|
||||
|
||||
auto ripemd160_small_msg = [&]() {
|
||||
fc::ripemd160::hash(small_message);
|
||||
};
|
||||
benchmarking("ripemd160 (" + std::to_string(small_message.length()) + " bytes)", ripemd160_small_msg);
|
||||
|
||||
auto ripemd160_large_msg = [&]() {
|
||||
fc::ripemd160::hash(large_message);
|
||||
};
|
||||
benchmarking("ripemd160 (" + std::to_string(large_message.length()) + " bytes)", ripemd160_large_msg);
|
||||
|
||||
auto sha3_small_msg = [&]() {
|
||||
fc::sha3::hash(small_message, true);
|
||||
};
|
||||
benchmarking("sha3-256 (" + std::to_string(small_message.length()) + " bytes)", sha3_small_msg);
|
||||
|
||||
auto sha3_large_msg = [&]() {
|
||||
fc::sha3::hash(large_message, true);
|
||||
};
|
||||
benchmarking("sha3-256 (" + std::to_string(large_message.length()) + " bytes)", sha3_large_msg);
|
||||
|
||||
auto keccak_small_msg = [&]() {
|
||||
fc::sha3::hash(small_message, false);
|
||||
};
|
||||
benchmarking("keccak256 (" + std::to_string(small_message.length()) + " bytes)", keccak_small_msg);
|
||||
|
||||
auto keccak_large_msg = [&]() {
|
||||
fc::sha3::hash(large_message, false);
|
||||
};
|
||||
benchmarking("keccak256 (" + std::to_string(large_message.length()) + " bytes)", keccak_large_msg);
|
||||
|
||||
}
|
||||
|
||||
} // benchmark
|
||||
@@ -1,109 +0,0 @@
|
||||
#include <fc/crypto/public_key.hpp>
|
||||
#include <fc/crypto/private_key.hpp>
|
||||
#include <fc/crypto/signature.hpp>
|
||||
#include <fc/crypto/k1_recover.hpp>
|
||||
|
||||
#include <benchmark.hpp>
|
||||
|
||||
using namespace fc::crypto;
|
||||
using namespace fc;
|
||||
using namespace std::literals;
|
||||
|
||||
namespace benchmark {
|
||||
|
||||
void k1_sign_benchmarking() {
|
||||
auto payload = "Test Cases";
|
||||
auto digest = sha256::hash(payload, const_strlen(payload));
|
||||
auto private_key_string = std::string("5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3");
|
||||
auto key = private_key(private_key_string);
|
||||
|
||||
auto sign_non_canonical_f = [&]() {
|
||||
key.sign(digest, false);
|
||||
};
|
||||
benchmarking("k1_sign_non_canonical", sign_non_canonical_f);
|
||||
}
|
||||
|
||||
void k1_recover_benchmarking() {
|
||||
auto signature = to_bytes( "1b323dd47a1dd5592c296ee2ee12e0af38974087a475e99098a440284f19c1f7642fa0baa10a8a3ab800dfdbe987dee68a09b6fa3db45a5cc4f3a5835a1671d4dd");
|
||||
auto digest = to_bytes( "92390316873c5a9d520b28aba61e7a8f00025ac069acd9c4d2a71d775a55fa5f");
|
||||
|
||||
auto recover_f = [&]() {
|
||||
fc::k1_recover(signature, digest);
|
||||
};
|
||||
benchmarking("k1_recover", recover_f);
|
||||
}
|
||||
|
||||
void k1_benchmarking() {
|
||||
k1_sign_benchmarking();
|
||||
k1_recover_benchmarking();
|
||||
}
|
||||
|
||||
void r1_benchmarking() {
|
||||
auto payload = "Test Cases";
|
||||
auto digest = sha256::hash(payload, const_strlen(payload));
|
||||
auto key = private_key::generate<r1::private_key_shim>();
|
||||
|
||||
auto sign_f = [&]() {
|
||||
key.sign(digest);
|
||||
};
|
||||
benchmarking("r1_sign", sign_f);
|
||||
|
||||
auto sig = key.sign(digest);
|
||||
auto recover_f = [&]() {
|
||||
public_key(sig, digest);;
|
||||
};
|
||||
benchmarking("r1_recover", recover_f);
|
||||
}
|
||||
|
||||
static fc::crypto::webauthn::signature make_webauthn_sig(const fc::crypto::r1::private_key& priv_key,
|
||||
std::vector<uint8_t>& auth_data,
|
||||
const std::string& json) {
|
||||
|
||||
//webauthn signature is sha256(auth_data || client_data_hash)
|
||||
fc::sha256 client_data_hash = fc::sha256::hash(json);
|
||||
fc::sha256::encoder e;
|
||||
e.write((char*)auth_data.data(), auth_data.size());
|
||||
e.write(client_data_hash.data(), client_data_hash.data_size());
|
||||
|
||||
r1::compact_signature sig = priv_key.sign_compact(e.result());
|
||||
|
||||
char buff[8192];
|
||||
datastream<char*> ds(buff, sizeof(buff));
|
||||
fc::raw::pack(ds, sig);
|
||||
fc::raw::pack(ds, auth_data);
|
||||
fc::raw::pack(ds, json);
|
||||
ds.seekp(0);
|
||||
|
||||
fc::crypto::webauthn::signature ret;
|
||||
fc::raw::unpack(ds, ret);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void wa_benchmarking() {
|
||||
static const r1::private_key priv = fc::crypto::r1::private_key::generate();
|
||||
static const fc::sha256 d = fc::sha256::hash("sup"s);
|
||||
static const fc::sha256 origin_hash = fc::sha256::hash("fctesting.invalid"s);
|
||||
std::string json = "{\"origin\":\"https://fctesting.invalid\",\"type\":\"webauthn.get\", \"challenge\":\"" + fc::base64url_encode(d.data(), d.data_size()) + "\"}";
|
||||
std::vector<uint8_t> auth_data(37);
|
||||
memcpy(auth_data.data(), origin_hash.data(), sizeof(origin_hash));
|
||||
|
||||
auto sign = [&]() {
|
||||
make_webauthn_sig(priv, auth_data, json);
|
||||
};
|
||||
benchmarking("webauthn_sign", sign);
|
||||
|
||||
auto sig = make_webauthn_sig(priv, auth_data, json);
|
||||
auto recover= [&]() {
|
||||
sig.recover(d, true);
|
||||
};
|
||||
benchmarking("webauthn_recover", recover);
|
||||
}
|
||||
|
||||
void key_benchmarking() {
|
||||
k1_benchmarking();
|
||||
r1_benchmarking();
|
||||
wa_benchmarking();
|
||||
}
|
||||
|
||||
} // benchmark
|
||||
@@ -1,80 +0,0 @@
|
||||
#include <iostream>
|
||||
|
||||
#include <boost/program_options.hpp>
|
||||
|
||||
#include <benchmark.hpp>
|
||||
|
||||
namespace bpo = boost::program_options;
|
||||
using bpo::options_description;
|
||||
using bpo::variables_map;
|
||||
|
||||
int main(int argc, char* argv[]) {
|
||||
uint32_t num_runs = 1;
|
||||
std::string feature_name;
|
||||
|
||||
auto features = benchmark::get_features();
|
||||
|
||||
options_description cli ("benchmark command line options");
|
||||
cli.add_options()
|
||||
("feature,f", bpo::value<std::string>(), "feature to be benchmarked; if this option is not present, all features are benchmarked.")
|
||||
("list,l", "list of supported features")
|
||||
("runs,r", bpo::value<uint32_t>(&num_runs)->default_value(1000), "the number of times running a function during benchmarking")
|
||||
("help,h", "benchmark functions, and report average, minimum, and maximum execution time in nanoseconds");
|
||||
|
||||
variables_map vmap;
|
||||
try {
|
||||
bpo::store(bpo::parse_command_line(argc, argv, cli), vmap);
|
||||
bpo::notify(vmap);
|
||||
|
||||
if (vmap.count("help") > 0) {
|
||||
cli.print(std::cerr);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (vmap.count("list") > 0) {
|
||||
auto first = true;
|
||||
std::cout << "Supported features are ";
|
||||
for (auto& [name, f]: features) {
|
||||
if (first) {
|
||||
first = false;
|
||||
} else {
|
||||
std::cout << ", ";
|
||||
}
|
||||
std::cout << name;
|
||||
}
|
||||
std::cout << std::endl;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (vmap.count("feature") > 0) {
|
||||
feature_name = vmap["feature"].as<std::string>();
|
||||
if (features.find(feature_name) == features.end()) {
|
||||
std::cout << feature_name << " is not supported" << std::endl;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
} catch (bpo::unknown_option &ex) {
|
||||
std::cerr << ex.what() << std::endl;
|
||||
cli.print (std::cerr);
|
||||
return 1;
|
||||
} catch( ... ) {
|
||||
std::cerr << "unknown exception" << std::endl;
|
||||
}
|
||||
|
||||
benchmark::set_num_runs(num_runs);
|
||||
benchmark::print_header();
|
||||
|
||||
if (feature_name.empty()) {
|
||||
for (auto& [name, f]: features) {
|
||||
std::cout << name << ":" << std::endl;
|
||||
f();
|
||||
std::cout << std::endl;
|
||||
}
|
||||
} else {
|
||||
std::cout << feature_name << ":" << std::endl;
|
||||
features[feature_name]();
|
||||
std::cout << std::endl;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -1,58 +0,0 @@
|
||||
#include <fc/crypto/modular_arithmetic.hpp>
|
||||
|
||||
#include <random>
|
||||
|
||||
#include <benchmark.hpp>
|
||||
|
||||
namespace benchmark {
|
||||
|
||||
void modexp_benchmarking() {
|
||||
std::mt19937 r(0x11223344);
|
||||
|
||||
auto generate_random_bytes = [](std::mt19937& rand_eng, unsigned int num_bytes) {
|
||||
std::vector<char> result(num_bytes);
|
||||
|
||||
uint_fast32_t v = 0;
|
||||
for(int byte_pos = 0, end = result.size(); byte_pos < end; ++byte_pos) {
|
||||
if ((byte_pos & 0x03) == 0) { // if divisible by 4
|
||||
v = rand_eng();
|
||||
}
|
||||
result[byte_pos] = v & 0xFF;
|
||||
v >>= 8;
|
||||
}
|
||||
|
||||
return result;
|
||||
};
|
||||
|
||||
static constexpr unsigned int start_num_bytes = 128; // 64
|
||||
static constexpr unsigned int end_num_bytes = 256; // 512
|
||||
static constexpr unsigned int delta_num_bytes = 128; // 64
|
||||
|
||||
static_assert(start_num_bytes <= end_num_bytes);
|
||||
static_assert(delta_num_bytes > 0);
|
||||
static_assert((end_num_bytes - start_num_bytes) % delta_num_bytes == 0);
|
||||
|
||||
for (unsigned int n = start_num_bytes, slot = 0; n <= end_num_bytes; n += delta_num_bytes, ++slot) {
|
||||
auto base = generate_random_bytes(r, n);
|
||||
auto exponent = generate_random_bytes(r, n);
|
||||
auto modulus = generate_random_bytes(r, n);
|
||||
|
||||
auto f = [&]() {
|
||||
fc::modexp(base, exponent, modulus);
|
||||
};
|
||||
|
||||
benchmarking(std::to_string(n*8) + " bit width", f);
|
||||
}
|
||||
|
||||
// Running the above benchmark (using commented values for num_trials and *_num_bytes) with a release build on an AMD 3.4 GHz CPU
|
||||
// provides average durations for executing mod_exp for increasing bit sizes for the value.
|
||||
|
||||
// For example: with 512-bit values, the average duration is approximately 40 microseconds; with 1024-bit values, the average duration
|
||||
// is approximately 260 microseconds; with 2048-bit values, the average duration is approximately 2 milliseconds; and, with 4096-bit
|
||||
// values, the average duration is approximately 14 milliseconds.
|
||||
|
||||
// It appears that a model of the average time that scales quadratically with the bit size fits the empirically generated data well.
|
||||
// TODO: See if theoretical analysis of the modular exponentiation algorithm also justifies quadratic scaling.
|
||||
}
|
||||
|
||||
} // benchmark
|
||||
@@ -0,0 +1,65 @@
|
||||
{
|
||||
"name": "eos",
|
||||
"generators": [
|
||||
{
|
||||
"name": "collate_markdown",
|
||||
"options": {
|
||||
"docs_dir": "docs"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "swagger",
|
||||
"options": {
|
||||
"swagger_path": "plugins/chain_api_plugin/chain.swagger.yaml",
|
||||
"swagger_dest_path": "nodeos/plugins/chain_api_plugin/api-reference",
|
||||
"disable_filters": true,
|
||||
"disable_summary_gen": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "swagger",
|
||||
"options": {
|
||||
"swagger_path": "plugins/db_size_api_plugin/db_size.swagger.yaml",
|
||||
"swagger_dest_path": "nodeos/plugins/db_size_api_plugin/api-reference",
|
||||
"disable_filters": true,
|
||||
"disable_summary_gen": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "swagger",
|
||||
"options": {
|
||||
"swagger_path": "plugins/producer_api_plugin/producer.swagger.yaml",
|
||||
"swagger_dest_path": "nodeos/plugins/producer_api_plugin/api-reference",
|
||||
"disable_filters": true,
|
||||
"disable_summary_gen": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "swagger",
|
||||
"options": {
|
||||
"swagger_path": "plugins/net_api_plugin/net.swagger.yaml",
|
||||
"swagger_dest_path": "nodeos/plugins/net_api_plugin/api-reference",
|
||||
"disable_filters": true,
|
||||
"disable_summary_gen": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "swagger",
|
||||
"options": {
|
||||
"swagger_path": "plugins/test_control_api_plugin/test_control.swagger.yaml",
|
||||
"swagger_dest_path": "nodeos/plugins/test_control_api_plugin/api-reference",
|
||||
"disable_filters": true,
|
||||
"disable_summary_gen": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "swagger",
|
||||
"options": {
|
||||
"swagger_path": "plugins/trace_api_plugin/trace_api.swagger.yaml",
|
||||
"swagger_dest_path": "nodeos/plugins/trace_api_plugin/api-reference",
|
||||
"disable_filters": true,
|
||||
"disable_summary_gen": true
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
---
|
||||
content_title: Install Prebuilt Binaries
|
||||
---
|
||||
|
||||
[[info | Previous Builds]]
|
||||
| If you have previously installed EOSIO from source using shell scripts, you must first run the [Uninstall Script](01_build-from-source/01_shell-scripts/05_uninstall-eosio.md) before installing any prebuilt binaries on the same OS.
|
||||
|
||||
## Prebuilt Binaries
|
||||
|
||||
Prebuilt EOSIO software packages are available for the operating systems below. Find and follow the instructions for your OS:
|
||||
|
||||
### Mac OS X:
|
||||
|
||||
#### Mac OS X Brew Install
|
||||
```sh
|
||||
brew tap eosio/eosio
|
||||
brew install eosio
|
||||
```
|
||||
#### Mac OS X Brew Uninstall
|
||||
```sh
|
||||
brew remove eosio
|
||||
```
|
||||
|
||||
### Ubuntu Linux:
|
||||
|
||||
#### Ubuntu 18.04 Package Install
|
||||
```sh
|
||||
wget https://github.com/eosio/eos/releases/download/v2.0.13/eosio_2.0.13-1-ubuntu-18.04_amd64.deb
|
||||
sudo apt install ./eosio_2.0.13-1-ubuntu-18.04_amd64.deb
|
||||
```
|
||||
#### Ubuntu 16.04 Package Install
|
||||
```sh
|
||||
wget https://github.com/eosio/eos/releases/download/v2.0.13/eosio_2.0.13-1-ubuntu-16.04_amd64.deb
|
||||
sudo apt install ./eosio_2.0.13-1-ubuntu-16.04_amd64.deb
|
||||
```
|
||||
#### Ubuntu Package Uninstall
|
||||
```sh
|
||||
sudo apt remove eosio
|
||||
```
|
||||
|
||||
### RPM-based (CentOS, Amazon Linux, etc.):
|
||||
|
||||
#### RPM Package Install
|
||||
```sh
|
||||
wget https://github.com/eosio/eos/releases/download/v2.0.13/eosio-2.0.13-1.el7.x86_64.rpm
|
||||
sudo yum install ./eosio-2.0.13-1.el7.x86_64.rpm
|
||||
```
|
||||
#### RPM Package Uninstall
|
||||
```sh
|
||||
sudo yum remove eosio
|
||||
```
|
||||
|
||||
## Location of EOSIO binaries
|
||||
|
||||
After installing the prebuilt packages, the actual EOSIO binaries will be located under:
|
||||
* `/usr/opt/eosio/<version-string>/bin` (Linux-based); or
|
||||
* `/usr/local/Cellar/eosio/<version-string>/bin` (MacOS)
|
||||
|
||||
where `version-string` is the EOSIO version that was installed.
|
||||
|
||||
Also, soft links for each EOSIO program (`nodeos`, `cleos`, `keosd`, etc.) will be created under `usr/bin` or `usr/local/bin` to allow them to be executed from any directory.
|
||||
|
||||
## Previous Versions
|
||||
|
||||
To install previous versions of the EOSIO prebuilt binaries:
|
||||
|
||||
1. Browse to https://github.com/EOSIO/eos/tags and select the actual version of the EOSIO software you need to install.
|
||||
|
||||
2. Scroll down past the `Release Notes` and download the package or archive that you need for your OS.
|
||||
|
||||
3. Follow the instructions on the first paragraph above to install the selected prebuilt binaries on the given OS.
|
||||
@@ -1,63 +0,0 @@
|
||||
---
|
||||
content_title: Build Antelope from Source on Other Unix-based OS
|
||||
---
|
||||
|
||||
**Please keep in mind that instructions for building from source on other unsupported operating systems provided here should be considered experimental and provided AS-IS on a best-effort basis and may not be fully featured.**
|
||||
|
||||
### Using DUNE
|
||||
|
||||
For the official multi-platform support try [Docker Utilities for Node Execution](https://github.com/AntelopeIO/DUNE) which runs in an ubuntu image via a docker container.
|
||||
|
||||
**A Warning On Parallel Compilation Jobs (`-j` flag)**: When building C/C++ software often the build is performed in parallel via a command such as `make -j $(nproc)` which uses the number of CPU cores as the number of compilation jobs to perform simultaneously. However, be aware that some compilation units (.cpp files) in mandel are extremely complex and will consume nearly 4GB of memory to compile. You may need to reduce the level of parallelization depending on the amount of memory on your build host. e.g. instead of `make -j $(nproc)` run `make -j2`. Failures due to memory exhaustion will typically but not always manifest as compiler crashes.
|
||||
|
||||
Generally we recommend performing what we refer to as a "pinned build" which ensures the compiler and boost version remain the same between builds of different mandel versions (mandel requires these versions remain the same otherwise its state needs to be repopulated from a portable snapshot).
|
||||
|
||||
<details>
|
||||
<summary>FreeBSD 13.1 Build Instructions</summary>
|
||||
|
||||
Install required dependencies:
|
||||
```
|
||||
pkg update && pkg install \
|
||||
git \
|
||||
cmake \
|
||||
curl \
|
||||
boost-all \
|
||||
python3 \
|
||||
openssl \
|
||||
llvm11 \
|
||||
pkgconf
|
||||
```
|
||||
and perform the build (please note that FreeBSD 13.1 comes with llvm13 by default so you should provide clang11 options to cmake):
|
||||
```
|
||||
git submodule update --init --recursive
|
||||
mkdir build
|
||||
cd build
|
||||
cmake -DCMAKE_CXX_COMPILER=clang++11 -DCMAKE_C_COMPILER=clang11 -DCMAKE_BUILD_TYPE=Release ..
|
||||
make -j $(nproc) package
|
||||
```
|
||||
</details>
|
||||
|
||||
### Running Tests
|
||||
|
||||
When building from source it's recommended to run at least what we refer to as the "parallelizable tests". Not included by default in the "parallelizable tests" are the WASM spec tests which can add additional coverage and can also be run in parallel.
|
||||
|
||||
```
|
||||
cd build
|
||||
|
||||
# "parallelizable tests": the minimum test set that should be run
|
||||
ctest -j $(nproc) -LE _tests
|
||||
|
||||
# Also consider running the WASM spec tests for more coverage
|
||||
ctest -j $(nproc) -L wasm_spec_tests
|
||||
```
|
||||
|
||||
Some other tests are available and recommended but be aware they can be sensitive to other software running on the same host and they may **SIGKILL** other nodeos instances running on the host.
|
||||
```
|
||||
cd build
|
||||
|
||||
# These tests can't run in parallel but are recommended.
|
||||
ctest -L "nonparallelizable_tests"
|
||||
|
||||
# These tests can't run in parallel. They also take a long time to run.
|
||||
ctest -L "long_running_tests"
|
||||
```
|
||||
@@ -0,0 +1,31 @@
|
||||
---
|
||||
content_title: Download EOSIO Source
|
||||
---
|
||||
|
||||
To download the EOSIO source code, clone the `eos` repo and its submodules. It is adviced to create a home `eosio` folder first and download all the EOSIO related software there:
|
||||
|
||||
```sh
|
||||
mkdir -p ~/eosio && cd ~/eosio
|
||||
git clone --recursive https://github.com/EOSIO/eos
|
||||
```
|
||||
|
||||
## Update Submodules
|
||||
|
||||
If a repository is cloned without the `--recursive` flag, the submodules *must* be updated before starting the build process:
|
||||
|
||||
```sh
|
||||
cd ~/eosio/eos
|
||||
git submodule update --init --recursive
|
||||
```
|
||||
|
||||
## Pull Changes
|
||||
|
||||
When pulling changes, especially after switching branches, the submodules *must* also be updated. This can be achieved with the `git submodule` command as above, or using `git pull` directly:
|
||||
|
||||
```sh
|
||||
[git checkout <branch>] (optional)
|
||||
git pull --recurse-submodules
|
||||
```
|
||||
|
||||
[[info | What's Next?]]
|
||||
| [Build EOSIO binaries](02_build-eosio-binaries.md)
|
||||
@@ -0,0 +1,18 @@
|
||||
---
|
||||
content_title: Build EOSIO Binaries
|
||||
---
|
||||
|
||||
[[info | Shell Scripts]]
|
||||
| The build script is one of various automated shell scripts provided in the EOSIO repository for building, installing, and optionally uninstalling the EOSIO software and its dependencies. They are available in the `eos/scripts` folder.
|
||||
|
||||
The build script first installs all dependencies and then builds EOSIO. The script supports these [Operating Systems](../../index.md#supported-operating-systems). To run it, first change to the `~/eosio/eos` folder, then launch the script:
|
||||
|
||||
```sh
|
||||
cd ~/eosio/eos
|
||||
./scripts/eosio_build.sh
|
||||
```
|
||||
|
||||
The build process writes temporary content to the `eos/build` folder. After building, the program binaries can be found at `eos/build/programs`.
|
||||
|
||||
[[info | What's Next?]]
|
||||
| [Installing EOSIO](03_install-eosio-binaries.md) is strongly recommended after building from source as it makes local development significantly more friendly.
|
||||
@@ -0,0 +1,24 @@
|
||||
---
|
||||
content_title: Install EOSIO Binaries
|
||||
---
|
||||
|
||||
## EOSIO install script
|
||||
|
||||
For ease of contract development, content can be installed at the `/usr/local` folder using the `eosio_install.sh` script within the `eos/scripts` folder. Adequate permission is required to install on system folders:
|
||||
|
||||
```sh
|
||||
cd ~/eosio/eos
|
||||
./scripts/eosio_install.sh
|
||||
```
|
||||
|
||||
## EOSIO manual install
|
||||
|
||||
In lieu of the `eosio_install.sh` script, you can install the EOSIO binaries directly by invoking `make install` within the `eos/build` folder. Again, adequate permission is required to install on system folders:
|
||||
|
||||
```sh
|
||||
cd ~/eosio/eos/build
|
||||
make install
|
||||
```
|
||||
|
||||
[[info | What's Next?]]
|
||||
| Configure and use [Nodeos](../../../01_nodeos/index.md), or optionally [Test the EOSIO binaries](04_test-eosio-binaries.md).
|
||||
@@ -0,0 +1,15 @@
|
||||
---
|
||||
content_title: Test EOSIO Binaries
|
||||
---
|
||||
|
||||
Optionally, a set of tests can be run against your build to perform some basic validation of the EOSIO software installation.
|
||||
|
||||
To run the test suite after building, run:
|
||||
|
||||
```sh
|
||||
cd ~/eosio/eos/build
|
||||
make test
|
||||
```
|
||||
|
||||
[[info | What's Next?]]
|
||||
| Configure and use [Nodeos](../../../01_nodeos/index.md).
|
||||
@@ -0,0 +1,13 @@
|
||||
---
|
||||
content_title: Uninstall EOSIO
|
||||
---
|
||||
|
||||
If you have previously built EOSIO from source and now wish to install the prebuilt binaries, or to build from source again, it is recommended to run the `eosio_uninstall.sh` script within the `eos/scripts` folder:
|
||||
|
||||
```sh
|
||||
cd ~/eosio/eos
|
||||
./scripts/eosio_uninstall.sh
|
||||
```
|
||||
|
||||
[[info | Uninstall Dependencies]]
|
||||
| The uninstall script will also prompt the user to uninstall EOSIO dependencies. This is recommended if installing prebuilt EOSIO binaries or building EOSIO for the first time.
|
||||
@@ -0,0 +1,17 @@
|
||||
---
|
||||
content_title: Shell Scripts
|
||||
---
|
||||
|
||||
[[info | Did you know?]]
|
||||
| Shell scripts automate the process of building, installing, testing, and uninstalling the EOSIO software and dependencies.
|
||||
|
||||
To build EOSIO from the source code using shell scripts, visit the sections below:
|
||||
|
||||
1. [Download EOSIO Source](01_download-eosio-source.md)
|
||||
2. [Build EOSIO Binaries](02_build-eosio-binaries.md)
|
||||
3. [Install EOSIO Binaries](03_install-eosio-binaries.md)
|
||||
4. [Test EOSIO Binaries](04_test-eosio-binaries.md)
|
||||
5. [Uninstall EOSIO](05_uninstall-eosio.md)
|
||||
|
||||
[[info | Building EOSIO is for Advanced Developers]]
|
||||
| If you are new to EOSIO, it is recommended that you install the [EOSIO Prebuilt Binaries](../../00_install-prebuilt-binaries.md) instead of building from source.
|
||||
@@ -0,0 +1,45 @@
|
||||
---
|
||||
content_title: EOSIO Software Dependencies
|
||||
---
|
||||
|
||||
The EOSIO software requires specific software dependencies to build the EOSIO binaries. These dependencies can be built from source or installed from binaries directly. Dependencies can be pinned to a specific version release or unpinned to the current version, usually the latest one. The main EOSIO dependencies hosted outside the EOSIO repos are:
|
||||
|
||||
* Clang - the C++17 compliant compiler used by EOSIO
|
||||
* CMake - the build system used by EOSIO
|
||||
* Boost - the C++ Boost library used by EOSIO
|
||||
* OpenSSL - the secure communications (and crypto) library
|
||||
* LLVM - the LLVM compiler/toolchain infrastructure
|
||||
|
||||
Other dependencies are either inside the EOSIO repo, such as the `secp256k1` elliptic curve DSA library, or they are otherwise used for testing or housekeeping purposes, such as:
|
||||
|
||||
* automake, autoconf, autotools
|
||||
* doxygen, graphviz
|
||||
* python2, python3
|
||||
* bzip2, zlib
|
||||
* etc.
|
||||
|
||||
## Pinned Dependencies
|
||||
|
||||
To guarantee interoperability across different EOSIO software releases, developers may opt to reproduce the exact "pinned" dependency binaries used in-house. Block producers may want to install and run the EOSIO software built with these pinned dependencies for portability and stability reasons. Pinned dependencies are usually built from source.
|
||||
|
||||
## Unpinned Dependencies
|
||||
|
||||
Regular users or application developers may prefer installing unpinned versions of the EOSIO dependencies. These correspond to the latest or otherwise stable versions of the dependencies. The main advantage of unpinned dependencies is reduced installation times and perhaps better performance. Pinned dependencies are typically installed from binaries.
|
||||
|
||||
## Automatic Installation of Dependencies
|
||||
|
||||
EOSIO dependencies can be built or installed automatically from the [Build Script](../01_shell-scripts/02_build-eosio-binaries.md) when building EOSIO from source. To build the pinned dependencies, the optional `-P` parameter can be specified when invoking the script. Otherwise, the unpinned dependencies will be installed instead, with the exception of `boost` and `cmake` which are always pinned:
|
||||
|
||||
```sh
|
||||
cd ~/eosio/eos
|
||||
./scripts/eosio_build.sh [-P]
|
||||
```
|
||||
|
||||
### Unupported Platforms
|
||||
|
||||
EOSIO dependencies can also be built and installed manually by reproducing the same commands invoked by the [Build Script](../01_shell-scripts/02_build-eosio-binaries.md). The actual commands can be generated from the script directly by exporting specific environment variables and CLI parameters to the script when invoked:
|
||||
|
||||
```sh
|
||||
cd ~/eosio/eos
|
||||
export VERBOSE=true && export DRYRUN=true && ./scripts/eosio_build.sh -y [-P]
|
||||
```
|
||||
@@ -0,0 +1,92 @@
|
||||
---
|
||||
content_title: Amazon Linux 2
|
||||
---
|
||||
|
||||
This section contains shell commands to manually download, build, install, test, and uninstall EOSIO and dependencies on Amazon Linux 2.
|
||||
|
||||
[[info | Building EOSIO is for Advanced Developers]]
|
||||
| If you are new to EOSIO, it is recommended that you install the [EOSIO Prebuilt Binaries](../../../00_install-prebuilt-binaries.md) instead of building from source.
|
||||
|
||||
Select a task below, then copy/paste the shell commands to a Unix terminal to execute:
|
||||
|
||||
* [Download EOSIO Repository](#download-eosio-repository)
|
||||
* [Install EOSIO Dependencies](#install-eosio-dependencies)
|
||||
* [Build EOSIO](#build-eosio)
|
||||
* [Install EOSIO](#install-eosio)
|
||||
* [Test EOSIO](#test-eosio)
|
||||
* [Uninstall EOSIO](#uninstall-eosio)
|
||||
|
||||
[[info | Building EOSIO on another OS?]]
|
||||
| Visit the [Build EOSIO from Source](../../index.md) section.
|
||||
|
||||
## Download EOSIO Repository
|
||||
These commands set the EOSIO directories, install git, and clone the EOSIO repository.
|
||||
```sh
|
||||
# set EOSIO directories
|
||||
export EOSIO_LOCATION=~/eosio/eos
|
||||
export EOSIO_INSTALL_LOCATION=$EOSIO_LOCATION/../install
|
||||
mkdir -p $EOSIO_INSTALL_LOCATION
|
||||
# install git
|
||||
yum update -y && yum install -y git
|
||||
# clone EOSIO repository
|
||||
git clone https://github.com/EOSIO/eos.git $EOSIO_LOCATION
|
||||
cd $EOSIO_LOCATION && git submodule update --init --recursive
|
||||
```
|
||||
|
||||
## Install EOSIO Dependencies
|
||||
These commands install the EOSIO software dependencies. Make sure to [Download the EOSIO Repository](#download-eosio-repository) first and set the EOSIO directories.
|
||||
```sh
|
||||
# install dependencies
|
||||
yum install -y which sudo procps-ng util-linux autoconf automake \
|
||||
libtool make bzip2 bzip2-devel openssl-devel gmp-devel libstdc++ libcurl-devel \
|
||||
libusbx-devel python3 python3-devel python-devel libedit-devel doxygen \
|
||||
graphviz clang patch llvm-devel llvm-static vim-common jq
|
||||
# build cmake
|
||||
export PATH=$EOSIO_INSTALL_LOCATION/bin:$PATH
|
||||
cd $EOSIO_INSTALL_LOCATION && curl -LO https://cmake.org/files/v3.13/cmake-3.13.2.tar.gz && \
|
||||
tar -xzf cmake-3.13.2.tar.gz && \
|
||||
cd cmake-3.13.2 && \
|
||||
./bootstrap --prefix=$EOSIO_INSTALL_LOCATION && \
|
||||
make -j$(nproc) && \
|
||||
make install && \
|
||||
rm -rf $EOSIO_INSTALL_LOCATION/cmake-3.13.2.tar.gz $EOSIO_INSTALL_LOCATION/cmake-3.13.2
|
||||
# build boost
|
||||
cd $EOSIO_INSTALL_LOCATION && curl -LO https://boostorg.jfrog.io/artifactory/main/release/1.71.0/source/boost_1_71_0.tar.bz2 && \
|
||||
tar -xjf boost_1_71_0.tar.bz2 && \
|
||||
cd boost_1_71_0 && \
|
||||
./bootstrap.sh --prefix=$EOSIO_INSTALL_LOCATION && \
|
||||
./b2 --with-iostreams --with-date_time --with-filesystem --with-system --with-program_options --with-chrono --with-test -q -j$(nproc) install && \
|
||||
rm -rf $EOSIO_INSTALL_LOCATION/boost_1_71_0.tar.bz2 $EOSIO_INSTALL_LOCATION/boost_1_71_0
|
||||
```
|
||||
|
||||
## Build EOSIO
|
||||
These commands build the EOSIO software on the specified OS. Make sure to [Install EOSIO Dependencies](#install-eosio-dependencies) first.
|
||||
|
||||
[[caution | `EOSIO_BUILD_LOCATION` environment variable]]
|
||||
| Do NOT change this variable. It is set for convenience only. It should always be set to the `build` folder within the cloned repository.
|
||||
|
||||
```sh
|
||||
export EOSIO_BUILD_LOCATION=$EOSIO_LOCATION/build
|
||||
mkdir -p $EOSIO_BUILD_LOCATION
|
||||
cd $EOSIO_BUILD_LOCATION && $EOSIO_INSTALL_LOCATION/bin/cmake -DCMAKE_BUILD_TYPE='Release' -DCMAKE_CXX_COMPILER='clang++' -DCMAKE_C_COMPILER='clang' -DCMAKE_INSTALL_PREFIX=$EOSIO_INSTALL_LOCATION $EOSIO_LOCATION
|
||||
cd $EOSIO_BUILD_LOCATION && make -j$(nproc)
|
||||
```
|
||||
|
||||
## Install EOSIO
|
||||
This command installs the EOSIO software on the specified OS. Make sure to [Build EOSIO](#build-eosio) first.
|
||||
```sh
|
||||
cd $EOSIO_BUILD_LOCATION && make install
|
||||
```
|
||||
|
||||
## Test EOSIO
|
||||
These commands validate the EOSIO software installation on the specified OS. This task is optional but recommended. Make sure to [Install EOSIO](#install-eosio) first.
|
||||
```sh
|
||||
cd $EOSIO_BUILD_LOCATION && make test
|
||||
```
|
||||
|
||||
## Uninstall EOSIO
|
||||
These commands uninstall the EOSIO software from the specified OS.
|
||||
```sh
|
||||
xargs rm < $EOSIO_BUILD_LOCATION/install_manifest.txt
|
||||
rm -rf $EOSIO_BUILD_LOCATION
|
||||
```
|
||||
@@ -0,0 +1,100 @@
|
||||
---
|
||||
content_title: Centos 7.7
|
||||
---
|
||||
|
||||
This section contains shell commands to manually download, build, install, test, and uninstall EOSIO and dependencies on Centos 7.7.
|
||||
|
||||
[[info | Building EOSIO is for Advanced Developers]]
|
||||
| If you are new to EOSIO, it is recommended that you install the [EOSIO Prebuilt Binaries](../../../00_install-prebuilt-binaries.md) instead of building from source.
|
||||
|
||||
Select a task below, then copy/paste the shell commands to a Unix terminal to execute:
|
||||
|
||||
* [Download EOSIO Repository](#download-eosio-repository)
|
||||
* [Install EOSIO Dependencies](#install-eosio-dependencies)
|
||||
* [Build EOSIO](#build-eosio)
|
||||
* [Install EOSIO](#install-eosio)
|
||||
* [Test EOSIO](#test-eosio)
|
||||
* [Uninstall EOSIO](#uninstall-eosio)
|
||||
|
||||
[[info | Building EOSIO on another OS?]]
|
||||
| Visit the [Build EOSIO from Source](../../index.md) section.
|
||||
|
||||
## Download EOSIO Repository
|
||||
These commands set the EOSIO directories, install git, and clone the EOSIO repository.
|
||||
```sh
|
||||
# set EOSIO directories
|
||||
export EOSIO_LOCATION=~/eosio/eos
|
||||
export EOSIO_INSTALL_LOCATION=$EOSIO_LOCATION/../install
|
||||
mkdir -p $EOSIO_INSTALL_LOCATION
|
||||
# install git
|
||||
yum update -y && yum install -y git
|
||||
# clone EOSIO repository
|
||||
git clone https://github.com/EOSIO/eos.git $EOSIO_LOCATION
|
||||
cd $EOSIO_LOCATION && git submodule update --init --recursive
|
||||
```
|
||||
|
||||
## Install EOSIO Dependencies
|
||||
These commands install the EOSIO software dependencies. Make sure to [Download the EOSIO Repository](#download-eosio-repository) first and set the EOSIO directories.
|
||||
```sh
|
||||
# install dependencies
|
||||
yum update -y && \
|
||||
yum install -y epel-release && \
|
||||
yum --enablerepo=extras install -y centos-release-scl && \
|
||||
yum --enablerepo=extras install -y devtoolset-8 && \
|
||||
yum --enablerepo=extras install -y which git autoconf automake libtool make bzip2 doxygen \
|
||||
graphviz bzip2-devel openssl-devel gmp-devel ocaml \
|
||||
python python-devel rh-python36 file libusbx-devel \
|
||||
libcurl-devel patch vim-common jq llvm-toolset-7.0-llvm-devel llvm-toolset-7.0-llvm-static
|
||||
# build cmake
|
||||
export PATH=$EOSIO_INSTALL_LOCATION/bin:$PATH
|
||||
cd $EOSIO_INSTALL_LOCATION && curl -LO https://cmake.org/files/v3.13/cmake-3.13.2.tar.gz && \
|
||||
source /opt/rh/devtoolset-8/enable && \
|
||||
tar -xzf cmake-3.13.2.tar.gz && \
|
||||
cd cmake-3.13.2 && \
|
||||
./bootstrap --prefix=$EOSIO_INSTALL_LOCATION && \
|
||||
make -j$(nproc) && \
|
||||
make install && \
|
||||
rm -rf $EOSIO_INSTALL_LOCATION/cmake-3.13.2.tar.gz $EOSIO_INSTALL_LOCATION/cmake-3.13.2
|
||||
# apply clang patch
|
||||
cp -f $EOSIO_LOCATION/scripts/clang-devtoolset8-support.patch /tmp/clang-devtoolset8-support.patch
|
||||
# build boost
|
||||
cd $EOSIO_INSTALL_LOCATION && curl -LO https://boostorg.jfrog.io/artifactory/main/release/1.71.0/source/boost_1_71_0.tar.bz2 && \
|
||||
source /opt/rh/devtoolset-8/enable && \
|
||||
tar -xjf boost_1_71_0.tar.bz2 && \
|
||||
cd boost_1_71_0 && \
|
||||
./bootstrap.sh --prefix=$EOSIO_INSTALL_LOCATION && \
|
||||
./b2 --with-iostreams --with-date_time --with-filesystem --with-system --with-program_options --with-chrono --with-test -q -j$(nproc) install && \
|
||||
rm -rf $EOSIO_INSTALL_LOCATION/boost_1_71_0.tar.bz2 $EOSIO_INSTALL_LOCATION/boost_1_71_0
|
||||
```
|
||||
|
||||
## Build EOSIO
|
||||
These commands build the EOSIO software on the specified OS. Make sure to [Install EOSIO Dependencies](#install-eosio-dependencies) first.
|
||||
|
||||
[[caution | `EOSIO_BUILD_LOCATION` environment variable]]
|
||||
| Do NOT change this variable. It is set for convenience only. It should always be set to the `build` folder within the cloned repository.
|
||||
|
||||
```sh
|
||||
export EOSIO_BUILD_LOCATION=$EOSIO_LOCATION/build
|
||||
mkdir -p $EOSIO_BUILD_LOCATION
|
||||
cd $EOSIO_BUILD_LOCATION && source /opt/rh/devtoolset-8/enable && cmake -DCMAKE_BUILD_TYPE='Release' -DLLVM_DIR='/opt/rh/llvm-toolset-7.0/root/usr/lib64/cmake/llvm' -DCMAKE_INSTALL_PREFIX=$EOSIO_INSTALL_LOCATION $EOSIO_LOCATION
|
||||
cd $EOSIO_BUILD_LOCATION && make -j$(nproc)
|
||||
```
|
||||
|
||||
## Install EOSIO
|
||||
This command installs the EOSIO software on the specified OS. Make sure to [Build EOSIO](#build-eosio) first.
|
||||
```sh
|
||||
cd $EOSIO_BUILD_LOCATION && make install
|
||||
```
|
||||
|
||||
## Test EOSIO
|
||||
These commands validate the EOSIO software installation on the specified OS. This task is optional but recommended. Make sure to [Install EOSIO](#install-eosio) first.
|
||||
```sh
|
||||
cd $EOSIO_BUILD_LOCATION && source /opt/rh/rh-python36/enable && make test
|
||||
```
|
||||
|
||||
## Uninstall EOSIO
|
||||
These commands uninstall the EOSIO software from the specified OS.
|
||||
```sh
|
||||
xargs rm < $EOSIO_BUILD_LOCATION/install_manifest.txt
|
||||
rm -rf $EOSIO_BUILD_LOCATION
|
||||
```
|
||||
@@ -0,0 +1,8 @@
|
||||
---
|
||||
content_title: Platforms
|
||||
---
|
||||
|
||||
* [Amazon Linux 2](amazon_linux-2.md)
|
||||
* [CentOS 7.7](centos-7.7.md)
|
||||
* [MacOS 10.14](macos-10.14.md)
|
||||
* [Ubuntu 18.04](ubuntu-18.04.md)
|
||||
@@ -0,0 +1,74 @@
|
||||
---
|
||||
content_title: MacOS 10.14
|
||||
---
|
||||
|
||||
This section contains shell commands to manually download, build, install, test, and uninstall EOSIO and dependencies on MacOS 10.14.
|
||||
|
||||
[[info | Building EOSIO is for Advanced Developers]]
|
||||
| If you are new to EOSIO, it is recommended that you install the [EOSIO Prebuilt Binaries](../../../00_install-prebuilt-binaries.md) instead of building from source.
|
||||
|
||||
Select a task below, then copy/paste the shell commands to a Unix terminal to execute:
|
||||
|
||||
* [Download EOSIO Repository](#download-eosio-repository)
|
||||
* [Install EOSIO Dependencies](#install-eosio-dependencies)
|
||||
* [Build EOSIO](#build-eosio)
|
||||
* [Install EOSIO](#install-eosio)
|
||||
* [Test EOSIO](#test-eosio)
|
||||
* [Uninstall EOSIO](#uninstall-eosio)
|
||||
|
||||
[[info | Building EOSIO on another OS?]]
|
||||
| Visit the [Build EOSIO from Source](../../index.md) section.
|
||||
|
||||
## Download EOSIO Repository
|
||||
These commands set the EOSIO directories, install git, and clone the EOSIO repository.
|
||||
```sh
|
||||
# set EOSIO directories
|
||||
export EOSIO_LOCATION=~/eosio/eos
|
||||
export EOSIO_INSTALL_LOCATION=$EOSIO_LOCATION/../install
|
||||
mkdir -p $EOSIO_INSTALL_LOCATION
|
||||
# install git
|
||||
brew update && brew install git
|
||||
# clone EOSIO repository
|
||||
git clone https://github.com/EOSIO/eos.git $EOSIO_LOCATION
|
||||
cd $EOSIO_LOCATION && git submodule update --init --recursive
|
||||
```
|
||||
|
||||
## Install EOSIO Dependencies
|
||||
These commands install the EOSIO software dependencies. Make sure to [Download the EOSIO Repository](#download-eosio-repository) first and set the EOSIO directories.
|
||||
```sh
|
||||
# install dependencies
|
||||
brew install cmake python libtool libusb graphviz automake wget gmp pkgconfig doxygen openssl@1.1 jq boost || :
|
||||
export PATH=$EOSIO_INSTALL_LOCATION/bin:$PATH
|
||||
```
|
||||
|
||||
## Build EOSIO
|
||||
These commands build the EOSIO software on the specified OS. Make sure to [Install EOSIO Dependencies](#install-eosio-dependencies) first.
|
||||
|
||||
[[caution | `EOSIO_BUILD_LOCATION` environment variable]]
|
||||
| Do NOT change this variable. It is set for convenience only. It should always be set to the `build` folder within the cloned repository.
|
||||
|
||||
```sh
|
||||
export EOSIO_BUILD_LOCATION=$EOSIO_LOCATION/build
|
||||
mkdir -p $EOSIO_BUILD_LOCATION
|
||||
cd $EOSIO_BUILD_LOCATION && cmake -DCMAKE_BUILD_TYPE='Release' -DCMAKE_INSTALL_PREFIX=$EOSIO_INSTALL_LOCATION $EOSIO_LOCATION
|
||||
cd $EOSIO_BUILD_LOCATION && make -j$(getconf _NPROCESSORS_ONLN)
|
||||
```
|
||||
|
||||
## Install EOSIO
|
||||
This command installs the EOSIO software on the specified OS. Make sure to [Build EOSIO](#build-eosio) first.
|
||||
```sh
|
||||
cd $EOSIO_BUILD_LOCATION && make install
|
||||
```
|
||||
|
||||
## Test EOSIO
|
||||
These commands validate the EOSIO software installation on the specified OS. This task is optional but recommended. Make sure to [Install EOSIO](#install-eosio) first.
|
||||
```sh
|
||||
cd $EOSIO_BUILD_LOCATION && make test
|
||||
```
|
||||
|
||||
## Uninstall EOSIO
|
||||
These commands uninstall the EOSIO software from the specified OS.
|
||||
```sh
|
||||
xargs rm < $EOSIO_BUILD_LOCATION/install_manifest.txt
|
||||
rm -rf $EOSIO_BUILD_LOCATION
|
||||
```
|
||||
@@ -0,0 +1,92 @@
|
||||
---
|
||||
content_title: Ubuntu 18.04
|
||||
---
|
||||
|
||||
This section contains shell commands to manually download, build, install, test, and uninstall EOSIO and dependencies on Ubuntu 18.04.
|
||||
|
||||
[[info | Building EOSIO is for Advanced Developers]]
|
||||
| If you are new to EOSIO, it is recommended that you install the [EOSIO Prebuilt Binaries](../../../00_install-prebuilt-binaries.md) instead of building from source.
|
||||
|
||||
Select a task below, then copy/paste the shell commands to a Unix terminal to execute:
|
||||
|
||||
* [Download EOSIO Repository](#download-eosio-repository)
|
||||
* [Install EOSIO Dependencies](#install-eosio-dependencies)
|
||||
* [Build EOSIO](#build-eosio)
|
||||
* [Install EOSIO](#install-eosio)
|
||||
* [Test EOSIO](#test-eosio)
|
||||
* [Uninstall EOSIO](#uninstall-eosio)
|
||||
|
||||
[[info | Building EOSIO on another OS?]]
|
||||
| Visit the [Build EOSIO from Source](../../index.md) section.
|
||||
|
||||
## Download EOSIO Repository
|
||||
These commands set the EOSIO directories, install git, and clone the EOSIO repository.
|
||||
```sh
|
||||
# set EOSIO directories
|
||||
export EOSIO_LOCATION=~/eosio/eos
|
||||
export EOSIO_INSTALL_LOCATION=$EOSIO_LOCATION/../install
|
||||
mkdir -p $EOSIO_INSTALL_LOCATION
|
||||
# install git
|
||||
apt-get update && apt-get upgrade -y && DEBIAN_FRONTEND=noninteractive apt-get install -y git
|
||||
# clone EOSIO repository
|
||||
git clone https://github.com/EOSIO/eos.git $EOSIO_LOCATION
|
||||
cd $EOSIO_LOCATION && git submodule update --init --recursive
|
||||
```
|
||||
|
||||
## Install EOSIO Dependencies
|
||||
These commands install the EOSIO software dependencies. Make sure to [Download the EOSIO Repository](#download-eosio-repository) first and set the EOSIO directories.
|
||||
```sh
|
||||
# install dependencies
|
||||
apt-get install -y make bzip2 automake libbz2-dev libssl-dev doxygen graphviz libgmp3-dev \
|
||||
autotools-dev python2.7 python2.7-dev python3 python3-dev \
|
||||
autoconf libtool curl zlib1g-dev sudo ruby libusb-1.0-0-dev \
|
||||
libcurl4-gnutls-dev pkg-config patch llvm-7-dev clang-7 vim-common jq
|
||||
# build cmake
|
||||
export PATH=$EOSIO_INSTALL_LOCATION/bin:$PATH
|
||||
cd $EOSIO_INSTALL_LOCATION && curl -LO https://cmake.org/files/v3.13/cmake-3.13.2.tar.gz && \
|
||||
tar -xzf cmake-3.13.2.tar.gz && \
|
||||
cd cmake-3.13.2 && \
|
||||
./bootstrap --prefix=$EOSIO_INSTALL_LOCATION && \
|
||||
make -j$(nproc) && \
|
||||
make install && \
|
||||
rm -rf $EOSIO_INSTALL_LOCATION/cmake-3.13.2.tar.gz $EOSIO_INSTALL_LOCATION/cmake-3.13.2
|
||||
# build boost
|
||||
cd $EOSIO_INSTALL_LOCATION && curl -LO https://boostorg.jfrog.io/artifactory/main/release/1.71.0/source/boost_1_71_0.tar.bz2 && \
|
||||
tar -xjf boost_1_71_0.tar.bz2 && \
|
||||
cd boost_1_71_0 && \
|
||||
./bootstrap.sh --prefix=$EOSIO_INSTALL_LOCATION && \
|
||||
./b2 --with-iostreams --with-date_time --with-filesystem --with-system --with-program_options --with-chrono --with-test -q -j$(nproc) install && \
|
||||
rm -rf $EOSIO_INSTALL_LOCATION/boost_1_71_0.tar.bz2 $EOSIO_INSTALL_LOCATION/boost_1_71_0
|
||||
```
|
||||
|
||||
## Build EOSIO
|
||||
These commands build the EOSIO software on the specified OS. Make sure to [Install EOSIO Dependencies](#install-eosio-dependencies) first.
|
||||
|
||||
[[caution | `EOSIO_BUILD_LOCATION` environment variable]]
|
||||
| Do NOT change this variable. It is set for convenience only. It should always be set to the `build` folder within the cloned repository.
|
||||
|
||||
```sh
|
||||
export EOSIO_BUILD_LOCATION=$EOSIO_LOCATION/build
|
||||
mkdir -p $EOSIO_BUILD_LOCATION
|
||||
cd $EOSIO_BUILD_LOCATION && cmake -DCMAKE_BUILD_TYPE='Release' -DCMAKE_CXX_COMPILER='clang++-7' -DCMAKE_C_COMPILER='clang-7' -DLLVM_DIR='/usr/lib/llvm-7/lib/cmake/llvm' -DCMAKE_INSTALL_PREFIX=$EOSIO_INSTALL_LOCATION $EOSIO_LOCATION
|
||||
cd $EOSIO_BUILD_LOCATION && make -j$(nproc)
|
||||
```
|
||||
|
||||
## Install EOSIO
|
||||
This command installs the EOSIO software on the specified OS. Make sure to [Build EOSIO](#build-eosio) first.
|
||||
```sh
|
||||
cd $EOSIO_BUILD_LOCATION && make install
|
||||
```
|
||||
|
||||
## Test EOSIO
|
||||
These commands validate the EOSIO software installation on the specified OS. Make sure to [Install EOSIO](#install-eosio) first. (**Note**: This task is optional but recommended.)
|
||||
```sh
|
||||
cd $EOSIO_BUILD_LOCATION && make test
|
||||
```
|
||||
|
||||
## Uninstall EOSIO
|
||||
These commands uninstall the EOSIO software from the specified OS.
|
||||
```sh
|
||||
xargs rm < $EOSIO_BUILD_LOCATION/install_manifest.txt
|
||||
rm -rf $EOSIO_BUILD_LOCATION
|
||||
```
|
||||
@@ -0,0 +1,28 @@
|
||||
---
|
||||
content_title: EOSIO Manual Build
|
||||
---
|
||||
|
||||
[[info | Manual Builds are for Advanced Developers]]
|
||||
| These manual instructions are intended for advanced developers. The [Shell Scripts](../01_shell-scripts/index.md) should be the preferred method to build EOSIO from source. If the script fails or your platform is not supported, continue with the instructions below.
|
||||
|
||||
## EOSIO Dependencies
|
||||
|
||||
When performing a manual build, it is necessary to install specific software packages that the EOSIO software depends on. To learn more about these dependencies, visit the [EOSIO Software Dependencies](00_eosio-dependencies.md) section.
|
||||
|
||||
## Platforms
|
||||
|
||||
Shell commands are available to manually download, build, install, test, and uninstall the EOSIO software and dependencies for these [platforms](03_platforms/index.md).
|
||||
|
||||
## Out-of-source Builds
|
||||
|
||||
While building dependencies and EOSIO binaries, out-of-source builds are also supported. Refer to the `cmake` help for more information.
|
||||
|
||||
## Other Compilers
|
||||
|
||||
To override `clang`'s default compiler toolchain, add these flags to the `cmake` command within the above instructions:
|
||||
|
||||
`-DCMAKE_CXX_COMPILER=/path/to/c++ -DCMAKE_C_COMPILER=/path/to/cc`
|
||||
|
||||
## Debug Builds
|
||||
|
||||
For a debug build, add `-DCMAKE_BUILD_TYPE=Debug`. Other common build types include `Release` and `RelWithDebInfo`.
|
||||
@@ -1,20 +1,14 @@
|
||||
---
|
||||
content_title: Build Antelope from Source
|
||||
content_title: Build EOSIO from Source
|
||||
---
|
||||
|
||||
The shell scripts previously recommended for building the software have been removed in favor of a build process entirely driven by CMake. Those wishing to build from source are now responsible for installing the necessary dependencies. The list of dependencies and the recommended build procedure are in the [`README.md`](https://github.com/AntelopeIO/leap/blob/main/README.md) file. Instructions are also included for efficiently running the tests.
|
||||
[[info | Building EOSIO is for Advanced Developers]]
|
||||
| If you are new to EOSIO, it is recommended that you install the [EOSIO Prebuilt Binaries](../00_install-prebuilt-binaries.md) instead of building from source.
|
||||
|
||||
### Using DUNE
|
||||
As an alternative to building from source, try [Docker Utilities for Node Execution](https://github.com/AntelopeIO/DUNE) for the easiest way to get started and for multi-platform support.
|
||||
EOSIO can be built on several platforms using different build methods. Advanced users may opt to build EOSIO using our shell scripts. Node operators or block producers who wish to deploy a public node, may prefer our manual build instructions.
|
||||
|
||||
### Building From Source
|
||||
You can also build and install Leap from source. Instructions for that currently live [here](https://github.com/AntelopeIO/leap/blob/main/README.md#build-and-install-from-source).
|
||||
* [Shell Scripts](01_shell-scripts/index.md) - Suitable for the majority of developers, these scripts build on Mac OS and many flavors of Linux.
|
||||
* [Manual Build](02_manual-build/index.md) - Suitable for those platforms that may be hostile to the shell scripts or for operators who need more control over their builds.
|
||||
|
||||
#### Building Pinned Build Binary Packages
|
||||
The pinned build instructions have moved [here](https://github.com/AntelopeIO/leap/blob/main/README.md#pinned-build). You may want to look at the [prerequisites](https://github.com/AntelopeIO/leap/blob/main/README.md#prerequisites) and our warning on parallelization using the `-j` jobs flag [here](https://github.com/AntelopeIO/leap/blob/main/README.md#step-3---build) before you build.
|
||||
|
||||
#### Manual (non "pinned") Build Instructions
|
||||
The unpinned build instructions have moved [here](https://github.com/AntelopeIO/leap/blob/main/README.md#unpinned-build). You may want to look at the [prerequisites](https://github.com/AntelopeIO/leap/blob/main/README.md#prerequisites) and our warning on parallelization using the `-j` jobs flag [here](https://github.com/AntelopeIO/leap/blob/main/README.md#step-3---build) before you build.
|
||||
|
||||
### Running Tests
|
||||
Documentation on available test suites and how to run them has moved [here](https://github.com/AntelopeIO/leap/blob/main/README.md#test).
|
||||
[[info | EOSIO Installation Recommended]]
|
||||
| After building EOSIO successfully, it is highly recommended to install the EOSIO binaries from their default build directory. This copies the EOSIO binaries to a central location, such as `/usr/local/bin`, or `~/eosio/x.y/bin`, where `x.y` is the EOSIO release version.
|
||||
|
||||
+14
-16
@@ -1,26 +1,24 @@
|
||||
---
|
||||
content_title: Antelope Software Installation
|
||||
content_title: EOSIO Software Installation
|
||||
---
|
||||
|
||||
The best way to install and use the Antelope software is to build it from source:
|
||||
There are various ways to install and use the EOSIO software:
|
||||
|
||||
* [Build Antelope from Source](01_build-from-source/index.md)
|
||||
* [Install EOSIO Prebuilt Binaries](00_install-prebuilt-binaries.md)
|
||||
* [Build EOSIO from Source](01_build-from-source/index.md)
|
||||
|
||||
[[info]]
|
||||
| If you are new to EOSIO, it is recommended that you install the [EOSIO Prebuilt Binaries](00_install-prebuilt-binaries.md), then proceed to the [Getting Started](https://developers.eos.io/eosio-home/docs/) section of the [EOSIO Developer Portal](https://developers.eos.io/). If you are an advanced developer, a block producer, or no binaries are available for your platform, you may need to [Build EOSIO from source](01_build-from-source/index.md) instead.
|
||||
|
||||
## Supported Operating Systems
|
||||
|
||||
Antelope currently supports the following operating systems:
|
||||
EOSIO currently supports the following operating systems:
|
||||
|
||||
1. Ubuntu 22.04 Jammy
|
||||
2. Ubuntu 20.04 Focal
|
||||
3. Ubuntu 18.04 Bionic
|
||||
1. Amazon Linux 2
|
||||
2. CentOS 7
|
||||
3. Ubuntu 16.04
|
||||
4. Ubuntu 18.04
|
||||
5. MacOS 10.14 (Mojave)
|
||||
|
||||
[[info | Note]]
|
||||
| It may be possible to build and install Antelope on other Unix-based operating systems. We gathered helpful information on the following page but please keep in mind that it is experimental and not officially supported.
|
||||
|
||||
* [Build Antelope on Other Unix-based Systems](01_build-from-source/00_build-unsupported-os.md)
|
||||
|
||||
## Docker Utilities for Node Execution (D.U.N.E.)
|
||||
|
||||
If you are using different operating system or prefer not to build Antelope from source you can try our Docker - based set of utilities called DUNE that can get you started with exploring Antelope and doing contract development pretty much instantly
|
||||
|
||||
* [Docker Utilities for Node Execution (D.U.N.E.)](https://github.com/AntelopeIO/DUNE)
|
||||
| It may be possible to install EOSIO on other Unix-based operating systems. This is not officially supported, though.
|
||||
|
||||
@@ -10,8 +10,9 @@ For example, the CLI option `--plugin eosio::chain_api_plugin` can also be set b
|
||||
|
||||
## `config.ini` location
|
||||
|
||||
The default `config.ini` can be found in the following folder on Linux:
|
||||
`~/.local/share/eosio/nodeos/config`
|
||||
The default `config.ini` can be found in the following folders:
|
||||
- Mac OS: `~/Library/Application Support/eosio/nodeos/config`
|
||||
- Linux: `~/.local/share/eosio/nodeos/config`
|
||||
|
||||
A custom `config.ini` file can be set by passing the `nodeos` option `--config path/to/config.ini`.
|
||||
|
||||
|
||||
@@ -7,16 +7,12 @@ content_title: Producing Node Setup
|
||||
|
||||
## Goal
|
||||
|
||||
This section describes how to set up a producing node within the Antelope network. A producing node, as its name implies, is a node that is configured to produce blocks in an `Antelope` based blockchain. This functionality if provided through the `producer_plugin` as well as other [Nodeos Plugins](../../03_plugins/index.md).
|
||||
This section describes how to set up a producing node within the EOSIO network. A producing node, as its name implies, is a node that is configured to produce blocks in an `EOSIO` based blockchain. This functionality if provided through the `producer_plugin` as well as other [Nodeos Plugins](../../03_plugins/index.md).
|
||||
|
||||
## Before you begin
|
||||
|
||||
* [Install the Antelope software](../../../00_install/index.md) before starting this section.
|
||||
* It is assumed that `nodeos`, `cleos`, and `keosd` are accessible through the path.
|
||||
|
||||
[//]: # ( THIS IS A COMMENT LINK BELOW IS BROKEN )
|
||||
[//]: # ( If you built Antelope using shell scripts, make sure to run the Install Script ../../../00_install/01_build-from-source/01_shell-scripts/03_install-antelope-binaries.md )
|
||||
|
||||
* [Install the EOSIO software](../../../00_install/index.md) before starting this section.
|
||||
* It is assumed that `nodeos`, `cleos`, and `keosd` are accessible through the path. If you built EOSIO using shell scripts, make sure to run the [Install Script](../../../00_install/01_build-from-source/01_shell-scripts/03_install-eosio-binaries.md).
|
||||
* Know how to pass [Nodeos options](../../02_usage/00_nodeos-options.md) to enable or disable functionality.
|
||||
|
||||
## Steps
|
||||
@@ -50,11 +46,11 @@ producer-name = youraccount
|
||||
|
||||
### 3. Set the Producer's signature-provider
|
||||
|
||||
You will need to set the private key for your producer. The public key should have an authority for the producer account defined above.
|
||||
You will need to set the private key for your producer. The public key should have an authority for the producer account defined above.
|
||||
|
||||
`signature-provider` is defined with a 3-field tuple:
|
||||
* `public-key` - A valid Antelope public key in form of a string.
|
||||
* `provider-spec` - It's a string formatted like `<provider-type>:<data>`
|
||||
* `public-key` - A valid EOSIO public key in form of a string.
|
||||
* `provider-spec` - It's a string formatted like <provider-type>:<data>
|
||||
* `provider-type` - KEY or KEOSD
|
||||
|
||||
#### Using a Key:
|
||||
@@ -69,7 +65,7 @@ signature-provider = PUBLIC_SIGNING_KEY=KEY:PRIVATE_SIGNING_KEY
|
||||
```
|
||||
|
||||
#### Using Keosd:
|
||||
You can also use `keosd` instead of hard-defining keys.
|
||||
You can also use `keosd` instead of hard-defining keys.
|
||||
|
||||
```console
|
||||
# config.ini:
|
||||
@@ -91,7 +87,7 @@ p2p-peer-address = 123.255.78.9:9876
|
||||
|
||||
### 5. Load the Required Plugins
|
||||
|
||||
In your [config.ini](../index.md), confirm the following plugins are loading or append them if necessary.
|
||||
In your [config.ini](../index.md), confirm the following plugins are loading or append them if necessary.
|
||||
|
||||
```console
|
||||
# config.ini:
|
||||
|
||||
@@ -4,21 +4,17 @@ content_title: Non-producing Node Setup
|
||||
|
||||
## Goal
|
||||
|
||||
This section describes how to set up a non-producing node within the Antelope network. A non-producing node is a node that is not configured to produce blocks, instead it is connected and synchronized with other peers from an `Antelope` based blockchain, exposing one or more services publicly or privately by enabling one or more [Nodeos Plugins](../../03_plugins/index.md), except the `producer_plugin`.
|
||||
This section describes how to set up a non-producing node within the EOSIO network. A non-producing node is a node that is not configured to produce blocks, instead it is connected and synchronized with other peers from an `EOSIO` based blockchain, exposing one or more services publicly or privately by enabling one or more [Nodeos Plugins](../../03_plugins/index.md), except the `producer_plugin`.
|
||||
|
||||
## Before you begin
|
||||
|
||||
* [Install the Antelope software](../../../00_install/index.md) before starting this section.
|
||||
* It is assumed that `nodeos`, `cleos`, and `keosd` are accessible through the path.
|
||||
|
||||
[//]: # ( THIS IS A COMMENT NEXT LINK CONTAINS A BROKEN LINK )
|
||||
[//]: # ( If you built Antelope using shell scripts, make sure to run the Install Script ../../../00_install/01_build-from-source/01_shell-scripts/03_install-antelope-binaries.md )
|
||||
|
||||
* [Install the EOSIO software](../../../00_install/index.md) before starting this section.
|
||||
* It is assumed that `nodeos`, `cleos`, and `keosd` are accessible through the path. If you built EOSIO using shell scripts, make sure to run the [Install Script](../../../00_install/01_build-from-source/01_shell-scripts/03_install-eosio-binaries.md).
|
||||
* Know how to pass [Nodeos options](../../02_usage/00_nodeos-options.md) to enable or disable functionality.
|
||||
|
||||
## Steps
|
||||
|
||||
To setup a non-producing node is simple.
|
||||
To setup a non-producing node is simple.
|
||||
|
||||
1. [Set Peers](#1-set-peers)
|
||||
2. [Enable one or more available plugins](#2-enable-one-or-more-available-plugins)
|
||||
@@ -41,4 +37,4 @@ nodeos ... --p2p-peer-address=106.10.42.238:9876
|
||||
|
||||
### 2. Enable one or more available plugins
|
||||
|
||||
Each available plugin is listed and detailed in the [Nodeos Plugins](../../03_plugins/index.md) section. When `nodeos` starts, it will expose the functionality provided by the enabled plugins it was started with. For example, if you start `nodeos` with [`state_history_plugin`](../../03_plugins/state_history_plugin/index.md) enabled, you will have a non-producing node that offers full blockchain history. If you start `nodeos` with [`http_plugin`](../../03_plugins/http_plugin/index.md) enabled, you will have a non-producing node which exposes the Antelope RPC API. Therefore, you can extend the basic functionality provided by a non-producing node by enabling any number of existing plugins on top of it. Another aspect to consider is that some plugins have dependencies to other plugins. Therefore, you need to satisfy all dependencies for a plugin in order to enable it.
|
||||
Each available plugin is listed and detailed in the [Nodeos Plugins](../../03_plugins/index.md) section. When `nodeos` starts, it will expose the functionality provided by the enabled plugins it was started with. For example, if you start `nodeos` with [`state_history_plugin`](../../03_plugins/state_history_plugin/index.md) enabled, you will have a non-producing node that offers full blockchain history. If you start `nodeos` with [`http_plugin`](../../03_plugins/http_plugin/index.md) enabled, you will have a non-producing node which exposes the EOSIO RPC API. Therefore, you can extend the basic functionality provided by a non-producing node by enabling any number of existing plugins on top of it. Another aspect to consider is that some plugins have dependencies to other plugins. Therefore, you need to satisfy all dependencies for a plugin in order to enable it.
|
||||
|
||||
@@ -12,12 +12,8 @@ This section describes how to set up a single-node blockchain configuration runn
|
||||
|
||||
## Before you begin
|
||||
|
||||
* [Install the Antelope software](../../../00_install/index.md) before starting this section.
|
||||
* It is assumed that `nodeos`, `cleos`, and `keosd` are accessible through the path.
|
||||
|
||||
[//]: # (THIS IS A COMMENT, NEXT LINK HAS BROKEN LINK)
|
||||
[//]: # (If you built Antelope using shell scripts, make sure to run the Install Script ../../../00_install/01_build-from-source/01_shell-scripts/03_install-antelope-binaries.md .)
|
||||
|
||||
* [Install the EOSIO software](../../../00_install/index.md) before starting this section.
|
||||
* It is assumed that `nodeos`, `cleos`, and `keosd` are accessible through the path. If you built EOSIO using shell scripts, make sure to run the [Install Script](../../../00_install/01_build-from-source/01_shell-scripts/03_install-eosio-binaries.md).
|
||||
* Know how to pass [Nodeos options](../../02_usage/00_nodeos-options.md) to enable or disable functionality.
|
||||
|
||||
## Steps
|
||||
@@ -91,7 +87,7 @@ The more advanced user will likely have need to modify the configuration. `node
|
||||
* Linux: `~/.local/share/eosio/nodeos/config`
|
||||
|
||||
The build seeds this folder with a default `genesis.json` file. A configuration folder can be specified using the `--config-dir` command line argument to `nodeos`. If you use this option, you will need to manually copy a `genesis.json` file to your config folder.
|
||||
|
||||
|
||||
`nodeos` will need a properly configured `config.ini` file in order to do meaningful work. On startup, `nodeos` looks in the config folder for `config.ini`. If one is not found, a default `config.ini` file is created. If you do not already have a `config.ini` file ready to use, run `nodeos` and then close it immediately with <kbd>Ctrl-C</kbd>. A default configuration (`config.ini`) will have been created in the config folder. Edit the `config.ini` file, adding/updating the following settings to the defaults already in place:
|
||||
|
||||
```console
|
||||
@@ -119,7 +115,7 @@ nodeos
|
||||
|
||||
* Mac OS: `~/Library/Application\ Support/eosio/nodeos/data`
|
||||
* Linux: `~/.local/share/eosio/nodeos/data`
|
||||
|
||||
|
||||
A data folder can be specified using the `--data-dir` command line argument to `nodeos`.
|
||||
|
||||
[[info | What's next?]]
|
||||
|
||||
@@ -10,8 +10,8 @@ This section describes how to set up a multi-node blockchain configuration runni
|
||||
|
||||
## Before you begin
|
||||
|
||||
* [Install the Antelope software](../../../00_install/index.md) before starting this section.
|
||||
* It is assumed that `nodeos`, `cleos`, and `keosd` are accessible through the path.
|
||||
* [Install the EOSIO software](../../../00_install/index.md) before starting this section.
|
||||
* It is assumed that `nodeos`, `cleos`, and `keosd` are accessible through the path. If you built EOSIO using shell scripts, make sure to run the [Install Script](../../../00_install/01_build-from-source/01_shell-scripts/03_install-eosio-binaries.md).
|
||||
* Know how to pass [Nodeos options](../../02_usage/00_nodeos-options.md) to enable or disable functionality.
|
||||
|
||||
## Steps
|
||||
@@ -20,7 +20,7 @@ Open four "terminal" windows and perform the following steps:
|
||||
|
||||
1. [Start the Wallet Manager](#1-start-the-wallet-manager)
|
||||
2. [Create a Default Wallet](#2-create-a-default-wallet)
|
||||
3. [Loading the Antelope Key](#3-loading-the-antelope-key)
|
||||
3. [Loading the EOSIO Key](#3-loading-the-eosio-key)
|
||||
4. [Start the First Producer Node](#4-start-the-first-producer-node)
|
||||
5. [Start the Second Producer Node](#5-start-the-second-producer-node)
|
||||
6. [Get Nodes Info](#6-get-nodes-info)
|
||||
@@ -66,7 +66,7 @@ Without password imported keys will not be retrievable.
|
||||
|
||||
`keosd` will generate some status output in its window. We will continue to use this second window for subsequent `cleos` commands.
|
||||
|
||||
### 3. Loading the Antelope Key
|
||||
### 3. Loading the EOSIO Key
|
||||
|
||||
The private blockchain launched in the steps above is created with a default initial key which must be loaded into the wallet.
|
||||
|
||||
@@ -90,8 +90,7 @@ This creates a special producer, known as the "bios" producer. Assuming everythi
|
||||
|
||||
### 5. Start the Second Producer Node
|
||||
|
||||
[//]: # (don't render for now)
|
||||
[//]: # (The following commands assume that you are running this tutorial from the `eos\build` directory, from which you ran `./eosio_build.sh` to build the Antelope binaries.)
|
||||
The following commands assume that you are running this tutorial from the `eos\build` directory, from which you ran `./eosio_build.sh` to build the EOSIO binaries.
|
||||
|
||||
To start additional nodes, you must first load the `eosio.bios` contract. This contract enables you to have direct control over the resource allocation of other accounts and to access other privileged API calls. Return to the second terminal window and run the following command to load the contract:
|
||||
|
||||
@@ -143,7 +142,7 @@ We now have an account that is available to have a contract assigned to it, enab
|
||||
In the fourth terminal window, start a second `nodeos` instance. Notice that this command line is substantially longer than the one we used above to create the first producer. This is necessary to avoid collisions with the first `nodeos` instance. Fortunately, you can just cut and paste this command line and adjust the keys:
|
||||
|
||||
```sh
|
||||
nodeos --producer-name inita --plugin eosio::chain_api_plugin --plugin eosio::net_api_plugin --http-server-address 127.0.0.1:8889 --p2p-listen-endpoint 127.0.0.1:9877 --p2p-peer-address 127.0.0.1:9876 --config-dir node2 --data-dir node2 --signature-provider EOS6hMjoWRF2L8x9YpeqtUEcsDKAyxSuM1APicxgRU1E3oyV5sDEg=KEY:5JgbL2ZnoEAhTudReWH1RnMuQS6DBeLZt4ucV6t8aymVEuYg7sr
|
||||
nodeos --producer-name inita --plugin eosio::chain_api_plugin --plugin eosio::net_api_plugin --http-server-address 127.0.0.1:8889 --p2p-listen-endpoint 127.0.0.1:9877 --p2p-peer-address 127.0.0.1:9876 --config-dir node2 --data-dir node2 --private-key [\"EOS6hMjoWRF2L8x9YpeqtUEcsDKAyxSuM1APicxgRU1E3oyV5sDEg\",\"5JgbL2ZnoEAhTudReWH1RnMuQS6DBeLZt4ucV6t8aymVEuYg7sr\"]
|
||||
```
|
||||
|
||||
The output from this new node will show a little activity but will stop reporting until the last step in this tutorial, when the `inita` account is registered as a producer account and activated. Here is some example output from a newly started node. Your output might look a little different, depending on how much time you took entering each of these commands. Furthermore, this example is only the last few lines of output:
|
||||
|
||||
@@ -8,22 +8,24 @@ There are several ways to configure a `nodeos` environment for development and t
|
||||
|
||||
This is the go-to option for smart contract developers, aspiring Block Producers or Non-Producing Node operators. It has the most simple configuration with the least number of requirements.
|
||||
|
||||
* [Configure Nodeos as a Local Single-node Testnet](00_local-single-node-testnet.md)
|
||||
* [Configure Nodeos as a Local Single-node Testnet](00_local-single-node-testnet.md)
|
||||
|
||||
## Local Multi-Node Testnet
|
||||
|
||||
While this option can technically be used for smart contract development, it may be overkill. This is most beneficial for those who are working on aspects of core development, such as benchmarking, optimization and experimentation. It's also a good option for hands-on learning and concept proofing.
|
||||
|
||||
* [Configure Nodeos as a Local Two-Node Testnet](01_local-multi-node-testnet.md)
|
||||
* [Configure Nodeos as a Local 21-Node Testnet](/tutorials/bios-boot-tutorial.md)
|
||||
* [Configure Nodeos as a Local 21-Node Testnet](https://github.com/EOSIO/eos/blob/master/tutorials/bios-boot-tutorial/README.md)
|
||||
|
||||
## Official Testing Node
|
||||
## Official Testnet
|
||||
|
||||
Try [Docker Utilities for Node Execution](https://github.com/AntelopeIO/DUNE) for the easiest way to get started, and for multi-platform support.
|
||||
The official testnet is available for testing EOSIO dApps and smart contracts:
|
||||
|
||||
* [testnet.eos.io](https://testnet.eos.io/)
|
||||
|
||||
## Third-Party Testnets
|
||||
|
||||
The following third-party testnets are available for testing Antelope dApps and smart contracts:
|
||||
The following third-party testnets are available for testing EOSIO dApps and smart contracts:
|
||||
|
||||
* Jungle Testnet [monitor](https://monitor.jungletestnet.io/), [website](https://jungletestnet.io/)
|
||||
* [CryptoKylin Testnet](https://www.cryptokylin.io/)
|
||||
|
||||
@@ -1 +1 @@
|
||||
[Chain API Reference](https://docs.eosnetwork.com/leap-plugins/latest/chain.api/)
|
||||
<!-- THIS IS A PLACEHOLDER, WILL BE REPLACED BY REDOC INSTANCE -->
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
## Description
|
||||
|
||||
The `chain_plugin` is a core plugin required to process and aggregate chain data on an Antelope node.
|
||||
The `chain_plugin` is a core plugin required to process and aggregate chain data on an EOSIO node.
|
||||
|
||||
## Usage
|
||||
|
||||
@@ -21,35 +21,33 @@ These can only be specified from the `nodeos` command-line:
|
||||
```console
|
||||
Command Line Options for eosio::chain_plugin:
|
||||
--genesis-json arg File to read Genesis State from
|
||||
--genesis-timestamp arg override the initial timestamp in the
|
||||
--genesis-timestamp arg override the initial timestamp in the
|
||||
Genesis State file
|
||||
--print-genesis-json extract genesis_state from blocks.log
|
||||
--print-genesis-json extract genesis_state from blocks.log
|
||||
as JSON, print to console, and exit
|
||||
--extract-genesis-json arg extract genesis_state from blocks.log
|
||||
--extract-genesis-json arg extract genesis_state from blocks.log
|
||||
as JSON, write into specified file, and
|
||||
exit
|
||||
--print-build-info print build environment information to
|
||||
--print-build-info print build environment information to
|
||||
console as JSON and exit
|
||||
--extract-build-info arg extract build environment information
|
||||
--extract-build-info arg extract build environment information
|
||||
as JSON, write into specified file, and
|
||||
exit
|
||||
--force-all-checks do not skip any validation checks while
|
||||
replaying blocks (useful for replaying
|
||||
blocks from untrusted source)
|
||||
--force-all-checks do not skip any checks that can be
|
||||
skipped while replaying irreversible
|
||||
blocks
|
||||
--disable-replay-opts disable optimizations that specifically
|
||||
target replay
|
||||
--replay-blockchain clear chain state database and replay
|
||||
--replay-blockchain clear chain state database and replay
|
||||
all blocks
|
||||
--hard-replay-blockchain clear chain state database, recover as
|
||||
many blocks as possible from the block
|
||||
--hard-replay-blockchain clear chain state database, recover as
|
||||
many blocks as possible from the block
|
||||
log, and then replay those blocks
|
||||
--delete-all-blocks clear chain state database and block
|
||||
--delete-all-blocks clear chain state database and block
|
||||
log
|
||||
--truncate-at-block arg (=0) stop hard replay / block log recovery
|
||||
at this block number (if set to
|
||||
--truncate-at-block arg (=0) stop hard replay / block log recovery
|
||||
at this block number (if set to
|
||||
non-zero number)
|
||||
--terminate-at-block arg (=0) terminate after reaching this block
|
||||
number (if set to a non-zero number)
|
||||
--snapshot arg File to read Snapshot State from
|
||||
|
||||
```
|
||||
@@ -60,163 +58,162 @@ These can be specified from both the `nodeos` command-line or the `config.ini` f
|
||||
|
||||
```console
|
||||
Config Options for eosio::chain_plugin:
|
||||
--blocks-dir arg (="blocks") the location of the blocks directory
|
||||
(absolute path or relative to
|
||||
application data dir)
|
||||
--state-dir arg (="state") the location of the state directory
|
||||
(absolute path or relative to
|
||||
--blocks-dir arg (="blocks") the location of the blocks directory
|
||||
(absolute path or relative to
|
||||
application data dir)
|
||||
--protocol-features-dir arg (="protocol_features")
|
||||
the location of the protocol_features
|
||||
the location of the protocol_features
|
||||
directory (absolute path or relative to
|
||||
application config dir)
|
||||
--checkpoint arg Pairs of [BLOCK_NUM,BLOCK_ID] that
|
||||
--checkpoint arg Pairs of [BLOCK_NUM,BLOCK_ID] that
|
||||
should be enforced as checkpoints.
|
||||
--wasm-runtime runtime (=eos-vm-jit) Override default WASM runtime (
|
||||
--wasm-runtime runtime (=eos-vm-jit) Override default WASM runtime (
|
||||
"eos-vm-jit", "eos-vm")
|
||||
"eos-vm-jit" : A WebAssembly runtime
|
||||
that compiles WebAssembly code to
|
||||
"eos-vm-jit" : A WebAssembly runtime
|
||||
that compiles WebAssembly code to
|
||||
native x86 code prior to execution.
|
||||
"eos-vm" : A WebAssembly interpreter.
|
||||
|
||||
--profile-account arg The name of an account whose code will
|
||||
|
||||
--profile-account arg The name of an account whose code will
|
||||
be profiled
|
||||
--abi-serializer-max-time-ms arg (=15)
|
||||
Override default maximum ABI
|
||||
Override default maximum ABI
|
||||
serialization time allowed in ms
|
||||
--chain-state-db-size-mb arg (=1024) Maximum size (in MiB) of the chain
|
||||
--chain-state-db-size-mb arg (=1024) Maximum size (in MiB) of the chain
|
||||
state database
|
||||
--chain-state-db-guard-size-mb arg (=128)
|
||||
Safely shut down node when free space
|
||||
remaining in the chain state database
|
||||
Safely shut down node when free space
|
||||
remaining in the chain state database
|
||||
drops below this size (in MiB).
|
||||
--signature-cpu-billable-pct arg (=50)
|
||||
Percentage of actual signature recovery
|
||||
cpu to bill. Whole number percentages,
|
||||
cpu to bill. Whole number percentages,
|
||||
e.g. 50 for 50%
|
||||
--chain-threads arg (=2) Number of worker threads in controller
|
||||
--chain-threads arg (=2) Number of worker threads in controller
|
||||
thread pool
|
||||
--contracts-console print contract's output to console
|
||||
--deep-mind print deeper information about chain
|
||||
--deep-mind print deeper information about chain
|
||||
operations
|
||||
--actor-whitelist arg Account added to actor whitelist (may
|
||||
--actor-whitelist arg Account added to actor whitelist (may
|
||||
specify multiple times)
|
||||
--actor-blacklist arg Account added to actor blacklist (may
|
||||
--actor-blacklist arg Account added to actor blacklist (may
|
||||
specify multiple times)
|
||||
--contract-whitelist arg Contract account added to contract
|
||||
--contract-whitelist arg Contract account added to contract
|
||||
whitelist (may specify multiple times)
|
||||
--contract-blacklist arg Contract account added to contract
|
||||
--contract-blacklist arg Contract account added to contract
|
||||
blacklist (may specify multiple times)
|
||||
--action-blacklist arg Action (in the form code::action) added
|
||||
to action blacklist (may specify
|
||||
to action blacklist (may specify
|
||||
multiple times)
|
||||
--key-blacklist arg Public key added to blacklist of keys
|
||||
that should not be included in
|
||||
authorities (may specify multiple
|
||||
--key-blacklist arg Public key added to blacklist of keys
|
||||
that should not be included in
|
||||
authorities (may specify multiple
|
||||
times)
|
||||
--sender-bypass-whiteblacklist arg Deferred transactions sent by accounts
|
||||
in this list do not have any of the
|
||||
subjective whitelist/blacklist checks
|
||||
applied to them (may specify multiple
|
||||
--sender-bypass-whiteblacklist arg Deferred transactions sent by accounts
|
||||
in this list do not have any of the
|
||||
subjective whitelist/blacklist checks
|
||||
applied to them (may specify multiple
|
||||
times)
|
||||
--read-mode arg (=head) Database read mode ("head",
|
||||
"irreversible").
|
||||
--read-mode arg (=speculative) Database read mode ("speculative",
|
||||
"head", "read-only", "irreversible").
|
||||
In "speculative" mode: database
|
||||
contains state changes by transactions
|
||||
in the blockchain up to the head block
|
||||
as well as some transactions not yet
|
||||
included in the blockchain.
|
||||
In "head" mode: database contains state
|
||||
changes up to the head block;
|
||||
transactions received by the node are
|
||||
changes by only transactions in the
|
||||
blockchain up to the head block;
|
||||
transactions received by the node are
|
||||
relayed if valid.
|
||||
In "irreversible" mode: database
|
||||
contains state changes up to the last
|
||||
irreversible block; transactions
|
||||
received via the P2P network are not
|
||||
relayed and transactions cannot be
|
||||
pushed via the chain API.
|
||||
|
||||
--api-accept-transactions arg (=1) Allow API transactions to be evaluated
|
||||
In "read-only" mode: (DEPRECATED: see
|
||||
p2p-accept-transactions &
|
||||
api-accept-transactions) database
|
||||
contains state changes by only
|
||||
transactions in the blockchain up to
|
||||
the head block; transactions received
|
||||
via the P2P network are not relayed and
|
||||
transactions cannot be pushed via the
|
||||
chain API.
|
||||
In "irreversible" mode: database
|
||||
contains state changes by only
|
||||
transactions in the blockchain up to
|
||||
the last irreversible block;
|
||||
transactions received via the P2P
|
||||
network are not relayed and
|
||||
transactions cannot be pushed via the
|
||||
chain API.
|
||||
|
||||
--api-accept-transactions arg (=1) Allow API transactions to be evaluated
|
||||
and relayed if valid.
|
||||
--validation-mode arg (=full) Chain validation mode ("full" or
|
||||
--validation-mode arg (=full) Chain validation mode ("full" or
|
||||
"light").
|
||||
In "full" mode all incoming blocks will
|
||||
be fully validated.
|
||||
In "light" mode all incoming blocks
|
||||
headers will be fully validated;
|
||||
transactions in those validated blocks
|
||||
will be trusted
|
||||
|
||||
--disable-ram-billing-notify-checks Disable the check which subjectively
|
||||
In "light" mode all incoming blocks
|
||||
headers will be fully validated;
|
||||
transactions in those validated blocks
|
||||
will be trusted
|
||||
|
||||
--disable-ram-billing-notify-checks Disable the check which subjectively
|
||||
fails a transaction if a contract bills
|
||||
more RAM to another account within the
|
||||
more RAM to another account within the
|
||||
context of a notification handler (i.e.
|
||||
when the receiver is not the code of
|
||||
when the receiver is not the code of
|
||||
the action).
|
||||
--maximum-variable-signature-length arg (=16384)
|
||||
Subjectively limit the maximum length
|
||||
of variable components in a variable
|
||||
Subjectively limit the maximum length
|
||||
of variable components in a variable
|
||||
legnth signature to this size in bytes
|
||||
--trusted-producer arg Indicate a producer whose blocks
|
||||
headers signed by it will be fully
|
||||
validated, but transactions in those
|
||||
--trusted-producer arg Indicate a producer whose blocks
|
||||
headers signed by it will be fully
|
||||
validated, but transactions in those
|
||||
validated blocks will be trusted.
|
||||
--database-map-mode arg (=mapped) Database map mode ("mapped", "heap", or
|
||||
"locked").
|
||||
In "mapped" mode database is memory
|
||||
In "mapped" mode database is memory
|
||||
mapped as a file.
|
||||
In "heap" mode database is preloaded in
|
||||
to swappable memory and will use huge
|
||||
to swappable memory and will use huge
|
||||
pages if available.
|
||||
In "locked" mode database is preloaded,
|
||||
locked in to memory, and will use huge
|
||||
locked in to memory, and will use huge
|
||||
pages if available.
|
||||
|
||||
--eos-vm-oc-cache-size-mb arg (=1024) Maximum size (in MiB) of the EOS VM OC
|
||||
code cache
|
||||
--eos-vm-oc-compile-threads arg (=1) Number of threads to use for EOS VM OC
|
||||
tier-up
|
||||
--eos-vm-oc-enable Enable EOS VM OC tier-up runtime
|
||||
--enable-account-queries arg (=0) enable queries to find accounts by
|
||||
|
||||
--enable-account-queries arg (=0) enable queries to find accounts by
|
||||
various metadata.
|
||||
--max-nonprivileged-inline-action-size arg (=4096)
|
||||
maximum allowed size (in bytes) of an
|
||||
inline action for a nonprivileged
|
||||
maximum allowed size (in bytes) of an
|
||||
inline action for a nonprivileged
|
||||
account
|
||||
--transaction-retry-max-storage-size-gb arg
|
||||
Maximum size (in GiB) allowed to be
|
||||
allocated for the Transaction Retry
|
||||
feature. Setting above 0 enables this
|
||||
Maximum size (in GiB) allowed to be
|
||||
allocated for the Transaction Retry
|
||||
feature. Setting above 0 enables this
|
||||
feature.
|
||||
--transaction-retry-interval-sec arg (=20)
|
||||
How often, in seconds, to resend an
|
||||
incoming transaction to network if not
|
||||
How often, in seconds, to resend an
|
||||
incoming transaction to network if not
|
||||
seen in a block.
|
||||
--transaction-retry-max-expiration-sec arg (=120)
|
||||
Maximum allowed transaction expiration
|
||||
for retry transactions, will retry
|
||||
--transaction-retry-max-expiration-sec arg (=90)
|
||||
Maximum allowed transaction expiration
|
||||
for retry transactions, will retry
|
||||
transactions up to this value.
|
||||
--transaction-finality-status-max-storage-size-gb arg
|
||||
Maximum size (in GiB) allowed to be
|
||||
allocated for the Transaction Finality
|
||||
Maximum size (in GiB) allowed to be
|
||||
allocated for the Transaction Finality
|
||||
Status feature. Setting above 0 enables
|
||||
this feature.
|
||||
--transaction-finality-status-success-duration-sec arg (=180)
|
||||
Duration (in seconds) a successful
|
||||
transaction's Finality Status will
|
||||
remain available from being first
|
||||
Duration (in seconds) a successful
|
||||
transaction's Finality Status will
|
||||
remain available from being first
|
||||
identified.
|
||||
--transaction-finality-status-failure-duration-sec arg (=180)
|
||||
Duration (in seconds) a failed
|
||||
transaction's Finality Status will
|
||||
remain available from being first
|
||||
Duration (in seconds) a failed
|
||||
transaction's Finality Status will
|
||||
remain available from being first
|
||||
identified.
|
||||
--integrity-hash-on-start Log the state integrity hash on startup
|
||||
--integrity-hash-on-stop Log the state integrity hash on
|
||||
shutdown
|
||||
--block-log-retain-blocks arg If set to greater than 0, periodically
|
||||
prune the block log to store only
|
||||
configured number of most recent
|
||||
blocks.
|
||||
If set to 0, no blocks are be written
|
||||
to the block log; block log file is
|
||||
removed after startup.
|
||||
|
||||
```
|
||||
|
||||
|
||||
@@ -1 +1 @@
|
||||
[DB Size API Reference](https://docs.eosnetwork.com/leap-plugins/latest/db_size.api/)
|
||||
<!-- THIS IS A PLACEHOLDER, WILL BE REPLACED BY REDOC INSTANCE -->
|
||||
|
||||
@@ -0,0 +1,62 @@
|
||||
[[warning | Deprecation Notice]]
|
||||
| The `history_plugin` that the `history_api_plugin` depends upon is deprecated and will no longer be maintained. Please use the [`state_history_plugin`](../state_history_plugin/index.md) instead.
|
||||
|
||||
## Description
|
||||
|
||||
The `history_api_plugin` exposes functionality from the [`history_plugin`](../history_plugin/index.md) to the RPC API interface managed by the [`http_plugin`](../http_plugin/index.md), providing read-only access to blockchain data.
|
||||
|
||||
It provides four RPC API endpoints:
|
||||
|
||||
* get_actions
|
||||
* get_transaction
|
||||
* get_key_accounts
|
||||
* get_controlled_accounts
|
||||
|
||||
[[info | More Info]]
|
||||
| See HISTORY section of [RPC API](https://developers.eos.io/eosio-nodeos/reference).
|
||||
|
||||
The four actions listed above are used by the following `cleos` commands (matching order):
|
||||
|
||||
* get actions
|
||||
* get transaction
|
||||
* get accounts
|
||||
* get servants
|
||||
|
||||
## Usage
|
||||
|
||||
```console
|
||||
# config.ini
|
||||
plugin = eosio::history_api_plugin
|
||||
```
|
||||
```sh
|
||||
# command-line
|
||||
nodeos ... --plugin eosio::history_api_plugin
|
||||
```
|
||||
|
||||
## Options
|
||||
|
||||
None
|
||||
|
||||
## Dependencies
|
||||
|
||||
* [`history_plugin`](../history_plugin/index.md)
|
||||
* [`chain_plugin`](../chain_plugin/index.md)
|
||||
* [`http_plugin`](../http_plugin/index.md)
|
||||
|
||||
### Load Dependency Examples
|
||||
|
||||
```console
|
||||
# config.ini
|
||||
plugin = eosio::history_plugin
|
||||
[options]
|
||||
plugin = eosio::chain_plugin
|
||||
[options]
|
||||
plugin = eosio::http_plugin
|
||||
[options]
|
||||
```
|
||||
```sh
|
||||
# command-line
|
||||
nodeos ... --plugin eosio::history_plugin [options] \
|
||||
--plugin eosio::chain_plugin [operations] [options] \
|
||||
--plugin eosio::http_plugin [options]
|
||||
```
|
||||
@@ -0,0 +1,41 @@
|
||||
[[warning | Deprecation Notice]]
|
||||
| The `history_plugin` is deprecated and will no longer be maintained. Please use the [`state_history_plugin`](../state_history_plugin/index.md) instead.
|
||||
|
||||
## Description
|
||||
|
||||
The `history_plugin` provides a cache layer to obtain historical data about the blockchain objects. It depends on [`chain_plugin`](../chain_plugin/index.md) for the data.
|
||||
|
||||
## Usage
|
||||
|
||||
```console
|
||||
# config.ini
|
||||
plugin = eosio::history_plugin
|
||||
[options]
|
||||
```
|
||||
```sh
|
||||
# command-line
|
||||
nodeos ... --plugin eosio::history_plugin [options]
|
||||
```
|
||||
|
||||
## Options
|
||||
|
||||
These can be specified from both the `nodeos` command-line or the `config.ini` file:
|
||||
|
||||
```console
|
||||
Config Options for eosio::history_plugin:
|
||||
-f [ --filter-on ] arg Track actions which match
|
||||
receiver:action:actor. Actor may be
|
||||
blank to include all. Action and Actor
|
||||
both blank allows all from Recieiver.
|
||||
Receiver may not be blank.
|
||||
-F [ --filter-out ] arg Do not track actions which match
|
||||
receiver:action:actor. Action and Actor
|
||||
both blank excludes all from Reciever.
|
||||
Actor blank excludes all from
|
||||
reciever:action. Receiver may not be
|
||||
blank.
|
||||
```
|
||||
|
||||
## Dependencies
|
||||
|
||||
* [`chain_plugin`](../chain_plugin/index.md)
|
||||
@@ -0,0 +1,39 @@
|
||||
## Description
|
||||
|
||||
The `http_client_plugin` is an internal utility plugin, providing the `producer_plugin` the ability to use securely an external `keosd` instance as its block signer. It can only be used when the `producer_plugin` is configured to produce blocks.
|
||||
|
||||
## Usage
|
||||
|
||||
```console
|
||||
# config.ini
|
||||
plugin = eosio::http_client_plugin
|
||||
https-client-root-cert = "path/to/my/certificate.pem"
|
||||
https-client-validate-peers = 1
|
||||
```
|
||||
```sh
|
||||
# command-line
|
||||
nodeos ... --plugin eosio::http_client_plugin \
|
||||
--https-client-root-cert "path/to/my/certificate.pem" \
|
||||
--https-client-validate-peers 1
|
||||
```
|
||||
|
||||
## Options
|
||||
|
||||
These can be specified from both the `nodeos` command-line or the `config.ini` file:
|
||||
|
||||
```console
|
||||
Config Options for eosio::http_client_plugin:
|
||||
--https-client-root-cert arg PEM encoded trusted root certificate
|
||||
(or path to file containing one) used
|
||||
to validate any TLS connections made.
|
||||
(may specify multiple times)
|
||||
|
||||
--https-client-validate-peers arg (=1)
|
||||
true: validate that the peer
|
||||
certificates are valid and trusted,
|
||||
false: ignore cert errors
|
||||
```
|
||||
|
||||
## Dependencies
|
||||
|
||||
* [`producer_plugin`](../producer_plugin/index.md)
|
||||
@@ -22,49 +22,49 @@ These can be specified from both the command-line or the `config.ini` file:
|
||||
|
||||
```console
|
||||
Config Options for eosio::http_plugin:
|
||||
--unix-socket-path arg The filename (relative to data-dir) to
|
||||
create a unix socket for HTTP RPC; set
|
||||
blank to disable.
|
||||
--http-server-address arg (=127.0.0.1:8888)
|
||||
The local IP and port to listen for
|
||||
--unix-socket-path arg The filename (relative to data-dir) to
|
||||
create a unix socket for HTTP RPC; set
|
||||
blank to disable (=keosd.sock for keosd)
|
||||
--http-server-address arg (=127.0.0.1:8888 for nodeos)
|
||||
The local IP and port to listen for
|
||||
incoming http connections; set blank to
|
||||
disable.
|
||||
--https-server-address arg The local IP and port to listen for
|
||||
incoming https connections; leave blank
|
||||
to disable.
|
||||
--https-certificate-chain-file arg Filename with the certificate chain to
|
||||
present on https connections. PEM
|
||||
format. Required for https.
|
||||
--https-private-key-file arg Filename with https private key in PEM
|
||||
format. Required for https
|
||||
--https-ecdh-curve arg (=secp384r1) Configure https ECDH curve to use:
|
||||
secp384r1 or prime256v1
|
||||
--access-control-allow-origin arg Specify the Access-Control-Allow-Origin
|
||||
to be returned on each request
|
||||
to be returned on each request.
|
||||
--access-control-allow-headers arg Specify the Access-Control-Allow-Header
|
||||
s to be returned on each request
|
||||
--access-control-max-age arg Specify the Access-Control-Max-Age to
|
||||
s to be returned on each request.
|
||||
--access-control-max-age arg Specify the Access-Control-Max-Age to
|
||||
be returned on each request.
|
||||
--access-control-allow-credentials Specify if Access-Control-Allow-Credent
|
||||
ials: true should be returned on each
|
||||
ials: true should be returned on each
|
||||
request.
|
||||
--max-body-size arg (=2097152) The maximum body size in bytes allowed
|
||||
--max-body-size arg (=1048576) The maximum body size in bytes allowed
|
||||
for incoming RPC requests
|
||||
--http-max-bytes-in-flight-mb arg (=500)
|
||||
Maximum size in megabytes http_plugin
|
||||
should use for processing http
|
||||
requests. -1 for unlimited. 429 error
|
||||
response when exceeded.
|
||||
--http-max-in-flight-requests arg (=-1)
|
||||
Maximum number of requests http_plugin
|
||||
should use for processing http
|
||||
requests. 429 error response when
|
||||
Maximum size in megabytes http_plugin
|
||||
should use for processing http
|
||||
requests. 503 error response when
|
||||
exceeded.
|
||||
--http-max-response-time-ms arg (=30) Maximum time for processing a request,
|
||||
-1 for unlimited
|
||||
--verbose-http-errors Append the error log to HTTP responses
|
||||
--http-validate-host arg (=1) If set to false, then any incoming
|
||||
--http-validate-host arg (=1) If set to false, then any incoming
|
||||
"Host" header is considered valid
|
||||
--http-alias arg Additionaly acceptable values for the
|
||||
"Host" header of incoming HTTP
|
||||
requests, can be specified multiple
|
||||
times. Includes http/s_server_address
|
||||
--http-alias arg Additionaly acceptable values for the
|
||||
"Host" header of incoming HTTP
|
||||
requests, can be specified multiple
|
||||
times. Includes http/s_server_address
|
||||
by default.
|
||||
--http-threads arg (=2) Number of worker threads in http thread
|
||||
pool
|
||||
--http-keep-alive arg (=1) If set to false, do not keep HTTP
|
||||
connections alive, even if client
|
||||
requests.
|
||||
```
|
||||
|
||||
## Dependencies
|
||||
|
||||
@@ -11,7 +11,9 @@ For information on specific plugins, just select from the list below:
|
||||
* [`chain_api_plugin`](chain_api_plugin/index.md)
|
||||
* [`chain_plugin`](chain_plugin/index.md)
|
||||
* [`db_size_api_plugin`](db_size_api_plugin/index.md)
|
||||
* [`http_client_plugin`](http_client_plugin/index.md)
|
||||
* [`http_plugin`](http_plugin/index.md)
|
||||
* [`login_plugin`](login_plugin/index.md)
|
||||
* [`net_api_plugin`](net_api_plugin/index.md)
|
||||
* [`net_plugin`](net_plugin/index.md)
|
||||
* [`producer_plugin`](producer_plugin/index.md)
|
||||
@@ -19,6 +21,7 @@ For information on specific plugins, just select from the list below:
|
||||
* [`test_control_api_plugin`](test_control_api_plugin/index.md)
|
||||
* [`test_control_plugin`](test_control_plugin/index.md)
|
||||
* [`trace_api_plugin`](trace_api_plugin/index.md)
|
||||
* [`txn_test_gen_plugin`](txn_test_gen_plugin/index.md)
|
||||
|
||||
[[info | Nodeos is modular]]
|
||||
| Plugins add incremental functionality to `nodeos`. Unlike runtime plugins, `nodeos` plugins are built at compile-time.
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
## Description
|
||||
|
||||
The `login_plugin` supports the concept of applications authenticating with the EOSIO blockchain. The `login_plugin` API allows an application to verify whether an account is allowed to sign in order to satisfy a specified authority.
|
||||
|
||||
## Usage
|
||||
|
||||
```console
|
||||
# config.ini
|
||||
plugin = eosio::login_plugin
|
||||
[options]
|
||||
```
|
||||
```sh
|
||||
# command-line
|
||||
nodeos ... --plugin eosio::login_plugin [options]
|
||||
```
|
||||
|
||||
## Options
|
||||
|
||||
These can be specified from both the `nodeos` command-line or the `config.ini` file:
|
||||
|
||||
```console
|
||||
Config Options for eosio::login_plugin:
|
||||
--max-login-requests arg (=1000000) The maximum number of pending login
|
||||
requests
|
||||
--max-login-timeout arg (=60) The maximum timeout for pending login
|
||||
requests (in seconds)
|
||||
```
|
||||
|
||||
## Dependencies
|
||||
|
||||
* [`chain_plugin`](../chain_plugin/index.md)
|
||||
* [`http_plugin`](../http_plugin/index.md)
|
||||
|
||||
### Load Dependency Examples
|
||||
|
||||
```console
|
||||
# config.ini
|
||||
plugin = eosio::chain_plugin
|
||||
[options]
|
||||
plugin = eosio::http_plugin
|
||||
[options]
|
||||
```
|
||||
```sh
|
||||
# command-line
|
||||
nodeos ... --plugin eosio::chain_plugin [options] \
|
||||
--plugin eosio::http_plugin [options]
|
||||
```
|
||||
@@ -1 +1 @@
|
||||
[Net API Reference](https://docs.eosnetwork.com/leap-plugins/latest/net.api/)
|
||||
<!-- THIS IS A PLACEHOLDER, WILL BE REPLACED BY REDOC INSTANCE -->
|
||||
|
||||
@@ -8,7 +8,7 @@ The `net_api_plugin` provides four RPC API endpoints:
|
||||
* connections
|
||||
* status
|
||||
|
||||
See [Net API Reference Documentation](https://docs.eosnetwork.com/leap-plugins/latest/net.api/).
|
||||
See [Net API Reference Documentation](https://developers.eos.io/manuals/eos/latest/nodeos/plugins/net_api_plugin/api-reference/index).
|
||||
|
||||
[[caution | Caution]]
|
||||
| This plugin exposes endpoints that allow management of p2p connections. Running this plugin on a publicly accessible node is not recommended as it can be exploited.
|
||||
|
||||
@@ -23,83 +23,78 @@ Config Options for eosio::net_plugin:
|
||||
--p2p-listen-endpoint arg (=0.0.0.0:9876)
|
||||
The actual host:port used to listen for
|
||||
incoming p2p connections.
|
||||
--p2p-server-address arg An externally accessible host:port for
|
||||
identifying this node. Defaults to
|
||||
--p2p-server-address arg An externally accessible host:port for
|
||||
identifying this node. Defaults to
|
||||
p2p-listen-endpoint.
|
||||
--p2p-peer-address arg The public endpoint of a peer node to
|
||||
connect to. Use multiple
|
||||
p2p-peer-address options as needed to
|
||||
--p2p-peer-address arg The public endpoint of a peer node to
|
||||
connect to. Use multiple
|
||||
p2p-peer-address options as needed to
|
||||
compose a network.
|
||||
Syntax: host:port[:<trx>|<blk>]
|
||||
The optional 'trx' and 'blk'
|
||||
indicates to node that only
|
||||
transactions 'trx' or blocks 'blk'
|
||||
The optional 'trx' and 'blk'
|
||||
indicates to node that only
|
||||
transactions 'trx' or blocks 'blk'
|
||||
should be sent. Examples:
|
||||
p2p.example.org:9876
|
||||
p2p.trx.example.org:9876:trx
|
||||
p2p.blk.example.org:9876:blk
|
||||
|
||||
p2p.eos.io:9876
|
||||
p2p.trx.eos.io:9876:trx
|
||||
p2p.blk.eos.io:9876:blk
|
||||
|
||||
--p2p-max-nodes-per-host arg (=1) Maximum number of client nodes from any
|
||||
single IP address
|
||||
--p2p-accept-transactions arg (=1) Allow transactions received over p2p
|
||||
network to be evaluated and relayed if
|
||||
--p2p-accept-transactions arg (=1) Allow transactions received over p2p
|
||||
network to be evaluated and relayed if
|
||||
valid.
|
||||
--agent-name arg (=EOS Test Agent) The name supplied to identify this node
|
||||
--agent-name arg (="EOS Test Agent") The name supplied to identify this node
|
||||
amongst the peers.
|
||||
--allowed-connection arg (=any) Can be 'any' or 'producers' or
|
||||
'specified' or 'none'. If 'specified',
|
||||
peer-key must be specified at least
|
||||
once. If only 'producers', peer-key is
|
||||
not required. 'producers' and
|
||||
--allowed-connection arg (=any) Can be 'any' or 'producers' or
|
||||
'specified' or 'none'. If 'specified',
|
||||
peer-key must be specified at least
|
||||
once. If only 'producers', peer-key is
|
||||
not required. 'producers' and
|
||||
'specified' may be combined.
|
||||
--peer-key arg Optional public key of peer allowed to
|
||||
--peer-key arg Optional public key of peer allowed to
|
||||
connect. May be used multiple times.
|
||||
--peer-private-key arg Tuple of [PublicKey, WIF private key]
|
||||
--peer-private-key arg Tuple of [PublicKey, WIF private key]
|
||||
(may specify multiple times)
|
||||
--max-clients arg (=25) Maximum number of clients from which
|
||||
connections are accepted, use 0 for no
|
||||
--max-clients arg (=25) Maximum number of clients from which
|
||||
connections are accepted, use 0 for no
|
||||
limit
|
||||
--connection-cleanup-period arg (=30) number of seconds to wait before
|
||||
--connection-cleanup-period arg (=30) number of seconds to wait before
|
||||
cleaning up dead connections
|
||||
--max-cleanup-time-msec arg (=10) max connection cleanup time per cleanup
|
||||
call in milliseconds
|
||||
--p2p-dedup-cache-expire-time-sec arg (=10)
|
||||
Maximum time to track transaction for
|
||||
Maximum time to track transaction for
|
||||
duplicate optimization
|
||||
--net-threads arg (=2) Number of worker threads in net_plugin
|
||||
--net-threads arg (=2) Number of worker threads in net_plugin
|
||||
thread pool
|
||||
--sync-fetch-span arg (=100) number of blocks to retrieve in a chunk
|
||||
from any individual peer during
|
||||
from any individual peer during
|
||||
synchronization
|
||||
--use-socket-read-watermark arg (=0) Enable experimental socket read
|
||||
--use-socket-read-watermark arg (=0) Enable experimental socket read
|
||||
watermark optimization
|
||||
--peer-log-format arg (=["${_name}" - ${_cid} ${_ip}:${_port}] )
|
||||
The string used to format peers when
|
||||
--peer-log-format arg (=["${_name}" ${_ip}:${_port}])
|
||||
The string used to format peers when
|
||||
logging messages about them. Variables
|
||||
are escaped with ${<variable name>}.
|
||||
Available Variables:
|
||||
_name self-reported name
|
||||
|
||||
_cid assigned connection id
|
||||
|
||||
_id self-reported ID (64 hex
|
||||
|
||||
_id self-reported ID (64 hex
|
||||
characters)
|
||||
|
||||
_sid first 8 characters of
|
||||
|
||||
_sid first 8 characters of
|
||||
_peer.id
|
||||
|
||||
|
||||
_ip remote IP address of peer
|
||||
|
||||
|
||||
_port remote port number of peer
|
||||
|
||||
|
||||
_lip local IP address connected to
|
||||
peer
|
||||
|
||||
_lport local port number connected
|
||||
to peer
|
||||
--p2p-keepalive-interval-ms arg (=10000)
|
||||
peer heartbeat keepalive message
|
||||
interval in milliseconds
|
||||
|
||||
_lport local port number connected
|
||||
to peer
|
||||
```
|
||||
|
||||
## Dependencies
|
||||
|
||||
@@ -1 +1 @@
|
||||
[Producer API Reference](https://docs.eosnetwork.com/leap-plugins/latest/producer.api/)
|
||||
<!-- THIS IS A PLACEHOLDER, WILL BE REPLACED BY REDOC INSTANCE -->
|
||||
|
||||
@@ -23,120 +23,138 @@ These can be specified from both the `nodeos` command-line or the `config.ini` f
|
||||
|
||||
```console
|
||||
Config Options for eosio::producer_plugin:
|
||||
-e [ --enable-stale-production ] Enable block production, even if the
|
||||
|
||||
-e [ --enable-stale-production ] Enable block production, even if the
|
||||
chain is stale.
|
||||
-x [ --pause-on-startup ] Start this node in a state where
|
||||
-x [ --pause-on-startup ] Start this node in a state where
|
||||
production is paused
|
||||
--max-transaction-time arg (=30) Limits the maximum time (in
|
||||
milliseconds) that is allowed a pushed
|
||||
transaction's code to execute before
|
||||
--max-transaction-time arg (=30) Limits the maximum time (in
|
||||
milliseconds) that is allowed a pushed
|
||||
transaction's code to execute before
|
||||
being considered invalid
|
||||
--max-irreversible-block-age arg (=-1)
|
||||
Limits the maximum age (in seconds) of
|
||||
Limits the maximum age (in seconds) of
|
||||
the DPOS Irreversible Block for a chain
|
||||
this node will produce blocks on (use
|
||||
this node will produce blocks on (use
|
||||
negative value to indicate unlimited)
|
||||
-p [ --producer-name ] arg ID of producer controlled by this node
|
||||
(e.g. inita; may specify multiple
|
||||
-p [ --producer-name ] arg ID of producer controlled by this node
|
||||
(e.g. inita; may specify multiple
|
||||
times)
|
||||
--private-key arg (DEPRECATED - Use signature-provider
|
||||
instead) Tuple of [public key, WIF
|
||||
private key] (may specify multiple
|
||||
times)
|
||||
--signature-provider arg (=EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV=KEY:5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3)
|
||||
Key=Value pairs in the form
|
||||
Key=Value pairs in the form
|
||||
<public-key>=<provider-spec>
|
||||
Where:
|
||||
<public-key> is a string form of
|
||||
a valid EOS public
|
||||
<public-key> is a string form of
|
||||
a vaild EOSIO public
|
||||
key
|
||||
|
||||
<provider-spec> is a string in the
|
||||
|
||||
<provider-spec> is a string in the
|
||||
form <provider-type>
|
||||
:<data>
|
||||
|
||||
<provider-type> is KEY, KEOSD, or SE
|
||||
|
||||
KEY:<data> is a string form of
|
||||
a valid EOS
|
||||
private key which
|
||||
|
||||
<provider-type> is KEY, or KEOSD
|
||||
|
||||
KEY:<data> is a string form of
|
||||
a valid EOSIO
|
||||
private key which
|
||||
maps to the provided
|
||||
public key
|
||||
|
||||
KEOSD:<data> is the URL where
|
||||
keosd is available
|
||||
and the approptiate
|
||||
wallet(s) are
|
||||
|
||||
KEOSD:<data> is the URL where
|
||||
keosd is available
|
||||
and the approptiate
|
||||
wallet(s) are
|
||||
unlocked
|
||||
--keosd-provider-timeout arg (=5) Limits the maximum time (in
|
||||
milliseconds) that is allowed for
|
||||
sending blocks to a keosd provider for
|
||||
signing
|
||||
--greylist-account arg account that can not access to extended
|
||||
CPU/NET virtual resources
|
||||
--greylist-limit arg (=1000) Limit (between 1 and 1000) on the
|
||||
--greylist-limit arg (=1000) Limit (between 1 and 1000) on the
|
||||
multiple that CPU/NET virtual resources
|
||||
can extend during low usage (only
|
||||
enforced subjectively; use 1000 to not
|
||||
can extend during low usage (only
|
||||
enforced subjectively; use 1000 to not
|
||||
enforce any limit)
|
||||
--produce-time-offset-us arg (=0) Offset of non last block producing time
|
||||
in microseconds. Valid range 0 ..
|
||||
in microseconds. Valid range 0 ..
|
||||
-block_time_interval.
|
||||
--last-block-time-offset-us arg (=-200000)
|
||||
Offset of last block producing time in
|
||||
microseconds. Valid range 0 ..
|
||||
Offset of last block producing time in
|
||||
microseconds. Valid range 0 ..
|
||||
-block_time_interval.
|
||||
--cpu-effort-percent arg (=80) Percentage of cpu block production time
|
||||
used to produce block. Whole number
|
||||
used to produce block. Whole number
|
||||
percentages, e.g. 80 for 80%
|
||||
--last-block-cpu-effort-percent arg (=80)
|
||||
Percentage of cpu block production time
|
||||
used to produce last block. Whole
|
||||
used to produce last block. Whole
|
||||
number percentages, e.g. 80 for 80%
|
||||
--max-block-cpu-usage-threshold-us arg (=5000)
|
||||
Threshold of CPU block production to
|
||||
consider block full; when within
|
||||
threshold of max-block-cpu-usage block
|
||||
Threshold of CPU block production to
|
||||
consider block full; when within
|
||||
threshold of max-block-cpu-usage block
|
||||
can be produced immediately
|
||||
--max-block-net-usage-threshold-bytes arg (=1024)
|
||||
Threshold of NET block production to
|
||||
consider block full; when within
|
||||
threshold of max-block-net-usage block
|
||||
Threshold of NET block production to
|
||||
consider block full; when within
|
||||
threshold of max-block-net-usage block
|
||||
can be produced immediately
|
||||
--max-scheduled-transaction-time-per-block-ms arg (=100)
|
||||
Maximum wall-clock time, in
|
||||
milliseconds, spent retiring scheduled
|
||||
transactions (and incoming transactions
|
||||
according to incoming-defer-ratio) in
|
||||
any block before returning to normal
|
||||
transaction processing.
|
||||
Maximum wall-clock time, in
|
||||
milliseconds, spent retiring scheduled
|
||||
transactions in any block before
|
||||
returning to normal transaction
|
||||
processing.
|
||||
--subjective-cpu-leeway-us arg (=31000)
|
||||
Time in microseconds allowed for a
|
||||
transaction that starts with
|
||||
insufficient CPU quota to complete and
|
||||
Time in microseconds allowed for a
|
||||
transaction that starts with
|
||||
insufficient CPU quota to complete and
|
||||
cover its CPU usage.
|
||||
--subjective-account-max-failures arg (=3)
|
||||
Sets the maximum amount of failures
|
||||
that are allowed for a given account
|
||||
Sets the maximum amount of failures
|
||||
that are allowed for a given account
|
||||
per block.
|
||||
Disregarded for accounts that have been
|
||||
whitelisted by disabling subjective
|
||||
billing for the account using the
|
||||
disable-subjective-account-billing
|
||||
configuration option.
|
||||
--subjective-account-decay-time-minutes arg (=1440)
|
||||
Sets the time to return full subjective
|
||||
cpu for accounts
|
||||
--incoming-defer-ratio arg (=1) ratio between incoming transactions and
|
||||
deferred transactions when both are
|
||||
deferred transactions when both are
|
||||
queued for execution
|
||||
--incoming-transaction-queue-size-mb arg (=1024)
|
||||
Maximum size (in MiB) of the incoming
|
||||
Maximum size (in MiB) of the incoming
|
||||
transaction queue. Exceeding this value
|
||||
will subjectively drop transaction with
|
||||
resource exhaustion.
|
||||
--disable-subjective-billing arg (=1) Disable subjective CPU billing for
|
||||
--disable-api-persisted-trx Disable the re-apply of API
|
||||
transactions.
|
||||
--disable-subjective-billing arg (=1) Disable subjective CPU billing for
|
||||
API/P2P transactions
|
||||
--disable-subjective-account-billing arg
|
||||
Account which is excluded from
|
||||
Account which is excluded from
|
||||
subjective CPU billing
|
||||
Account is considered whitelisted and
|
||||
will not be subject to enforcement of
|
||||
subjective-account-max-failures.
|
||||
--disable-subjective-p2p-billing arg (=1)
|
||||
Disable subjective CPU billing for P2P
|
||||
Disable subjective CPU billing for P2P
|
||||
transactions
|
||||
--disable-subjective-api-billing arg (=1)
|
||||
Disable subjective CPU billing for API
|
||||
Disable subjective CPU billing for API
|
||||
transactions
|
||||
--producer-threads arg (=2) Number of worker threads in producer
|
||||
--producer-threads arg (=2) Number of worker threads in producer
|
||||
thread pool
|
||||
--snapshots-dir arg (="snapshots") the location of the snapshots directory
|
||||
(absolute path or relative to
|
||||
(absolute path or relative to
|
||||
application data dir)
|
||||
```
|
||||
|
||||
@@ -154,7 +172,7 @@ The option below sets the ratio between the incoming transaction and the deferre
|
||||
--incoming-defer-ratio arg (=1)
|
||||
```
|
||||
|
||||
By default value of `1`, the `producer` plugin processes one incoming transaction per deferred transaction. When `arg` sets to `10`, the `producer` plugin processes 10 incoming transactions per deferred transaction.
|
||||
By default value of `1`, the `producer` plugin processes one incoming transaction per deferred transaction. When `arg` sets to `10`, the `producer` plugin processes 10 incoming transactions per deferred transaction.
|
||||
|
||||
If the `arg` is set to a sufficiently large number, the plugin always processes the incoming transaction first until the queue of the incoming transactions is empty. Respectively, if the `arg` is 0, the `producer` plugin processes the deferred transactions queue first.
|
||||
|
||||
|
||||
@@ -1,10 +1,19 @@
|
||||
|
||||
## Overview
|
||||
|
||||
The `resource_monitor_plugin` monitors space usage in the computing system where `nodeos` is running. Specifically, every `resource-monitor-interval-seconds` seconds, it measures the individual space used by each of the file systems mounted by `data-dir`, `state-dir`, `blocks-log-dir`, `snapshots-dir`, `state-history-dir`, and `trace-dir`. When space usage in any of the monitored file system is within `5%` of the threshold specified by `resource-monitor-space-threshold`, a warning containing the file system path and percentage of space has used is printed out. When space usage exceeds the threshold, if `resource-monitor-not-shutdown-on-threshold-exceeded` is not set, `nodeos` gracefully shuts down; if `resource-monitor-not-shutdown-on-threshold-exceeded` is set, `nodeos` prints out warnings periodically until space usage goes under the threshold.
|
||||
The `resource_monitor_plugin` monitors space usage in the computing system where `nodeos` is running. Specifically, every `resource-monitor-interval-seconds` seconds,
|
||||
it measures the individual space used by each of the file systems mounted
|
||||
by `data-dir`, `state-dir`, `blocks-log-dir`, `snapshots-dir`,
|
||||
`state-history-dir`, and `trace-dir`.
|
||||
When space usage in any of the monitored file system is within `5%` of the threshold
|
||||
specified by `resource-monitor-space-threshold`, a warning containing the file system
|
||||
path and percentage of space has used is printed out.
|
||||
When space usage exceeds the threshold,
|
||||
if `resource-monitor-not-shutdown-on-threshold-exceeded` is not set,
|
||||
`nodeos` gracefully shuts down; if `resource-monitor-not-shutdown-on-threshold-exceeded` is set, `nodeos` prints out warnings periodically
|
||||
until space usage goes under the threshold.
|
||||
|
||||
`resource_monitor_plugin` is always loaded.
|
||||
|
||||
## Usage
|
||||
|
||||
```console
|
||||
@@ -23,28 +32,33 @@ These can be specified from both the `nodeos` command-line or the `config.ini` f
|
||||
|
||||
```console
|
||||
Config Options for eosio::resource_monitor_plugin:
|
||||
|
||||
--resource-monitor-interval-seconds arg (=2)
|
||||
Time in seconds between two consecutive
|
||||
checks of resource usage. Should be
|
||||
between 1 and 300
|
||||
Time in seconds between two consecutive checks
|
||||
of space usage. Should be between 1 and 300.
|
||||
--resource-monitor-space-threshold arg (=90)
|
||||
Threshold in terms of percentage of
|
||||
used space vs total space. If used
|
||||
space is above (threshold - 5%), a
|
||||
warning is generated. Unless
|
||||
resource-monitor-not-shutdown-on-thresh
|
||||
old-exceeded is enabled, a graceful
|
||||
shutdown is initiated if used space is
|
||||
above the threshold. The value should
|
||||
be between 6 and 99
|
||||
Threshold in terms of percentage of used space
|
||||
vs total space. If the used space is within
|
||||
`5%` of the threshold, a warning is generated.
|
||||
If the used space is above the threshold and
|
||||
`resource-monitor-not-shutdown-on-threshold-exceeded`
|
||||
is enabled, a shutdown is initiated; otherwise
|
||||
a warning will be continuously printed out.
|
||||
The value should be between 6 and 99.
|
||||
--resource-monitor-not-shutdown-on-threshold-exceeded
|
||||
Used to indicate nodeos will not
|
||||
shutdown when threshold is exceeded.
|
||||
A switch used to indicate `nodeos` will "not"
|
||||
shutdown when threshold is exceeded. When not
|
||||
set, `nodeos` will shutdown.
|
||||
--resource-monitor-warning-interval arg (=30)
|
||||
Number of resource monitor intervals
|
||||
between two consecutive warnings when
|
||||
the threshold is hit. Should be between
|
||||
1 and 450
|
||||
Number of monitor intervals between which a
|
||||
warning is displayed. For example, if
|
||||
`resource-monitor-warning-interval` is to 10
|
||||
and `resource-monitor-interval-seconds` is 2,
|
||||
a warning will be displayed every 20 seconds,
|
||||
even though the space usage is checked every
|
||||
2 seconds. This is used to throttle the
|
||||
number of warnings in the `nodeos` log file.
|
||||
Should be between 1 and 450.
|
||||
```
|
||||
|
||||
## Plugin Dependencies
|
||||
|
||||
+2
-2
@@ -8,7 +8,7 @@ This procedure records the current chain state and future history, without previ
|
||||
|
||||
## Before you begin
|
||||
|
||||
* Make sure [Antelope is installed](../../../00_install/index.md).
|
||||
* Make sure [EOSIO is installed](../../../00_install/index.md).
|
||||
* Learn about [Using Nodeos](../../02_usage/index.md).
|
||||
* Get familiar with [state_history_plugin](../../03_plugins/state_history_plugin/index.md).
|
||||
|
||||
@@ -20,7 +20,7 @@ This procedure records the current chain state and future history, without previ
|
||||
|
||||
2. Make sure `data/state` does not exist
|
||||
|
||||
3. Start `nodeos` with the `--snapshot` option, and the options listed in the [`state_history_plugin`](index.md).
|
||||
3. Start `nodeos` with the `--snapshot` option, and the options listed in the [`state_history_plugin`](#index.md).
|
||||
|
||||
4. Look for `Placing initial state in block n` in the log, where n is the start block number.
|
||||
|
||||
|
||||
+1
-1
@@ -8,7 +8,7 @@ This procedure records the entire chain history.
|
||||
|
||||
## Before you begin
|
||||
|
||||
* Make sure [Antelope is installed](../../../00_install/index.md).
|
||||
* Make sure [EOSIO is installed](../../../00_install/index.md).
|
||||
* Learn about [Using Nodeos](../../02_usage/index.md).
|
||||
* Get familiar with [state_history_plugin](../../03_plugins/state_history_plugin/index.md).
|
||||
|
||||
|
||||
+1
-1
@@ -8,7 +8,7 @@ This procedure creates a database containing the chain state, with full history
|
||||
|
||||
## Before you begin
|
||||
|
||||
* Make sure [Antelope is installed](../../../00_install/index.md).
|
||||
* Make sure [EOSIO is installed](../../../00_install/index.md).
|
||||
* Learn about [Using Nodeos](../../02_usage/index.md).
|
||||
* Get familiar with [state_history_plugin](../../03_plugins/state_history_plugin/index.md).
|
||||
|
||||
|
||||
+2
-2
@@ -8,7 +8,7 @@ This procedure restores an existing snapshot with full history, so the node can
|
||||
|
||||
## Before you begin
|
||||
|
||||
* Make sure [Antelope is installed](../../../00_install/index.md).
|
||||
* Make sure [EOSIO is installed](../../../00_install/index.md).
|
||||
* Learn about [Using Nodeos](../../02_usage/index.md).
|
||||
* Get familiar with [state_history_plugin](../../03_plugins/state_history_plugin/index.md).
|
||||
|
||||
@@ -21,7 +21,7 @@ This procedure restores an existing snapshot with full history, so the node can
|
||||
|
||||
2. Make sure `data/state` does not exist
|
||||
|
||||
3. Start `nodeos` with the `--snapshot` option, and the options listed in the [`state_history_plugin`](index.md).
|
||||
3. Start `nodeos` with the `--snapshot` option, and the options listed in the [`state_history_plugin`](#index.md).
|
||||
|
||||
4. Do not stop `nodeos` until it has received at least 1 block from the network, or it won't be able to restart.
|
||||
|
||||
|
||||
@@ -31,28 +31,28 @@ These can be specified from both the `nodeos` command-line or the `config.ini` f
|
||||
|
||||
```console
|
||||
Config Options for eosio::state_history_plugin:
|
||||
|
||||
--state-history-dir arg (="state-history")
|
||||
the location of the state-history
|
||||
the location of the state-history
|
||||
directory (absolute path or relative to
|
||||
application data dir)
|
||||
--trace-history enable trace history
|
||||
--chain-state-history enable chain state history
|
||||
--state-history-endpoint arg (=127.0.0.1:8080)
|
||||
the endpoint upon which to listen for
|
||||
incoming connections. Caution: only
|
||||
expose this port to your internal
|
||||
the endpoint upon which to listen for
|
||||
incoming connections. Caution: only
|
||||
expose this port to your internal
|
||||
network.
|
||||
--state-history-unix-socket-path arg the path (relative to data-dir) to
|
||||
create a unix socket upon which to
|
||||
listen for incoming connections.
|
||||
--trace-history-debug-mode enable debug mode for trace history
|
||||
--state-history-log-retain-blocks arg if set, periodically prune the state
|
||||
history files to store only configured
|
||||
number of most recent blocks
|
||||
```
|
||||
|
||||
## Examples
|
||||
|
||||
### history-tools
|
||||
|
||||
* [Source code](https://github.com/EOSIO/history-tools/)
|
||||
* [Documentation](https://eosio.github.io/history-tools/)
|
||||
|
||||
## Dependencies
|
||||
|
||||
* [`chain_plugin`](../chain_plugin/index.md)
|
||||
|
||||
@@ -1 +1 @@
|
||||
[Trace API Reference](https://docs.eosnetwork.com/leap-plugins/latest/trace.api/)
|
||||
<!-- THIS IS A PLACEHOLDER, WILL BE REPLACED BY REDOC INSTANCE -->
|
||||
|
||||
@@ -5,11 +5,11 @@ The `trace_api_plugin` provides a consumer-focused long-term API for retrieving
|
||||
|
||||
## Purpose
|
||||
|
||||
While integrating applications such as block explorers and exchanges with an Antelope blockchain, the user might require a complete transcript of actions processed by the blockchain, including those spawned from the execution of smart contracts and scheduled transactions. The `trace_api_plugin` serves this need. The purpose of the plugin is to provide:
|
||||
While integrating applications such as block explorers and exchanges with an EOSIO blockchain, the user might require a complete transcript of actions processed by the blockchain, including those spawned from the execution of smart contracts and scheduled transactions. The `trace_api_plugin` serves this need. The purpose of the plugin is to provide:
|
||||
|
||||
* A transcript of retired actions and related metadata
|
||||
* A consumer-focused long-term API to retrieve blocks
|
||||
* Maintainable resource commitments at the Antelope nodes
|
||||
* Maintainable resource commitments at the EOSIO nodes
|
||||
|
||||
Therefore, one crucial goal of the `trace_api_plugin` is to improve the maintenance of node resources (file system, disk space, memory used, etc.). This goal is different from the existing `history_plugin` which provides far more configurable filtering and querying capabilities, or the existing `state_history_plugin` which provides a binary streaming interface to access structural chain data, action data, as well as state deltas.
|
||||
|
||||
@@ -101,7 +101,7 @@ nodeos ... --plugin eosio::chain_plugin [options] \
|
||||
|
||||
## Configuration Example
|
||||
|
||||
Here is a `nodeos` configuration example for the `trace_api_plugin` when tracing some Antelope reference contracts:
|
||||
Here is a `nodeos` configuration example for the `trace_api_plugin` when tracing some EOSIO reference contracts:
|
||||
|
||||
```sh
|
||||
nodeos --data-dir data_dir --config-dir config_dir --trace-dir traces_dir
|
||||
@@ -191,7 +191,7 @@ If resource usage cannot be effectively managed via the `trace-minimum-irreversi
|
||||
|
||||
## Manual Maintenance
|
||||
|
||||
The `trace-dir` option defines the directory on the filesystem where the trace log files are stored by the `trace_api_plugin`. These files are stable once the LIB block has progressed past a given slice and then can be deleted at any time to reclaim filesystem space. The deployed Antelope system will tolerate any out-of-process management system that removes some or all of these files in this directory regardless of what data they represent, or whether there is a running `nodeos` instance accessing them or not. Data which would nominally be available, but is no longer so due to manual maintenance, will result in a HTTP 404 response from the appropriate API endpoint(s).
|
||||
The `trace-dir` option defines the directory on the filesystem where the trace log files are stored by the `trace_api_plugin`. These files are stable once the LIB block has progressed past a given slice and then can be deleted at any time to reclaim filesystem space. The deployed EOSIO system will tolerate any out-of-process management system that removes some or all of these files in this directory regardless of what data they represent, or whether there is a running `nodeos` instance accessing them or not. Data which would nominally be available, but is no longer so due to manual maintenance, will result in a HTTP 404 response from the appropriate API endpoint(s).
|
||||
|
||||
[[info | For node operators]]
|
||||
| Node operators can take full control over the lifetime of the historical data available in their nodes via the `trace-api-plugin` and the `trace-minimum-irreversible-history-blocks` and `trace-minimum-uncompressed-irreversible-history-blocks` options in conjunction with any external filesystem resource manager.
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
|
||||
## Description
|
||||
|
||||
The `txn_test_gen_plugin` is used for transaction test purposes.
|
||||
|
||||
[[info | For More Information]]
|
||||
For more information, check the [txn_test_gen_plugin/README.md](https://github.com/EOSIO/eos/blob/develop/plugins/txn_test_gen_plugin/README.md) on the EOSIO/eos repository.
|
||||
|
||||
## Usage
|
||||
|
||||
```console
|
||||
# config.ini
|
||||
plugin = eosio::txn_test_gen_plugin
|
||||
[options]
|
||||
```
|
||||
```sh
|
||||
# command-line
|
||||
nodeos ... --plugin eosio::txn_test_gen_plugin [options]
|
||||
```
|
||||
|
||||
## Options
|
||||
|
||||
These can be specified from both the `nodeos` command-line or the `config.ini` file:
|
||||
|
||||
```console
|
||||
Config Options for eosio::txn_test_gen_plugin:
|
||||
--txn-reference-block-lag arg (=0) Lag in number of blocks from the head
|
||||
block when selecting the reference
|
||||
block for transactions (-1 means Last
|
||||
Irreversible Block)
|
||||
--txn-test-gen-threads arg (=2) Number of worker threads in
|
||||
txn_test_gen thread pool
|
||||
--txn-test-gen-account-prefix arg (=txn.test.)
|
||||
Prefix to use for accounts generated
|
||||
and used by this plugin
|
||||
```
|
||||
|
||||
## Dependencies
|
||||
|
||||
None
|
||||
@@ -6,7 +6,7 @@ Once you have obtained a copy of a valid snapshot file from which you wish to cr
|
||||
|
||||
location | name | action
|
||||
----------------- | -------------------------- | ------------
|
||||
data/snapshots | `<head block id in hex>.bin` | place the snapshot file you want to replay here
|
||||
data/snapshots | <head block id in hex>.bin | place the snapshot file you want to replay here
|
||||
data/ | * | remove
|
||||
|
||||
You can use `snapshots-dir = "snapshots" ` in the configuration file or using the `--snapshots-dir` command line option, to specify the where to find the the snapshot to replay, use `--snapshot` to specify the name of the snapshot to replay.
|
||||
|
||||
@@ -17,7 +17,7 @@ Snapshot files can be created from a running `nodeos` instance. The snapshot con
|
||||
* [How To Generate a Blocks Log](how-to-generate-a-blocks.log.md)
|
||||
* [How To Generate a Snapshot](how-to-generate-a-snapshot.md)
|
||||
* [How To Replay from a Blocks Log](how-to-replay-from-a-blocks.log.md)
|
||||
* [How to Replay from a Snapshot](../04_replays/how-to-replay-from-a-snapshot.md)
|
||||
* [How to Replay from a Snapshot](how-to-replay-from-a-snapshot.md)
|
||||
|
||||
## Replay Snapshot-specific Options
|
||||
|
||||
@@ -41,9 +41,9 @@ This tells `nodeos` to clear the local chain state and local the `blocks.log` fi
|
||||
- **--truncate-at-block**
|
||||
Default argument (=0), only used if the given value is non-zero.
|
||||
Using this option when replaying the blockchain will force the replay to stop at the specified block number. This option will only work if replaying with the `--hard-replay-blockchain` option. The local `nodeos` process will contain the chain state for that block. This option may be useful for checking blockchain state at specific points in time. It is intended for testing/validation and is not intended to be used when creating a local `nodeos` instance which is synchronized with the network.
|
||||
|
||||
|
||||
- **--snapshot**
|
||||
Use this option to specify which snapshot file to use to recreate the chain state from a snapshot file. This option will not replay the `blocks.log` file. The `nodeos` instance will not know the full transaction history of the blockchain.
|
||||
Use this option to specify which snapshot file to use to recreate the chain state from a snapshot file. This option will not replay the `blocks.log` file. The `nodeos` instance will not know the full transaction history of the blockchain.
|
||||
|
||||
- **--snapshots-dir**
|
||||
You can use this to specify the location of the snapshot file directory (absolute path or relative to application data dir.)
|
||||
|
||||
@@ -64,24 +64,3 @@ Sample `logging.json`:
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## Expected Output of Log Levels
|
||||
|
||||
* `error` - Log output that likely requires operator intervention.
|
||||
- Error level logging should be reserved for conditions that are completely unexpected or otherwise need human intervention.
|
||||
- Also used to indicate software errors such as: impossible values for an `enum`, out of bounds array access, null pointers, or other conditions that likely will throw an exception.
|
||||
- *Note*: Currently, there are numerous `error` level logging that likely should be `warn` as they do not require human intervention. The `net_plugin_impl`, for example, has a number of `error` level logs for bad network connections. This is handled and processed correctly. These should be changed to `warn` or `info`.
|
||||
* `warn` - Log output indicating unexpected but recoverable errors.
|
||||
- Although, `warn` level typically does not require human intervention, repeated output of `warn` level logs might indicate actions needed by an operator.
|
||||
- `warn` should not be used simply for conveying information. A `warn` level log is something to take notice of, but not necessarily be concerned about.
|
||||
* `info` (default) - Log output that provides useful information to an operator.
|
||||
- Can be just progress indication or other useful data to a user. Care is taken not to create excessive log output with `info` level logging. For example, no `info` level logging should be produced for every transaction.
|
||||
- For progress indication, some multiple of transactions should be processed between each log output; typically, every 1000 transactions.
|
||||
* `debug` - Useful log output for when non-default logging is enabled.
|
||||
- Answers the question: is this useful information for a user that is monitoring the log output. Care should be taken not to create excessive log output; similar to `info` level logging.
|
||||
- Enabling `debug` level logging should provide greater insight into behavior without overwhelming the output with log entries.
|
||||
- `debug` level should not be used for *trace* level logging; to that end, use `all` (see below).
|
||||
- Like `info`, no `debug` level logging should be produced for every transaction. There are specific transaction level loggers dedicated to transaction level logging: `transaction`, `transaction_trace_failure`, `transaction_trace_success`, `transaction_failure_tracing`, `transaction_success_tracing`, `transient_trx_success_tracing`, `transient_trx_failure_tracing`.
|
||||
* `all` (trace) - For logging that would be overwhelming if `debug` level logging were used.
|
||||
- Can be used for trace level logging. Only used in a few places and not completely supported.
|
||||
- *Note*: In the future a different logging library may provide better trace level logging support. The current logging framework is not performant enough to enable excess trace level output.
|
||||
|
||||
@@ -6,7 +6,7 @@ Logging for `nodeos` is controlled by the `logging.json` file. CLI options can b
|
||||
|
||||
## Appenders
|
||||
|
||||
The logging library built into Antelope supports two appender types:
|
||||
The logging library built into EOSIO supports two appender types:
|
||||
|
||||
- [Console](#console)
|
||||
- [GELF](#gelf) (Graylog Extended Log Format)
|
||||
@@ -74,7 +74,7 @@ Example:
|
||||
|
||||
## Loggers
|
||||
|
||||
The logging library built into Antelope currently supports the following loggers:
|
||||
The logging library built into EOSIO currently supports the following loggers:
|
||||
|
||||
- `default` - the default logger, always enabled.
|
||||
- `net_plugin_impl` - detailed logging for the net plugin.
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
content_title: Storage and Read Modes
|
||||
---
|
||||
|
||||
The Antelope platform stores blockchain information in various data structures at various stages of a transaction's lifecycle. Some of these are described below. The producing node is the `nodeos` instance run by the block producer who is currently creating blocks for the blockchain (which changes every 6 seconds, producing 12 blocks in sequence before switching to another producer.)
|
||||
The EOSIO platform stores blockchain information in various data structures at various stages of a transaction's lifecycle. Some of these are described below. The producing node is the `nodeos` instance run by the block producer who is currently creating blocks for the blockchain (which changes every 6 seconds, producing 12 blocks in sequence before switching to another producer.)
|
||||
|
||||
## Blockchain State and Storage
|
||||
|
||||
@@ -15,9 +15,9 @@ Every `nodeos` instance creates some internal files to housekeep the blockchain
|
||||
* The `pending block` is an in memory block containing transactions as they are processed and pushed into the block; this will/may eventually become the head block. If the `nodeos` instance is the producing node, the pending block is distributed to other `nodeos` instances.
|
||||
* Outside the chain state, block data is cached in RAM until it becomes final/irreversible; especifically the signed block itself. After the last irreversible block (LIB) catches up to the block, that block is then retrieved from the irreversible blocks log.
|
||||
|
||||
## Antelope Interfaces
|
||||
## EOSIO Interfaces
|
||||
|
||||
Antelope provides a set of [services](../../) and [interfaces](https://docs.eosnetwork.com/cdt/latest/reference/Files/) that enable contract developers to persist state across action, and consequently transaction, boundaries. Contracts may use these services and interfaces for various purposes. For example, `eosio.token` contract keeps balances for all users in the chain database. Each instance of `nodeos` keeps the database in memory, so contracts can read and write data with ease.
|
||||
EOSIO provides a set of [services](../../) and [interfaces](https://developers.eos.io/manuals/eosio.cdt/latest/files) that enable contract developers to persist state across action, and consequently transaction, boundaries. Contracts may use these services and interfaces for various purposes. For example, `eosio.token` contract keeps balances for all users in the chain database. Each instance of `nodeos` keeps the database in memory, so contracts can read and write data with ease.
|
||||
|
||||
### Nodeos RPC API
|
||||
|
||||
@@ -27,20 +27,41 @@ The `nodeos` service provides query access to the chain database via the HTTP [R
|
||||
|
||||
The `nodeos` service can be run in different "read" modes. These modes control how the node operates and how it processes blocks and transactions:
|
||||
|
||||
- `speculative`: this includes the side effects of confirmed and unconfirmed transactions.
|
||||
- `head`: this only includes the side effects of confirmed transactions, this mode processes unconfirmed transactions but does not include them.
|
||||
- `read-only`: this mode is deprecated. Similar functionality can be achieved by combining options: `read-mode = head`, `p2p-accept-transactions = false`, `api-accept-transactions = false`. When these options are set, the local database will contain state changes made by transactions in the chain up to the head block. Also, transactions received via the P2P network are not relayed and transactions cannot be pushed via the chain API.
|
||||
- `irreversible`: this mode also includes confirmed transactions only up to those included in the last irreversible block.
|
||||
|
||||
A transaction is considered confirmed when a `nodeos` instance has received, processed, and written it to a block on the blockchain, i.e. it is in the head block or an earlier block.
|
||||
|
||||
### Speculative Mode
|
||||
|
||||
Clients such as `cleos` and the RPC API, will see database state as of the current head block plus changes made by all transactions known to this node but potentially not included in the chain, unconfirmed transactions for example.
|
||||
|
||||
Speculative mode is low latency but fragile, there is no guarantee that the transactions reflected in the state will be included in the chain OR that they will reflected in the same order the state implies.
|
||||
|
||||
This mode features the lowest latency, but is the least consistent.
|
||||
|
||||
In speculative mode `nodeos` is able to execute transactions which have TaPoS (Transaction as Proof of Stake) pointing to any valid block in a fork considered to be the best fork by this node.
|
||||
|
||||
### Head Mode
|
||||
|
||||
Clients such as `cleos` and the RPC API will see database state as of the current head block of the chain. Since current head block is not yet irreversible and short-lived forks are possible, state read in this mode may become inaccurate if `nodeos` switches to a better fork.
|
||||
Clients such as `cleos` and the RPC API will see database state as of the current head block of the chain. Since current head block is not yet irreversible and short-lived forks are possible, state read in this mode may become inaccurate if `nodeos` switches to a better fork. Note that this is also true of speculative mode.
|
||||
|
||||
This mode represents a good trade-off between highly consistent views of the data and latency.
|
||||
|
||||
In this mode `nodeos` is able to execute transactions which have TaPoS pointing to any valid block in a fork considered to be the best fork by this node.
|
||||
|
||||
### Read-Only Mode
|
||||
|
||||
[[caution | Deprecation Notice]]
|
||||
| The explicit `read-mode = read-only` mode is deprecated. Similar functionality can now be achieved in `head` mode by combining options: `read-mode = head`, `p2p-accept-transactions = false`, `api-accept-transactions = false`.
|
||||
|
||||
Clients such as `cleos` and the RPC API will see database state as of the current head block of the chain. It **will not** include changes made by transactions known to this node but not included in the chain, such as unconfirmed transactions.
|
||||
|
||||
### Irreversible Mode
|
||||
|
||||
When `nodeos` is configured to be in irreversible read mode, it will still track the most up-to-date blocks in the fork database, but the state will lag behind the current best head block, sometimes referred to as the fork DB head, to always reflect the state of the last irreversible block.
|
||||
When `nodeos` is configured to be in irreversible read mode, it will still track the most up-to-date blocks in the fork database, but the state will lag behind the current best head block, sometimes referred to as the fork DB head, to always reflect the state of the last irreversible block.
|
||||
|
||||
Clients such as `cleos` and the RPC API will see database state as of the current head block of the chain. It **will not** include changes made by transactions known to this node but not included in the chain, such as unconfirmed transactions.
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ link_text: Context-Free Data
|
||||
---
|
||||
|
||||
## Overview
|
||||
The immutable nature of the blockchain allows data to be stored securely while also enforcing the integrity of such data. However, this benefit also complicates the removal of non-essential data from the blockchain. Consequently, Antelope blockchains contain a special section within the transaction, called the *context-free data*. As its name implies, data stored in the context-free data section is considered free of previous contexts or dependencies, which makes their potential removal possible. More importantly, such removal can be performed safely without compromising the integrity of the blockchain.
|
||||
The immutable nature of the blockchain allows data to be stored securely while also enforcing the integrity of such data. However, this benefit also complicates the removal of non-essential data from the blockchain. Consequently, EOSIO blockchains contain a special section within the transaction, called the *context-free data*. As its name implies, data stored in the context-free data section is considered free of previous contexts or dependencies, which makes their potential removal possible. More importantly, such removal can be performed safely without compromising the integrity of the blockchain.
|
||||
|
||||
## Concept
|
||||
The goal of context-free data is to allow blockchain applications the option to store non-essential information within a transaction. Some examples of context-free data include:
|
||||
|
||||
@@ -4,7 +4,7 @@ content_title: Nodeos Troubleshooting
|
||||
|
||||
### "Database dirty flag set (likely due to unclean shutdown): replay required"
|
||||
|
||||
`nodeos` needs to be shut down cleanly. To ensure this is done, send a `SIGTERM`, `SIGQUIT` or `SIGINT` and wait for the process to shutdown. Failing to do this will result in this error. If you get this error, your only recourse is to replay by starting `nodeos` with `--replay-blockchain`
|
||||
`nodeos` needs to be shut down cleanly. To ensure this is done, send a `SIGTERM`, `SIGQUIT` or `SIGINT` and wait for the process to shutdown. Failing to do this will result in this error. If you get this error, your only recourse is to replay by starting `nodeos` with `--replay-blockchain`
|
||||
|
||||
### "Memory does not match data" Error at Restart
|
||||
|
||||
@@ -12,15 +12,15 @@ If you get an error such as `St9exception: content of memory does not match data
|
||||
|
||||
```
|
||||
Command Line Options for eosio::chain_plugin:
|
||||
--force-all-checks do not skip any checks that can be
|
||||
skipped while replaying irreversible
|
||||
--force-all-checks do not skip any checks that can be
|
||||
skipped while replaying irreversible
|
||||
blocks
|
||||
--replay-blockchain clear chain state database and replay
|
||||
--replay-blockchain clear chain state database and replay
|
||||
all blocks
|
||||
--hard-replay-blockchain clear chain state database, recover as
|
||||
many blocks as possible from the block
|
||||
--hard-replay-blockchain clear chain state database, recover as
|
||||
many blocks as possible from the block
|
||||
log, and then replay those blocks
|
||||
--delete-all-blocks clear chain state database and block
|
||||
--delete-all-blocks clear chain state database and block
|
||||
log
|
||||
```
|
||||
|
||||
@@ -28,7 +28,7 @@ Command Line Options for eosio::chain_plugin:
|
||||
|
||||
Start `nodeos` with `--shared-memory-size-mb 1024`. A 1 GB shared memory file allows approximately half a million transactions.
|
||||
|
||||
### What version of Antelope am I running/connecting to?
|
||||
### What version of EOSIO am I running/connecting to?
|
||||
|
||||
If defaults can be used, then `cleos get info` will output a block that contains a field called `server_version`. If your `nodeos` is not using the defaults, then you need to know the URL of the `nodeos`. In that case, use the following with your `nodeos` URL:
|
||||
|
||||
@@ -44,4 +44,4 @@ cleos --url http://localhost:8888 get info | grep server_version
|
||||
|
||||
### Error 3070000: WASM Exception Error
|
||||
|
||||
If you try to deploy the `eosio.bios` contract or `eosio.system` contract in an attempt to boot an Antelope-based blockchain and you get the following error or similar: `Publishing contract... Error 3070000: WASM Exception Error Details: env.set_proposed_producers_ex unresolveable`, it is because you have to activate the `PREACTIVATE_FEATURE` protocol first.
|
||||
If you try to deploy the `eosio.bios` contract or `eosio.system` contract in an attempt to boot an EOSIO-based blockchain and you get the following error or similar: `Publishing contract... Error 3070000: WASM Exception Error Details: env.set_proposed_producers_ex unresolveable`, it is because you have to activate the `PREACTIVATE_FEATURE` protocol first. More details about it and how to enable it can be found in the [Bios Boot Sequence Tutorial](https://developers.eos.io/welcome/latest/tutorials/bios-boot-sequence/#112-set-the-eosiosystem-contract). For more information, you may also visit the [Nodeos Upgrade Guides](https://developers.eos.io/manuals/eos/latest/nodeos/upgrade-guides/).
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
---
|
||||
link: https://github.com/EOSIO/eos/issues/7597
|
||||
---
|
||||
@@ -4,11 +4,11 @@ content_title: Nodeos
|
||||
|
||||
## Introduction
|
||||
|
||||
`nodeos` is the core service daemon that runs on every Antelope node. It can be configured to process smart contracts, validate transactions, produce blocks containing valid transactions, and confirm blocks to record them on the blockchain.
|
||||
`nodeos` is the core service daemon that runs on every EOSIO node. It can be configured to process smart contracts, validate transactions, produce blocks containing valid transactions, and confirm blocks to record them on the blockchain.
|
||||
|
||||
## Installation
|
||||
|
||||
`nodeos` is distributed as part of the [Antelope software suite](https://github.com/AntelopeIO/leap). To install `nodeos`, visit the [Antelope Software Installation](../00_install/index.md) section.
|
||||
`nodeos` is distributed as part of the [EOSIO software suite](https://github.com/EOSIO/eos/blob/master/README.md). To install `nodeos`, visit the [EOSIO Software Installation](../00_install/index.md) section.
|
||||
|
||||
## Explore
|
||||
|
||||
@@ -21,6 +21,7 @@ Navigate the sections below to configure and use `nodeos`.
|
||||
* [Logging](06_logging/index.md) - Logging config/usage, loggers, appenders, logging levels.
|
||||
* [Concepts](07_concepts/index.md) - `nodeos` concepts, explainers, implementation aspects.
|
||||
* [Troubleshooting](08_troubleshooting/index.md) - Common `nodeos` troubleshooting questions.
|
||||
* [Deprecation Notices](https://github.com/EOSIO/eos/issues/7597) - Lists `nodeos` deprecated functionality.
|
||||
|
||||
[[info | Access Node]]
|
||||
| A local or remote Antelope access node running `nodeos` is required for a client application or smart contract to interact with the blockchain.
|
||||
| A local or remote EOSIO access node running `nodeos` is required for a client application or smart contract to interact with the blockchain.
|
||||
|
||||
@@ -11,11 +11,11 @@ Make sure you meet the following requirements:
|
||||
* Install the currently supported version of `cleos`.
|
||||
|
||||
[[info | Note]]
|
||||
| `cleos` is bundled with the Antelope software. [Installing Antelope](../../00_install/index.md) will also install `cleos`.
|
||||
| `cleos` is bundled with the EOSIO software. [Installing EOSIO](../../00_install/index.md) will also install `cleos`.
|
||||
|
||||
* Understand what an [account](/glossary.md#account) is and its role in the blockchain.
|
||||
* Understand [Accounts and Permissions](/protocol-guides/04_accounts_and_permissions.md) in the protocol documents.
|
||||
* Understand what a [public](/glossary.md#public-key) and [private](/glossary.md#private-key) key pair is.
|
||||
* Understand what an [account](https://developers.eos.io/welcome/latest/glossary/index/#account) is and its role in the blockchain.
|
||||
* Understand [Accounts and Permissions](https://developers.eos.io/welcome/latest/protocol-guides/accounts_and_permissions) in the protocol documents.
|
||||
* Understand what a [public](https://developers.eos.io/welcome/latest/glossary/index/#public-key) and [private](https://developers.eos.io/welcome/latest/glossary/index/#private-key) key pair is.
|
||||
|
||||
## Steps
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
## Overview
|
||||
|
||||
This how-to guide provides instructions on how to create a new Antelope blockchain account using the `cleos` CLI tool. You can use accounts to deploy smart contracts and perform other related blockchain operations. Create one or multiple accounts as part of your development environment setup.
|
||||
This how-to guide provides instructions on how to create a new EOSIO blockchain account using the `cleos` CLI tool. You can use accounts to deploy smart contracts and perform other related blockchain operations. Create one or multiple accounts as part of your development environment setup.
|
||||
|
||||
The example in this how-to guide creates a new account named **bob**, authorized by the default system account **eosio**, using the `cleos` CLI tool.
|
||||
The example in this how-to guide creates a new account named **bob**, authorized by the default system account **eosio**, using the `cleos` CLI tool.
|
||||
|
||||
## Before you Begin
|
||||
|
||||
@@ -10,9 +10,9 @@ Make sure you meet the following requirements:
|
||||
|
||||
* Install the currently supported version of `cleos`.
|
||||
[[info | Note]]
|
||||
| The cleos tool is bundled with the Antelope software. [Installing Antelope](../../00_install/index.md) will also install the cleos tool.
|
||||
* Learn about [Antelope Accounts and Permissions](/protocol-guides/04_accounts_and_permissions.md)
|
||||
* Learn about Asymmetric Cryptography - [public key](/glossary.md#public-key) and [private key](/glossary.md#private-key) pairs.
|
||||
| The cleos tool is bundled with the EOSIO software. [Installing EOSIO](../../00_install/index.md) will also install the cleos tool.
|
||||
* Learn about [EOSIO Accounts and Permissions](https://developers.eos.io/welcome/v2.1/protocol/accounts_and_permissions)
|
||||
* Learn about Asymmetric Cryptography - [public key](https://developers.eos.io/welcome/v2.1/glossary/index#public-key) and [private key](https://developers.eos.io/welcome/v2.1/glossary/index#private-key) pairs.
|
||||
* Create public/private keypairs for the `owner` and `active` permissions of an account.
|
||||
|
||||
## Command Reference
|
||||
@@ -31,10 +31,10 @@ cleos create account eosio bob EOS87TQktA5RVse2EguhztfQVEh6XXxBmgkU8b4Y5YnGvtYAo
|
||||
```
|
||||
**Where**:
|
||||
* `eosio` = the system account that authorizes the creation of a new account
|
||||
* `bob` = the name of the new account conforming to [account naming conventions](/protocol-guides/04_accounts_and_permissions.md#2-accounts)
|
||||
* `bob` = the name of the new account conforming to [account naming conventions](https://developers.eos.io/welcome/v2.1/protocol-guides/accounts_and_permissions#2-accounts)
|
||||
* `EOS87TQ...AoLGNN` = the owner public key or permission level for the new account (**required**)
|
||||
[[info | Note]]
|
||||
| To create a new account in the Antelope blockchain, an existing account, also referred to as a creator account, is required to authorize the creation of a new account. For a newly created Antelope blockchain, the default system account used to create a new account is **eosio**.
|
||||
| To create a new account in the EOSIO blockchain, an existing account, also referred to as a creator account, is required to authorize the creation of a new account. For a newly created EOSIO blockchain, the default system account used to create a new account is **eosio**.
|
||||
|
||||
**Example Output**
|
||||
|
||||
@@ -46,4 +46,4 @@ warning: transaction executed locally, but may not be confirmed by the network y
|
||||
|
||||
### Summary
|
||||
|
||||
By following these instructions, you are able to create a new Antelope account in your blockchain environment.
|
||||
By following these instructions, you are able to create a new EOSIO account in your blockchain environment.
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
## Overview
|
||||
|
||||
This how-to guide provides instructions on how to create a keypair consisting of a public key and a private key for signing transactions in an Antelope blockchain.
|
||||
This how-to guide provides instructions on how to create a keypair consisting of a public key and a private key for signing transactions in an EOSIO blockchain.
|
||||
|
||||
## Before you begin
|
||||
|
||||
Make sure you meet the following requirements:
|
||||
* Install the currently supported version of `cleos`
|
||||
[[info | Note]]
|
||||
| The cleos tool is bundled with the Antelope software. [Installing Antelope](../../00_install/index.md) will also install the cleos tool.
|
||||
* Learn about asymmetric cryptography (public and private keypair) in the context of an Antelope blockchain.
|
||||
| The cleos tool is bundled with the EOSIO software. [Installing EOSIO](../../00_install/index.md) will also install the cleos tool.
|
||||
* Learn about asymmetric cryptography (public and private keypair) in the context of an EOSIO blockchain.
|
||||
|
||||
## Command Reference
|
||||
|
||||
|
||||
@@ -10,12 +10,12 @@ Make sure you meet the following requirements:
|
||||
* Install the currently supported version of `cleos`.
|
||||
|
||||
[[info | Note]]
|
||||
| `cleos` is bundled with the Antelope software. [Installing Antelope](../../00_install/index.md) will also install `cleos`.
|
||||
| `cleos` is bundled with the EOSIO software. [Installing EOSIO](../../00_install/index.md) will also install `cleos`.
|
||||
|
||||
* Ensure the reference system contracts from [`reference-contracts`](https://github.com/AntelopeIO/reference-contracts) repository is deployed and used to manage system resources.
|
||||
* Understand what an [account](/glossary.md#account) is and its role in the blockchain.
|
||||
* Understand [CPU bandwidth](/glossary.md#cpu) in an Antelope blockchain.
|
||||
* Understand [NET bandwidth](/glossary.md#net) in an Antelope blockchain.
|
||||
* Ensure the reference system contracts from [`eosio.contracts`](https://github.com/EOSIO/eosio.contracts) repository is deployed and used to manage system resources.
|
||||
* Understand what an [account](https://developers.eos.io/welcome/latest/glossary/index/#account) is and its role in the blockchain.
|
||||
* Understand [CPU bandwidth](https://developers.eos.io/welcome/latest/glossary/index/#cpu) in an EOSIO blockchain.
|
||||
* Understand [NET bandwidth](https://developers.eos.io/welcome/latest/glossary/index/#net) in an EOSIO blockchain.
|
||||
|
||||
## Steps
|
||||
|
||||
|
||||
@@ -10,12 +10,12 @@ Make sure you meet the following requirements:
|
||||
* Install the currently supported version of `cleos`.
|
||||
|
||||
[[info | Note]]
|
||||
| `cleos` is bundled with the Antelope software. [Installing Antelope](../../00_install/index.md) will also install `cleos`.
|
||||
| `cleos` is bundled with the EOSIO software. [Installing EOSIO](../../00_install/index.md) will also install `cleos`.
|
||||
|
||||
* Ensure the reference system contracts from [`reference-contracts`](https://github.com/AntelopeIO/reference-contracts) repository is deployed and used to manage system resources.
|
||||
* Understand what an [account](/glossary.md#account) is and its role in the blockchain.
|
||||
* Understand [NET bandwidth](/glossary.md#net) in an Antelope blockchain.
|
||||
* Understand [CPU bandwidth](/glossary.md#cpu) in an Antelope blockchain.
|
||||
* Ensure the reference system contracts from [`eosio.contracts`](https://github.com/EOSIO/eosio.contracts) repository is deployed and used to manage system resources.
|
||||
* Understand what an [account](https://developers.eos.io/welcome/latest/glossary/index/#account) is and its role in the blockchain.
|
||||
* Understand [NET bandwidth](https://developers.eos.io/welcome/latest/glossary/index/#net) in an EOSIO blockchain.
|
||||
* Understand [CPU bandwidth](https://developers.eos.io/welcome/latest/glossary/index/#cpu) in an EOSIO blockchain.
|
||||
|
||||
## Steps
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
## Goal
|
||||
|
||||
Deploy an Antelope contract
|
||||
Deploy an EOSIO contract
|
||||
|
||||
## Before you begin
|
||||
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
## Overview
|
||||
|
||||
This how-to guide provides instructions on how to query infomation of an Antelope account. The example in this how-to guide retrieves information of the `eosio` account.
|
||||
This how-to guide provides instructions on how to query infomation of an EOSIO account. The example in this how-to guide retrieves information of the `eosio` account.
|
||||
|
||||
## Before you begin
|
||||
|
||||
* Install the currently supported version of `cleos`
|
||||
|
||||
[[info | Note]]
|
||||
| The cleos tool is bundled with the Antelope software. [Installing Antelope](../../00_install/index.md) will also install the cleos tool.
|
||||
| The cleos tool is bundled with the EOSIO software. [Installing EOSIO](../../00_install/index.md) will also install the cleos tool.
|
||||
|
||||
* Acquire functional understanding of [Antelope Accounts and Permissions](/protocol-guides/04_accounts_and_permissions.md)
|
||||
* Acquire functional understanding of [EOSIO Accounts and Permissions](https://developers.eos.io/welcome/v2.1/protocol/accounts_and_permissions)
|
||||
|
||||
## Command Reference
|
||||
|
||||
@@ -28,7 +28,7 @@ cleos get account eosio
|
||||
```
|
||||
**Where**:
|
||||
|
||||
* `eosio` = The name of the default system account in the Antelope blockchain.
|
||||
* `eosio` = The name of the default system account in the EOSIO blockchain.
|
||||
|
||||
**Example Output**
|
||||
|
||||
@@ -53,4 +53,4 @@ cpu bandwidth:
|
||||
```
|
||||
|
||||
[[info | Account Fields]]
|
||||
| Depending on the Antelope network you are connected, you might see different fields associated with an account. That depends on which system contract has been deployed on the network.
|
||||
| Depending on the EOSIO network you are connected, you might see different fields associated with an account. That depends on which system contract has been deployed on the network.
|
||||
|
||||
@@ -10,10 +10,10 @@ Make sure to meet the following requirements:
|
||||
* Install the currently supported version of `cleos`.
|
||||
|
||||
[[info | Note]]
|
||||
| `cleos` is bundled with the Antelope software. [Installing Antelope](../../00_install/index.md) will also install `cleos`.
|
||||
| `cleos` is bundled with the EOSIO software. [Installing EOSIO](../../00_install/index.md) will also install `cleos`.
|
||||
|
||||
* Understand what a [block](/glossary.md#block) is and its role in the blockchain.
|
||||
* Understand the [block lifecycle](/protocol-guides/01_consensus_protocol.md#5-block-lifecycle) in the Antelope consensus protocol.
|
||||
* Understand what a [block](https://developers.eos.io/welcome/latest/glossary/index/#block) is and its role in the blockchain.
|
||||
* Understand the [block lifecycle](https://developers.eos.io/welcome/latest/protocol-guides/consensus_protocol/#5-block-lifecycle) in the EOSIO consensus protocol.
|
||||
|
||||
## Steps
|
||||
|
||||
@@ -34,10 +34,8 @@ Some examples are provided below:
|
||||
**Example Output**
|
||||
|
||||
```sh
|
||||
cleos -u https://choiceofyourprovider get block 48351112
|
||||
cleos -u https://api.testnet.eos.io get block 48351112
|
||||
```
|
||||
Reference to [testnet providers](/resources/index.md)
|
||||
|
||||
```json
|
||||
{
|
||||
"timestamp": "2021-01-28T17:58:59.500",
|
||||
@@ -61,7 +59,7 @@ Reference to [testnet providers](/resources/index.md)
|
||||
**Example Output**
|
||||
|
||||
```sh
|
||||
cleos -u https://choiceofyourprovider get block 02e1c7888a92206573ae38d00e09366c7ba7bc54cd8b7996506f7d2a619c43ba
|
||||
cleos -u https://api.testnet.eos.io get block 02e1c7888a92206573ae38d00e09366c7ba7bc54cd8b7996506f7d2a619c43ba
|
||||
```
|
||||
```json
|
||||
{
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
## Overview
|
||||
|
||||
This how-to guide provides instructions on how to retrieve infomation of an Antelope transaction using a transaction ID.
|
||||
This how-to guide provides instructions on how to retrieve infomation of an EOSIO transaction using a transaction ID.
|
||||
|
||||
The example in this how-to retrieves transaction information associated with the creation of the account **bob**.
|
||||
The example in this how-to retrieves transaction information associated with the creation of the account **bob**.
|
||||
|
||||
## Before you begin
|
||||
|
||||
Make sure you meet the following requirements:
|
||||
* Install the currently supported version of `cleos`.
|
||||
[[info | Note]]
|
||||
| `cleos` is bundled with the Antelope software. [Installing Antelope](../../00_install/index.md) will also install `cleos`.
|
||||
* Understand how transactions work in an Antelope blockchain. For more information on transactions, see the [Transactions Protocol](/protocol-guides/02_transactions_protocol.md) section.
|
||||
| `cleos` is bundled with the EOSIO software. [Installing EOSIO](../../00_install/index.md) will also install `cleos`.
|
||||
* Understand how transactions work in an EOSIO blockchain. For more information on transactions, see the [Transactions Protocol](https://developers.eos.io/welcome/latest/protocol-guides/transactions_protocol) section.
|
||||
|
||||
## Command Reference
|
||||
|
||||
@@ -25,7 +25,7 @@ The following step shows how to retrieve transaction information associated with
|
||||
```sh
|
||||
cleos get transaction 870a6b6e3882061ff0f64016e1eedfdd9439e2499bf978c3fb29fcedadada9b1
|
||||
```
|
||||
* Where `870a6b6e38...dada9b1`= The transaction ID associated with the creation of account **bob**.
|
||||
* Where `870a6b6e38...dada9b1`= The transaction ID associated with the creation of account **bob**.
|
||||
|
||||
**Example Output**
|
||||
|
||||
@@ -179,7 +179,7 @@ The `cleos` command returns detailed information of the transaction:
|
||||
|
||||
## Summary
|
||||
|
||||
By following these instructions, you are able to retrieve transaction information using a transaction ID.
|
||||
By following these instructions, you are able to retrieve transaction information using a transaction ID.
|
||||
|
||||
## Trobleshooting
|
||||
|
||||
@@ -195,4 +195,4 @@ Error Details:
|
||||
History API plugin is not enabled
|
||||
```
|
||||
|
||||
To troubleshoot this error, enable the [history plugin](../../01_nodeos/03_plugins/history_plugin/index.md) and [history API plugin](../../01_nodeos/03_plugins/history_api_plugin/index.md), then run the command again.
|
||||
To troubleshoot this error, enable the [history plugin](../../01_nodeos/03_plugins/history_plugin/index.md) and [history API plugin](../../01_nodeos/03_plugins/history_api_plugin/index.md), then run the command again.
|
||||
|
||||
@@ -1,18 +1,18 @@
|
||||
## Overview
|
||||
|
||||
This how-to guide provides instructions on how to import a private key into the `keosd` default wallet. You can use the private key to authorize transactions in an Antelope blockchain.
|
||||
This how-to guide provides instructions on how to import a private key into the `keosd` default wallet. You can use the private key to authorize transactions in an EOSIO blockchain.
|
||||
|
||||
## Before you Begin
|
||||
|
||||
Make sure you meet the following requirements:
|
||||
|
||||
* Create a default wallet using the `cleos wallet create` command. See the [How to Create a Wallet](../02_how-to-guides/how-to-create-a-wallet.md) section for instructions.
|
||||
* Create a default wallet using the `cleos wallet create` command. See the [How to Create a Wallet](../02_how-to-guides/how-to-create-a-wallet.md) section for instructions.
|
||||
* Open and unlock the created wallet.
|
||||
* Familiarize with the [`cleos wallet import`](../03_command-reference/wallet/import.md) command.
|
||||
* Install the currently supported version of `cleos`.
|
||||
[[info | Note]]
|
||||
| `cleos` is bundled with the Antelope software. [Installing Antelope](../../00_install/index.md) will also install `cleos`.
|
||||
* Understand what a [public key](/glossary.md#public-key) and [private key](/glossary.md#private-key) is.
|
||||
| `cleos` is bundled with the EOSIO software. [Installing EOSIO](../../00_install/index.md) will also install `cleos`.
|
||||
* Understand what a [public key](https://developers.eos.io/welcome/latest/glossary/index/#public-key) and [private key](https://developers.eos.io/welcome/latest/glossary/index/#private-key) is.
|
||||
|
||||
## Command Reference
|
||||
|
||||
@@ -31,7 +31,7 @@ cleos wallet import
|
||||
private key:
|
||||
```
|
||||
|
||||
2. Enter the private key and hit Enter.
|
||||
2. Enter the private key and hit Enter.
|
||||
```sh
|
||||
***
|
||||
```
|
||||
@@ -44,4 +44,4 @@ imported private key for: EOS8FBXJUfbANf3xeDWPoJxnip3Ych9HjzLBr1VaXRQFdkVAxwLE7
|
||||
|
||||
## Summary
|
||||
|
||||
By following these instructions, you are able to import a private key to the default wallet.
|
||||
By following these instructions, you are able to import a private key to the default wallet.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
## Overview
|
||||
|
||||
This how-to guide provides instructions on how to list all public keys and public/private key pairs within the `keosd` default wallet. You can use the public and private keys to authorize transactions in an Antelope blockchain.
|
||||
This how-to guide provides instructions on how to list all public keys and public/private key pairs within the `keosd` default wallet. You can use the public and private keys to authorize transactions in an EOSIO blockchain.
|
||||
|
||||
The example in this how-to guide displays all public keys and public/private key pairs stored within the existing default wallet.
|
||||
|
||||
@@ -8,13 +8,13 @@ The example in this how-to guide displays all public keys and public/private key
|
||||
|
||||
Make sure you meet the following requirements:
|
||||
|
||||
* Create a default wallet using the `cleos wallet create` command. See the [How to Create a Wallet](../02_how-to-guides/how-to-create-a-wallet.md) section for instructions.
|
||||
* Create a default wallet using the `cleos wallet create` command. See the [How to Create a Wallet](../02_how-to-guides/how-to-create-a-wallet.md) section for instructions.
|
||||
* [Create a keypair](../03_command-reference/wallet/create_key.md) within the default wallet.
|
||||
* Familiarize with the [`cleos wallet`](../03_command-reference/wallet/index.md) commands.
|
||||
* Install the currently supported version of `cleos`.
|
||||
[[info | Note]]
|
||||
| `cleos` is bundled with the Antelope software. [Installing Antelope](../../00_install/index.md) will also install `cleos`.
|
||||
* Understand what a [public key](/glossary.md#public-key) and [private key](/glossary.md#private-key) is.
|
||||
| `cleos` is bundled with the EOSIO software. [Installing EOSIO](../../00_install/index.md) will also install `cleos`.
|
||||
* Understand what a [public key](https://developers.eos.io/welcome/latest/glossary/index/#public-key) and [private key](https://developers.eos.io/welcome/latest/glossary/index/#private-key) is.
|
||||
|
||||
## Command Reference
|
||||
|
||||
@@ -71,7 +71,7 @@ cleos wallet private_keys
|
||||
password:
|
||||
```
|
||||
|
||||
6. Enter the generated password when you created the default wallet:
|
||||
6. Enter the generated password when you created the default wallet:
|
||||
```sh
|
||||
***
|
||||
```
|
||||
@@ -86,7 +86,7 @@ password: [[
|
||||
```
|
||||
|
||||
[[caution | Warning]]
|
||||
| Never reveal your private keys in a production environment.
|
||||
| Never reveal your private keys in a production environment.
|
||||
|
||||
[[info | Note]]
|
||||
| If the above commands does not list any keys, make sure you have created keypairs and imported private keys to your wallet.
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Pack and unpack transactions
|
||||
|
||||
## subcommands
|
||||
- [pack_transaction](pack_transaction.md) - From plain signed json to packed form
|
||||
- [unpack_transaction](unpack_transaction.md) - From packed to plain signed json form
|
||||
- [pack_action_data](pack_action_data.md) - From json action data to packed form
|
||||
- [unpack_action_data](unpack_action_data.md) - From packed to json action data form
|
||||
- [pack_transaction](pack_transaction) - From plain signed json to packed form
|
||||
- [unpack_transaction](unpack_transaction) - From packed to plain signed json form
|
||||
- [pack_action_data](pack_action_data) - From json action data to packed form
|
||||
- [unpack_action_data](unpack_action_data) - From packed to json action data form
|
||||
@@ -30,7 +30,7 @@ Options:
|
||||
```
|
||||
|
||||
## Command
|
||||
A set of Antelope keys is required to create an account. The Antelope keys can be generated by using `cleos create key`.
|
||||
A set of EOSIO keys is required to create an account. The EOSIO keys can be generated by using `cleos create key`.
|
||||
|
||||
```sh
|
||||
cleos create account inita tester EOS4toFS3YXEQCkuuw1aqDLrtHim86Gz9u3hBdcBw5KNPZcursVHq EOS7d9A3uLe6As66jzN8j44TXJUqJSK3bFjjEEqR4oTvNAB3iM9SA
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
Create various items, on and off the blockchain
|
||||
|
||||
## Subcommands
|
||||
- [key](key.md) - Create a new keypair and print the public and private keys
|
||||
- [account](account.md) - Create a new account on the blockchain
|
||||
- [key](key) - Create a new keypair and print the public and private keys
|
||||
- [account](account) - Create a new account on the blockchain
|
||||
|
||||
```console
|
||||
Create various items, on and off the blockchain
|
||||
|
||||
Regular → Executable
+3
-3
@@ -17,10 +17,10 @@ cleos get account eosio
|
||||
```
|
||||
```console
|
||||
privileged: true
|
||||
permissions:
|
||||
permissions:
|
||||
owner 1: 1 EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
|
||||
active 1: 1 EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
|
||||
memory:
|
||||
memory:
|
||||
quota: -1 bytes used: 1.22 Mb
|
||||
|
||||
net bandwidth: (averaged over 3 days)
|
||||
@@ -106,4 +106,4 @@ cleos get account eosio --json
|
||||
```
|
||||
|
||||
## See Also
|
||||
- [Accounts and Permissions](/protocol-guides/04_accounts_and_permissions.md) protocol document.
|
||||
- [Accounts and Permissions](https://developers.eos.io/welcome/latest/protocol/accounts_and_permissions) protocol document.
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
Gets current blockchain state and, if available, transaction information given the transaction id.
|
||||
|
||||
For query to work, the transaction finality status feature must be enabled by configuring
|
||||
the chain plugin with the config option "--transaction-finality-status-max-storage-size-gb \<size\>"
|
||||
the chain plugin with the config option "--transaction-finality-status-max-storage-size-gb <size>"
|
||||
in nodeos.
|
||||
|
||||
## Position Parameters
|
||||
@@ -19,7 +19,7 @@ in nodeos.
|
||||
cleos get transaction-status 6438df82216dfaf46978f703fb818b49110dbfc5d9b521b5d08c342277438b29
|
||||
```
|
||||
|
||||
This command simply returns the current chain status and transaction status information (if available).
|
||||
This command simply returns the current chain status and transaction status information (if available).
|
||||
|
||||
```json
|
||||
{
|
||||
|
||||
@@ -12,8 +12,7 @@ Documentation for all `cleos` main commands
|
||||
- [sign](sign.md) - Sign a transaction
|
||||
- [push](push) - Push arbitrary transactions to the blockchain
|
||||
- [multisig](multisig) - Multisig contract commands
|
||||
|
||||
[//]: # ( THIS IS A COMMENT FOLLOWING LINE HAD JS COMMENTS JS COMMENTS BREAK MDX )
|
||||
[//]: # ( wrap wrap - Wrap contract commands )
|
||||
|
||||
<!--
|
||||
- [wrap](wrap) - Wrap contract commands
|
||||
-->
|
||||
- [system](system) - Send eosio.system contract action to the blockchain.
|
||||
|
||||
@@ -4,11 +4,7 @@ cleos net connect [OPTIONS] host
|
||||
```
|
||||
|
||||
**Where:**
|
||||
* [OPTIONS] = See **Options** section TBD
|
||||
|
||||
[//]: # ( THIS IS A COMMENT LINK BELOW IS BROKEN )
|
||||
[//]: # (in the **Command Usage** command-usage section below.)
|
||||
|
||||
* [OPTIONS] = See **Options** in the [**Command Usage**](command-usage) section below.
|
||||
* host = The hostname:port to connect to
|
||||
|
||||
**Note:** The arguments and options enclosed in square brackets are optional.
|
||||
@@ -30,7 +26,7 @@ Make sure you meet the following requirements:
|
||||
|
||||
* Install the currently supported version of `cleos`.
|
||||
[[info | Note]]
|
||||
| `cleos` is bundled with the Antelope software. [Installing Antelope](../../../00_install/index.md) will also install the `cleos` and `keosd` command line tools.
|
||||
| `cleos` is bundled with the EOSIO software. [Installing EOSIO](../../../00_install/index.md) will also install the `cleos` and `keosd` command line tools.
|
||||
* You have access to a producing node instance with the [`net_api_plugin`](../../../01_nodeos/03_plugins/net_api_plugin/index.md) loaded.
|
||||
|
||||
## Examples
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user