Как создать кошелек для криптовалюты на Python

Как запрограммировать криптокошелек | Создайте звездный кошелек

Мы будем интегрировать звездную сеть с нашим приложением. Чтобы сделать это в первую очередь, вам нужно понять, что такое Stellar.

Stellar - это децентрализованная платежная сеть. Это некоммерческая организация, цель которой - объединить банки, платежные системы и людей, чтобы сделать международные платежи более быстрыми и доступными.

Криптовалюта, которую выпускает Stellar, называется Stellar Lumens или XLM.

При создании кошелька Stellar вам нужно сохранить две вещи. Первый - это ваш открытый ключ, а второй - ваш закрытый ключ. Открытый ключ - это адрес, на который вы отправляете свои XLM-файлы. Вы используете свой закрытый ключ для входа в свою учетную запись. Вы должны надежно хранить закрытый ключ, чтобы избежать кражи ваших активов.

Они выглядят так:

Что вам нужно принять во внимание, так это то, что актив 180NF был создан в звездном протоколе. Таким образом, помимо создания нового кошелька, мы должны создать линию доверия с 180NF и активировать вашу учетную запись.

Однако, как всегда, если вы предпочитаете смотреть видео, а не читать, вот полное видео.

Линия доверия

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

Чтобы торговать, получать или удерживать любой актив в сети Stellar, вы должны сначала установить линию доверия с учетной записью, выпустившей якорь. Аккаунт-эмитент - это аккаунт Stellar привязки, который создал актив. Линии доверия устанавливаются с помощью операции «Изменить доверие» и требуют базовой резервной платы в размере 0,5 люмен за каждую. Это означает, что для каждой установленной линии доверия ваша учетная запись должна будет поддерживать 0,5 люмена в резерве, который нельзя будет потратить, пока вы не закроете линии доверия.

Если технические детали кажутся сложными, не волнуйтесь, большинство кошельков скрывают большую часть этих вещей и позволяют легко добавить линии доверия в несколько кликов. Хотя добавить линии доверия может быть легко, взаимодействуйте только с теми активами, которые вы исследовали. Многие интерфейсы (например, StellarX) предоставляют информацию об якорях. Вы также можете проверить связанные с ними веб-сайты и проверить репутацию в экосистеме. В конечном счете, как вы решите доверять якорям, зависит от вас. Не доверяйте активам слепо.

Активировать аккаунт

Все адреса Stellar должны постоянно поддерживать минимальный баланс в размере XLM. Текущий минимум - 1 XLM, установленный сетью Stellar. Требование минимального баланса существует, чтобы предотвратить перегрузку сети людьми и помочь в расстановке приоритетов. Первое использование нового адреса Stellar должно заключаться в получении как минимум 1 XLM. Это активирует адрес и позволит использовать его в дальнейших транзакциях в сети. Вы никогда не сможете отправить весь свой баланс со своего звездного адреса. Этот минимум 1 XLM всегда нужно будет держать на балансе.

Собираем все вместе

Итак, в нашем приложении, пока пользователь видит экран загрузки в серверной части, я создаю новый адрес с вашими ключами, активирую учетную запись и создаю доверие с 180NF, потому что для новых пользователей, использующих эту технологию, просто сложно . Однако у этого есть большой недостаток.

МЫ ДОЛЖНЫ ФИНАНСИРОВАТЬ НОВИНКИ СОЗДАННЫЕ АККАУНТЫ

Теоретически пользователь вернет деньги, а в приложении 180NF срок выплаты кредита составляет 30 дней. Но мы уже убедились, что пользователям не нравится это соблюдать.

На самом деле есть другой способ избежать этого, на самом деле два варианта

  1. Позвольте пользователю активировать свою учетную запись и создать линии доверия

Большая проблема заключается в том, что пользователи не являются наиболее послушными людьми, использующими приложения или даже новые технологии. Я знаю, что многие люди рассердятся на это, но когда вы разработчик, вы должны создавать все так же просто для пользователя, но все равно пользователи БУДУТ испортить.

2. Вы можете создать один адрес и управлять всем с помощью MEMO.

Памятка - это уникальная 9-значная цифра, присваиваемая каждой учетной записи криптовалюты на основе Stellar (например, XLM, WLO). Он используется для идентификации получателя в транзакции. При отправке криптовалюты на основе Stellar вам необходимо предоставить следующую информацию:

  • адрес целевой учетной записи
  • памятка по целевому счету

Итак, что вы хотите сделать, это создать один адрес для всего приложения или платформы и управлять каждым пользователем как памяткой в ​​своей базе данных. Однако в моем случае это не вариант, потому что он станет централизованным решением, и в нашем приложении пользователи смогут иметь полный контроль над всеми средствами, независимо от третьих лиц.

Но если этот вариант для, хорошо дерзайте.

Создание звездного кошелька

Мы будем устанавливать Python SDk с помощью утилиты pip:

pip install stellar-base

Он установит основной SDK вместе со всеми зависимостями. Я давно использую Python3, не уверен, что он будет работать с Py2 или нет, попробуйте. Самое главное, попробуйте Python3!

Самое первое, что нам нужно сделать, это создать здесь хотя бы пару кошельков; один для компании, принимающей платежи, а другой для клиента. В этом посте для написания приложений используется Flask, поэтому предполагается, что вы хорошо знаете Flask, в противном случае вы можете найти там хороший учебник.

from flask import Flask, redirect
from flask import render_template, request
from stellar_base.keypair import Keypair
import json@app.route("/gen_address")
def gen_address():
    kp = Keypair.random()
    publickey = kp.address().decode()
    seed = kp.seed().decode()
    return json.dumps({'publickey': publickey, 'seed': seed})

