Создание простого контракта с мультиподписью с помощью fift
Эта информация очень низкого уровня. Может быть сложной для понимания новичками и предназначена для продвинутых пользователей, которые хотят понять работу fift. Использование fift не требуется в повседневных задачах.
💡 Общие сведения
Это руководство поможет вам узнать, как использовать ваш контракт с мультиподписью. Напомним, что (n, k)-контракт с мультиподписью – это мультиподписной кошелек с n держателями закрытых ключей, который принимает запросы на отправку сообщений, если запрос, заявка, собирает не менее k подписей держателей.
На основе оригинального кода контракта мультиподписи и обновлений от akifoq:
- оригинальный multisig-code.fc блокчейна TON
- akifoq/multisig с fift библиотекой для работы с мультиподписью.
Для тех, кто впервые работает с мультиподписью: Что такое технология мультиподписи? (видео)
📖 Чему вы научитесь
- Как создать и настроить простой кошелек с мультиподписью.
- Как развернуть кошелек с мультиподписью с помощью lite-client.
- Как подписать запрос и отправить его в сообщении в блокчейн.
⚙ Настройте свое окружение
Прежде чем мы начнем наше путешествие, проверьте и подготовьте ваше окружение.
- Установите двоичные файлы
func
,fift
,lite-client
иfiftlib
из раздела установки. - Клонируйте репозиторий и откройте каталог в CLI.
git clone https://github.com/akifoq/multisig.git
cd ~/multisig
🚀 Давайте начнем!
- Скомпилируйте код в fift.
- Подготовьте ключи для владельцев мультиподписи.
- Разверните контракт.
- Взаимодействуйте с развернутым кошельком с мультиподписью в блокчейне.
Скомпилируйте контракт
Скомпилируйте контракт в Fift с помощью:
func -o multisig-code.fif -SPA stdlib.fc multisig-code.fc
Подготовьте ключи владельцев мультиподписи
Создайте ключи участников
Чтобы создать ключ, вам нужно запустить:
fift -s new-key.fif $KEY_NAME$
- Где
KEY_NAME
- это имя файла, в который будет записан закрытый ключ.
Например:
fift -s new-key.fif multisig_key
Мы получим файл multisig_key.pk
с закрытым ключом внутри.
Соберите открытые ключи
Также скрипт выдаст открытый ключ в формате:
Public key = Pub5XqPLwPgP8rtryoUDg2sadfuGjkT4DLRaVeIr08lb8CB5HW
Все, что после "Public key = "
, нужно где-то сохранить!
Давайте сохраним в файле keys.txt
. Важно, чтобы каждый открытый ключ был указан с новой строки.
Разверните контракт
Разверните через lite-client
После создания всех ключей вам необходимо собрать открытые ключи в текстовый файл keys.txt
.
Например:
PubExXl3MdwPVuffxRXkhKN1avcGYrm6QgJfsqdf4dUc0an7/IA
PubH821csswh8R1uO9rLYyP1laCpYWxhNkx+epOkqwdWXgzY4
После этого вам нужно запустить:
fift -s new-multisig.fif 0 $WALLET_ID$ wallet $KEYS_COUNT$ ./keys.txt
$WALLET_ID$
- номер к ошелька, назначенный для текущего ключа. Рекомендуется использовать уникальный$WALLET_ID$
для каждого нового кошелька с тем же ключом.$KEYS_COUNT$
- количество ключей, необходимых для подтверждения. Обычно оно равно количеству открытых ключей
Можно создать много кошельков с одинаковыми ключами (ключ Алисы, ключ Боба). Что же делать, если у Алисы и Боба уже есть сокровища? Именно в таком случае $WALLET_ID$
и выполняет свою роль.
Скрипт выведет что-то вроде:
new wallet address = 0:4bbb2660097db5c72dd5e9086115010f0f8c8501e0b8fef1fe318d9de5d0e501
(Saving address to file wallet.addr)
Non-bounceable address (for init): 0QBLuyZgCX21xy3V6QhhFQEPD4yFAeC4_vH-MY2d5dDlAbel
Bounceable address (for later access): kQBLuyZgCX21xy3V6QhhFQEPD4yFAeC4_vH-MY2d5dDlAepg
(Saved wallet creating query to file wallet-create.boc)
Если у вас ошибка "public key must be 48 character long", убедитесь, что в вашем файле keys.txt
имеет тип переноса слов в unix - LF. Например, перенос слов можно изменить с помощью редактора Sublime text.
Адрес возврата лучше сохранить — это адрес кошелька.
Активируйте свой контракт
Вам нужно отправить немного TON в нашу недавно сгенерированную сокровищницу. Например, 0,5 TON. Вы можете отправить тестовые монеты через @testgiver_ton_bot.
После этого необходимо запустить lite-client:
lite-client -C global.config.json
global.config.json
?Вы можете получить новый файл конфигурации global.config.json
для основной сети или тестовой сети.
После запуска lite-client лучше всего запустить команду time
в консоли lite-client, чтобы убедиться в успешном подключении:
time
Итак, lite-клиент работает!
Далее вам необходимо развернуть кошелек. Для этого выполните команду:
sendfile ./wallet-create.boc
После этого кошелек будет готов к работе в течение минуты.