Your First 90 DaysAcademy
The Grammar · Contracts Talking to Contracts · Week 7 · Checkpoint 15

The Call Raw

Every call you have read so far looked like a function call. Read the library that does them by hand, one hundred and sixty seven lines in seven windows, and a call turns out to be an address, a run of bytes, an amount of wei, and an answer that is also a run of bytes.

15 steps~30 min3 nodes for your map
01 · The file under the syntax

You have read `token.transfer(to, value)` and `super.supportsInterface(id)` and thought of them as function calls, because that is what they look like. Underneath, the machine has no notion of a function. It knows an address, a run of bytes to hand over, and an amount of wei to send along.

This OpenZeppelin library is one hundred and sixty seven lines about exactly that, and it arrives in seven windows numbered the way the file numbers itself. The first sixteen are paperwork and one error.

02 · Two files arrive before anything happens

A licence comment, a release stamp, a pragma with a ceiling on it. You have read this opening several times now and can skim it in a second. The two lines worth stopping on are 6 and 7, and both are imports of the shape you already know.

`Errors` is a set of error declarations shared across the whole library. `LowLevelCall` is where the actual machine instruction lives. This file is the readable wrapper around that one, which is why a prefix keeps appearing in front of the real work.

03 · One error declared here, two arriving from elsewhere

Line 12 opens a library, which you read in the last checkpoint: no state of its own, nothing to deploy, functions meant to be called against a value you are already holding. Every function in here is `internal`, so nothing outside can call one: a contract using this library carries these lines around inside itself.

Line 16 declares a custom error, and the comment above it says the whole of it: there is no code at `target`. Before the file is over you will watch it revert with three different error names. Only one of them is on this board.

This file reverts with three error names in total, and line 16 declares one of them. Where do the other two come from?
your balance2,400
BANK_DBowner: the bank
you2,400
what the app is actually showing you
BANK_DBowner: the bank
you2,400their pen
you hold a claim. they hold the pen.
your digital life
BANK · you2,400the bank ✍
INSTAGRAM · you2.1M followersMeta ✍
STEAM · you134 gamesValve ✍
AIRLINE · you58,200 milesthe airline ✍
four tables. zero pens that are yours.
BANK_DBowner: the bank
you2,400
DENIED
try both pens
PLATFORM_DBowner: the platform
her · 8 years2,000,000 followers
one automated decision away
BANK_DB · you · 2,400intentcompetencecontinuity
your row stands on all three
FTX_DBowner: FTX
you5 BTC
the backing vault●●●●●
the row stayed. the backing did not.
CARD_DBowner: your bank ✍
TV you never bought−1,100
fraud reversal+1,100
someone holds the pen, so someone can fix it
?_DBowner: nobody
youstill yours?
?
can a table exist that nobody owns?
?
?_DBowner: ̶n̶o̶b̶o̶d̶y̶
you100
no owner, no pen, no trust?
keeper 1
you100
keeper 2
you100
keeper 3
you100
keeper 4
you100
keeper 5
you100
no THE copy, only copies.
keeper 2
you100
keeper 3
you100
keeper 4
you100
keeper 5
you100
your copy
you100
five copies. one of them is yours.
one attacker
one attacker, ten thousand faces.
real machinesburned wattsnext page, sealed
writing costs watts. faking voters buys nothing.
cost paid OUTSIDE: hardware and power
proof of work, burn energy to vote.
page 1you · 100page 2you · 100page 3you · 100page 4you · 100
rewrite one line, break every lock after it.
office lunchtrusted keeperconsensusfive keepers, real cost
the price buys trustlessness. the office already has trust.
?
ownerless ledger
you?
a key, not a login?
nobody owns the table. so who owns your row?
bytes memoryraw callreturndata

Three new nodes on your map

bytes memory · raw call · returndata · +10 Lynx