def __init__(self):
        """
        Constructor.
        """
        eos_key = EOSKey()

        self._private_key = eos_key.to_wif()
        self._public_key = eos_key.to_public()
示例#2
0
 def deploy_contract(self, contract_info, account_info):
   setcode_action = self.create_setcode_action(contract_info['code_file'], account_info['name'])
   setabi_action = self.create_setabi_action(contract_info['abi_file'], account_info['name'])
   transaction = { 'actions': [setcode_action, setabi_action] }
   key = EOSKey(account_info['private_key'])
   tx_result = self.cleos.push_transaction(transaction, key)
   return tx_result
 async def transfer(self,
                    to: str,
                    amount: Decimal,
                    asset: str,
                    memo: str = ""):
     if "." in asset:
         asset = asset.split(".")[1]
     if asset == "CYBER":
         formatted_amount = f"{amount:.4f}"
     elif asset == "GOLOS":
         formatted_amount = f"{amount:.3f}"
     arguments = {
         "from": self.address,
         "to": await self._resolve_address(to),
         "quantity": f"{formatted_amount} {asset}",
         "memo": memo,
     }
     payload = {
         "account": "cyber.token",
         "name": "transfer",
         "authorization": [{
             "actor": self.address,
             "permission": "active"
         }],
     }
     payload_data = await self._api(
         "v1/chain/abi_json_to_bin",
         data={
             "code": payload["account"],
             "action": payload["name"],
             "args": arguments,
         },
     )
     payload["data"] = payload_data["binargs"]
     chain_info = await self._api("v1/chain/get_info")
     lib_info = await self._api(
         "v1/chain/get_block",
         data={
             "block_num_or_id": chain_info["last_irreversible_block_num"]
         },
     )
     trx = CyberWayTransaction({"actions": [payload]}, chain_info, lib_info)
     digest = sig_digest(trx.encode(), chain_info["chain_id"])
     transaction = trx.__dict__
     transaction["expiration"] = trx.expiration.strftime(TIME_FORMAT)[:-3]
     final_trx = {
         "compression": "none",
         "transaction": transaction,
         "signatures": [EOSKey(self.wif).sign(digest)],
     }
     trx_data = json.dumps(final_trx, cls=types.EOSEncoder)
     try:
         result = await self._api("v1/chain/push_transaction",
                                  data=trx_data)
     except aiohttp.ClientResponseError:
         raise TransferError
     return self.trx_url(result["transaction_id"])
示例#4
0
  def write_data(self, contract_name, action_name, account_name, private_key, params):
    payload = {
      'account': contract_name,
      'name': action_name,
      'authorization': [{
        'actor': account_name,
        'permission': 'active'
      }]
    }
    # print(params)

    data = self.cleos.abi_json_to_bin(payload['account'], payload['name'], params)
    payload['data'] = data['binargs']
    # print(payload)
    transaction = { 'actions': [payload] }
    key = EOSKey(private_key)
    tx_result = self.cleos.push_transaction(transaction, key)
    return tx_result
from eos.cleos import MyCleos

APIKEY = '5b4added-e80c-41fb-b5a9-16269d2de79b'
ENDPOINT = 'https://open-api.eos.blockdog.com'
ce = MyCleos(ENDPOINT, APIKEY)

# 创建 EOS 账号需要已有一个 EOS 账号
creator = 'farss5555555'
creator_private_key = '5JWSqcAgN3ScgRF1O1Jz4wrm4BJA39wzB3K6gBU8h4JXdBmX5CP'

# 创建账号首先需要秘钥对, 创建一个秘钥对
# 如果有安装 cleos, 直接用 cleos create key --to-console 创建秘钥对
# 或者使用其他工具生成, 比如 https://github.com/eoscafe/eos-key
# 或者使用代码生成, 如下:
key = EOSKey()
print('public key:', key.to_public())
print('请妥善保管你的 private key:', key.to_wif())

public_key = key.to_public()
new_name = 'farsssssssss'  # 新账户名

# 创建用户并为新用户抵押 net, cpu, 购买内存
try:
    resp = ce.create_account(creator,
                             creator_private_key,
                             new_name,
                             owner_key=public_key,
                             active_key='',
                             stake_net='0.0010 EOS',
                             stake_cpu='0.0010 EOS',
示例#6
0
def sign(digest):
    k = EOSKey('cpupayer权限私钥') # 由原来的`active`修改为`cpupayer`私钥
    return k.sign(digest)
示例#7
0
        "actor": _from,  # sender
        "permission": "active",
    }],
}

# Converting payload to binary
data = ce.abi_json_to_bin(payload['account'], payload['name'], arguments)
# Inserting payload binary form as "data" field in original payload
payload['data'] = data['binargs']

trx = {
    "actions": [payload],
    'expiration':
    str((dt.datetime.utcnow() +
         dt.timedelta(seconds=60)).replace(tzinfo=pytz.UTC))
}

resp = ce.push_transaction(trx, EOSKey(PRIVATE_KEY), broadcast=True)
transaction_id = resp['transaction_id']
print('trx_id:', resp['transaction_id'])

# waiting for transaction excueting
while True:
    try:
        result = ce.third_get_transaction(transaction_id)
        print(result)
        break
    except requests.exceptions.HTTPError as e:
        if e.response['error'] == 'transaction not found':
            time.sleep(1)
示例#8
0
payload[0]['data'] = data['binargs']

# 构造`trx`(图1-1 步骤3)
# 这时的`payload`有:data、account、name和authorization
trx = {"actions": [payload[0]]}

# 对`trx`进行哈希计算(图1-1 步骤4)
chain_info, lib_info = ce.get_chain_lib_info()
trx_chain = Transaction(trx, chain_info, lib_info)
hash_trx = sig_digest(trx_chain.encode(), chain_info['chain_id'])

# 请求服务端 对`trx`哈希进行签名(图1-1 步骤5)
server_sign = SERVER.sign(hash_trx)

# 玩家自己也需要对相同数据进行签名(图1-1 步骤6)
k = EOSKey('玩家私钥')  # 玩家私钥
player_sign = k.sign(hash_trx)

# 组合签名,顺序要和`payload.authorization`的顺序一致
signatures = []
signatures.append(server_sign)  # 服务端签名放在第一个位置
signatures.append(player_sign)  # 玩家签名跟在后面

final_trx = {
    'compression': 'none',
    'transaction': trx_chain.__dict__,
    'signatures': signatures
}
data = json.dumps(final_trx, cls=EOSEncoder)

timeout = 30