A Short Introduction To Huff

KCC Official
5 min readJan 10, 2023

--

Jan 9, 2023, KCC has been invited to do a presentation on Moonshot Hackathon. Since it is an inner workshop, we will share the recap of Junm, the KCC blockchain engineer’s speech here.

Time: Jan 9, 2023

Venue: Moonshot Hackathon

Topic: A Short Introduction To Huff

Overview(~3min)

  • Huff 是一种底层语言。
  • 最早几年前,Aztec 的团队开发了 Huff 语言,因为 **当时(Istanbul 硬分叉之前)**precompile gas cost 太高,而 Solidity 和 Yul 都无法满足他们需求。
  • 几个月前,huff-rs 编译器出来,并对 foundry 有很好的支持,于是 Huff 又开始受到一些关注,并且被认为是非常适合学习 EVM 的一个底层语言
  • Yul 的定位是一种 IR(intermediate representation),在语言设计的时候,设计目标中尝试将 EVM 的 stack 尽量抽象掉,因此通过 Yul 去学习 EVM 并不是一个好的主意。而 Huff 更推荐用来学习 EVM,因为它更接近 bytecode/mnemonic,将 EVM 的 stack 直接暴露给了开发者

A Short Introduction to EVM(~5min)

BTW: 之前,我有在其他地方做一个更详细的分享,如果感兴趣,可以参考这个视频

Stack ⇒ LIFO (Last in first out)

  • EVM 里面最基本的指令就是一系列 PUSH,这些 PUSH 可以把 bytes 放到 Stack 的顶部
  • EVM 里面的其他 Operators,它们的输入和输出也大多放在 Stack 的顶部,比如这里的乘法 MULT
  • EVM 的 Stack 中的每个 Entry 是 32 bytes, 也就是 256 bits; EVM 的 byte order 是 big endianness

下面这两张图图片引用自这里

“Stack too Deep”:

Simple Multiplication(~5min)

EVM 的智能合约是没有 “函数” 的概念的,函数是编译器为你抽象出来的。

当你向一个智能合约发起一笔交易的时候,EVM 会从合约的 code 中的第一个指令开始执行。

上面左边是 bytecode 和 对应的 mnemonic; 右边是 huff 和 使用 yul 来写同样的程序。

  • bytecode 读起来是很痛苦的
  • huff 看起来似乎像是简化版本的 mnemonic
  • Yul 将 Stack 隐藏了起来

A Contract With Two Functions (~9min)

Message Call:

Function Dispatching Based on the function selector:

Huff does not abstract function dispatching.

Get Selector From Calldata:

Function Dispatching:

Jump Tables(~6min)

Without jump tables:

Example from here:

“Foundry-huff”

Test in foundry:

Close

  • An afternoon, a cup of coffee, and huff.sh

--

--

KCC Official
KCC Official

Written by KCC Official

KCC is a high-performance and decentralized public chain developed based on ETH to provide users with a more high-speed, convenient, and low-cost experience

No responses yet