Devcon 2024研讨会:ET仿真

  • ephema
  • 发布于 2024-11-16 14:28
  • 阅读 148

本文档是关于在 Devcon 2024 上举行的“执行票证的基于代理的仿真”研讨会的文档。主要内容包括如何在 Google Colab 或本地 Jupyter Notebook 环境中设置和运行 ET 仿真,以及如何调整仿真参数和配置,以便用户可以设计自己的仿真并比较结果。此外,还提供了关于调整票证持有者属性和竞标策略的说明。

跳至内容

页面图标

Devcon 2024 工作坊:ET 模拟

本文档包含关于2024年11月15日下午2:30在B教室举行的“工作坊:执行票的基于代理的模拟”的工作坊文档。

理论背景

🎰 工作坊设置

💡 Callout icon

工作坊目标:运行你自己的模拟配置并比较结果。

google_colaboratory_svg_logo-svg 使用 Google Colab(推荐)

如果你不想使用 Google Colab 并且想在本地运行代码,请参阅下面的章节,了解如何自行在本地设置,例如使用 Jupyter Lab。

1. 注册 Google Colab 并复制 Notebook

使用 Google Colab 注册

访问模拟 notebook:Google Colab

在你的云盘中保存副本:“文件 > 在云盘中保存副本”

2. 设置模拟

2.1. 从 Github 下载 repo

使用以下链接下载代码:ET-Simulation

需要复习一下使用 GitHub 吗?查看例如这里

2.2. 将 repo 文件夹移动到 Google Drive 主文件夹

支持类需要存储在你的 Google MyDrive 中,才能从 Colab Notebook 访问。

❗ 因此,我们建议将包含代码的文件夹(默认名称为“ET-Simulation-main”)复制到你的“MyDrive”(链接)主目录。

2.3. [可选] 如果你没有将文件存储在根文件夹中,请调整文件路径

3. 运行模拟

要运行模拟,只需转到 Jupyter notebook 中的“运行时”和“全部运行”。如果所有设置都正确,它应该运行并显示以及存储结果。

将模拟连接到你的 Google Drive。运行模拟时,系统会提示你连接你的 Google Drive。请这样做。

要检查一切是否正常,你可以在 notebook 的末尾检查结果。它们应该显示你特定模拟运行的结果。

🎉 恭喜,你现在已成功在你的帐户上设置了模拟。现在你可以开始玩转模拟并调整模拟参数。

4. 设计你自己的配置并调整模拟

要运行你自己设计的模拟,请调整“sys_params”:

# 定义实验参数
TIMESTEPS = 1000
RUNS = 10 # 仅当运行一次时,才支持生成结果图片
# 定义系统参数

sys_params = {
    'selling_mechanism': 'first_price', # 选项 'EIP-1559', 'AMM-style', 'first_price' 或 'second_price',目前
    'max_tickets': 100, # 对于灵活的票数,此值的一半用作目标值
    'initial_ticket_price': 20, # 应低于 MEV 规模,否则持票人会亏本购买门票(不现实)
    'MEV_scale': 30,
    'slots_per_epoch': 32,
    'number_of_ticket_holders': 10,
    'secondary_market': True, # 决定是否启用二级市场
    'price_vola': {'mean': 0, 'sigma': 0.2}, # 波动率指数,服从对数正态分布。可以设置为 [None, None]。如果不是 'None':定义底层正态分布的均值(应设置为 0),sigma 为标准差。典型值可能为 0 & 0.2
    'agent_bidding_strategy': 'optimal_heuristic_bidding', # 仅与一阶或二阶价格拍卖相关。其他选项:naive_hist_obs_of_dist, hist_obs_of_dist, random_evenly_10_50, optimal_heuristic_bidding(最后一个仅适用于 FPA)
    'EIP-1559_max_tickets': 4, # 仅与 EIP-1559 相关,每个 slot 要购买的最大票数。
    'EIP-1559_adjust_factor': 8, # 定义价格调整对于 EIP-1559 定价的快慢,类似于 EIP-1559 (1/factor),8 = 12.5%
    'AMM_adjust_factor': 25, # 定义价格调整对于 AMM 风格定价的快慢,类似于 EIP-1559 (1/factor),8 = 12.5%
    'expiry_period': None, # 定义门票是否过期:None - 定义为不过期,否则为要过期的插槽的 Int 值。对于初始化阶段,它是 ticket_id + expiry_period。
    'reimbursement_factor': None, # 仅与 AMM 风格定价相关。持票人可以将其门票价格卖回协议。'None' 用于禁用该选项。否则,0 到 1 之间的数字表示折扣(0 表示无折扣)。请注意,由于票价的离散性,折扣太小可能会导致无限循环的出售。
}

5. [可选]:调整持票人及其竞标策略的配置

在 TicketHolderAgent 类 ('Support-Classes/models.py') 中调整持票人的属性:

# 定义 TicketHolders 作为代理
class TicketHolderAgent:
    def __init__(self, id, params):
        self.id = id
        num_holders = params['number_of_ticket_holders']
        if self.id <= (num_holders * 0.2):
            self.type = 'top'
            self.available_funds = random.uniform(400, 1000)
            self.MEV_capture_rate = random.uniform(0.85, 0.95)
        elif self.id > (num_holders * 0.2) and self.id <= (num_holders * 0.6):
            self.type = 'middle'
            self.available_funds = random.uniform(300, 700)
            self.MEV_capture_rate = random.uniform(0.75, 0.85)
        elif self.id > (num_holders * 0.6):
            self.type = 'tail'
            self.available_funds = random.uniform(200, 500)
            self.MEV_capture_rate = random.uniform(0.6, 0.75)
        self.aggressiveness = np.random.normal(0.15, 0.02) # np.random.normal(mean, std_dev) # random.uniform(0.01, 0.3)
        self.vola_spec_factor = np.random.normal(1, 0.5) # Builder 波动率专业化的随机分布
        if self.vola_spec_factor <= 0:
            self.vola_spec_factor = 0.1
        self.earnings = 0
        self.costs = 0
        self.purchase_value_of_unredeemed_tickets = 0
        self.won_slots = []
        self.discount_factor = 1 # 目前通常设置为 1,详情请参阅研究报告。反映了插槽间的折扣因子

使用以下方法在 ('Support-Classes/models.py') 中调整持票人的竞标机制:

def decide_bid_first_price(self, params):
def decide_bid_second_price(self, params, ticket_for_sale=None, current_slot=None, vola_this_slot=None, previous_state=None):
def decide_EIP_1559_ticket(self, ticket_price, params):
def decide_AMM_ticket(self, ticket_price, params):
def holder_decide_AMM_sell(self, tickets, ticket_price, params):

jupyter_logo-svg 使用 Jupyter Notebook

如果你想在本地运行它,你可以在这里找到相关文档,我们希望你能自行完成此过程。

1. [可选] 先决条件:安装 Python 和 Jupyter Notebook / Lab

2. 设置模拟

3. 运行模拟

4. 设计你自己的配置并调整模拟

5. [可选]:调整持票人及其竞标策略的配置

分享你的结果

🏒\ \ 共享结果列表

❓ 常见问题解答 & 调试

设置

模拟

  • 原文链接: ephema.notion.site/Devco...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
ephema
ephema
江湖只有他的大名,没有他的介绍。