接入钱包
签名交易

签名交易#

eth_sendTransaction

描述 交易是区块链上的一个正式动作,在欧易 Web3 钱包中必须通过调用 eth_sendTransaction 方法来发起交易。交易可以涉及到简单的以太坊的发送,并可能会发送代币,创建一个新的智能合约,或以任何方式改变区块链上的状态。这些交易一定是由一个来自外部账户的签名,或一个简单的密钥对进行发起的。

在欧易 Web3 钱包中,通过使用 okxwallet.request 方法来发送一个交易将会组成一个类似以下案例的对象:

参数 本部分主要介绍关于该文档所涉及的交易参数。该文档中大多数所涉及的交易参数都将由欧易 Web3 钱包处理,具体参数详情如下:

const transactionParameters = {
  nonce: '0x00', // ignored by OKX
  gasPrice: '0x09184e72a000', // customizable by user during OKX confirmation.
  gas: '0x2710', // customizable by user during OKX confirmation.
  to: '0x0000000000000000000000000000000000000000', // Required except during contract publications.
  from: okxwallet.selectedAddress, // must match user's active address.
  value: '0x00', // Only required to send ether to the recipient from the initiating external account.
  data:
    '0x7f7465737432000000000000000000000000000000000000000000000000000000600057', // Optional, but used for defining smart contract creation and interaction.
  chainId: '0x3', // Used to prevent transaction reuse across blockchains. Auto-filled by OKX.
};

Gas 价格 [可选] 可选参数 – 建议在私链上使用。

在以太坊中,每笔交易所消耗的 Gas 都会有一个指定的价格。区块生产者在创建下一个区块时,为了达到利润最大化,会优先处理 Gas 价格较高的交易。这意味着,一个较高的 Gas 价格通常会让你的交易被更快地处理,但代价则是更高的交易费用。请注意,此参数可能不适用于 L2 网络,因为 L2 网络可能有一个恒定的 Gas 价格,甚至不存在 Gas 价格。

换句话说,虽然你可以在欧易 Web3 钱包的默认网络上忽略这个参数,但是你的应用程序可能会比我们更了解目标网络的参数设定。在我们的默认网络中,欧易 Web3 钱包允许用户在打包交易的时候进行"慢"、"中"和"快"的选择,相对应越来越高的 Gas 溢价。

Gas 限制 [可选] 可选参数,并且为 DApp 开发者较少用到的参数。 Gas 限制是一个可选参数,我们会自动计算出一个合理的 Gas 价格。你应该能了解到所部署的智能合约是否曾因某些原因而受益于该自定义参数。

To [可选] 一个十六进制编码的 Ethereum 地址。与收件人进行交易时所需提供的参数(除合约创建外的所有交易)。 当没有 To 值,但有 data 值时,新合约就会被创建。

Value [可选] 要发送的网络本地货币的十六进制编码值。在主 Ethereum 网络中,即 Ether。此值以 wei 计价,即 1e-18ether。

请注意,这些在以太坊中经常使用的数字比本地 JavaScript 数字的精度要高得多。如果没有提前判定,可能会导致未知的情况。出于这个原因,我们强烈建议你在操作用于区块链的数值时使用 BN.js

Data [可选] 创建智能合约时需要此参数。

这个数值也用于指定合约方法和它们的参数。你可在 the solidity ABI spec上了解更多关于该数据的编码方式。

链 ID [目前已忽略] 链 ID 目前由用户当前选择的网络的 okxwallet.networkVersion 中得出。

返回值 DATA,32 字节 - 交易哈希,如果交易尚不可用,则为零哈希。

当你创建合约时,交易被挖掘后,使用 eth_getTransactionReceipt 获取合约地址。

例子

codeopen中打开。

HTML
JavaScript
<button class="connectEthereumButton btn">Connect Ethereum</button>
<button class="signTransactionButton btn">Send Transaction</button>
const connectEthereumButton = document.querySelector('.connectEthereumButton');
const signTransactionButton = document.querySelector('.signTransactionButton');

let accounts = [];

signTransactionButton.addEventListener('click', () => {
  okxwallet
    .request({
      method: 'eth_sendTransaction',
      params: [
        {
          from: accounts[0],
          to: '0x2f318C334780961FB129D2a6c30D0763d9a5C970',
          value: '0x29a2241af62c0000',
          gasPrice: '0x09184e72a000',
          gas: '0x2710',
        },
      ],
    })
    .then((txHash) => console.log(txHash))
    .catch((error) => console.error);
});

connectEthereumButton.addEventListener('click', () => {
  getAccount();
});

async function getAccount() {
  try{
    accounts = await okxwallet.request({ method: 'eth_requestAccounts' });
  }catch(error){
    console.log(error);
  }
}