После импорта материалов, связанных с Flask, я импортировал класс Keypair из Stellar. Он будет отвечать за создание нового адреса кошелька и закрытого ключа, также известного как seed, который будет личной идентификацией или паролем для самого кошелька. Вы храните эту вещь где-то в безопасности и предоставляете открытый ключ, также известный как адрес кошелька, другим лицам для транзакции. Поскольку мы хотим вернуть как закрытые, так и открытые ключи, известные как адреса кошельков, я конвертирую dict в json и возвращаюсь.

Запустите флеш-сервер, запустив python app.py из командной строки. Это показывает что-то вроде ниже:

* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)* Restarting with stat* Debugger is active!

После запуска вы должны получить доступ к http://127.0.0.1:5000/gen_address, чтобы сгенерировать адрес. Если все пойдет хорошо, будет получен результат, как показано ниже:

{
  "seed": "SABA7LBKQOIWZENE7TU442ZLJM7HAPRKTFBSM656UONB2UMCVB3MDK24",
  "publickey": "GA36WRQJSJIKTAKD2MJNVGUXUGLBAXEKKXIQENRNU3J5PNEZLCCD3M5L"
}

Давайте запустим его еще раз, чтобы сгенерировать другой адрес, и на этот раз он выдаст:

{
  "seed": "SBGUJJV6FSUL5S3AWH36XPYFIGGMAV3RQK7NSZWO7PTIS2ZCSPFVREGT",
  "publickey": "GBYVSIXRDKJDHY5JGK6N37RFLZ2JDH3GDZPYOWXITQCWOCQ26VSRSXZF"
}

Итак, мы создали ваш собственный звездный адрес, но нам все еще нужно создать линию связи и активировать вашу учетную запись. Кроме того, я не собираюсь раскрывать всю идею взаимодействия между flutter и was, которое я использую, но это только начало.

Создание линии доверия

Разрешить класс доверия stellar_base.operation.AllowTrust (trustor, asset_code, authorize, source = None)

Объект AllowTrust, который представляет операцию AllowTrust в сети Stellar. Обновляет авторизованный флаг существующей линии доверия. Это может вызвать только эмитент актива линии доверия.

Эмитент может сбросить авторизованный флаг, только если у эмитента установлен AUTH_REVOCABLE_FLAG. В противном случае эмитент может установить только авторизованный флаг. Порог:

Низкие параметры

  • trustor (str) - доверяющая учетная запись (авторизованная)
  • asset_code (str) - код авторизованного актива.
  • source (str) - исходная учетная запись (по умолчанию используется источник транзакции).

classmethod from_xdr_object (op_xdr_object) Создает объект AllowTrust из объекта операции XDR. to_xdr_object () Создает объект операции XDR, представляющий этот AllowTrust

#create trust
issuing_secret = 'SCTJB4WAC44G5JLZT3MKDUKTPE3RFKKHIEC5VV5CGFADPAGWY422YVUV'
issuing_public = Keypair.from_seed(issuing_secret).address().decode()
receiving_secret = key
receiving_public = Keypair.from_seed(receiving_secret).address().decode()
# Create an object to represent the new asset
my_asset = Asset('NF', issuing_public)
# First, the receiving account must trust the asset
builder = Builder(
    receiving_secret, horizon_uri='https://horizon.stellar.org', network='PUBLIC').append_trust_op(
        destination=my_asset.issuer, code=my_asset.code)
builder.sign()
resp = builder.submit()

Отправка платежа

Вы уже знаете, как создать адрес и создать линию доверия с помощью Python, теперь нам нужно активировать учетную запись, отправив ей немного XLM.

Когда мы создавали учетную запись, мы уже создали транзакцию. Мы можем построить транзакцию с помощью Builder или с помощью отдельного объекта Transaction. Мы рекомендуем вам использовать конструктор, поскольку он обрабатывает многие детали за вас, и вы можете сосредоточиться на важных параметрах в сигнатуре каждого метода.

Давайте отправим Бобу платеж, который мы ему должны. Мы бы сделали это следующим образом:

from stellar_base.builder import Builder seed = "SCVLSUGYEAUC4MVWJORB63JBMY2CEX6ATTJ5MXTENGD3IELUQF4F6HUB" builder = Builder(secret=seed) # builder = Builder(secret=seed, network='public') for LIVENET bob_address = 'GABRGTDZEDCQ5W663U2EI5KWRSU3EAWJCSI57H7XAMUO5BQRIGNNZGTY' builder.append_payment_op(bob_address, '100', 'XLM') builder.add_text_memo('For beers') # string length

Или, если вы хотите заплатить ему NF:

# This is a stellar issuing account ID for an anchor that issues CNY NF_ISSUER = 'GCG7BBEAVOATBULKR6IOSVIQKZIIPFC3OHC52DH4RYRZOHJ7MAIQFHCB' builder.append_payment_op(bob_address, '10', 'NF', NF_ISSUER) builder.add_text_memo('For beers') # string length

Собираем все вместе

В итоге у вас будет что-то вроде этого:

Я использую AWS, Python и Flutter для завершения этого процесса. Если вы хотите, чтобы я снял видео о том, как все интегрировать, хорошо прокомментируйте ниже, но это все, что вам нужно.

Надеюсь, вам понравится!

Примечание от Python In Plain English

Мы всегда заинтересованы в продвижении качественного контента. Если у вас есть статья, которую вы хотели бы отправить в какую-либо из наших публикаций, отправьте нам электронное письмо по адресу [email protected] с вашим именем пользователя Medium, и мы добавим вас в качестве автора.