Halo! Kami berharap untuk mengintegrasikan hardhat-deploy
ke https://github.com/ethereum-optimism/contracts. Kami idealnya menginginkan dukungan untuk penerapan dari dompet perangkat keras. Ini bukan pemblokir untuk menggunakan hardhat-deploy
tetapi pasti akan membantu dalam jangka panjang. Apakah ini mungkin sekarang? Jika tidak, apakah ini sesuatu yang dapat dibantu oleh tim Optimism?
Hai @smartcontracts ini jelas merupakan fitur yang ingin saya miliki sendiri.
Saya dapat melihat 3 opsi:
Salah satu kemungkinan adalah menambahkan metode deployContract ke hardhat-deploy-ethers
yang memungkinkan Anda melewati penanda tangan eter (lihat PR ini yang bertujuan untuk melakukannya di hardhat-deploy itu sendiri: https://github.com/wighawag/hardhat- menyebarkan/menarik/62). Tetapi sebagai pengguna hardhat-deploy, ini bukan yang paling elegan karena Anda perlu membuat instance penanda tangan, dll...
Saya berharap ini bisa dilakukan di tingkat hardhat dan mungkin saja dengan mengesampingkan penyedia hardhat.
Dengan cara ini tidak hanya hardhat-deploy yang dapat mengambil manfaat tetapi setiap plugin dan kasus penggunaan lainnya.
Jika tidak, menjadikannya sebagai bagian dari hardhat-deploy bisa berhasil. Saya hanya perlu mencari tahu bagaimana ini akan dikonfigurasi.
Saat ini hardhat-deploy memungkinkan Anda memberi nama akun dan akun ini hanyalah alamat sebagai string.
Anda meneruskan string itu seperti di bidang from
.
Dengan mengingat hal itu, mungkin yang paling sederhana adalah mengubah bidang from
menjadi string atau objek. dan objek dapat menentukan opsi apakah itu dompet perangkat keras atau bukan.
Tetapi idealnya saya ingin ini dapat dikonfigurasi melalui akun yang disebutkan. sayangnya, struktur akun bernama saat ini tidak membuatnya mudah. Satu ide adalah menambahkan string alamat dengan beberapa string protokol, seperti " ledger://0x34fe4ff... "
Sangat menarik. Reaksi awal saya adalah bahwa (idealnya) plugin tidak perlu peduli apakah penandatangan adalah kunci pribadi teks biasa atau dompet perangkat keras. Mungkin kita dapat membuat plugin terpisah yang memungkinkan seseorang untuk menentukan koneksi dompet perangkat keras di bidang accounts
dari konfigurasi jaringan hardhat. Kemudian kita bisa menerjemahkannya ke dalam LedgerSigner (sepertinya belum ada dukungan eter Trezor). Lihat contoh di bawah ini:
const config = {
networks: {
goerli: {
accounts: [
{
platform: "ledger",
type: "hid",
path: "m/44'/60'/0'/0/0"
}
],
}
}
}
Ya, itu cara terbaik menurut saya. Memilikinya sebagai level serendah mungkin
Satu masalah yang saya lihat adalah dompet perangkat keras tidak mengekspos alamat tanpa konfirmasi, jadi setiap plugin, alat yang mengambil daftar akun akan meminta masukan pengguna di dompet, tidak ideal.
Jadi mungkin objek akun harus menentukan alamatnya dan jika itu benar-benar tidak cocok maka itu kesalahan, atau sesuatu
Jadi mungkin objek akun harus menentukan alamatnya dan jika itu benar-benar tidak cocok maka itu kesalahan, atau sesuatu
Saya pikir ini adalah cara yang tepat untuk melakukannya. Saya akan bereksperimen dengan ini besok dan melihat apakah saya bisa membuatnya relatif dapat diandalkan.
Apakah Anda mencari bantuan untuk masalah lain? akan dengan senang hati membantu di mana saya bisa
Tidak sekarang, tetapi ingin mendengar tentang fitur yang hilang, dan saya siap untuk mendiskusikannya seperti ini untuk cara terbaik ke depan :)
Saya sedang bereksperimen dengan ini sekarang. Sayangnya, cukup sulit untuk melakukan ini pada level yang lebih rendah di hardhat. Solusi sementara yang mudah adalah hardhat-deploy
untuk mengizinkan penerusan penandatangan ke deploy
bukan hanya alamat. Bagaimana perasaan Anda tentang itu? Itu akan memungkinkan kita untuk melakukan sesuatu di sepanjang baris:
const signer = new LedgerSigner(hre.network.provider, 'default', hre.ethers.utils.defaultPath)
const result = await deploy('MyContract', {
from: signer,
args: [],
log: true,
})
Hai @smartcontracts , periksa jawaban saya di sini: https://github.com/wighawag/hardhat-deploy/pull/62
Pada dasarnya saya ingin menjaga hardhat-deploy independen dari eter atau perpustakaan lain di sisi API.
Tetapi seperti yang disebutkan dalam balasan saya di sana, ini dapat ditambahkan melalui hardhat-deploy-ethers
: https://github.com/wighawag/hardhat-deploy-ethers
Seberapa mendesak Anda membutuhkan sesuatu seperti ini?
Hai @smartcontracts Saya menambahkan dukungan untuk buku besar pada versi terbaru (0.7.0-beta.51)
Tidak dapat menguji banyak karena dukungan buku besar tampaknya cukup bermasalah (mungkin terkait dengan ini: https://github.com/ethers-io/ethers.js/issues/1203). tapi mungkin Anda akan memiliki kesempatan yang lebih baik dari saya.
Saya menggunakan opsi 3 yang cukup mudah untuk ditambahkan. Anda pada dasarnya menambahkan akun bernama dengan nilai seperti ledger://<address>
lihat misalnya di sini: https://github.com/wighawag/template-ethereum-contracts/blob/d7eee3fc00b7e6a347a5ef2cd7718998254f2401/hardhat.config.ts#L15
hardhat-deploy mengonversinya ke alamat sehingga Anda masih dapat merujuk ke akun bernama ini sebagai alamat, tetapi di balik layar itu mengaitkan akun itu ke LedgerSigner. Saya juga menambahkan log ketika dompet perangkat keras terdeteksi/.
Sampai sebuah plugin untuk hardhat dapat menanganinya pada level rendah, ini seharusnya cukup baik untuk sebagian besar kasus penggunaan. Biarkan aku tahu apa yang kamu pikirkan
Ini fantastis. Mengujinya sekarang!
Tampaknya berfungsi untuk satu transaksi tetapi kemudian mengalami semacam crash. Sepertinya paket buku besar eter agak rusak.
@wighawag senang melihat dukungan buku besar segera hadir. Saya hanya ingin memberi tahu Anda bahwa untuk proyek saya, saya melakukan beberapa perbaikan dan tampaknya berhasil untuk beberapa penerapan saya. Inilah perbedaan
diff --git a/node_modules/hardhat-deploy/dist/src/helpers.js b/node_modules/hardhat-deploy/dist/src/helpers.js
index 3b588fa..67dce8f 100644
--- a/node_modules/hardhat-deploy/dist/src/helpers.js
+++ b/node_modules/hardhat-deploy/dist/src/helpers.js
@@ -290,6 +290,10 @@ function addHelpers(deploymentManager, partialExtension, network, getArtifact, s
if (options.log || hardwareWallet) {
print(`: deployed at ${deployment.address} with ${receipt === null || receipt === void 0 ? void 0 : receipt.gasUsed} gas\n`);
}
+ if(hardwareWallet){
+ const __eth = await ethersSigner._eth
+ await __eth.transport.device.close()
+ }
return Object.assign(Object.assign({}, deployment), { address, newlyDeployed: true });
}
async function deterministic(name, options) {
@@ -396,7 +400,7 @@ function addHelpers(deploymentManager, partialExtension, network, getArtifact, s
transaction = await provider.getTransaction(deployment.transactionHash);
}
if (transaction) {
- const { ethersSigner } = await getOptionalFrom(options.from);
+ const { ethersSigner, hardwareWallet } = await getOptionalFrom(options.from);
const { artifact } = await getArtifactFromOptions(name, options);
const abi = artifact.abi;
const byteCode = linkLibraries(artifact, options.libraries);
@@ -421,9 +425,17 @@ function addHelpers(deploymentManager, partialExtension, network, getArtifact, s
' not specified in new transaction, cant compare');
}
if (transaction[field] !== newTransaction[field]) {
+ if(hardwareWallet){
+ const __eth = await ethersSigner._eth
+ await __eth.transport.device.close()
+ }
return { differences: true, address: deployment.address };
}
}
+ if(hardwareWallet){
+ const __eth = await ethersSigner._eth
+ await __eth.transport.device.close()
+ }
return { differences: false, address: deployment.address };
}
}
@wighawag Saya dapat mengirim PR jika Anda dapat mengarahkan saya ke arah yang benar untuk melakukan perbaikan dengan cara yang benar, perbaikan saya bukanlah sesuatu yang akan masuk PR ;P
Terima kasih @rokso, saya akan melihatnya.
Perhatikan bahwa versi terakhir dari paket dompet perangkat keras eters.js mungkin tetap dapat memperbaiki masalah.
@wighawag Tidak yakin bagaimana ethers.js akan memperbaikinya, karena kita harus memanggil close
secara eksplisit. ethers.js dapat membantu dengan mengekspos metode close
@rokso melihat perbedaannya, Anda menutup setelah setiap penerapan.
eters.js dapat melakukan hal yang sama pada level tx
@wighawag ya itu berfungsi tetapi pengguna akan membuka koneksi baru untuk setiap transaksi. Solusi ini akan bekerja untuk kasus kami saat kami membuka koneksi baru.
Saya pikir solusi awal yang diusulkan oleh @smartcontracts adalah yang paling elegan:
const config = {
networks: {
goerli: {
accounts: [
{
platform: "ledger",
type: "hid",
path: "m/44'/60'/0'/0/0"
}
],
}
}
}
Apakah ada masalah terbuka di hardhat? Saya akan senang untuk melihat penerapan ini
Hai semua, hanya ingin memeriksa status ini. Apakah ini sudah terpecahkan? Saya mengalami kesalahan ini secara lokal: /bindings.js:126
err = new Error(
^
Error: Could not locate the bindings file. Tried:
saat mencoba pengaturan yang menggunakan ' ledger://0x00000000000000addr00000 ' dalam namedAccounts
dari konfigurasi.
Saya rasa paket dompet perangkat keras eter belum menyelesaikan masalahnya: https://github.com/ethers-io/ethers.js/issues/1440#issuecomment -816554584
Komentar yang paling membantu
Saya pikir solusi awal yang diusulkan oleh @smartcontracts adalah yang paling elegan:
Apakah ada masalah terbuka di hardhat? Saya akan senang untuk melihat penerapan ini