Почему web3 предлагается в качестве глобальной переменной в Mist? Какова причина?

Я слышал, что web3это должно иметь глобальную область действия, что-то похожее на documentили window.

В чем причина такого архитектурного выбора? Это все еще базовое предположение?

В условиях все более и более модульного ландшафта Javascript мне интересно, действительно ли это правильный путь.

Можете ли вы привести ссылку? Вы можете иметь столько экземпляров web3, сколько захотите, var web3 = new Web3(). (просто будьте осторожны, чтобы не управлять событиями между экземплярами web3, он не будет работать и молча выйдет из строя, а контракты кэшируют свой экземпляр web3.eth...). Или вы имели в виду что-то другое?
Я не провел достаточно исследований по этому вопросу, прежде чем я спросил, кажется. Я слышал это от некоторых людей, но теперь я нашел ссылку здесь: gist.github.com/frozeman/fbc7465d0b0e6c1c4c23 Кажется, это проблема, которая все еще обсуждается.
Я только что предоставил ответ, который ссылается на обсуждение и вытаскивает цитату из предложения. Извиняюсь, что не увидел эту тему раньше! Хотя, надеюсь, это привлечет больше внимания к проблеме, прежде чем они примут решение.

Ответы (1)

Браузер Mist может в какой-то момент включить web3 в качестве глобальной переменной.

На данный момент обсуждение того, как включить web3в браузер Mist, все еще обсуждается здесь:

https://gist.github.com/frozeman/fbc7465d0b0e6c1c4c23

Если у вас есть аргументы за или против этого предложения, я бы посоветовал вам опубликовать суть. Я уверен, что они оценят ваш вклад!

Выдержка из сути, предлагающая три варианта обработки web3в браузере Mist:

Предложение по загрузке Mist web3

/*
Basically "web3" comes from Mist,
but "Web3" CAN come from  the dapp.
A Dapp has 3 ways to use web3.
2. and 3. would work when in Mist and outside.
*/

// 1. simply use, web3 comes already defined
web3

// 2. optional use web3 from mist, OR load if outside of mist
if(typeof web3 === 'undefined')
  web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));

// 3. always use web3 provided by the dapp ("Web3" won't be supplied by Mist), but the provider from mist
if(typeof web3 !== 'undefined')
  web3 = new Web3(web3.currentProvider);
else
  web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
  
// Add RPC version?

@замороженный человек

если вы разрешаете только один экземпляр web3, вы решаете некоторые странные проблемы событий, которые я видел, но вы также устраняете возможность проверки того, что транзакция была добыта более чем узлом, с которым вы общаетесь через RPC. ИМХО это не очень безопасно. Но, может быть, мне стоит перейти к сути этого спора...
Да я согласен. Я думаю, что люди должны внести свой вклад в эту суть. Это похоже на большой выбор дизайна, который действительно нужно проверить. Я просто добавил предложение прокомментировать суть, если у вас есть мнение. Кроме того, я думаю, что у вас есть хорошая идея. На самом деле интересно, чем все это закончится.
как это отвечает на ваш вопрос?