arweave/arweave-sdk

Arweave PHP SDK

v0.4.0 2020-01-15 13:19 UTC

This package is auto-updated.

Last update: 2024-09-29 05:09:18 UTC


README

此包允许我们与 Arweave 网络交互,我们可以用它来读取和写入网络中的事务和数据。

安装

我们强烈建议使用 composer 进行安装。

composer require arweave/arweave-sdk

或者将以下内容添加到您的项目 composer.json 文件中。

"require": {
   "arweave/arweave-sdk": "0.2.0"
}

快速示例

向网络发送数据

include __DIR__ . '/vendor/autoload.php';

$arweave = new \Arweave\SDK\Arweave('http', '209.97.142.169', 1984);

$jwk = json_decode(file_get_contents('jwk.json'), true);

$wallet =  new \Arweave\SDK\Support\Wallet($jwk);

$transaction = $arweave->createTransaction($wallet, [
    'data' => '<html><head><title>Some page</title></head></html>',
    'tags' => [
        'Content-Type' => 'text/html'
    ]
]);

printf('Your transaction ID is %s', $transaction->getAttribute('id'));


// commit() sends the transaction to the network, once sent this can't be undone.
$arweave->api()->commit($transaction);

从网络获取数据

$arweave = new \Arweave\SDK\Arweave('http', '209.97.142.169', 1984);

$arweave->api()->getTransactionData('mvscO3JBlwweOnfkkHpc3fINQ6cUtn_g5aFY9af5TfQ')

用法

实例化

首先创建一个 Arweave 对象,这是您的应用程序应使用的核心 SDK 类,它包含创建、发送和获取事务的公共方法。

$arweave = new \Arweave\SDK\Arweave('http', '209.97.142.169', 1984);

提供任何有效的 Arweave 节点主机名或 IP 地址

获取事务

一旦我们有了 Arweave 对象,我们就可以使用有效的交易 ID 从网络中获取事务。

例如

$arweave->api()->getTransaction('mvscO3JBlwweOnfkkHpc3fINQ6cUtn_g5aFY9af5TfQ');

上述代码将返回以下 Transaction 对象

object(Arweave\SDK\Support\Transaction)#23 (1) {
  ["attributes":protected]=>
  array(10) {
    ["id"]=> string(43) "mvscO3JBlwweOnf..."
    ["last_tx"]=> string(43) "3MFrfH0-HI9GeMf..."
    ["owner"]=> string(683) "1Q7Rfgt23rfUDp..."
    ["target"]=> string(0) ""
    ["quantity"]=> string(1) "0"
    ["data"]=> string(60) "eyJib2R5IjoiVGVz..."
    ["reward"]=> string(10) "1825892857"
    ["signature"]=> string(683) "BUmdaf4rzlyT_3..."
    ["tags"]=> array(0) {}
  }
}

从事务中获取数据

有两种方法可以从事务中获取数据,我们既可以

$data = $arweave->api()->getTransactionData($transaction_id);
//string(45) "{"body":"Test body","subject":"Test subject"}"

此方法返回事务的原始和已解码数据。这是最简单的方法,可能是您最常需要的方法。

或者,如果我们需要编码数据或其他事务属性,我们可以这样做

$transaction = $arweave->api()->getTransaction($transaction_id);

$encoded_data = $transaction->getAttribute('data');
//string(60) "eyJib2R5IjoiVGVzdCBib2R5Iiwic3ViamVjdCI6IlRlc3Qgc3ViamVjdCJ9"

$original_data = base64_decode(\Arweave\SDK\Support\Helpers::base64urlDecode($encoded_data));
//string(45) "{"body":"Test body","subject":"Test subject"}"

ArQL

$transactionIds = $arweave->api()->arql([
    'op' => 'equals',
    'expr1' => 'App-Name',
    'expr2' => 'arweaveapps'
]);

// array(31) {
//   [0]=>
//   string(43) "NXg2OaRRygb7RJZFbkcEYlS2LNNfsqxxobzUqz7ELnc"
//   [1]=>
//   string(43) "i3_aC8xIO_4TpMqp5sR4WVUwbA1p2sPCu11cLVKN89U
// ...

加载钱包

要加载钱包,您需要一个密钥文件。Arweave 使用 JSON Web Keys (JWK) 作为密钥文件格式,JWK 简单地是一个公钥/私钥对的 JSON 表示,它们看起来像这样

{
  "kty": "RSA",
  "ext": true,
  "e": "AQAB",
  "n": "1Q7Rfgt23rfU...",
  "d": "Yk_Z0tGLpar_...",
  "p": "_lrlR3LXDjR4...",
  "q": "1m-NU2BaG2vU...",
  "dp": "qfU3LFSrN52...",
  "dq": "gk_Sb5cFAQQ...",
  "qi": "k65nfXdh4qx..."
}

我们首先需要将我们的 JWK 文件解码为 PHP 数组,然后我们可以简单地将该数组传递给一个新的 Wallet 对象。

您应该像对待 API 密钥或密码一样对待您的 JWK。您绝对不应该公开它们或将它们放置在任何公开可访问的位置,并且绝对不应该将它们提交到任何版本控制系统,这样做将损害您的钱包及其内容。

$jwk = json_decode(file_get_contents('jwk.json'), true);

$wallet =  new \Arweave\SDK\Support\Wallet($jwk);`

这只是存储您的 JWK 的一个建议方法,但没有任何要求您将其存储为 JSON 文件,您也可以将其存储在环境变量中、数据库中、PHP 文件中或任何其他地方。只要最终成为 PHP 数组,它应该就能正常工作。

创建事务

事务需要签名才能被网络接受,因此**此步骤需要钱包**。