📜  Solidity-首次应用(1)

📅  最后修改于: 2023-12-03 14:47:31.025000             🧑  作者: Mango

Solidity-首次应用

Solidity 是一种合约语言,运行在以太坊(Ethereum)区块链上。它允许开发人员编写智能合约,这些智能合约可以代表数字资产(如货币、股票和财产)并且可以自动执行。在本文中,我们将介绍 Solidity 的基础知识和如何创建和部署您自己的智能合约。

Solidity 入门

首先,您需要了解 Solidity 是如何构建的。Solidity 是一种基于类的语言,与其他面向对象编程语言类似,例如 Java 和 C++。每个 Solidity 合约都由数据类型和函数组成。

以下是 Solidity 中的基本数据类型:

  • uint:无符号整数
  • int:有符号整数
  • address:以太坊地址
  • bool:布尔值
  • string:字符串

以下是 Solidity 中函数的基本结构:

function myFunction() visibility returns (uint) {
    // function body
}
  • function:声明这是一个函数
  • myFunction:函数名称
  • visibility:函数的可见性(公开、内部、私有)
  • returns:函数返回值的类型
  • // function body:函数体,即函数执行的代码
创建 Solidity 合约

现在,您已经了解了 Solidity 的基础知识,让我们开始创建自己的智能合约。

要创建 Solidity 合约,您需要安装一个 Solidity 编译器,例如 solc,或使用 Remix,这是一个在线 Solidity IDE。在本文中,我们将使用 Remix。

首先,打开 Remix。右侧是文件资源管理器,您可以在其中创建新文件。创建一个名为 MyContract.sol 的新文件,然后粘贴以下代码:

pragma solidity 0.8.6;

contract MyContract {
    
    uint public myVariable; // 可公开访问的无符号整数变量
    
    function setMyVariable(uint _myVariable) public {
        myVariable = _myVariable;
    }
    
}
  • pragma solidity 0.8.6;:Solidity 版本声明
  • contract MyContract:创建一个名为 MyContract 的新合约
  • uint public myVariable;:声明一个公开无符号整数变量
  • function setMyVariable(uint _myVariable) public:声明一个公开函数,它将设置 myVariable 的值为传入的 _myVariable

右侧面板显示您的合约信息。在 Compile 标签页下,单击“Compile MyContract.sol”。如果没有错误,您可以在部署标签页下的“创建”按钮下看到合约的部署信息。

部署 Solidity 合约

现在,您已经创建了自己的合约,让我们将其部署到以太坊网络上。

在 Remix 的“部署”标签页下,选择以太坊网络或本地网络(如果您正在使用 Ganache 等本地节点)。然后,单击“部署”按钮。

如果一切都设置正确,您应该会看到合约已成功部署的消息。现在,您可以与智能合约进行交互。

与 Solidity 合约交互

为了与 Solidity 合约进行交互,您需要创建一个 Web3 应用程序,并使用您的合约地址和 ABI(应用程序二进制接口)与以太坊网络交互。

以下是一个基本的 Web3 应用程序示例:

const contractAddress = "0x123456...";
const contractAbi = [...];

const web3 = new Web3("https://mainnet.infura.io/v3/yourprojectid");
const contract = new web3.eth.Contract(contractAbi, contractAddress);

const setMyVariable = async (myVariable) => {
    await contract.methods.setMyVariable(myVariable).send({ from: "0x123...", gas: 100000 });
}

const getMyVariable = async () => {
    return await contract.methods.myVariable().call();
}
  • contractAddress:您的 Solidity 合约地址
  • contractAbi:您的 Solidity 合约 ABI
  • web3:实例化一个新 Web3 对象,并指定您正在使用的以太坊网络
  • contract:实例化一个新的 Solidity 合约实例,并传入您的 ABI 和地址
  • setMyVariable:将传入的 myVariable 值发送到 Solidity 合约
  • getMyVariable:获取 Solidity 合约中的 myVariable
结论

恭喜您已经创建了自己的 Solidity 合约并部署到以太坊网络上,还学习了如何与 Solidity 合约交互。这只是 Solidity 语言的冰山一角,它有很多强大的功能,例如事件、继承、库等。我们希望您可以继续深入学习 Solidity,开发出更多有趣的智能合约!