Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions .github/workflows/fmt.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
name: fmt

on:
push:
branches: ["main", "master"]
pull_request:
branches: ["main", "master"]

jobs:
uncrustify:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

- name: Install uncrustify
run: sudo apt-get install -y uncrustify

- name: Check brace style
run: >
find . -path ./.git -prune -o -path ./secp256k1 -prune -o \( -name '*.c' -o -name '*.h' \) -print
| xargs uncrustify -c .uncrustify.cfg --check
29 changes: 29 additions & 0 deletions .uncrustify.cfg
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# Enforce brace style only — all other options at default (ignore)

# indentation style (4 spaces)
indent_with_tabs = 0
indent_columns = 4

# Add braces to braceless single-line control blocks
mod_full_brace_if = add
mod_full_brace_for = add
mod_full_brace_while = add
mod_full_brace_do = add

# Ensure the body is on its own line (not inlined after the opening brace)
nl_after_brace_open = true

# Don't expand one-line braced assignments/initializers, as in 'x = { 1, 2 };'
nl_assign_leave_one_liners = true

# Space between closing ) of condition and opening {
sp_sparen_brace = add

# Space between else/catch and opening {
sp_else_brace = add

# One statement per line (splits 'a = 1; b = 2;' and struct members)
nl_after_semicolon = true

