恒星网络stellar代币小试

看到恒星的blog说也可以做1CO,想对比一下和ETH的区别,毕竟恒星STR/XLM近期可以说非常强势,不知不觉市值到了第6。
先了解了一下开发文档https://www.stellar.org/developers/,简要总结以下几点

  1. 同以太坊一样,需要一个RPC服务器,以太坊节点可以提供rpc服务,STR是用一个叫Horizon API Server的东西,可以自建,也可以用官方或第三方公开的
  2. STR地址也是免费生成的,但是激活需要5个恒星币,每次上链操作需要1/100000(10万分之一)个恒星币
  3. 自定义的资产设置好信任线之后,是可以自由交换的,比如我发了资产A,其他人发了资产B,可以在恒星内部自由交换

废话不说,上代码操作(环境py3.6)

生成2个地址,

一个用于资产发布,一个用户资产接收,辅助函数如下

from stellar_base.keypair import Keypair
import requests
from stellar_base.asset import Asset
from stellar_base.horizon import horizon_testnet
from stellar_base.operation  import ChangeTrust,Payment
from stellar_base.memo import TextMemo
from stellar_base.transaction import Transaction
from stellar_base.transaction_envelope import TransactionEnvelope as Te
horizon = horizon_testnet()

def create_account():
    '''
    ' 账号也就是随机生成的地址和私钥
    '''
    kp = Keypair.random()
    publickey = kp.address().decode()
    seed = kp.seed().decode()
    return publickey, seed

def active_account(address):
    '''
    ' 测试网络中,可以找机器人要测试币,激活账号
    '''
    requests.get('https://horizon-testnet.stellar.org/friendbot?addr=' + address)
    
def test_accounts(address):
    resp=horizon.account(address)  
    if 'balances' in resp:
        print(json.dumps(resp['balances'],indent=1))     #账号状态正常
    else:
        print(resp['detail'])       #账号状态异常

测试结果如下,每个账号发了10000测试币

>>> address, password = create_account()
>>> active_account(address)
test_accounts(address)
>>> test_accounts(address)
[{'balance': '10000.0000000', 'buying_liabilities': '0.0000000', 'selling_liabilities': '0.0000000', 'asset_type': 'native'}]
>>> customer_address, customer_password = create_account()
>>> active_account(customer_address)
test_accounts(customer_address)
>>> test_accounts(customer_address)
[{'balance': '10000.0000000', 'buying_liabilities': '0.0000000', 'selling_liabilities': '0.0000000', 'asset_type': 'native'}]

账号1作为发行资产方,账号2作为接收方

辅助函数如下

def create_asset(code,issuer_address):
    return Asset(code, issuer_address)

def change_trust(asset,receiver_address):
    op = ChangeTrust({
        'source': receiver_address,
        'asset': asset,
        'limit': '5000'
    })
    
    sequence = horizon.account(customer_address).get('sequence')
    msg = TextMemo('Change Trust Operation')
    
    tx = Transaction(
        source=customer_address,
        opts={
            'sequence': sequence,
            'memo': msg,
            'operations': [
                op,
            ],
        },
    )
    
    receiving_account = Keypair.from_seed(customer_password)
    envelope = Te(tx=tx, opts={"network_id": "TESTNET"})
    envelope.sign(receiving_account)
    
    xdr_envelope = envelope.xdr()
    response = horizon.submit(xdr_envelope)
    if 'result_xdr' in response:
        print('Successful')
    else:
        print('Things go Fishy')

测试结果

>>> asset = create_asset("TEST1",address)
>>> change_trust(asset,customer_address)
Successful
>>> test_accounts(customer_address)  
[
 {
  "balance": "0.0000000",
  "limit": "5000.0000000",
  "buying_liabilities": "0.0000000",
  "selling_liabilities": "0.0000000",
  "asset_type": "credit_alphanum12",
  "asset_code": "TEST1",
  "asset_issuer": "GC4AO3UUFPPCJTEKUKEZEUVIB6QBUXSGDRBZJJIDSD3QFN2MJJ7V4ACS"
 },
 {
  "balance": "9999.9999900",
  "buying_liabilities": "0.0000000",
  "selling_liabilities": "0.0000000",
  "asset_type": "native"
 }
]

可以看到,customer_address添加了一条对TEST1的信任线,上限5000,但是还没有实际的余额

将TEST1资产转移到custoner_address

辅助函数如下

def transfer_fund(amount,asset,customer_address,issue_address,issuer_seed):
    print('Transferring fund to {}'.format(customer_address))
    
    op = Payment({
        'source': issue_address,
        'destination': customer_address,
        'asset': asset,
        'amount': str(amount)
    })
    
    msg = TextMemo('Test Payment')
    sequence = horizon.account(issue_address).get('sequence')
    
    tx = Transaction(
        source=issue_address,
        opts={
            'sequence': sequence,
            'memo': msg,
            'operations': [
                op,
            ],
        },
    )
    
    issuer_account = Keypair.from_seed(issuer_seed)
    envelope = Te(tx=tx, opts={"network_id": "TESTNET"})
    envelope.sign(issuer_account)
    xdr_envelope = envelope.xdr()
    
    response = horizon.submit(xdr_envelope)
    
    if 'result_xdr' in response:
        print('Successful Transfer')
    else:
        print('Things go Fishy')

运行结果如下

Transferring fund to GDJZY3YQB4E3KXHTHT5KVS2PZPJVGGVUJ6KJQ6F7NEE7INQLL4EMX5QF
Successful Transfer
>>> test_accounts(customer_address)   
[
 {
  "balance": "1000.0000000",
  "limit": "5000.0000000",
  "buying_liabilities": "0.0000000",
  "selling_liabilities": "0.0000000",
  "asset_type": "credit_alphanum12",
  "asset_code": "TEST1",
  "asset_issuer": "GC4AO3UUFPPCJTEKUKEZEUVIB6QBUXSGDRBZJJIDSD3QFN2MJJ7V4ACS"
 },
 {
  "balance": "9999.9999900",
  "buying_liabilities": "0.0000000",
  "selling_liabilities": "0.0000000",
  "asset_type": "native"
 }
]

可以看到,customer现在有1000个TEST1资产了,limit是最大持有量,如果超过了5000个,是会不成功的

后面再来个小结吧

  1. 转账非常快,几乎可以在s级完成
  2. 这个资产和ETH的ERC20还有点不太一样,有点像借贷关系,示例中是没有总量限定的,也就是可以给任意多个customer_address发送资产,只要不操过信任基线中设置的limit就行,限定总量类型的还要再研究一下资产的文档
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 193,968评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,682评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,254评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,074评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,964评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,055评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,484评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,170评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,433评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,512评论 2 308
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,296评论 1 325
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,184评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,545评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,150评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,437评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,630评论 2 335

推荐阅读更多精彩内容

  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,688评论 0 10
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,490评论 18 139
  • 坚持学习产品第一天:对产品还没有很立体的认知,迫切的想要成长,却不知道努力的方向,不知道从哪里下手,但是我依然想学...
    逗逼刘小妹阅读 135评论 0 0
  • 2017.10.28,是一个普通周六,又是一个让铁校人倍感温情的周六。 周六恰逢重阳节这一天,阜阳铁路学校工会主席...
    猫妞妞妞妞阅读 535评论 0 1
  • 我们小时候看世界,只有三种维度,更小的时候,连三种都没有。它们是,长、宽、高。所以,我们叫他们大人,我们是小人。 ...
    周某某2019阅读 159评论 0 0