воскресенье, 13 ноября 2016 г.

Частный блокчейн на основе Ethereum'a

Или как сделать свой блокчейн

Parity поддерживает частные цепочки и частные настройки сети, посредством файлов “спецификации цепи” предоставляемые через --chain.



Лучший способ создать такую конфигурацию, это использовать Frontier или Modern спецификацию и настроить её под свои нужды. Репозиторий Parity содержит примеры и актуальные frontier/morden спецификации, посмотреть можно здесь.



Вы также можете настроить т.н. Proof-of-Authority цепь, в которой не требуется майнинг (добыча).

Parity не включает обычные builtin контракты по умолчанию. Они необходимы при написании новых контрактов в Solidity, поскольку скомпилированный Solidity часто обращается к ним.
Для того, чтобы цепь вела себя как публичная Ethereum цепь, нужны 4 контракта, которые будут включены в spec файл, как в примере показанном ниже.


Пример spec файла

Это пример файла для частной сети. Это базовая Modern конфигурация с несколькими измененными параметрами.

homesteadTransition установлено в 0, для включения режима Homestead на старте.
durationLimit установлено в 10 секунд.
networkID изменено, чтобы не сталкиваться с основной сетью.
nodes содержит пользовательский начальный узел.
accounts содержит пользовательсткий аккаунт с большим количеством Ether.

{
    "name": "Morden",
    "engine": {
        "Ethash": {
            "params": {
                "gasLimitBoundDivisor": "0x0400",
                "minimumDifficulty": "0x020000",
                "difficultyBoundDivisor": "0x0800",
                "durationLimit": "0x0a",
                "blockReward": "0x4563918244F40000",
                "registrar": "",
                "homesteadTransition": "0x0"
            }
        }
    },
    "params": {
        "accountStartNonce": "0x0100000",
        "maximumExtraDataSize": "0x20",
        "minGasLimit": "0x1388",
        "networkID" : "0x42"
    },
    "genesis": {
        "seal": {
            "ethereum": {
                "nonce": "0x00006d6f7264656e",
                "mixHash": "0x00000000000000000000000000000000000000647572616c65787365646c6578"
            }
        },
        "difficulty": "0x20000",
        "author": "0x0000000000000000000000000000000000000000",
        "timestamp": "0x00",
        "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
        "extraData": "0x",
        "gasLimit": "0x2fefd8"
    },
    "nodes": [
        "enode://c2328c3e7857106585dbb59b712ac2ab9443d4f0b55b77451fbf33c0dda58b882f0683c4c9222cbf8d1d6893e7f926d487630810202a2c75ec6dd996dbe84715@192.168.0.12:30303"
    ],
    "accounts": {
        "0000000000000000000000000000000000000001": { "balance": "1", "nonce": "1048576", "builtin": { "name": "ecrecover", "pricing": { "linear": { "base": 3000, "word": 0 } } } },
        "0000000000000000000000000000000000000002": { "balance": "1", "nonce": "1048576", "builtin": { "name": "sha256", "pricing": { "linear": { "base": 60, "word": 12 } } } },
        "0000000000000000000000000000000000000003": { "balance": "1", "nonce": "1048576", "builtin": { "name": "ripemd160", "pricing": { "linear": { "base": 600, "word": 120 } } } },
        "0000000000000000000000000000000000000004": { "balance": "1", "nonce": "1048576", "builtin": { "name": "identity", "pricing": { "linear": { "base": 15, "word": 3 } } } },
        "16a9dfd266e3229f05a2704c13bf2e16ea23e7c3": { "balance": "1606938044258990275541962092341162602522202993782792835301376", "nonce": "1048576" }
    }
}


Исходя из Geth

Для подключения к узлу Geth или использовать настройку сети  вы можете использовать этот инструмент для генерации совместимой с Parity файла спецификации.

Он может быть использован посредством добавления --chain как опции Parity. Для того, чтобы сохранить RPC интерфейс, похожий на geth может быть использован модификатор --geth

Комментариев нет:

Отправить комментарий