如何通过 Solana JSONRPC 发送和接收令牌
how to send and receive tokens via Solana JSONRPC
有以下 ETH JSONRPC 实现来传输令牌,可以通过 PHP 中的 curl 使用,我想做完全相同的事情,但是在支持它自己的 Solana 区块链上 JSONRPC implementation
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";
source on stack overflow for the above code is here
因为 Solana 文档只提到 sendTrasactions 这是我的两个问题:
- 如何使用 Solana 实现上述示例(参见下面我们的 Solana JSONRPC 的 curl 实现,以在 php 中获取用户的当前令牌数量,即“getTokenAmount”)
- 我从哪里获得作为“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 来完全满足您的需求。
有以下 ETH JSONRPC 实现来传输令牌,可以通过 PHP 中的 curl 使用,我想做完全相同的事情,但是在支持它自己的 Solana 区块链上 JSONRPC implementation
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";
source on stack overflow for the above code is here
因为 Solana 文档只提到 sendTrasactions 这是我的两个问题:
- 如何使用 Solana 实现上述示例(参见下面我们的 Solana JSONRPC 的 curl 实现,以在 php 中获取用户的当前令牌数量,即“getTokenAmount”)
- 我从哪里获得作为“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 来完全满足您的需求。