ARCHIVED - Officially moved into Wire-Network/wire-libraries-ts
A protoc plugin that generates Solidity libraries with full protobuf3 wire
format encode and decode support for on-chain / off-chain
interoperability.
pnpm install
pnpm dist # tsc → lib/, esbuild → dist/bundle/
# Generate Solidity from .proto files
protoc \
--plugin=protoc-gen-solidity=./dist/bundle/protoc-gen-solidity.cjs \
--solidity_out=./test/generated \
testprotos/example.proto.proto → protoc --plugin=protoc-gen-solidity
├── ProtobufRuntime.sol (shared wire format primitives)
└── Example.sol (struct + codec library per message)
Each .proto file produces a single .sol containing:
- Struct definitions — one per message (maps become parallel arrays)
- Codec libraries —
MessageNameCodec.encode(msg) → bytesandMessageNameCodec.decode(bytes) → msgwith tag-dispatch loop
ProtobufRuntime.sol provides gas-optimized wire primitives with inline
assembly for varint encode/decode hot paths (~40–60% gas reduction vs pure
Solidity).
| Proto | Solidity | Wire Type |
|---|---|---|
int32/int64 |
int32/int64 |
Varint |
uint32/uint64 |
uint32/uint64 |
Varint |
sint32/sint64 |
int32/int64 |
Varint (ZigZag) |
bool |
bool |
Varint |
string |
string |
Length-delimited |
bytes |
bytes |
Length-delimited |
fixed32/fixed64 |
uint32/uint64 |
Fixed |
sfixed32/sfixed64 |
int32/int64 |
Fixed |
enum |
uint64 |
Varint |
message |
struct |
Length-delimited |
repeated T |
T[] |
Sequential tags |
map<K,V> |
K[] + V[] |
Length-delimited |
Pass via --sol_opt:
protoc --sol_opt=log_level=debug ...| Parameter | Values | Default |
|---|---|---|
log_level |
trace,debug,info,warn,error |
info |
src/
├── index.ts # stdin/stdout protoc bridge
├── plugin.ts # request processing & descriptor walking
├── generator/
│ ├── type-map.ts # proto → Solidity type mapping
│ ├── field.ts # field-level encode/decode codegen
│ ├── message.ts # message-level .sol file generation
│ └── runtime.ts # ProtobufRuntime.sol emitter
└── util/
├── logger.ts # tracer-based stderr logging
└── names.ts # naming convention utilities
| Command | Output |
|---|---|
pnpm build |
lib/ — compiled TypeScript |
pnpm bundle |
dist/bundle/ — esbuild CJS |
pnpm dist |
Both |
MIT