什么是合约?
合约是代码和数据的集合,存在于区块链的特定地址。 合约账户能够在彼此之间传递信息,进行图灵完备的运算。合约字节代码上的区块链运行。
以太坊高级语言
合约是很典型地用诸如Solidity等高级语言写成的,编译成字节代码上传到区块链。
在geth设置solidity编译器
如果你启动了geth节点,就可以查看哪个编译器可用。示例如下:
web3.eth.getCompilers();
[“lll”, “solidity”, “serpent”]
这一指令会返回到显示当前哪个编译器可用的字符串。
注意:solc编译器和cpp- ethereum一起安装。如果你的solc可执行文件不在标准位置,可以用—solc标志为solc可执行文件指定一个定制路线。示例如下:
$ geth --solc /usr/local/bin/solc
或者你可以通过控制台在执行期间设置这个选项:
admin.setSolc("/usr/local/bin/solc")
solc, the solidity compiler commandline interface
Version: 0.2.2-02bb315d/.-Darwin/appleclang/JIT linked to libethereum-1.2.0-8007cef0/.-Darwin/appleclang/JIT
path: /usr/local/bin/solc
编译一个简单合约
让我们来编译一个简单的合约源,示例如下:
source = “contract test { function multiply(uint a) returns(uint d) { return a * 7; } }”
这个合约提供了一个单一方法multiply,它和一个正整数a调用并返回到a*7。
下面准备在geth JS控制台用eth.compile.solidity()编译solidity代码:
contract = eth.compile.solidity(source).test
{
code: ‘605280600c6000396000f3006000357c010000000000000000000000000000000000000000000000000000000090048063c6888fa114602e57005b60376004356041565b8060005260206000f35b6000600782029050604d565b91905056’,
info: {
language: ‘Solidity’,
languageVersion: ‘0’,
compilerVersion: ‘0.9.13’,
abiDefinition: [{
constant: false,
inputs: [{
name: ‘a’,type: ‘uint256’
} ],
name: ‘multiply’,
outputs: [{
name: ‘d’,type: ‘uint256’
} ],type: ‘function’
} ],
userDoc: {
methods: {
}
},
developerDoc: {
methods: {
}
},source: 'contract test { function multiply(uint a) returns(uint d) { return a
7; } }’
注意:编译器通过RPC因此也能通过web3.js,对浏览器内任何通过RPC/IPC连接到geth的Ðapp可用。