mobius dapp大sdk
mobius-client的Python项目详细描述
mobius客户端python
mobius dapp store python sdk
mobius dapp store python sdk使将mobius dapp store mobi payments集成到任何python应用程序中变得容易。
mobius dapp store相对于苹果app store或google play store等集中式竞争对手的一大优势是显著降低了应用内购买的费用(目前为0%,而不是30%)。
DAPP商店概述
mobius dapp商店将是一个开源的、非托管的“钱包”界面,可以方便地向应用程序发送加密支付。你可以把dapp商店想象成https://stellarterm.com/或https://www.myetherwallet.com/,但它不是一个钱包界面,而是一个app store界面。
dapp存储是非托管的,这意味着mobius从不持有用户或开发人员的密钥。
dapp商店体系结构概述如下:
- 每个应用程序都持有接收mobi的帐户的私钥。
- 根据用户的种子短语为每个应用程序生成一个特定于应用程序的唯一帐户,其中用户将mobi存款以用于应用程序。
- 当用户通过DAPP应用商店打开应用程序时:
- 添加应用程序的公钥作为签名者,以便应用程序可以访问mobi和
- 使用应用程序的密钥签署来自该应用程序的质询事务,以验证此用户是否拥有该帐户。这可以防止另一个人假装拥有帐户并花费mobi(下面更多内容是在身份验证下)。
安装
使用PIP或简易安装:
$ pip install mobius-client-python
或
$ git clone git@github.com/mobius-network/mobius-client-python.git
$ cd mobius-client-python
$ python setup.py install
生产服务器设置
生产服务器必须使用https并在/auth
终结点上设置下面的头:
Access-Control-Allow-Origin: *
身份验证
解释
当用户通过dapp商店打开一个应用程序时,它会告诉应用程序应该使用哪个mobius帐户进行支付。
应用程序需要确保用户实际拥有mobius帐户的密钥,并且这不是来自捕获前一个请求并正在重播该请求的用户的重播攻击。
此身份验证通过以下过程完成:
- 当用户在dapp商店中打开一个应用程序时,它会向应用程序请求一个质询。
- 挑战是从应用程序帐户到应用程序帐户的支付交易为1 xlm。它从不发送到网络-它只是用于身份验证。
- 应用程序根据请求生成质询事务,用自己的私钥对其进行签名,并将其发送给用户。
- 用户接收质询事务,并通过对照应用程序的已发布公钥(通过dapp存储接收的公钥)检查该事务,验证该事务是否由应用程序的密钥签名。然后用户使用自己的私钥签署事务,并将其连同公钥一起发送回应用程序。
- 应用程序检查质询事务现在是否由自己和传入的公钥签名。还检查时间限制以确保这不是重播攻击。如果所有内容都通过了服务器使用令牌的回复,则应用程序可以使用指定的公钥传入“login”,并将其用于支付(它以前将通过添加应用程序的公钥作为签名者来授予应用程序对公钥的访问权)。
注意:challenge事务也有时间限制,以限制可以使用它的时间窗口。
请参见演示:
$ git clone https://github.com/mobius-network/mobius-client-python.git
$ cd mobius-client-python
$ python3 setup.py install
$ python3 teardown.py
示例服务器实现
使用烧瓶:
fromflaskimportFlaskfromflask_corsimportCORSfromflaskimportjsonifyfrommobius_client_python.auth.challengeimportChallengefrommobius_client_python.auth.tokenimportTokenfromstellar_base.keypairimportKeypair# Flask appapp=Flask(__name__)# Enable corsCORS(app)dev_keypair=Keypair.random()@app.route('/auth',methods=('GET','POST'))defauth():ifrequest.method=='GET':""" GET /auth Generates and returns challenge transaction XDR signed by application to user """xdr=Challenge(developer_secret=dev_keypair.seed(),# Developer SECRET_KEYexpires_in=datetime.datetime.now())\ .call()response={'xdr':xdr}elifrequest.method=='POST':""" POST /auth Validates challenge transaction. It must be: Signed by application and requesting user. Not older than 10 seconds from now (see mobius_client_python.client.Client.strict_interval) """try:te_xdr=request.form['te_xdr']address=request.form['public_key']token=Token(developer_secret=dev_keypair.seed(),te_xdr=te_xdr,address=address)token.validate()response={'token':token.hash('hex')}exceptExceptionase:response={'error':e}returnjsonify(response)
付款
解释
在用户完成身份验证过程后,他们有一个令牌。他们现在将其传递给应用程序“login”,告诉应用程序在需要支付时从哪个mobius帐户(用户公钥)中提取mobi。对于web应用程序,令牌通常通过token
请求p传入参数。打开网站/加载应用程序时,它会检查令牌是否有效(在时间范围内等),令牌中的帐户已将应用程序添加为签名者,以便它可以从中提取mobi。
开发
# Clone this repo $ git clone git@github.com/mobius-network/mobius-client-python.git &&cd$_# Install dependencies $ pip install -r requirements.txt # Run live authentification example $ python teardown.py
贡献
github上的https://github.com/mobius-network/mobius-client-python欢迎错误报告和请求拉取。这个项目旨在成为一个安全的、受欢迎的协作空间,贡献者应该遵守Contributor Covenant行为准则。
许可证
根据MIT License的条款,该包可以作为开放源码提供。
行为准则
在mobius客户机项目的代码库、问题跟踪程序、聊天室和邮件列表中进行交互的每个人都应该遵循code of conduct。