Skip to content

Instantly share code, notes, and snippets.

@matthieu
Created July 12, 2016 18:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save matthieu/e73fd71f629625584694b15e2a8c45c2 to your computer and use it in GitHub Desktop.
Save matthieu/e73fd71f629625584694b15e2a8c45c2 to your computer and use it in GitHub Desktop.
Contract creation with BlockCypher
# The contract API includes the following endpoints (API token always required):
#
# POST /v1/eth/main/contracts
# Creates a new contract. Expects the solidity definition, the private key paying for the publication, the name of the
# contract to be published, the gas amount to use and eventual constructor parameters. The solidity code is compiled
# and the contract creation transaction built and broadcasted. Both the code and the ABI are saved for further
# retrieval. If invoked without contracts to publish, simply compiles and returns the result of compilation.
# Otherwise, along with the compilation results, will return the contract address and creation transaction hash and the
# contract methods will be exposed as endpoints (see below).
#
# GET /v1/eth/main/contracts/{address}
# Returns information about a deployed contract. If the contract was deployed using our API, will return the code and
# ABI as well. Note that the /addrs endpoint also provides regular transactions information.
#
# GET /v1/eth/main/contracts/{address}/{method}
# Invokes the provided contract methods. Accepts method parameters. If the method is declared "constant", it will be
# run right away and the result will be returned. Otherwise, a call transaction is created and broadcasted for
# inclusion in a block.
# Example: using the simple greeter contract often presented as the Ethereum "hello world"
$ cat contract.json
{
"solidity": "contract mortal {\n /* Define variable owner of the type address*/\n address owner;\n /* this function is executed at initialization and sets the owner of the contract */\n function mortal() { owner = msg.sender; }\n /* Function to recover the funds on the contract */\n function kill() { if (msg.sender == owner) suicide(owner); }\n}\n\ncontract greeter is mortal {\n /* define variable greeting of the type string */\n string greeting;\n /* this runs when the contract is executed */\n function greeter(string _greeting) public {\n greeting = _greeting;\n }\n /* main function */\n function greet() constant returns (string) {\n return greeting;\n }\n}",
"params": ["Hello BlockCypher"],
"publish": ["greeter"],
"private": "3ca4...",
"gas_amount": 500000
}
$ curl -d @contract.json https://api.blockcypher.com/v1/eth/main/contracts?token=$TOKEN
[
{
"name": "greeter",
"solidity": "...",
"bin": "...",
"abi": "...",
"creation_tx_hash": "2ee3141cd8f0f65c91150b345ecf77465327741f7028a26e78ba3e8f40cec26b",
"address": "ab9a9ba6b9b0d58d57378c711d7cea540d97d2c9",
"params": ["Hello BlockCypher"]
},
{
"name": "mortal",
...
}
}
$ cat call.json
{
"private": "3ca4...",
"gas_amount": 200000
}
# Calling the greet method is done without involving the network as it's a "constant" method in the ABI
$ curl -d @call.json https://api.blockcypher.com/v1/eth/main/contracts/ab9a9ba6b9b0d58d57378c711d7cea540d97d2c9/greet?token=$TOKEN
{
"gas_amount": 200000,
"address": "ab9a9ba6b9b0d58d57378c711d7cea540d97d2c9",
"results": ["Hello BlockCypher"]
}
# Kill produces a transaction and will cause the contract suicide, creating an internal transaction
# to reimburse the private key that created the contract
$ curl -d @call.json https://api.blockcypher.com/v1/eth/main/contracts/ab9a9ba6b9b0d58d57378c711d7cea540d97d2c9/kill?token=$TOKEN
{
"gas_amount": 200000,
"call_tx_hash": "0ef3e0d0de733461b351e27f9fba054ae0386d24959580dcb2a6e8df17e4e241",
"address": "ab9a9ba6b9b0d58d57378c711d7cea540d97d2c9"
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment