Пример #1
0
def create_vesting(doc):
    vesting = {
    "vesting": {
        "amount": convert_amount(doc["vesting_shares_value"], VESTING_PRECISION),
        "decs": utils.UInt64(VESTING_PRECISION),
        "sym": VESTING_SYMBOL
    },
    "delegate_vesting": {
        "amount": convert_amount(doc["delegated_vesting_shares_value"], VESTING_PRECISION),
        "decs": utils.UInt64(VESTING_PRECISION),
        "sym": VESTING_SYMBOL
    },
    "received_vesting": {
        "amount": convert_amount(doc["received_vesting_shares_value"], VESTING_PRECISION),
        "decs": utils.UInt64(VESTING_PRECISION),
        "sym": VESTING_SYMBOL
    },
    "unlocked_limit": {
        "amount": utils.Int64(0),
        "decs": utils.UInt64(VESTING_PRECISION),
        "sym": VESTING_SYMBOL
    },
    "_SERVICE_" : {
        "scope" : doc["name"],
        "rev" : utils.Int64(1),
        "payer" : doc["name"],
        "size" : 64
    }
    }
    cyberway.vesting.append(vesting)
Пример #2
0
def create_witness(doc, exist_accounts):
    total_weight = 0
    acc_list = []

    for vote in golos.votes.table.find({"witness": doc["owner"]}):
        if "removed" in vote.keys():
            continue
        if not vote["account"] in exist_accounts:
            continue
        if vote["account"] in acc_list:
            continue
        acc_list.append(vote["account"])
    for acc in acc_list:
        total_weight += int(
            cyberway.vesting.table.find_one(
                {"_SERVICE_.scope": acc})["vesting"]["amount"].to_decimal())

    witness = {
        "name": doc["owner"],
        "key": doc["signing_key"],
        "url": doc["url"],
        "active": True,
        "total_weight": utils.UInt64(total_weight),
        "_SERVICE_": {
            "scope": "gls.ctrl",
            "rev": utils.Int64(1),
            "payer": doc["owner"],
            "size": 61
        }
    }
    cyberway.witness.append(witness)
Пример #3
0
def create_balance(doc):
    balance = {
    "balance": {
        "amount": convert_amount(doc["balance_value"], BALANCE_PRECISION),
        "decs": utils.UInt64(BALANCE_PRECISION),
        "sym": BALANCE_SYMBOL
    },
    "payments": {
        "amount" : utils.Int64(0),
        "decs" : utils.UInt64(BALANCE_PRECISION),
        "sym" : BALANCE_SYMBOL
    },
    "_SERVICE_" : {
        "scope" : doc["name"],
        "rev" : utils.Int64(1),
        "payer" : doc["name"],
        "size" : 16
    }
    }
    cyberway.balance.append(balance)
Пример #4
0
 def update_childcount(self):
     total = len(self.childcount_dict)
     updated = 0
     processed = 0
     for key, data in self.childcount_dict.items():
         processed += 1
         if data[0] != data[1]:
             update_filter = {
                 "$and":[{"id":utils.UInt64(key[1])}, {"_SERVICE_.scope":key[0]}]
             }
             update_obj = {
                 "$set":{"childcount":utils.UInt64(data[0])}
             }
             self.update_list.append(UpdateOne(update_filter, update_obj))
         if len(self.update_list) == 10000:
             updated += len(self.update_list)
             self.write_childcount()
         if processed % self.cache_period == 0:
             utils.printProgressBar(processed, total, prefix = 'Progress:', suffix = 'Complete', length = 50)
     if len(self.update_list):
         updated += len(self.update_list)
         self.write_childcount()
     utils.printProgressBar(processed, total, prefix = 'Progress:', suffix = 'Complete', length = 50)
     print("\nUpdate childcount: %d/%d = %.2f%%" % (updated, len(self.childcount_dict), 100.*updated/len(self.childcount_dict)))
