如何通过Solana JSONRPC发送和接收令牌



有以下ETH JSONRPC实现来传输令牌,可以通过PHP中的curl使用,我想在Solana区块链上做同样的事情,它支持自己的JSONRPC实施

var whatever= {};
whatever.jsonrpc="2.0";
whatever.id=1;
whatever.method="eth_sendTransaction";
whatever.params= [];
whatever.params[0].from="0x52f273a06a420453aa5b33c4f175395c9a1fddd8";
whatever.params[0].to=data.ethAddress;
whatever.params[0].value=1e18;
whatever.params[0].currency="xxx";

上面代码的堆栈溢出源在这里

由于索拉纳文档只提到了sendTrasactions,这里是我的两个问题:

  1. 如何使用Solana实现上述示例(请参阅下面我们的Solana JSONRPC的curl实现,以在php中获得用户的当前令牌数量,即"getTokenAmount"(
  2. 我在哪里获得作为编码字符串的完全签名的事务;sendTransaction"*

*我假设一旦进行转账,就发出了完全签署的交易,不是吗?

-----我们上面提到的实现示例(对于那些可能感兴趣的人----

public function getTokenAmount($wallet_address, $token_address)
{
    $data = array(
        "jsonrpc" => "2.0",
        "id" => 1,
        "method" => "getTokenAccountsByOwner",
        "params" => array(
            0 => $wallet_address,
            1 => array(
                "mint" => $token_address
            ),
            2 => array(
                "encoding" => "jsonParsed"
            )
        )
    );

    $data = json_encode($customer);
    $response = $this->initCurl($data);
    return $response->result->value[0]->account->data->parsed->info->tokenAmount->uiAmount;
}
private function initCurl($data)
{
    $ch = @curl_init();
    @curl_setopt($ch, CURLOPT_POST, true);
    @curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    @curl_setopt($ch, CURLOPT_URL, $this->_endpoint);
    @curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    @curl_setopt($ch, CURLOPT_HTTPHEADER, array( "accept: application/json", "content-type: application/json"));
    $response = json_decode(@curl_exec($ch));
    $err = @curl_error($ch);
    curl_close($ch);
    // TODO: ERROR HANDLING
    if ($err) {
        return false; //"cURL Error #:" . $err;
    }
    return $response;
}

1和2的答案非常相似。

为了发送交易,您必须创建一个base64或base58编码的字符串,其中包含所有交易数据,包括帐户、数据和任何其他所需的标志。之后,您必须使用ed25519密钥对事务进行签名,并将整个字符串作为事务提供。

你可以按照JS的方式自己构建:

  • 系统指令,特别是transfer:https://github.com/solana-labs/solana/blob/005592998dd107b3d54d9203babe24da681834f5/web3.js/src/system-program.ts#L676
  • 事务,特别是添加指令、编译消息和签名:https://github.com/solana-labs/solana/blob/005592998dd107b3d54d9203babe24da681834f5/web3.js/src/transaction.ts#L205

然而,您最好的选择是重用已经为您做了大量工作的现有库。例如https://github.com/tighten/solana-php-sdk#transactions提供了一个简单的API来做您正在寻找的事情。

最新更新