# Align closing ) with the statement, not the arguments
indent_paren_close = -1
4 changes: 3 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ LIBS=$(patsubst src/%.cpp, lib/%.o, $(wildcard src/*.cpp)) $(patsubst src/%.m, l
INTEGRATIONS=$(addprefix tst/in/,$(shell ls tst/in)) $(addprefix tst/dio,$(shell ls tst/*.json))


.PHONY: default all clean again check distcheck dist-check force-version
.PHONY: default all clean again check distcheck dist-check force-version fmt
.SECONDARY:
default: all
all: $(EXECS) $(TESTS) README.md
Expand All @@ -25,6 +25,8 @@ clean:
make -C secp256k1 clean
again: clean all
check: $(addprefix .pass/,$(TESTS) $(INTEGRATIONS))
fmt:
find . -path ./.git -prune -o -path ./secp256k1 -prune -o \( -name '*.c' -o -name '*.h' \) -print | xargs uncrustify -c .uncrustify.cfg --replace --no-backup

FNM=\([-+a-z_A-Z0-9/]*\)
.make/%.d: %.m
Expand Down
139 changes: 73 additions & 66 deletions evm.c
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,9 @@ static void assemble(const char *contents) {
programLength += 11;
}

for (; programLength--;) printf("%02x", *programStart++);
for (; programLength--;) {
printf("%02x", *programStart++);
}
putchar('\n');
}

Expand Down Expand Up @@ -162,7 +164,9 @@ static void execute(const char *contents) {
}
fputs("returnData\":\"0x", stdout);
}
for (;result.returnData.size--;) printf("%02x", *result.returnData.content++);
for (; result.returnData.size--;) {
printf("%02x", *result.returnData.content++);
}
if (outputJson) {
fputs("\"}", stdout);
}
Expand All @@ -182,53 +186,54 @@ int main(int argc, char *const argv[]) {

int option;
char *contents = NULL;
while ((option = getopt_long(argc, argv, "cCdgjlo:suvw:x", long_options, NULL)) != -1)
while ((option = getopt_long(argc, argv, "cCdgjlo:suvw:x", long_options, NULL)) != -1) {
switch (option) {
case 'c':
wrapMinConstructor = 1;
break;
case 'C':
wrapUniversalConstructor = 1;
break;
case 'd':
inverse = 1;
break;
case 'j':
labelJumpdests = 1;
break;
case 'o':
contents = optarg;
break;
case 'x':
runtime = 1;
break;
case 'g':
includeGas = 1;
break;
case 's':
includeStatus = 1;
break;
case 'l':
includeLogs = 1;
break;
case 'u':
updateConfigFile = 1;
break;
case 'v':
puts(evm_build_version);
return 0;
case 'w':
if (configFile == NULL) {
evmInit();
}
configFile = optarg;
loadConfig(configFile, updateConfigFile);
break;
case '?':
default:
USAGE;
return 1;
case 'c':
wrapMinConstructor = 1;
break;
case 'C':
wrapUniversalConstructor = 1;
break;
case 'd':
inverse = 1;
break;
case 'j':
labelJumpdests = 1;
break;
case 'o':
contents = optarg;
break;
case 'x':
runtime = 1;
break;
case 'g':
includeGas = 1;
break;
case 's':
includeStatus = 1;
break;
case 'l':
includeLogs = 1;
break;
case 'u':
updateConfigFile = 1;
break;
case 'v':
puts(evm_build_version);
return 0;
case 'w':
if (configFile == NULL) {
evmInit();
}
configFile = optarg;
loadConfig(configFile, updateConfigFile);
break;
case '?':
default:
USAGE;
return 1;
}
}
if (inverse && wrapMinConstructor) {
fputs("-c cannot be used with -d\n", stderr);
USAGE;
Expand Down Expand Up @@ -315,27 +320,29 @@ int main(int argc, char *const argv[]) {
subprogram(input);
// free is redundant with program termination but makes valgrind happy
free(input);
} else for (int i = optind; i < argc; i++) {
int fd = open(argv[i], O_RDONLY);
if (fd == -1) {
perror(argv[i]);
_exit(1);
}
} else {
for (int i = optind; i < argc; i++) {
int fd = open(argv[i], O_RDONLY);
if (fd == -1) {
perror(argv[i]);
_exit(1);
}

struct stat fstatus;
int fstatSuccess = fstat(fd, &fstatus);
if (fstatSuccess == -1) {
perror(argv[i]);
_exit(1);
}

contents = mmap(NULL, fstatus.st_size, PROT_READ, MAP_PRIVATE | MAP_FILE, fd, 0);
if (contents == NULL) {
perror(argv[i]);
struct stat fstatus;
int fstatSuccess = fstat(fd, &fstatus);
if (fstatSuccess == -1) {
perror(argv[i]);
_exit(1);
}

contents = mmap(NULL, fstatus.st_size, PROT_READ, MAP_PRIVATE | MAP_FILE, fd, 0);
if (contents == NULL) {
perror(argv[i]);
}
subprogram(contents);
munmap(contents, fstatus.st_size);
close(fd);
}
subprogram(contents);
munmap(contents, fstatus.st_size);
close(fd);
}
return 0;
}
77 changes: 39 additions & 38 deletions include/address.h
Original file line number Diff line number Diff line change
Expand Up @@ -75,57 +75,58 @@ static inline void AddressToUint256(uint256_t *dst, address_t *src) {
UPPER(UPPER_P(dst)) = 0;
LOWER(UPPER_P(dst)) =
( ((uint64_t)src->address[0] << 24ull)
| ((uint64_t)src->address[1] << 16ull)
| ((uint64_t)src->address[2] << 8ull)
| ((uint64_t)src->address[3])
| ((uint64_t)src->address[1] << 16ull)
| ((uint64_t)src->address[2] << 8ull)
| ((uint64_t)src->address[3])
);
UPPER(LOWER_P(dst)) =
( ((uint64_t)src->address[4] << 56ull)
| ((uint64_t)src->address[5] << 48ull)
| ((uint64_t)src->address[6] << 40ull)
| ((uint64_t)src->address[7] << 32ull)
| ((uint64_t)src->address[8] << 24ull)
| ((uint64_t)src->address[9] << 16ull)
| ((uint64_t)src->address[10] << 8ull)
| ((uint64_t)src->address[11])
| ((uint64_t)src->address[5] << 48ull)
| ((uint64_t)src->address[6] << 40ull)
| ((uint64_t)src->address[7] << 32ull)
| ((uint64_t)src->address[8] << 24ull)
| ((uint64_t)src->address[9] << 16ull)
| ((uint64_t)src->address[10] << 8ull)
| ((uint64_t)src->address[11])
);
LOWER(LOWER_P(dst)) =
( ((uint64_t)src->address[12] << 56ull)
| ((uint64_t)src->address[13] << 48ull)
| ((uint64_t)src->address[14] << 40ull)
| ((uint64_t)src->address[15] << 32ull)
| ((uint64_t)src->address[16] << 24ull)
| ((uint64_t)src->address[17] << 16ull)
| ((uint64_t)src->address[18] << 8ull)
| ((uint64_t)src->address[19])
| ((uint64_t)src->address[13] << 48ull)
| ((uint64_t)src->address[14] << 40ull)
| ((uint64_t)src->address[15] << 32ull)
| ((uint64_t)src->address[16] << 24ull)
| ((uint64_t)src->address[17] << 16ull)
| ((uint64_t)src->address[18] << 8ull)
| ((uint64_t)src->address[19])
);
}

#define fprintAddress(file, addr) fprintf(file, "0x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", \
addr.address[0], addr.address[1], addr.address[2], addr.address[3], addr.address[4], addr.address[5], addr.address[6], addr.address[7], addr.address[8], addr.address[9], addr.address[10],\
addr.address[11], addr.address[12], addr.address[13], addr.address[14], addr.address[15], addr.address[16], addr.address[17], addr.address[18], addr.address[19]\
)
#define fprintAddress(file, addr) \
fprintf(file, "0x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", \
addr.address[0], addr.address[1], addr.address[2], addr.address[3], addr.address[4], addr.address[5], addr.address[6], addr.address[7], addr.address[8], addr.address[9], addr.address[10], \
addr.address[11], addr.address[12], addr.address[13], addr.address[14], addr.address[15], addr.address[16], addr.address[17], addr.address[18], addr.address[19] \
)


static inline int AddressIsPrecompile(const address_t address) {
return !address.address[0] &&
!address.address[1] &&
!address.address[2] &&
!address.address[3] &&
!address.address[4] &&
!address.address[5] &&
!address.address[6] &&
!address.address[7] &&
!address.address[8] &&
!address.address[9] &&
!address.address[10] &&
!address.address[11] &&
!address.address[12] &&
!address.address[13] &&
!address.address[14] &&
!address.address[15] &&
!address.address[16] &&
!address.address[17];
!address.address[1] &&
!address.address[2] &&
!address.address[3] &&
!address.address[4] &&
!address.address[5] &&
!address.address[6] &&
!address.address[7] &&
!address.address[8] &&
!address.address[9] &&
!address.address[10] &&
!address.address[11] &&
!address.address[12] &&
!address.address[13] &&
!address.address[14] &&
!address.address[15] &&
!address.address[16] &&
!address.address[17];
}

// assumes AddressIsPrecompile
Expand Down
20 changes: 10 additions & 10 deletions include/dec.h
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
#define DECCHARS \
DEC(0) \
DEC(1) \
DEC(2) \
DEC(3) \
DEC(4) \
DEC(5) \
DEC(6) \
DEC(7) \
DEC(8) \
DEC(9) \
DEC(0) \
DEC(1) \
DEC(2) \
DEC(3) \
DEC(4) \
DEC(5) \
DEC(6) \
DEC(7) \
DEC(8) \
DEC(9) \

static inline int isDecimal(char h) {
return (h >= '0' && h <= '9') || (h == '-');
Expand Down
2 changes: 1 addition & 1 deletion include/evm.h
Original file line number Diff line number Diff line change
Expand Up @@ -133,4 +133,4 @@ result_t evmConstruct(address_t from, address_t to, uint64_t gas, val_t value, d
// TODO gasPrice, basefee, blockNumber
result_t txCall(address_t from, uint64_t gas, address_t to, val_t value, data_t input, const accessList_t *accessList);
// TODO accessList
result_t txCreate(address_t from, uint64_t gas, val_t value, data_t input/*, const accessList_t *accessList*/);
result_t txCreate(address_t from, uint64_t gas, val_t value, data_t input /*, const accessList_t *accessList*/);
Loading
Loading