Как создать в тестовом режиме "hello world" - мой самый первый и простой контракт в Parity Wallet for Win

  1. Parity.exe

  2. "Контракты"

  3. «Разработать договор»

  4. В окне "Новый контракт Solidity" написано:

    /*
    from here:
    https://ethereum-homestead.readthedocs.io/en/latest/contracts-and-transactions/contracts.html#writing-a-contract
    */
    
    contract HelloWorld {
            event Print(string out);
            function() { Print("Hello, World!"); }
    }
    
  5. Компиляция

  6. Развертывать

  7. И что?

Я застрял здесь (у меня нет бензина/денег на текущем счету)

Примечание. Оригинальный документ от Parity о контрактах мне неясен:

https://github.com/paritytech/parity/wiki/Tutorial-Part-6

Ответы (1)

Parity Ethereum поддерживает государственное программирование смарт-контрактов с помощью языка программирования Solidity для блокчейна Ethereum. Кошелек содержит интегрированную среду разработки Solidity, позволяющую писать, компилировать и развертывать контракты.

контракты-разработка-0 Представление разработки контракта содержит панель кода контракта (слева) и параметры конфигурации (справа).

контракты-разработка-1 Чтобы начать работу с вашим первым контрактом, можно загрузить или импортировать существующие контракты.

Нашим первым контрактом будет Greeter "Hello, World!" договор:

pragma solidity ^0.4.11;

contract greeter {

    address owner;
    string message;

    function greeter(string _message) public {
        owner = msg.sender;
        message = _message;
    }

    function say() constant returns (string) {
        return message;
    }

    function die() {
        if (msg.sender == owner) {
            selfdestruct(owner);
        }
    }
}

Этот контракт содержит две переменные-члены, конструктор и две функции. Конструктор будет вызываться один раз при развертывании контракта, устанавливает владельца контракта в качестве отправителя транзакции и сохраняет предоставленное сообщение.

Константная функция say()просто возвращает предоставленное сообщение при каждом вызове и die()позволяет создателю контракта самостоятельно уничтожить контракт и очистить состояние.

контракты-разработка-2 Создадим контракт Greeter в интегрированной среде разработки Solidity. Обратите внимание, что для этого pragma solidity ^0.4.11требуется версия компилятора Solidity 0.4.11 или выше, которую можно выбрать справа.

контракты-разработка-3 Перед составлением контракта сохраним Greeter "Hello, world!" договор для последующего использования.

контракты-разработка-4 Теперь среда Parity Solidity позволяет компилировать байт-код, необходимый для развертывания в блокчейне, и генерировать двоичный интерфейс приложения (ABI), необходимый для взаимодействия с контрактами.

контракты-разработка-5 Удобная функция — оптимизация кода и автоматическая компиляция, повторно генерирующая байт-код и ABI по мере написания кода.

Выполнив эти шаги, Parity Ethereum предоставляет нам следующий интерфейс JSON (ABI), байт-код, метаданные и хэш роя.

Бинарный интерфейс приложения (ABI):

[
  {
    "constant":false,
    "inputs":[

    ],
    "name":"die",
    "outputs":[

    ],
    "payable":false,
    "type":"function"
  },
  {
    "constant":true,
    "inputs":[

    ],
    "name":"say",
    "outputs":[
      {
        "name":"",
        "type":"string"
      }
    ],
    "payable":false,
    "type":"function"
  },
  {
    "inputs":[
      {
        "name":"_message",
        "type":"string"
      }
    ],
    "payable":false,
    "type":"constructor"
  }
]

Скомпилированный байт-код:

0x6060604052341561000c57fe5b604051610307380380610307833981016040528051015b60008054600160a060020a03191633600160a060020a03161790558051610051906001906020840190610059565b505b506100f9565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061009a57805160ff19168380011785556100c7565b828001600101855582156100c7579182015b828111156100c75782518255916020019190600101906100ac565b5b506100d49291506100d8565b5090565b6100f691905b808211156100d457600081556001016100de565b5090565b90565b6101ff806101086000396000f300606060405263ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166335f469948114610045578063954ab4b214610057575bfe5b341561004d57fe5b6100556100e7565b005b341561005f57fe5b610067610129565b6040805160208082528351818301528351919283929083019185019080838382156100ad575b8051825260208311156100ad57601f19909201916020918201910161008d565b505050905090810190601f1680156100d95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6000543373ffffffffffffffffffffffffffffffffffffffff908116911614156101265760005473ffffffffffffffffffffffffffffffffffffffff16ff5b5b565b6101316101c1565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156101b65780601f1061018b576101008083540402835291602001916101b6565b820191906000526020600020905b81548152906001019060200180831161019957829003601f168201915b505050505090505b90565b604080516020810190915260008152905600a165627a7a72305820bcb6dac55886f2319f381c72002482234ee43206c088e0eea076260a472d83230029

Метаданные контракта:

{
  "compiler":{
    "version":"0.4.11+commit.68ef5810"
  },
  "language":"Solidity",
  "output":{
    "abi":[
      {
        "constant":false,
        "inputs":[

        ],
        "name":"die",
        "outputs":[

        ],
        "payable":false,
        "type":"function"
      },
      {
        "constant":true,
        "inputs":[

        ],
        "name":"say",
        "outputs":[
          {
            "name":"",
            "type":"string"
          }
        ],
        "payable":false,
        "type":"function"
      },
      {
        "inputs":[
          {
            "name":"_message",
            "type":"string"
          }
        ],
        "payable":false,
        "type":"constructor"
      }
    ],
    "devdoc":{
      "methods":{

      }
    },
    "userdoc":{
      "methods":{

      }
    }
  },
  "settings":{
    "compilationTarget":{
      "GreeterHelloWorld":"greeter"
    },
    "libraries":{

    },
    "optimizer":{
      "enabled":true,
      "runs":200
    },
    "remappings":[

    ]
  },
  "sources":{
    "GreeterHelloWorld":{
      "keccak256":"0xe8f8f27c4b8e16a9d3b488f689b9e3018d25bdee6a67734444c9bbbf7a59c731",
      "urls":[
        "bzzr://ed1e3e9a69578ad5ccc4bb33539f802ee94b243163491f6ee3f9456b0ae4d281"
      ]
    }
  },
  "version":1
}

Рой хэш:

bcb6dac55886f2319f381c72002482234ee43206c088e0eea076260a472d8323

Эта информация важна для развертывания вашего смарт-контракта в блокчейне Ethereum и интеграции в ваши децентрализованные приложения. Сохраните их для дальнейшего использования.

Кстати, если вы предпочитаете использовать командную строку и у вас установлен компилятор Solidity, то же самое можно сделать, выполнив следующую команду, предполагая, что ваш код контракта сохранен в файле с именем greeter.sol:

solc --optimize --abi --bin --metadata greeter.sol

======= greeter.sol:greeter =======
Binary:
6060604052341561000c57fe5b604051610307380380610307833981016040528051015b60008054600160a060020a03191633600160a060020a03161790558051610051906001906020840190610059565b505b506100f9565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061009a57805160ff19168380011785556100c7565b828001600101855582156100c7579182015b828111156100c75782518255916020019190600101906100ac565b5b506100d49291506100d8565b5090565b6100f691905b808211156100d457600081556001016100de565b5090565b90565b6101ff806101086000396000f300606060405263ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166335f469948114610045578063954ab4b214610057575bfe5b341561004d57fe5b6100556100e7565b005b341561005f57fe5b610067610129565b6040805160208082528351818301528351919283929083019185019080838382156100ad575b8051825260208311156100ad57601f19909201916020918201910161008d565b505050905090810190601f1680156100d95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6000543373ffffffffffffffffffffffffffffffffffffffff908116911614156101265760005473ffffffffffffffffffffffffffffffffffffffff16ff5b5b565b6101316101c1565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156101b65780601f1061018b576101008083540402835291602001916101b6565b820191906000526020600020905b81548152906001019060200180831161019957829003601f168201915b505050505090505b90565b604080516020810190915260008152905600a165627a7a7230582033ca9aeef924a814a80886e9f27b539e8c3b71780e6da527ebcd4df6076c45000029
Metadata:
{"compiler":{"version":"0.4.11+commit.68ef5810"},"language":"Solidity","output":{"abi":[{"constant":false,"inputs":[],"name":"die","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"say","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"inputs":[{"name":"_message","type":"string"}],"payable":false,"type":"constructor"}],"devdoc":{"methods":{}},"userdoc":{"methods":{}}},"settings":{"compilationTarget":{"greeter.sol":"greeter"},"libraries":{},"optimizer":{"enabled":true,"runs":200},"remappings":[]},"sources":{"greeter.sol":{"keccak256":"0x2914014e6c5ef4ffd0de42461548cfb78b006af718a3ddf18c9fb851ba457854","urls":["bzzr://622e562f0f51d94c6bd395063133657d178c6c5c7bfd43db6c10470f59eb34ac"]}},"version":1}
Contract JSON ABI
[{"constant":false,"inputs":[],"name":"die","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"say","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"inputs":[{"name":"_message","type":"string"}],"payable":false,"type":"constructor"}]

