准备工作:了解基本概念

在我们开始之前,首先得了解一些基本概念,比如以太坊是什么,钱包是什么,以及如何存储和管理以太币(ETH)。以太坊是一个去中心化的平台,可以创建智能合约和去中心化应用(DApps)。钱包则是用来管理你数字资产的工具,它可以是软件、硬件或纸质的。

安装所需库

咱们需要一个用来和以太坊互动的 PHP 库,最常用的就是 `web3.php`。要安装这个库,首先确保你已经安装了 Composer。然后在命令行中运行:

composer require sc0vu3r/web3.php

这会自动将库下载到你的项目中。简单吧?

配置以太坊节点

接下来,你需要一个以太坊节点。可以选择使用 Infura 这样的服务,它提供免费的以太坊节点。注册一个账户后,你会得到一个 API URL,比如这样:

https://mainnet.infura.io/v3/YOUR_INFURA_PROJECT_ID

记得把 `YOUR_INFURA_PROJECT_ID` 替换为你的实际项目ID。这个地址就像是通往以太坊世界的入口。

连接到以太坊

有了节点,你可以开始在 PHP 中连接到以太坊了。下面是一个简单的代码示例,展示了如何用 `web3.php` 进行连接:


require 'vendor/autoload.php';

use Web3\Web3;

$web3 = new Web3('https://mainnet.infura.io/v3/YOUR_INFURA_PROJECT_ID');
$web3->eth->blockNumber(function($err, $blockNumber) {
    if ($err !== null) {
        echo 'Error: ' . $err->getMessage();
        return;
    }
    echo '当前区块号:' . $blockNumber . PHP_EOL;
});

这段代码连接到以太坊,获取当前区块号。如果你看到一个数字,那么恭喜你,已经成功连接了!

创建以太坊钱包

现在你可以创建一个钱包。钱包可以是热钱包(在线)也可以是冷钱包(离线)。下面的代码展示了如何使用 `web3.php` 创建一个新的钱包地址:


use Web3\Crypto\Keccak;

function createWallet() {
    $privateKey = '0x' . bin2hex(random_bytes(32));
    $publicKey = Keccak::hash(hex2bin($privateKey), 256);
    $address = '0x' . substr($publicKey, -40);
    
    return ['address' => $address, 'privateKey' => $privateKey];
}

$wallet = createWallet();
echo '钱包地址:' . $wallet['address'] . PHP_EOL;
echo '私钥:' . $wallet['privateKey'] . PHP_EOL;

请务必妥善保管你的私钥,不要泄露给任何人!

获取以太坊余额

接下来,我们要获取钱包中的以太坊余额,这对你管理资产至关重要。以下是获取余额的代码:


$address = '你的以太坊地址';

$web3->eth->getBalance($address, function($err, $balance) {
    if ($err !== null) {
        echo 'Error: ' . $err->getMessage();
        return;
    }
    
    echo '钱包余额:' . $balance->toString() . ' wei' . PHP_EOL;
});

这里的余额是以 wei 为单位,1 ETH = 10^18 wei。在显示时,你可能需要将其转换为 ETH。

发送以太坊交易

当然,钱包的主要功能就是管理交易,发送 ETH 是一个重要的功能。发送交易的代码示例如下:


$from = '你的钱包地址';
$privateKey = '你的私钥';
$to = '接收方地址';
$value = '1000000000000000000'; // 1 ETH 对应 wei

$nonce = null;
$web3->eth->getTransactionCount($from, 'latest', function($err, $result) use (