Пример #5
0
def create_permission(doc, name, parent_id):
    permusage_id = cyberway.permusage.nextId()
    permusage = {
    "id" : utils.UInt64(permusage_id),
    "last_used" : doc["last_owner_update"],
    "_SERVICE_" : {
        "scope" : "",
        "rev" : utils.Int64(1),
        "payer" : "",
        "size" : 16
    }
    }
    cyberway.permusage.append(permusage)

    permission_id = cyberway.permission.nextId()
    permission = {
    "id" : utils.UInt64(permission_id),
    "usage_id" : utils.UInt64(permusage_id),
    "parent" : utils.UInt64(parent_id),
    "owner" : doc["account"],
    "name" : name,
    "last_updated" : doc["last_owner_update"],
    "auth" : {
        "threshold" : utils.UInt64(1),
        "keys" : [
        {
            "key" : doc[name][0],
            "weight" : utils.UInt64(1)
        }
        ],
        "accounts" : [ ],
        "waits" : [ ]
    },
    "_SERVICE_" : {
        "scope" : "",
        "rev" : utils.Int64(1),
        "payer" : "",
        "size" : 91
    }
    }
    cyberway.permission.append(permission)
    return permission_id
Пример #6
0
    def convert_posts(self, query={}):
        print("convert_posts")
        golos_gpo = self.golos_db['dynamic_global_property_object'].find()[0]
        golos_posts = self.golos_db['comment_object']

        reward_pools = self.publish_db['rewardpools']
        pool = reward_pools.find()[0]  #we have to create it before converting
        pool["state"]["funds"]["amount"] = utils.Int64(
            utils.get_golos_asset_amount(
                golos_gpo["total_reward_fund_steem_value"]))
        pool["state"]["funds"]["decs"] = utils.UInt64(BALANCE_PRECISION)
        pool["state"]["funds"]["sym"] = BALANCE_SYMBOL

        pool["state"]["msgs"] = utils.UInt64(0)
        rshares_sum = 0

        cursor = golos_posts.find(query)
        length = cursor.count()
        print("total messages = ", length)
        utils.printProgressBar(0,
                               length,
                               prefix='Progress:',
                               suffix='Complete',
                               length=50)

        added = 0
        passed = -1
        for doc in cursor:
            passed += 1
            try:
                if doc["removed"] or (not (doc["author"] in self.exists_accs)):
                    continue

                cur_mssg_id = self.get_post_id(doc["author"], doc["permlink"])
                cur_rshares_raw = utils.get_fixp_raw(doc["net_rshares"])
                messagestate = {
                    "netshares":
                    utils.Int64(cur_rshares_raw),
                    "voteshares":
                    utils.Int64(utils.get_fixp_raw(doc["vote_rshares"])),
                    "sumcuratorsw":
                    utils.Int64(self.mssgs_curatorsw[(doc["author"],
                                                      cur_mssg_id)])
                }

                date_close = datetime.strptime(
                    "2106-02-07T06:28:15", '%Y-%m-%dT%H:%M:%S').isoformat()
                if (doc["cashout_time"].isoformat() != date_close
                        and doc["cashout_time"].isoformat() >
                        datetime.now().isoformat()):
                    rshares_sum += cur_rshares_raw
                    pool["state"]["msgs"] = utils.UInt64(
                        pool["state"]["msgs"].to_decimal() + 1)

                orphan_comment = (len(doc["parent_author"]) > 0) and (
                    not (doc["parent_author"] in self.exists_accs))

                message = {
                    "id":
                    utils.UInt64(cur_mssg_id),
                    "permlink":
                    doc["permlink"],
                    "date":
                    utils.UInt64(
                        int(doc["last_update"].timestamp()) * 1000000),
                    "parentacc":
                    "" if orphan_comment else doc["parent_author"],
                    "parent_id":
                    utils.UInt64(0 if (
                        orphan_comment or (len(doc["parent_permlink"]) == 0)
                    ) else self.get_post_id(doc["parent_author"],
                                            doc["parent_permlink"])),
                    "tokenprop":
                    utils.Int64(
                        utils.get_prop_raw(doc["percent_steem_dollars"] / 2)),
                    "beneficiaries": [],
                    "rewardweight":
                    utils.Int64(utils.get_prop_raw(doc["reward_weight"])),
                    "state":
                    messagestate,
                    "childcount":
                    utils.UInt64(doc["children"]),
                    "cashout_time":
                    utils.UInt64(
                        int(doc["cashout_time"].timestamp()) * 1000000),
                    "level":
                    utils.UInt64(
                        0 if orphan_comment else doc["depth"]
                    ),  # this value will be incorrect for comment to orphan comment
                    # but we only use level for comments nesting limits,
                    # so it seems that this is not a problem
                    "_SERVICE_": {
                        "scope": doc["author"],
                        "rev": utils.Int64(1),
                        "payer": doc["author"],
                        "size": 50
                    }
                }
                self.publish_tables.message.append(message)

                tags = []
                if (isinstance(doc["json_metadata"], dict)):
                    if ("tags" in doc["json_metadata"]):
                        tags = create_tags(doc["json_metadata"]["tags"])

                if (isinstance(doc["json_metadata"], str)):
                    try:
                        if (doc["json_metadata"]):
                            json_str = doc["json_metadata"]
                            if ((json_str.find("\"") == 0) and
                                (json_str.rfind("\"") == len(json_str) - 1)):
                                json_str = json_str[1:len(json_str) - 1]
                            dict_metadata = json.loads(json_str)
                            if (dict_metadata["tags"]):
                                tags = create_tags(dict_metadata["tags"])
                    except Exception:
                        tags = []

                content = {
                    "id": utils.UInt64(cur_mssg_id),
                    "headermssg": doc["title"],
                    "bodymssg": doc["body"],
                    "languagemssg": "",
                    "tags": tags,
                    "jsonmetadata": doc["json_metadata"],
                    "_SERVICE_": {
                        "scope": doc["author"],
                        "rev": utils.Int64(1),
                        "payer": doc["author"],
                        "size": 50
                    }
                }
                self.publish_tables.content.append(content)

                if added % self.cache_period == 0:
                    self.publish_tables.writeCache()
                    print("messages converted -- ", added)
                    utils.printProgressBar(passed + 1,
                                           length,
                                           prefix='Progress:',
                                           suffix='Complete',
                                           length=50)
                added += 1

            except pymongo.errors.BulkWriteError as e:
                print(doc)
                print(e.args)
                print(e.details)
                print(traceback.format_exc())
                break
        try:
            self.publish_tables.writeCache()
            utils.printProgressBar(passed + 1,
                                   length,
                                   prefix='Progress:',
                                   suffix='Complete',
                                   length=50)
        except Exception as e:
            print(e.args)
            print(traceback.format_exc())

        pool["state"]["rshares"] = utils.Int128(rshares_sum)
        pool["state"]["rsharesfn"] = utils.Int128(rshares_sum)
        reward_pools.save(pool)
        print("...done")
