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

  • reset theme
Collapse

tonpie.io

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

Можно ли изменить развернутый смарт-контракт на TON?

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

    Блокчейны считаются "доступными только для добавления" и неизменяемыми. Но я слышал, что в мире TON смарт-контракты могут изменять свой собственный код. Итак, возможно ли изменить код контракта после его развертывания и как это работает?


    Этот вопрос был импортирован из чата Telegram: <***Скрыто***

    click to show


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

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

    Да, можно изменить код контракта в TON. Просто реализуйте это внутри своего смарт-контракта, который будет обновлять код контракта с помощью функции стандартной библиотеки FunC (stdlib.fc):

    () set_code(cell new_code) impure asm "SETCODE";
    

    Простая реализация внутри recv_internal:

    #include "stdlib.fc";
    
    global slice ctx_owner;
    
    () recv_internal(int my_balance, int msg_value, cell in_msg_full, slice in_msg_body) impure {
    	slice cs = in_msg_full.begin_parse();
    	int flags = cs~load_uint(4);
    	
    	if (flags & 1) { ;; ignore all bounced messages
    		return ();
    	}
    	
    	;; Admin methods
    	;; if the in_msg_body is empty, then it is a simple money transfer
    	if (equal_slice_bits(sender_addr, ctx_owner) & (~ in_msg_body.slice_empty?())) {
    		int op = in_msg_body~load_uint(32);
    	
    		if (op == "op::update_code"c) {
    			set_code(in_msg_body~load_ref());
    		}
    	}
    }
    

    Кроме того, вы можете найти спецификацию set_code здесь: https://ton.org/docs/develop/func/stdlib/#set_code

    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.