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

    Решено

    Вы можете подписать ячейку с помощью ton-crypto или ton-core, а позже проверить ее с помощью check_signature или check_data_signature из stdlib.fc в FunC.

    Вот приблизительный фрагмент кода, который вам следует просмотреть:

    sign(yourCell.hash(), keypair.secretKey); ## And in the FunC contract, check like this: check_signature(cell_hash(your_cell), signature, public_key)

    Для получения более подробной информации вы можете обратиться к документации TON по проверке подписей.

    С другой стороны, на языке такта, у нас также есть такая же функция на стороне смарт-контракта, как эта:

    external(msg: ExtMessage) { let hash: Int = beginCell().storeUint(msg.seqno, 32).storeUint(msg.valid_until, 32).storeRef(msg.message_parameters.toCell()).endCell().hash(); require(checkSignature(hash, msg.signature, self.publicKey), "Invalid Signature"); // 😃😃😃 We checek the hash here require(msg.seqno == self.seqno, "Invalid Seqno"); require(now() <= msg.valid_until, "Invalid Time"); acceptMessage(); self.seqno = self.seqno + 1; send(msg.message_parameters); } https://docs.tact-lang.org/language/ref/math#checksignature
  • 0 Голоса
    2 Сообщения
    27 Просмотры

    Решено

    Вот пересмотренная версия с улучшенной грамматикой:

    Я связался с Джерри и командой TonKeeper по вашему вопросу. Похоже, что на данный момент TonKeeper еще не поддерживает подписание данных. Джерри получил этот ответ от команды TonKeeper.

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

    Любая строка, которая была подписана секретным ключом, может быть проверена с помощью открытого ключа. Несколько примеров ниже

    Для подписи полезной нагрузки (nacl используется из ton- crypto)

    const signatureData = beginCell() .storeUint(123, 32) .storeCoins(toNano(123)) .endCell() nacl.sign(signatureData.hash(), YOUR_SECRET_KEY)

    Для проверки подписи на другой стороне (js) это может быть следующим образом:

    return nacl.sign.detached.verify(message, signature, pubkey)

    ИЛИ, если вы хотите, отметьте это в контракте

    (int public_key) = load_data() slice ref = in_msg~load_ref().begin_parse(); var signature = ref~load_bits(512); int is_valid = check_signature(slice_hash(in_msg), signature, public_key)

    Некоторые ссылки

    кошелек v4R2 с проверкой подписи во внешнем msg github * TON Connect V2 и проверка ton-proof на typescript и go github ts и github go