智能合约运行着一套开发者写好的规则,那这些规则有什么应用呢?最基本的就是用来发行代币,只要是应用代币或是NFT就都是由合约产生的,但原生代币没有智能合约。这就是$WETH和$ETH的不同,$WETH和其他代币一样属于基于智能合约的代币,而$ETH则是以太坊的原生代币。不论是哪种代币都能在合约里面定义这代币符合的规则,(例如以太坊的ERC-20、ERC-721、ERC-1155)它的供给量、代币的代号(symbol)等等。
链上所有的应用程序(dApp)也都是由智能合约驱动的,不论是借贷协议、去中心化交易所(DEX)、预言机或NFT市场。这些协议都是由一个或多个智能合约组成的,而合约里面都会写好各式功能,让协议能正常被用户使用。例如我们刚刚举例的“Swap Exact Tokens for Tokens”功能,就能在下图合约上看到当用户地址呼叫这个功能时,合约会做什么相对应的操作。
IPPswap孵化器还采用了算力补偿系数机制,即做市商投资额的1.01的N次方作为LP算力,从而鼓励早期进场的用户获得先发优势,同时也使得后来者可以通过算力补偿系数获得更多的收益。这种机制具有良好的激励效果,可以刺激用户积极参与到IPPswap孵化器中来,从而提升其生态系统的竞争力和活跃度。
LP算力补偿系数为1.01的N次方,N为上线的天数,早入场有先机,晚入场有算力补偿。
智能合约与链的互动
写智能合约的语言有很多中,每一条链支援的语言也不太一样,常见的语言有Solidity,Vyper和Rust。在链上执行合约的环境称为虚拟机器(VM),不同的链也有各自不同的环境(例如以太坊的就称为EVM),而这些环境能适用的程序语言也不同。像是以太坊的EVM就只能执行由Solidity写的智能合约,这也让Solidity成为现在最普遍的智能合约语言。
智能合约在此EVM上运行。当EVM连接到网络上的其他EVM时,该EVM在作为执行环境独立的环境中执行,因此可以安全地执行某些代码,而不会严重影响其他EVM或区块链。
在此EVM上,是否以特殊的数字顺序编写了字节码(机器语言)程序?这样的字节码程序对人类是不可读的或无用的。因此,以太坊开发了几种高级语言,专门用于编写易读性和生产性合同,以及多种编译器,将其转换为EVM字节码。典型的语言是“Solidity”。用于编写此智能合约的编程语言Solidity是图灵完整的,可以编写任何程序。
根据这些特征,Solidity被表示为“面向合同的语言”,这是一种专门描述合同的高级语言。还有一些用于Solidity开发的集成开发环境,包括Mix,Remix(浏览器-solidity)和Visual Studio Code。
实体代码示例
为了使用Solidity,必须安装作为编译器的“solc”。用solc编译的字节码是使用EVM执行的。
以下是以Solidity编写的简单智能合约“Hello World”的示例。
contract HelloWorld{
function get()constant returns(string retVal){
return"Hello World!!";
}
}
在HelloWorld示例中,定义了get()函数,其中定义了返回字符串Hello World的过程。上面代码中的协定是在调用get()函数时返回一个固定的字符串“Hello World!!”。这样,在Solidity中的Contract子句中声明的Contract是基本组件,并且通过描述此Contract子句中的处理来实现智能合约。
通常,Solidity使用以下语法定义合同:
contract Contract名{
//在这里描述使用智能对比度的处理
}
Contract相当于Java或Python之类的面向对象语言中的类,持有与类变量等效的内部状态的存储部分,与方法等效的函数,在该部分有效的局部变量等