Недавно у меня была возможность использовать VueJS для децентрализованного приложения. Я хочу сказать, что у меня есть некоторый опыт работы с React и Svelte, но не с Vue, я был как ребенок в новом мире. Единственная причина, по которой я использовал Vue, заключается в том, что вы можете просто поместить тег скрипта в html-файл, и все готово.
Вот что я нашел с помощью vue и ethers.js.
1. Вы не можете использовать data()
для хранения поставщика или экземпляра контракта.
Вместо этого вам нужно инициализировать свойство в таком методе, как created()
, не объявляя его внутри метода data()
. Странно, я знаю!
const App = {
data() {
year: 100
},
created() {
this.provider = ...initialize provider
}
}
2. Используйте вычисленные свойства для создания экземпляра контракта.
Лучший способ, который я нашел для создания экземпляров контрактов, - это использовать вычисленные свойства, инициализация их внутри created()
создает бесполезный шаблон. Вычисляемые свойства кэшируются, поэтому вам не нужно беспокоиться о производительности.
const App = {
computed:
getTokenContract(){
return new ethers.Contract(...params)
}
}
3. Периодическое извлечение данных из блокчейна.
Dapp взаимодействует со смарт-контрактом, развернутым на BSC, обычно у BSC время блокировки составляет 3 секунды, поэтому каждые 3 секунды мне приходилось получать новые данные. Нашел хороший способ периодически получать данные, не создавая утечек памяти.
function onBlockRefresh(callback) { let handle = setInterval(callback, 6000);
window.addEventListener('visibilitychange', () => { if (document.visibilityState === 'visible') { handle = setInterval(callback, 6000); } else { clearInterval(handle) } }) }
Обычно вы использовали бы 3000 в качестве интервала, но я не хотел так сильно запрашивать блокчейн, поэтому вместо этого использовал 6000 в качестве интервала.