• Как получить событие emit из смарт-контракта

    TON Overflow на русском
    0 Голоса
    2 Сообщения
    37 Просмотры

    Кролик

  • 0 Голоса
    1 Сообщения
    13 Просмотры

    Хороший способ учиться в процессе разработки - это изучать код, написанный другими людьми. Существуют смарт-контракты с открытым исходным кодом, написанные на FunC, которые люди могут использовать в учебных целях. Но существуют ли проекты с открытым исходным кодом, написанные на Tact, или язык слишком новый для этого?

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

    click to show

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

  • 0 Голоса
    2 Сообщения
    117 Просмотры

    unC существует с самого начала TON, а Tact 1.0 был выпущен в марте 2023 года (менее двух месяцев назад), так что на данный момент он просто очень новый, и естественно, что руководств пока немного.

    Говоря об ограничениях: в настоящее время Tact все еще проходит проверки и аудиты безопасности, поэтому, если вы разрабатываете что-то, на что тратится много денег, на данный момент, возможно, лучше использовать FunC (или использовать Tact, а затем провести аудит кода функции, который компилируется Tact).

    Но для целей обучения вы уже можете свободно использовать Tact. Одна из его целей - снизить входной барьер для новичков в TON, поэтому вам, возможно, будет проще использовать его, чем FunC (хотя это зависит от вашего предыдущего опыта).

    И если вам нужен учебный материал, я предлагаю посетить веб-сайт tact-by- example.org .

  • 0 Голоса
    2 Сообщения
    27 Просмотры

    Решено

    Максимальный размер смарт-контракта, развернутого в сети TON, зависит от сложности контракта и количества используемых им ячеек. В общем, размер представления смарт-контракта в виде пакета ячеек (BoC) не должен превышать предельный размер одного блока shardchain, который составляет 2 МБ. Однако практические ограничения для смарт-контрактов намного меньше.

    Одна ячейка в сети TON может хранить до "1023 битов данных" и имеет "4 ссылки на другие ячейки`. Чем сложнее смарт-контракт, тем больше ячеек он будет использовать. Однако не существует строгого правила относительно количества ячеек, которые может содержать смарт-контракт, поскольку это зависит от конкретного варианта использования и сложности контракта.

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

    2 МБ на основе приведенного здесь: https://docs.ton.org/develop/howto/faq#average-block-size
  • 0 Голоса
    2 Сообщения
    17 Просмотры

    Я предполагаю, что вы интересуетесь языком программирования для смарт-контрактов. В настоящее время вы можете выбрать любую функцию (https://ton.org/docs/develop/func) или тактичность (https://docs.tact-lang.org/), оба из которых являются удобочитаемыми языками, используемыми для построения смарт-контрактов.

    Оба этих языка предлагают подключаемый модуль для отображения вашего текущего адреса, аналогичный "address(this)" в Solidity.

    В FunC вы можете использовать:

    slice my_address() asm "MYADDR";

    В такт, вы можете использовать:

    myAddress(): Address;
  • 0 Голоса
    3 Сообщения
    28 Просмотры

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