def __init__(self): """ Constructor. """ eos_key = EOSKey() self._private_key = eos_key.to_wif() self._public_key = eos_key.to_public()
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"])
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',
def sign(digest): k = EOSKey('cpupayer权限私钥') # 由原来的`active`修改为`cpupayer`私钥 return k.sign(digest)
"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)
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