Пример #7
0
    def convert_votes(self, query={}):
        print("convert_votes")
        golos_votes = self.golos_db['comment_vote_object']
        cyberway_messages = self.publish_db['message']

        cursor = golos_votes.find(query)
        length = cursor.count()
        print("total votes = ", length)
        length = golos_votes.count()
        utils.printProgressBar(0,
                               length,
                               prefix='Progress:',
                               suffix='Complete',
                               length=50)

        added = 0
        passed = -1
        for doc in cursor:
            passed += 1
            try:
                if (not (doc["author"] in self.exists_accs)) or (
                        not (doc["voter"] in self.exists_accs)):
                    continue

                post_id = (doc["author"], doc["permlink"])
                cur_mssg_id = self.get_post_id(doc["author"], doc["permlink"])

                vote = {
                    "id":
                    utils.UInt64(self.publish_tables.vote.nextId()),
                    "message_id":
                    utils.UInt64(cur_mssg_id),
                    "voter":
                    doc["voter"],
                    "weight":
                    doc["vote_percent"],
                    "time":
                    utils.UInt64(
                        int(doc["last_update"].timestamp()) * 1000000),
                    "count":
                    utils.Int64(doc["num_changes"]),
                    "delegators": [],
                    "curatorsw":
                    utils.Int64(doc["weight"] / 2),
                    "rshares":
                    utils.Int64(utils.get_fixp_raw(doc["rshares"])),
                    "_SERVICE_": {
                        "scope": doc["author"],
                        "rev": utils.Int64(1),
                        "payer": doc["author"],
                        "size": 50
                    }
                }

                self.publish_tables.vote.append(vote)

                self.mssgs_curatorsw[(doc["author"],
                                      cur_mssg_id)] += vote["curatorsw"]

                if added % self.cache_period == 0:
                    self.publish_tables.writeCache()
                    print("votes converted -- ", added)
                    utils.printProgressBar(passed + 1,
                                           length,
                                           prefix='Progress:',
                                           suffix='Complete',
                                           length=50)
                added += 1

            except Exception as e:
                print(doc)
                print(e.args)
                print(traceback.format_exc())
                break
        try:
            self.publish_tables.writeCache()
            utils.printProgressBar(passed + 1,
                                   length,
                                   prefix='Progress:',
                                   suffix='Complete',
                                   length=50)
        except Exception as e:
            print(e.args)
            print(traceback.format_exc())
        print('...done')
