dapaopao

发布于 2022-11-06到 Mirror 阅读

使用python API创建/验证Golden Triples

项目介绍

Golden是一个老牌项目了,最近B轮融资4千万美元,而且是一个明牌空投项目,最近很火所以很多人参与。关于项目的具体介绍可以查看官网,类似于维基百科。

如果你想通过UI参与那么可以查看这篇文章的详细介绍

https://mirror.xyz/syskeys.eth/G8kmnWkkCp4MLewtdpqlzOAzrONLl-DhCNzsExMN2dA

获得空投的条件是积分制,创建完第一条Triple并且验证通过后会受到邀请邮件,点击邮件链接进入后可以查看积分榜单。

同时获得调用API接口的权利:dapp.golden.xyz/profile

点击copy后记录你的JWT。需要这个才能调用API

注意:请不要分享你的这段token

代码实现

python版本3.7以上

如果只需要自带的基本功能使用指令

pip install godel

如果需要一些数据分析工具使用指令

pip install godel[web3,data-tools]

安装pandas

pip install pandas

1.创建Triple

连接Golden web3 API

JWT_TOKEN部分粘贴你自己的token,就是之前用户信息哪里复制的

from godel import GoldenAPI

JWT_TOKEN = "<你的JWT>"  输入你的 token
goldapi = GoldenAPI(jwt_token=JWT_TOKEN)

测试一下是否连接成功,比如输入Barack Obama

import pandas as pd

# Test connection with search
search_results = goldapi.entity_search(name="Barack Obama")
search_results_df = pd.DataFrame(search_results["data"]["entityByName"]["nodes"])
print(search_results_df)

运行你的代码python main.py , 入下图成功了

同样你也要可以用这个方法获取一些谓词的ID和接受数据格式

import pandas as pd

predicates = {}
for p in goldapi.predicates()["data"]["predicates"]["edges"]:
    p = p["node"]
    predicates[p["name"]] = {"id": p["id"], "objectType": p["objectType"]} 
predicates_df = pd.DataFrame(predicates).transpose()
print(predicates_df )

成功后如下

OK,了解了这些功能后开始正式创建Triple

我们要知道如何提交创建的语句,以及接受那些参数,在API中CreateStatementInput就是我们所要提交的数据的结构类型

from godel.schema import CreateStatementInput, StatementInputRecordInput

CreateStatementInput

CreateStatementInput的格式如下

input CreateStatementInput {
  clientMutationId: String
  subjectId: UUID!
  predicateId: UUID!
  objectValue: String
  objectEntityId: UUID
  citationUrls: [String]
  qualifiers: [QualifierInputRecordInput]
}

这样我们可以开始填写我们的数据

假设我们知道一条三元组数据是:奥巴马的个人网站是 https://barackobama.com/

from godel import GoldenAPI
import pandas as pd

JWT_TOKEN = "<你的JWT>"  输入你的 token
goldapi = GoldenAPI(jwt_token=JWT_TOKEN)

search_results = goldapi.entity_search(name="Barack Obama")
search_results_df = pd.DataFrame(search_results["data"]["entityByName"]["nodes"])
for p in goldapi.predicates()["data"]["predicates"]["edges"]:
    p = p["node"]
    predicates[p["name"]] = {"id": p["id"], "objectType": p["objectType"]} 
predicates_df = pd.DataFrame(predicates).transpose()
# Triple data
subject_id = search_results_df["id"][0]  # 对应实体ID,在之前的表格中是第一个所以用[0]
predicate_id = predicates_df["id"]["Website"]  # 查找website对应谓词的ID
object_value = "https://barackobama.com/" # obama的网站地址

# 创建 statement 输入刚才的几个数据
create_statement_input = CreateStatementInput(
    subject_id=subject_id,
    predicate_id=predicate_id,
    object_value=object_value,
    citation_urls=[],
)
data = goldapi.create_statement(create_statement_input=create_statement_input)
data

这样就创建好了一条triple

注意最后一步如果提交错误的数据会损失你的点数

2.验证Triples

和创建一样的方式连接Golden web3 API

JWT_TOKEN部分粘贴你自己的token

from godel import GoldenAPI

JWT_TOKEN = "<你的JWT>"  # 输入你的 token
goldapi = GoldenAPI(jwt_token=JWT_TOKEN)

获得未验证的triple,如果你用过他们UI版界面提交验证的话,可以看出他们是有一个队列,每次你做出选择后,会有新的未验证triple出现。同理API也是

# 获取未验证的 triple
data = goldapi.unvalidated_triple()["data"]
unvalidated_triple = data["triple"]
unvalidated_triple

unvalidated_triple数据格式如下

下列方法可通过谓词ID来获取谓词的信息

predicate_by_id(id)

下列方法可通过实体ID来获取实体信息

entity_by_golden_id(golden_id, **kwargs)

更多方法可以查看 文档

最后来创建验证

from godel.schema import ValidationType

# Retrieve Choices for Validation
ValidationType

ValidationType是一个枚举类型 对应的三个状态:

  • 接受

  • 拒绝

  • 跳过

enum ValidationType {
  ACCEPTED
  REJECTED
  SKIPPED
}

最后对你的判断创建验证组并且提交

# 用获取的未验证id 输入判断你的结果
triple_id = unvalidated_triple["id"]
validation_type = "REJECTED"
# 创建验证
goldapi.create_validation(
    triple_id=triple_id,
    validation_type=validation_type
)

最终运行代码如下

from godel import GoldenAPI
from godel.schema import ValidationType

JWT_TOKEN = "<你的JWT>"  # 输入你的 token
goldapi = GoldenAPI(jwt_token=JWT_TOKEN)
# 获取未验证的 triple
data = goldapi.unvalidated_triple()["data"]
unvalidated_triple = data["triple"]
# 用获取的未验证id 输入判断你的结果
triple_id = unvalidated_triple["id"]
validation_type = "REJECTED"
# 创建验证
goldapi.create_validation(
    triple_id=triple_id,
    validation_type=validation_type
)

同样注意最后一步如果提交错误的数据会损失你的点数

最后如果文章对你有帮助或者有疑问,欢迎来交流,关注我的推特不定期更新

https://twitter.com/dapaopao_eth