Обратите внимание, что хэш роя кодируется в urlsполе метаданных при использовании solc.

Теперь мы, наконец, хотим развернуть наш контракт, нажмите кнопку Deploy .

контракты-развернуть-0 Контракты приветствующих могут быть развернуты непосредственно из Parity.

контракты-развернуть-1 Выберите строку, которая приветствует вас.

контракты-развернуть-2 После развертывания и добычи...

контракты-развернуть-3 ... контракт становится доступным в вашем кошельке Parity Ethereum и обеспечивает базовое взаимодействие.

контракты-развернуть-4 Используйте интерфейс контракта, чтобы запросить sayфункцию и немедленно проверить результаты.

Чтобы развернуть контракт через JSON-RPC API, нам сначала нужно оценить требования к газу с помощью eth_estimateGasвызова RPC, передав скомпилированный байт-код.

curl --data '{"jsonrpc":"2.0","method": "eth_estimateGas", "params": [{"from": "0x00a329c0648769a73afac7f9381e08fb43dbea72", "data": "0x6060604052341561000c57fe5b6040516103aa3803806103aa833981016040528080518201919050505b33600060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060019080519060200190610080929190610088565b505b5061012d565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100c957805160ff19168380011785556100f7565b828001600101855582156100f7579182015b828111156100f65782518255916020019190600101906100db565b5b5090506101049190610108565b5090565b61012a91905b8082111561012657600081600090555060010161010e565b5090565b90565b61026e8061013c6000396000f30060606040526000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806335f4699414610046578063954ab4b214610058575bfe5b341561004e57fe5b6100566100f1565b005b341561006057fe5b610068610185565b60405180806020018281038252838181518152602001915080519060200190808383600083146100b7575b8051825260208311156100b757602082019150602081019050602083039250610093565b505050905090810190601f1680156100e35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018257600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b5b565b61018d61022e565b60018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156102235780601f106101f857610100808354040283529160200191610223565b820191906000526020600020905b81548152906001019060200180831161020657829003601f168201915b505050505090505b90565b6020604051908101604052806000815250905600a165627a7a72305820d7c4be18c8e86dd70b00aa0b072cde72893fcaafc766ff7bb86debf4d9357cac00290000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001048656c6c6f2c20457468657265756d2100000000000000000000000000000000"}], "id": 1}' -H "Content-Type: application/json" -X POST localhost:8545
{"jsonrpc":"2.0","result":"0x4414b","id":1}

Теперь, когда мы знаем, что развертывание контракта будет стоить 278859 газа (hex 0x4414b), мы можем транслировать транзакцию:

curl --data '{"method":"eth_sendTransaction","params":[{"from":"0x00a329c0648769a73afac7f9381e08fb43dbea72","gas":"0x4414b","data":"0x6060604052341561000c57fe5b6040516103aa3803806103aa833981016040528080518201919050505b33600060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060019080519060200190610080929190610088565b505b5061012d565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100c957805160ff19168380011785556100f7565b828001600101855582156100f7579182015b828111156100f65782518255916020019190600101906100db565b5b5090506101049190610108565b5090565b61012a91905b8082111561012657600081600090555060010161010e565b5090565b90565b61026e8061013c6000396000f30060606040526000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806335f4699414610046578063954ab4b214610058575bfe5b341561004e57fe5b6100566100f1565b005b341561006057fe5b610068610185565b60405180806020018281038252838181518152602001915080519060200190808383600083146100b7575b8051825260208311156100b757602082019150602081019050602083039250610093565b505050905090810190601f1680156100e35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018257600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b5b565b61018d61022e565b60018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156102235780601f106101f857610100808354040283529160200191610223565b820191906000526020600020905b81548152906001019060200180831161020657829003601f168201915b505050505090505b90565b6020604051908101604052806000815250905600a165627a7a72305820d7c4be18c8e86dd70b00aa0b072cde72893fcaafc766ff7bb86debf4d9357cac00290000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001048656c6c6f2c20457468657265756d2100000000000000000000000000000000"}],"id":1,"jsonrpc":"2.0"}' -H "Content-Type: application/json" -X POST localhost:8545
{"jsonrpc":"2.0","result":"0x9f79dbaeab3f0e24bbe2c885432dae3ff4350e357a497e7bf8820a64c219e011","id":1}

Обратите внимание: если учетная запись еще не разблокирована, вам необходимо переключиться на пользовательский интерфейс кошелька и подтвердить транзакцию с доверенным подписывающим лицом.

Теперь вы понимаете суть написания, компиляции и развертывания контрактов в цепочке Ethereum и знаете, как вызвать say()функцию нашего развернутого контракта Greeter.

Есть два разных способа взаимодействия со смарт-контрактами в блокчейне Ethereum. Вы можете либо вызвать (запросить), либо вызвать (выполнить) контракт. Вызов контракта является процессом только для чтения и обычно бесплатен. Вызов контракта требует широковещательной передачи транзакции для выполнения функций желаемого контракта и должен быть покрыт комиссией. Итак, давайте выполним наш контракт с Greeter. Есть только одна функция, которая может быть выполнена: die().

контракты-убийство-0 Обычно хорошей практикой является очистка после разработки. Теперь, когда мы знаем, что наш разработанный контракт Greeter работает, мы собираемся удалить его из блокчейна, вызвав функцию die , которая самоуничтожает контракт.

контракты-убийство-2 После майнинга функция самоуничтожения освободит место из текущего состояния блокчейна.

контракты-убийство-3 Поскольку взаимодействовать с убитым контрактом невозможно, удалим его, нажав кнопку « Забыть » .

Чтобы выполнить die()функцию через RPC, нам сначала нужно найти сигнатуру функции. Это можно сделать через solc --hash:

 $ solc --hash greeter.sol

======= greeter.sol:greeter =======
Function signatures:
35f46994: die()
954ab4b2: say()

Теперь все, что нам нужно сделать, это создать транзакцию для нашего контракта Greeter 0x1A3E28181B5043aC359B1146a8CCcce2a950212bс загрузкой данных 0x35f46994. Вызов самоуничтожения обычно не требует больших затрат, поэтому мы просто предполагаем небольшую сумму 0xc350.

curl --data '{"method":"eth_sendTransaction","params":[{"from":"0x00a329c0648769a73afac7f9381e08fb43dbea72",to:"0x1A3E28181B5043aC359B1146a8CCcce2a950212b","gas":"0xc350","data":"0x35f46994"}],"id":1,"jsonrpc":"2.0"}' -H "Content-Type: application/json" -X POST localhost:8545
{"jsonrpc":"2.0","result":"0x8423e6ed270f92621c14302f0d3db647eaf9677ef8f2ba0dd3374b79d2567c78","id":1}

Надеюсь, это прямо отвечает на ваш вопрос. Я предпочитаю контракт Greeter, потому что он может умереть . Но вы поймете идею и сможете адаптировать ее, чтобы ваш контракт HelloWorld работал.