链眼社区:专注于区块链安全,区块链数据分析, 区块链信息整合,区块链技术服务和区块链技术咨询。

Parity RPC API手册:账户管理基础API
龙行天下
2021-11-24 20:46:01

personal_ecRecover - 从签名恢复地址

personal_ecRecover调用可以从签名数据中恢复出签名私钥对应的以太坊地址。

调用参数

  • 其哈希被签名的原始数据
  • 签名数据

返回值

personal_ecRecover调用返回从签名中恢复出来的地址。

示例代码

下面代码使用personal_ecRecover调用从指定的数据和签名中恢复得到地址:

~$ curl --data '{
  "method":"personal_ecRecover",
  "params":[
    "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675",
    "0xe7225f986f192f859a9bf84e34b2b7001dfa11aeb5c7164f81a2bee0d79943e2587be1faa11502eba0f803bb0ee071a082b6fe40fba025f3309263a1eef52c711c"
  ],
  "id":1,
  "jsonrpc":"2.0"
}' -H "Content-Type: application/json" -X POST localhost:8545

响应结果如下:

{
  "id": 1,
  "jsonrpc": "2.0",
  "result": "0xb60e8dd61c5d32be8058bb8eb970870f07233155"
}

personal_listAccounts - 列举所有账户

personal_listAccounts调用列举本地存储的所有以太坊账户。

调用参数

返回值

personal_listAccounts调用返回一个数组,成员为20字节的以太坊地址字符串。

示例代码

curl请求:

~$ curl --data '{
  "method":"personal_listAccounts",
  "params":[],
  "id":1,
  "jsonrpc":"2.0"
}' -H "Content-Type: application/json" -X POST localhost:8545

响应结果:

{
  "id": 1,
  "jsonrpc": "2.0",
  "result": [
    "0x7bf87721a96849d168de02fd6ea5986a3a147383",
    "0xca807a90fd64deed760fb98bf0869b475c469348"
  ]
}

personal_newAccount - 创建新账户

使用personal_newAccount调用创建一个新的以太坊账户。

注意:该账户将成为新的当前解锁账户。同一时刻只能有一个解锁账户。

调用参数

  • 新账户的密码
  • String - Password for the new account.

返回值

personal_newAccount调用返回新创建以太坊账户的地址,20字节字符串。

示例代码

下面的代码使用personal_newAccount调用创建一个新的以太坊账户,其 密码为hunter2:

~$ curl --data '{
  "method":"personal_newAccount",
  "params":["hunter2"],
  "id":1,
  "jsonrpc":"2.0"
}' -H "Content-Type: application/json" -X POST localhost:8545

响应结果如下:

{
  "id": 1,
  "jsonrpc": "2.0",
  "result": "0x8f0227d45853a50eefd48dd4fec25d5b3fd2295e"
}

personal_sendTransaction - 发送普通交易

使用personal_sendTransaction调用可以在一次调用中完成交易的签名和发送。 执行此交易的账户无需解锁,执行后也不会处于解锁状态。

调用参数

要签名和发送的交易对象,结果如下: - from:发送账户地址 - to:目标账户地址,可选 - gas:交易gas用量,可选 - gasPrice:承诺的gas价格,可选 - value:交易金额,可选 - data:交易附加数据或合约调用的ABI编码数据,可选 - nonce:交易nonce值,可选 - condition:提交交易的条件对象,可选,可以是整数区块号例如{block:1}或者 UTC时间戳(单位:秒)例如{time:1491290692}或者null。 - from参数指定的发送账户的密码,字符串

返回值

personal_sendTransaction调用返回32字节长的交易哈希字符串,或者当交易无效时 返回零哈希。

示例代码

请求:

~$ curl --data '{
  "method":"personal_sendTransaction",
  "params":[
    {
      "from":"0x407d73d8a49eeb85d32cf465507dd71d507100c1",
      "to":"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b",
      "data":"0x41cd5add4fd13aedd64521e363ea279923575ff39718065d38bd46f0e6632e8e",
      "value":"0x186a0"
    },
    "hunter2"
  ],
  "id":1,
  "jsonrpc":"2.0"
}' -H "Content-Type: application/json" -X POST localhost:8545

响应结果:

{
  "id": 1,
  "jsonrpc": "2.0",
  "result": "0x62e05075829655752e146a129a044ad72e95ce33e48ff48118b697e15e7b41e4"
}

personal_sign - 计算以太坊签名

按照以下算法计算以太坊专用签名:

s```java ign(keccak256("Ethereum Signed Message: " + len(message) + message))).

### 调用参数
- 要签名的数据
- 签名账户地址,20字节长的16进制字符串
- 签名账户解锁密码,字符串
### 返回值
personal_sign调用返回一个16进制字符串,表示签名数据。

### 示例代码
请求:

```java
~$ curl --data '{
  "method":"personal_sign",
  "params":[
    "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675",
    "0xb60e8dd61c5d32be8058bb8eb970870f07233155",
    "hunter"
  ],
  "id":1,
  "jsonrpc":"2.0"
}' -H "Content-Type: application/json" -X POST localhost:8545

响应结果:

{
  "id": 1,
  "jsonrpc": "2.0",
  "result": "0xe7225f986f192f859a9bf84e34b2b7001dfa11aeb5c7164f81a2bee0d79943e2587be1faa11502eba0f803bb0ee071a082b6fe40fba025f3309263a1eef52c711c"
}

personal_sign191 - 计算EIP191兼容签名

计算EIP-191兼容的签名,根据指定版本的不同支持对不同的数据格式进行签名计算。

调用参数

  • EIP-191版本标识,字符串,含义如下:
  • 0x00 - 预签名交易
  • 0x01 - 结构化数据(EIP712)
  • 0x45 - 个人消息
  • 要签名的数据,根据EIP-191版本标识不同有不同的格式,例如与签名交易、EIP712结构化数据或普通消息
  • EIP712结构化数据,对应版本标识0x01,结构如下:
  • primaryType:基础类型,字符串
  • domain:EIP721域对象,结构如下:
  • name:签名域名,字符串
  • verifyingContract:签名消息验证合约的地址
  • chainId:签名有效的链ID,用于对抗链重放攻击,整数
  • version:签名域的当前住版本。不同版本的签名不兼容,整数
  • salt:混淆数据
  • message:要签名的结构化消息
  • types:EIP712Domain类型定义对象
  • 要签名的哈希消息,对应版本标识0x45
  • 预签名交易对象,对应版本标识00x00
  • data: Data - Presigned Transaction data
  • validator: Address - address of the contract that validates the presigned transaction
  • 签名账户地址,20字节长,16进制字符串
  • 签名账户解锁密码

返回值

personal_sign191调用返回签名后的数据。

示例代码

下面的代码使用personal_sign191调用签名一个预签名交易:

~$ curl --data '{
  "method":"personal_sign191",
  "params":[
    "0x00",
    {
      "validator":"0xb60e8dd61c5d32be8058bb8eb970870f07233155",
      "data":"0xe7225f986f192f859a9bf84e34b2b7001dfa11aeb5c7164f81a2bee0d79943e2587be1faa11502eba0f803bb0ee071a082b6fe40fba025f3309263a1eef52c711c"
    },
    "0xb60e8dd61c5d32be8058bb8eb970870f07233155",
    "password"
  ],
  "id":1,
  "jsonrpc":"2.0"
}' -H "Content-Type: application/json" -X POST localhost:8545

响应结果:

{
  "id": 1,
  "jsonrpc": "2.0",
  "result": "0xe7225f986f192f859a9bf84e34b2b7001dfa11aeb5c7164f81a2bee0d79943e2587be1faa11502eba0f803bb0ee071a082b6fe40fba025f3309263a1eef52c711c"
}

personal_signTransaction - 交易签名

使用personal_singTransaction调用签名指定交易,不广播到网络中。 签名后的交易可以在稍后使用eth_sendRawTransaction调用提交到网络中。 签名账户不需要解锁,在调用完成后也不会处于解锁状态。

调用参数

  • 交易对象,结构如下:
  • from:发送账户地址,20字节,16进制字符串
  • to:交易目标账户地址,可选
  • gas:交易gas用量,可选
  • gasPrice:交易gas价格,可选
  • value:交易金额,可选
  • data:交易附加数据,可选
  • nonce:交易nonce,可选
  • condition:交易执行条件,可选
  • 签名账户解锁密码,字符串
  • 返回值
  • personal_signTransaction调用返回已签名交易对象,结构如下:

  • raw:已签名的RLP编码的交易

  • tx:原始交易对象,结构如下
  • from:发送账户地址,20字节,16进制字符串
  • to:交易目标账户地址,可选
  • gas:交易gas用量,可选
  • gasPrice:交易gas价格,可选
  • value:交易金额,可选
  • data:交易附加数据,可选
  • nonce:交易nonce,可选
  • condition:交易执行条件,可选

示例代码

请求:

~$ curl --data '{
  "method":"personal_signTransaction",
  "params":[
    {
      "from":"0x407d73d8a49eeb85d32cf465507dd71d507100c1",
      "to":"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b",
      "data":"0x41cd5add4fd13aedd64521e363ea279923575ff39718065d38bd46f0e6632e8e",
      "value":"0x186a0"
    },
    "hunter2"
  ],
  "id":1,
  "jsonrpc":"2.0"
}' -H "Content-Type: application/json" -X POST localhost:8545

响应结果:

{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "raw": "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675",
    "tx": {
      "hash": "0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b",
      "nonce": "0x0",
      "blockHash": "0xbeab0aa2411b7ab17f30a99d3cb9c6ef2fc5426d6ad6fd9e2a26a6aed1d1055b",
      "blockNumber": "0x15df",
      "transactionIndex": "0x1",
      "from": "0x407d73d8a49eeb85d32cf465507dd71d507100c1",
      "to": "0x853f43d8a49eeb85d32cf465507dd71d507100c1",
      "value": "0x7f110",
      "gas": "0x7f110",
      "gasPrice": "0x09184e72a000",
      "input": "0x603880600c6000396000f300603880600c6000396000f3603880600c6000396000f360"
    }
  }
}

personal_signTypedData - 类型数据签名

使用personal_signTypedData调用计算有类型结构化数据的哈希和签名。

调用参数

  • Object - EIP-712 compliant data structure to be signed
  • primaryType:基础类型名,字符串
  • domain:EIP712Domain对象,结构如下
  • primaryType:基础类型,字符串
  • domain:EIP721域对象,结构如下:
  • name:签名域名,字符串
  • verifyingContract:签名消息验证合约的地址
  • chainId:签名有效的链ID,用于对抗链重放攻击,整数
  • version:签名域的当前住版本。不同版本的签名不兼容,整数
  • salt:混淆数据
  • message:要签名的结构化消息
  • types:EIP712Domain类型定义对象
  • 签名账户地址,20字节长,16进制字符串
  • 签名账户解锁密码

返回值

personal_signTypedData调用返回签名数据。

示例代码

请求:

~$ curl --data '{
  "method":"personal_signTypedData",
  "params":[
    {
      "types":{
        "EIP712Domain":[
          {
            "name":"name",
            "type":"string"
          },
          {
            "name":"version",
            "type":"string"
          },
          {
            "name":"chainId",
            "type":"uint256"
          },
          {
            "name":"verifyingContract",
            "type":"address"
          }
        ],
        "Person":[
          {
            "name":"name",
            "type":"string"
          },
          {
            "name":"wallet",
            "type":"address"
          }
        ],
        "Mail":[
          {
            "name":"from",
            "type":"Person"
          },
          {
            "name":"to",
            "type":"Person"
          },
          {
            "name":"contents",
            "type":"string"
          }
        ]
      },
      "primaryType":"Mail",
      "domain":{
        "name":"Ether Mail",
        "version":"1",
        "chainId":1,
        "verifyingContract":"0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC"
      },
      "message":{
        "from":{
          "name":"Cow",
          "wallet":"0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826"
        },
        "to":{
          "name":"Bob",
          "wallet":"0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB"
        },
        "contents":"Hello, Bob!"
      }
    },
    "0xb60e8dd61c5d32be8058bb8eb970870f07233155",
    "password"
  ],
  "id":1,
  "jsonrpc":"2.0"
}' -H "Content-Type: application/json" -X POST localhost:8545

响应结果:

{
  "id": 1,
  "jsonrpc": "2.0",
  "result": "0xe7225f986f192f859a9bf84e34b2b7001dfa11aeb5c7164f81a2bee0d79943e2587be1faa11502eba0f803bb0ee071a082b6fe40fba025f3309263a1eef52c711c"
}

personal_unlockAccount - 解锁账户

使用personal_unlockAccount调用解锁特定账户。

如果永久解锁被禁用(默认),那么该调用将忽略解锁时长参数,账户 仅为一次签名解锁;当启用永久锁定后,使用解锁时长参数设定保持账户 解锁的秒数,默认值是300秒。传入0则无限期解锁账户。

同一时刻只能有一个解锁账户。

调用参数

  • 要解锁的账户地址,20字节,16进制字符串
  • 账户解锁密码,字符串
  • 解锁时长,整数或null,默认值:300,单位:秒

返回值

personal_unlockAccount调用返回一个布尔值,表示调用是否成功。

示例代码

请求:

~$ curl --data '{
  "method":"personal_unlockAccount",
  "params":[
    "0x8f0227d45853a50eefd48dd4fec25d5b3fd2295e",
    "hunter2",
    null
  ],
  "id":1,
  "jsonrpc":"2.0"
}' -H "Content-Type: application/json" -X POST localhost:8545

响应结果:

{
  "id": 1,
  "jsonrpc": "2.0",
  "result": true
}

合作伙伴