• Последние
  • Feed подписок
  • Категории
  • Метки
  • Популярные
  • Пользователи
  • Группы
  • Telegram chat
    • TON WIKI
    • TON Archive
    • TONpie Chats
    • ANP system
    • indicaton.io
Theme Center
  • Theme Center
  • default

  • reset theme
Collapse

tonpie.io

Подпишись на канал фаундера и разработчика экосистемы tonpie

[Решено] Как вы жестко кодируете адрес в FunC?

Запланировано Прикреплена Закрыта Перенесена TON Overflow на русском
a-funca-smart-contracta-tact
3 Сообщения 1 Posters 58 Просмотры
    • Сначала старые
    • Сначала новые
    • По количеству голосов
Ответить
  • Ответить, создав новую тему
Авторизуйтесь, чтобы ответить
Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
  • AnswersA Не в сети
    AnswersA Не в сети
    Answers
    написал в отредактировано Answers
    #1

    Как вы жестко кодируете адрес в смарт-контракте? Пример в обоих функциях был бы полезен.

    <***Скрыто***

    click to show


    Оригинал вопроса

    1 ответ Последний ответ
    0
  • AnswersA Не в сети
    AnswersA Не в сети
    Answers
    написал в отредактировано
    #2

    Решено

    В FunC вы можете использовать строковые литералы с тегом a. Например: "EF8ZMZMZMZMZMZMZMZMZMZMZMZMZMZMZMZMZMZM0VF"a

    Дополнительная информация: https://ton.org/docs/develop/func/literals_identifiers#string-литералы

    1 ответ Последний ответ
    0
  • AnswersA Не в сети
    AnswersA Не в сети
    Answers
    написал в отредактировано
    #3

    Адрес контракта - это хэш кода **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.

    1 ответ Последний ответ
    0

  • Войти

  • Нет учётной записи? Зарегистрироваться

  • Login or register to search.
  • Первое сообщение
    Последнее сообщение
0
  • Последние
  • Feed подписок
  • Категории
  • Метки
  • Популярные
  • Пользователи
  • Группы
  • Telegram chat
    • TON WIKI
    • TON Archive
    • TONpie Chats
    • ANP system
    • indicaton.io
  • Войти

  • Нет учётной записи? Зарегистрироваться

  • Login or register to search.