[Решено] Как вы жестко кодируете адрес в FunC?
-
Как вы жестко кодируете адрес в смарт-контракте? Пример в обоих функциях был бы полезен.
<***Скрыто***
click to show
-
В FunC вы можете использовать строковые литералы с тегом
a
. Например:"EF8ZMZMZMZMZMZMZMZMZMZMZMZMZMZMZMZMZMZM0VF"a
Дополнительная информация: https://ton.org/docs/develop/func/literals_identifiers#string-литералы
-
Адрес контракта - это хэш кода
**stateInit**
.Если вы меняете первоначальное хранилище контракта, вы меняете будущий адрес контракта. Однако адрес будущего контракта является детерминированным (известен до развертывания), поэтому вы можете передать адрес в хранилище как часть инициализации контракта.
Например, приведенный ниже язык Tact показывает, как я могу создать код stateInit для получения адреса смарт-контракта:
contract Example { any_int: Int; init() { self.any_int = 0; } receive("A") { let contractInit: StateInit = initOf TargetContract(self.any_int, 666); send(SendParameters{ to: contractAddress(contractInit), value: 0, mode: 0 + 64 + 128, bounce: false }); } } contract TargetContract { counter: Int; balance: Int; init(input_counter: Int, input_balance: Int){ self.counter = input_counter; self.balance = input_balance; } receive(){ // empty, means do nothing when receive empty body message. } }
Как вы можете видеть, мы можем изменить параметры, необходимые второму контракту, чтобы предопределить адрес контракта, поскольку мы получили код
stateInit
.