项目介绍
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
)
同样注意最后一步如果提交错误的数据会损失你的点数
最后如果文章对你有帮助或者有疑问,欢迎来交流,关注我的推特不定期更新