Оригинальный текст здесь[1]
Web3.js Wallet
это мысуществовать Хотите использовать закрытые ключи напрямую для любой операции блокчейна.(торговля)основная точка входа,существовать Также известен в других библиотеках какSigner
。
В отличие от других библиотек, которые могут сохранять только одну учетную запись, Web3.js Wallet
можно спастинесколько учетных записей,Каждый Счет имеет свой закрытый ключ и адрес. поэтому,Находятся ли эти ключи в памяти компьютера или защищены MetaMask,Wallet
все посланники Эфириум Задачи стали безопасными и простыми。
web3-eth-accounts
Пакет содержит сгенерированныйEthereumСчет、Функции для подписи транзакций и данных.
В Ethereum закрытый ключ является важной частью пары криптографических ключей, используемой для защиты и контроля владения адресом Ethereum. В системе криптографии с открытым ключом каждый адрес Ethereum имеет соответствующую пару открытого и закрытого ключей. Эта пара ключей позволяет нам иметь адрес Ethereum, управлять средствами и инициировать транзакции.
Более подробную информацию о кошельке можно найти здесь[2].
Подписать и отправить транзакцию мы можем разными способами:
•местныйкошелек[3](Настоятельно рекомендуется)•узелкошелек[4](Устарело)
Для каждого из них мы можем использовать Web3PromiEvent[5] для захвата дополнительных событий транзакции.
существоватьweb3.jsсередина,Счетэтообъект,Это относится к отдельному адресу Эфириума со связанными открытым и закрытым ключами. А кошелек — это структура высокого уровня для управления несколькими учетными записями.,Одиночный адрес Эфириума считается Счетом.
/* Создать новый счет */
const account = web3.eth.accounts.create();
console.log(account)
/* ↳
{
address: '0x9E82491d1978217d631a3b467BF912933F54788f',
privateKey: '0x4651f9c219fc6401fe0b3f82129467c717012287ccb61950d2a8ede0687857ba',
signTransaction: [Function: signTransaction],
sign: [Function: sign],
encrypt: [Function: encrypt]
}
*/
существовать web3.js середина,кошелекэто Содержит несколько Эфириум Счетмассив。Он обеспечивает удобный способ управления рядом Счети взаимодействовать с ним。Его можно рассматривать как использование дляхранилищеи различные организации Эфириум Номера адресовкошелек。
/* Создать новый кошелек */
//create a wallet with `1` random account
const wallet = web3.eth.accounts.wallet.create(1);
console.log(wallet)
/* ↳
Wallet(1) [
{
address: '0xB2D5647C03F36cA54f7d783b6Fa5afED297330d4',
privateKey: '0x7b907534ec13b19c67c2a738fdaa69014298c71f2221d7e5dec280232e996610',
signTransaction: [Function: signTransaction],
sign: [Function: sign],
encrypt: [Function: encrypt]
},
_accountProvider: {
create: [Function: createWithContext],
privateKeyToAccount: [Function: privateKeyToAccountWithContext],
decrypt: [Function: decryptWithContext]
},
_addressMap: Map(1) { '0xb2d5647c03f36ca54f7d783b6fa5afed297330d4' => 0 },
_defaultKeyName: 'web3js_wallet'
]
*/
Хотите узнать большеaccounts
метод,Может получить доступ к API учетных записей web3.js[6].
Хотите узнать большеwallet
метод,Имеет доступ к API кошелька web3.js[7].
Самый простой способ сделать это — напрямую добавить закрытый ключ (закрытый ключ должен начинаться с «0x»).,и должен иметь средства для выполненияторговля)создатьWallet
。
/* Используйте метод добавления закрытого ключа в Отправить транзакцию */
import { Web3 } from 'web3';
const web3 = new Web3('https://ethereum-sepolia.publicnode.com');
//this will create an array `Wallet` with 1 account with this privateKey
//it will generate automatically a public key for it
//make sure you have funds in this accounts
const wallet = web3.eth.accounts.wallet.add('0x152c39c430806985e4dc16fa1d7d87f90a7a1d0a6b3f17efe5158086815652e5');
const _to = '0xc7203efeb54846c149f2c79b715a8927f7334e74';
const _value = '1'; //1 wei
//the `from` address in the transaction must match the address stored in our `Wallet` array
//that's why we explicitly access it using `wallet[0].address` to ensure accuracy
const receipt = await web3.eth.sendTransaction({
from: wallet[0].address,
to: _to,
value: _value,
});
//if you have more than 1 account, you can change the address by accessing to another account
//e.g, `from: wallet[1].address`
console.log('Tx receipt:', receipt);
/* ↳
Tx receipt: {
blockHash: '0xa43b43b6e13ba47f2283b4afc15271ba07d1bba0430bd0c430f770ba7c98d054',
blockNumber: 4960689n,
cumulativeGasUsed: 7055436n,
effectiveGasPrice: 51964659212n,
from: '0xa3286628134bad128faeef82f44e99aa64085c94',
gasUsed: 21000n,
logs: [],
logsBloom: '0x00000...00000000',
status: 1n,
to: '0xc7203efeb54846c149f2c79b715a8927f7334e74',
transactionHash: '0xb88f3f300f1a168beb3a687abc2d14c389ac9709f18b768c90792c7faef0de7c',
transactionIndex: 41n,
type: 2n
}
*/
Для взаимодействия с функциями (функциями записи), которые изменяют или обновляют данные в смарт-контракте.,нам нужно создатьWallet
。этоткошелек Должен иметь хотя бы один аккаунт,И на счете должны быть средства, необходимые для выполнения этих операций с блокчейном.
/* Функция вызова смарт-контрактов записи */
import { Web3 } from 'web3';
const web3 = new Web3('https://ethereum-sepolia.publicnode.com');
//create a wallet
const wallet = web3.eth.accounts.wallet.add('0x152c39c430806985e4dc16fa1d7d87f90a7a1d0a6b3f17efe5158086815652e5');
//this is how we can access to the first account of the wallet
console.log('Account 1:', wallet[0]);
/* ↳
Account 1: {
address: '0x57CaabD59a5436F0F1b2B191b1d070e58E6449AE',
privateKey: '0x152c39c430806985e4dc16fa1d7d87f90a7a1d0a6b3f17efe5158086815652e5',
...
}
*/
//instantiate the contract
const myContract = new web3.eth.Contract(ABI, CONTRACT_ADDRESS);
//interact with the contract
//wallet[0].address == '0x57CaabD59a5436F0F1b2B191b1d070e58E6449AE'
const txReceipt = await myContract.methods.doSomething().send({ from: wallet[0].address });
console.log('Transaction receipt:', txReceipt);
/* ↳
Transaction receipt: {...}
*/
Для просмотра смарт-контрактовpublic/external returns
взаимодействовать,Нам не нужно создавать экземпляр кошелька,Мы можем сделать это, просто создав экземпляры смарт-контрактов и поставщиков.
/* Вызов функции чтения смарт-контракта */
import { Web3 } from 'web3';
//instantiate the provider
const web3 = new Web3('https://ethereum-sepolia.publicnode.com');
//instantiate the contract
const myContract = new web3.eth.Contract(ABI, CONTRACT_ADDRESS);
//call the `view function` in the contract
const result = await myContract.methods.doSomething().call();
console.log('Result:', result)
/* ↳
Result: ...
*/
Перечислено нижеweb3.th.accounts.wallet
СумкасерединапредоставилWallet
метод[8]:
•add[9]:Используйте закрытый ключ или Счетобъектдобавить Счетприезжатькошелексередина。•clear[10]:Безопасное опорожнениекошелеки удалить егосерединаиз всех Счет。Используйте с осторожностью, так как это приведет к удалению всех счетов в вашем локальном кошельке.。•create[11]:существоватькошелексерединасоздать илинесколько учетных запись. Если кошелек уже содержит существующие, они не будут перезаписаны. •decrypt[12]: расшифровать хранилище ключей. объект v3. •encrypt[13]: зашифровать все учетные записи в кошельке в зашифрованном хранилище ключей. v3объектсередина。•get[14]:Уточнить Счетсуществоватькошелексерединаиндекс или адрес его открытого ключа。•load[15]:отместныйхранилищесерединаимпортироватькошелеки расшифровать его。Уведомление:Поддерживается только браузером。•remove[16]:откошелексередина Удалить назначение Счет。•save[17]:в виде строкишифрованиепозжекошелекхранилищеприезжатьместныйхранилищесередина。Уведомление:Поддерживается только браузером。•getStorage[18]:Получите браузерхранилищеобъект。
Перечислено нижеweb3.th.accounts
СумкасерединапредоставилAccounts
метод[19]:
•create[20]: создать и вернуть объект Web3Account, включая закрытый и открытый ключ. существовать при создании закрытого ключа,Он использует проверенный пакетethereum-cryptography/secp256k1
,Этот пакет имеет специфические характеристикишифрованиебезопасное случайное число。узнать больше:https://www.npmjs.com/package/ethereum-cryptography#secp256k1-curve•decrypt[21]:Расшифровать v3 keystore JSON и создайте учетную запись. •encrypt[22]: зашифровать закрытый ключ с помощью пароля и вернуть ключ V3. JSON Подробности см. в хранилище ключей https://github.com/ethereum/wiki/wiki/Web3-Secret-Storage-Definition. •hashMessage[23]: хешировать данное сообщение. Данные будут в формате UTF-8. HEX декодируется и инкапсулируется следующим образом: «\x19Ethereum Signed Message:\n” + длина сообщения + Сообщение хешируется с помощью keccak256. •parseAndValidatePrivateKey[24]: получите проверенный закрытый ключ. Uint8Array. ПРИМЕЧАНИЕ. Эта функция не экспортируется через основной пакет web3, поэтому, чтобы использовать ее напрямую, импортируйте из пакета учетных записей. •privateKeyToAccount[25]: Получите учетную запись по закрытому ключу. •privateKeyToAddress[26]: Получите адрес Ethereum из закрытого ключа. •privateKeyToPublicKey[27]: Получите открытый ключ из закрытого ключа. •recover[28]: восстановить адрес Ethereum, используемый для подписи данных. •recoverTransaction[29]: восстановить адрес Ethereum, используемый для подписи данной транзакции, закодированной RLP. •sign[30]: подпишите данные произвольные данные с помощью закрытого ключа. •signTransaction[31]: подпишите данную транзакцию Ethereum, используя закрытый ключ.
Отказ от ответственности: эта работа распространяется под лицензией Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0)[32]. Пожалуйста, укажите источник при ее использовании. Автор: мэнбин[33] блог: мэнбин[34] Гитхаб: mengbin92[35] cnblogs: Непреднамеренная влюбленность в воду[36] Сообщество разработчиков Tencent Cloud: Мюнстер[37]
[1]
здесь: https://docs.web3js.org/guides/wallet/
[2]
здесь: https://ethereum.org/en/wallets/
[3]
Локальный кошелек: https://docs.web3js.org/guides/wallet/local_wallet
[4]
Узел кошелька: https://docs.web3js.org/guides/wallet/node_wallet
[5]
Web3PromiEvent: https://docs.web3js.org/guides/wallet/promi_event
[6]
web3.js accounts API: https://docs.web3js.org/libdocs/Accounts
[7]
web3.js wallet API: https://docs.web3js.org/libdocs/Wallet
[8]
метод: https://docs.web3js.org/libdocs/Wallet
[9]
add: https://docs.web3js.org/libdocs/Wallet#add
[10]
clear: https://docs.web3js.org/libdocs/Wallet#clear
[11]
create: https://docs.web3js.org/libdocs/Wallet#create
[12]
decrypt: https://docs.web3js.org/libdocs/Wallet#decrypt
[13]
encrypt: https://docs.web3js.org/libdocs/Wallet#encrypt
[14]
get: https://docs.web3js.org/libdocs/Wallet#get
[15]
load: https://docs.web3js.org/libdocs/Wallet#load
[16]
remove: https://docs.web3js.org/libdocs/Wallet#remove
[17]
save: https://docs.web3js.org/libdocs/Wallet#save
[18]
getStorage: https://docs.web3js.org/libdocs/Wallet#getStorage
[19]
метод: https://docs.web3js.org/libdocs/Wallet
[20]
create: https://docs.web3js.org/libdocs/Accounts#create
[21]
decrypt: https://docs.web3js.org/libdocs/Accounts#decrypt
[22]
encrypt: https://docs.web3js.org/libdocs/Accounts#encrypt
[23]
hashMessage: https://docs.web3js.org/libdocs/Accounts#hashMessage
[24]
parseAndValidatePrivateKey: https://docs.web3js.org/libdocs/Accounts#parseAndValidatePrivateKey
[25]
privateKeyToAccount: https://docs.web3js.org/libdocs/Accounts#privateKeyToAccount
[26]
privateKeyToAddress: https://docs.web3js.org/libdocs/Accounts#privateKeyToAddress
[27]
privateKeyToPublicKey: https://docs.web3js.org/libdocs/Accounts#privateKeyToPublicKey
[28]
recover: https://docs.web3js.org/libdocs/Accounts#recover
[29]
recoverTransaction: https://docs.web3js.org/libdocs/Accounts#recoverTransaction
[30]
sign: https://docs.web3js.org/libdocs/Accounts#sign
[31]
signTransaction: https://docs.web3js.org/libdocs/Accounts#signTransaction
[32]
С указанием авторства-Некоммерческая-ShareAlike 4.0 интернациональность (CC BY-NC-SA 4.0): https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh
[33]
mengbin: mengbin1992@outlook.com
[34]
mengbin: https://mengbin.top
[35]
mengbin92: https://mengbin92.github.io/
[36]
Влюбляюсь в воду нечаянно: https://www.cnblogs.com/lianshuiwuyi/
[37]
Мюнстер: https://cloud.tencent.com/developer/user/6649301