Пример #8
0
def create_account(doc):
    account_id = cyberway.account.nextId()
    last_code_update = datetime.datetime.strptime("1970-01-01T00:00:00.000Z", "%Y-%m-%dT%H:%M:%S.000Z")

    account = {
        "id" : utils.UInt64(account_id),
        "name" : doc["name"],
        "vm_type" : utils.UInt64(0),
        "vm_version" : utils.UInt64(0),
        "privileged" : False,
        "last_code_update" : last_code_update,
        "code_version" : "0000000000000000000000000000000000000000000000000000000000000000",
        "creation_date" : doc["created"],
        "code" : "",
        "abi" : "",
        "_SERVICE_" : {
            "scope" : "",
            "rev" : utils.Int64(1),
            "payer" : "",
            "size" : 65
        }
    }
    cyberway.account.append(account)

    accountseq = {
        "id" : utils.UInt64(account_id),
        "name" : doc["name"],
        "recv_sequence" : utils.UInt64(0),
        "auth_sequence" : utils.UInt64(0),
        "code_sequence" : utils.UInt64(0),
        "abi_sequence" : utils.UInt64(0),
        "_SERVICE_" : {
            "scope" : "",
            "rev" : utils.Int64(1),
            "payer" : "",
            "size" : 48
        }
    }
    cyberway.accountseq.append(accountseq)

    reslimit = {
        "id" : utils.UInt64(account_id),
        "owner" : doc["name"],
        "pending" : False,
        "net_weight" : utils.Int64(-1),
        "cpu_weight" : utils.Int64(-1),
        "ram_bytes" : utils.Int64(-1),
        "_SERVICE_" : {
            "scope" : "",
            "rev" : utils.Int64(1),
            "payer" : "",
            "size" : 41
        }
    }
    cyberway.reslimit.append(reslimit)

    resusage = {
        "id" : utils.UInt64(account_id),
        "owner" : doc["name"],
        "net_usage" : {
            "last_ordinal" : utils.UInt64(0),
            "value_ex" : utils.UInt64(0),
            "consumed" : utils.UInt64(0)
        },
        "cpu_usage" : {
            "last_ordinal" : utils.UInt64(0),
            "value_ex" : utils.UInt64(0),
            "consumed" : utils.UInt64(0)
        },
        "ram_usage" : utils.UInt64(2724),
        "_SERVICE_" : {
            "scope" : "",
            "rev" : utils.Int64(1),
            "payer" : "",
            "size" : 64
        }
    }
    cyberway.resusage.append(resusage)
Пример #9
0
def convert_amount(amount, precision):
    return utils.UInt64(int(amount*(10**precision)))