Skip to content

Instantly share code, notes, and snippets.

@strictlymomo
Created November 14, 2019 19:55
Show Gist options
  • Save strictlymomo/06d77d94cd3ad5a98ff63cc0feed4d0c to your computer and use it in GitHub Desktop.
Save strictlymomo/06d77d94cd3ad5a98ff63cc0feed4d0c to your computer and use it in GitHub Desktop.
Decode Ethereum Function Signatures
<!DOCTYPE html>
<html>
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.12.0/d3.js"></script>
<script src="EthereumFunctions.js"></script>
</html>
We can make this file beautiful and searchable if this error is corrected: No commas found in this CSV file in line 0.
name
0x3ba15036
0xb595b8b5
0x45466f3a
0x8d216186
0x03750d94
0x00
0x432ced04
0xb214faa5
0x41c0e1b5
0xbd66528a
0x3f887fad
0x454e4339
0xbe99a980
0x3feb1bd8
0x90b98a11
0xa55526db
0x4a465343
0x2f96dee6
0x454e3651
0xf00d4b5d
0x590528a9
0xd5064ed1
0x48a6ea3b
0x36a560bd
0x41c0e1b5
0xd0e30db0
0x62657400
0x3f887fad
0x45466f3a
0xd7ed7453
0x0de9cacd
0x90b98a11
0x51870150
0xe8b5e51f
0x51cff8d9
0x18c6331d
0x432ced04
0xea64fff6
0x590528a9
0x3ccfd60b
0x54fac919
0xd5064ed1
0xfc36e15b
0x91b7f5ed
0x27dc297e
0x48a6ea3b
0xde4b3262
0x8cae1374
0x3f887fad
0x41c0e1b5
0x6266b514
0x57f10d71
0xb61d27f6
0x9b4302b6
0x1256c698
0x90b98a11
0x5f264591
0x590528a9
0x6b6f6164
0x2b877dfd
0x5c36b186
0xc943e51a
0x27dc297e
0x5c36b186
0xde4b3262
0xb2d4ae5e
0x480945df
0x2fb565e8
0x91b7f5ed
0x75090ebf
0xd5064ed1
0xeb1ff845
0xfc36e15b
0x48a6ea3b
0xb61d27f6
0x8cae1374
0xa9059cbb
0x432ced04
0x3f887fad
0xe021fadb
0xc27d7721
0xd85c8966
0x651e723c
0x3ed48679
0x75090ebf
0x7d242ae5
0x480945df
0xd5064ed1
0x91b7f5ed
0x416ce86f
0x10ec5d2c
0x5f2ef085
0xe21d9b51
0x48a6ea3b
0x877d0cd7
0xb61d27f6
0xfc36e15b
0x60fe47b1
0x9b4302b6
0x2b25a7e4
0x41c0e1b5
0x3ed48679
0xd85c8966
0x75090ebf
0x651e723c
0x7d242ae5
0x10ec5d2c
0xd5064ed1
0xb61d27f6
0x91b7f5ed
0xfc36e15b
0x4e71d92d
0x31312d32
0x61461954
0x32302d32
0x432ced04
0x83e78b31
0x48a6ea3b
0xb214faa5
0xbe99a980
0x5f2ef085
0x3ed48679
0xd85c8966
0x7d242ae5
0xd5064ed1
0x10ec5d2c
0xb61d27f6
0x651e723c
0x00000000
0x432ced04
0x83e78b31
0x91b7f5ed
0xa9059cbb
0x4e71d92d
0x65386a7c
0x755f99c2
0x61461954
0x3f887fad
0xfc36e15b
0x4aa16737
0xe5225381
0x3ed48679
0x75090ebf
0x00000000
0xaa64c43b
0xd85c8966
0x7d242ae5
0xb61d27f6
0x651e723c
0x2fb565e8
0xa9059cbb
0x91b7f5ed
0x432ced04
0x4e71d92d
0x8c0e2a31
0x61461954
0x797af627
0xe5225381
0xdb85bd78
0x3f887fad
0x41c0e1b5
0x3ed48679
0xaa64c43b
0x025bbbe5
0x00000000
0x432ced04
0x38304a63
0x7d242ae5
0x038304a6
0x90fa337d
0xb61d27f6
0xa9059cbb
0x4e71d92d
0x8d4424f8
0xff
0x91b7f5ed
0xdb85bd78
0x61461954
0x095ea7b3
0xbaac5300
0x01
0x00000000
0xbaac5300
0xa9059cbb
0x3ed48679
0x095ea7b3
0x025bbbe5
0x23b872dd
0x76d438b0
0xdb85bd78
0x90fa337d
0xc8ee0c6b
0x7d242ae5
0xb61d27f6
0xe637a44b
0xaa64c43b
0xf5537ede
0x75090ebf
0x4e71d92d
0xc9d27afe
0x01
0x75090ebf
0x667a2f58
0xa9059cbb
0x00000000
0x23b872dd
0xdb85bd78
0x90fa337d
0x76d438b0
0x095ea7b3
0xc9d27afe
0x7edae70f
0xf3fef3a3
0xb61d27f6
0xe637a44b
0xf5537ede
0xc8ee0c6b
0xa17ca4f3
0xdbff4182
0x66b87b2a
0x72883492
0x667a2f58
0x00000000
0xa9059cbb
0x0f2c9329
0x095ea7b3
0x3ccfd60b
0x90fa337d
0x23b872dd
0xdb85bd78
0xf7654176
0xe5225381
0xe637a44b
0xb61d27f6
0x76d438b0
0xdbff4182
0x7d242ae5
0xc8ee0c6b
0x797af627
0xf3fef3a3
0x01
0x0f2c9329
0xa9059cbb
0xf7654176
0x00000000
0x90fa337d
0x095ea7b3
0x38bbfa50
0x3ccfd60b
0xe637a44b
0x667a2f58
0xe56c8552
0x76d438b0
0xb61d27f6
0xb4e6850b
0x1a695230
0x5b7d47a9
0xbfe8c107
0xf3fef3a3
0x4e71d92d
0xc8ee0c6b
0xa9059cbb
0x0f2c9329
0xf7654176
0x00000000
0x797af627
0xb61d27f6
0x095ea7b3
0x90fa337d
0x3ccfd60b
0xe637a44b
0xa17ca4f3
0x96ef7aa0
0xf3fef3a3
0x76d438b0
0x38bbfa50
0x16d960b5
0xe56c8552
0x2e33f4e0
0x667a2f58
0x1a695230
0xa9059cbb
0x0f2c9329
0xf7654176
0x00000000
0x095ea7b3
0x4824b857
0x3ccfd60b
0xe1b0d5e6
0xf5537ede
0xe637a44b
0x76d438b0
0x8b147245
0x278b8c0e
0xc84f17a5
0x23b872dd
0x0a19b14a
0x1a695230
0x38bbfa50
0xb61d27f6
0x58d9fa04
0xa9059cbb
0x0f2c9329
0x53f11cb3
0xf7654176
0x00000000
0x97dd3054
0xf923b8aa
0xe1fa8e84
0xac1410c1
0xdeadbeef
0xe637a44b
0x5a42e75c
0x095ea7b3
0xbc6c3ccc
0x2a9e1aa4
0x38bbfa50
0x4824b857
0x8b147245
0xe56c8552
0x76d438b0
0xa9059cbb
0x0f2c9329
0xf7654176
0x00000000
0xe1fa8e84
0xe56c8552
0xe637a44b
0x38bbfa50
0x23b872dd
0x095ea7b3
0x90fa337d
0x5b7d47a9
0xab01b469
0x9960d947
0x76d438b0
0x136d5a59
0xbc6c3ccc
0xf5537ede
0x1a695230
0xb61d27f6
0xa9059cbb
0xe1fa8e84
0x0f2c9329
0xf7654176
0x00000000
0x38bbfa50
0x70de8c6e
0x095ea7b3
0xe637a44b
0xe56c8552
0x23b872dd
0x8b147245
0xf09ea2a6
0x9d0f8763
0x49593f53
0xd0e30db0
0xd6febde8
0x1a695230
0x40e58ee5
0xb61d27f6
0xa9059cbb
0xe1fa8e84
0x0f2c9329
0xf7654176
0x00000000
0x38bbfa50
0xe637a44b
0xe56c8552
0xd65ab5f2
0x095ea7b3
0x23b872dd
0xf09ea2a6
0x96b76c23
0xe5225381
0x27dc297e
0xebf6e91d
0xbfe8c107
0x1a695230
0x40e58ee5
0xd6febde8
0xa9059cbb
0xe1fa8e84
0x0f2c9329
0xf7654176
0x20
0x00000000
0x01711220
0x38bbfa50
0x23b872dd
0x095ea7b3
0xb61d27f6
0x1a695230
0xe637a44b
0xe5225381
0xe27fe50f
0xf5537ede
0x257bcd6a
0xc8ee0c6b
0x665bcc32
0xf09ea2a6
0xa9059cbb
0xe1fa8e84
0x0f2c9329
0xf7654176
0x00000000
0x257bcd6a
0x38bbfa50
0x01711220
0x665bcc32
0x20
0x6ea056a9
0x23b872dd
0xb78b52df
0xe5225381
0xa9b1d507
0x4f28af6a
0xc8ee0c6b
0xdaea85c5
0x4637d827
0xdc6dd152
0xa9059cbb
0x0f2c9329
0xe1fa8e84
0x47872b42
0xf7654176
0xfebefd61
0xce92dced
0x983b94fb
0x00000000
0x6ea056a9
0xede8acdb
0x38bbfa50
0xa9b1d507
0x4f28af6a
0xe5225381
0xe27fe50f
0x095ea7b3
0xdc6dd152
0x23b872dd
0xb61d27f6
0xa9059cbb
0x0f2c9329
0x47872b42
0xf7654176
0xfebefd61
0x00000000
0x983b94fb
0x6ea056a9
0xce92dced
0xa9b1d507
0xe1fa8e84
0xc8ee0c6b
0x696d746f
0xede8acdb
0x0a19b14a
0xb61d27f6
0x4637d827
0x38bbfa50
0x095ea7b3
0xd0e30db0
0xa9059cbb
0x0f2c9329
0x0a19b14a
0x00000000
0xf7654176
0x278b8c0e
0xd0e30db0
0x6ea056a9
0x47872b42
0x38bbfa50
0x9e281a98
0xd1058e59
0x983b94fb
0xfebefd61
0xa9b1d507
0xdc6dd152
0x095ea7b3
0x2e1a7d4d
0xa6ec80e2
0x338b5dea
0xa9059cbb
0x0f2c9329
0x0a19b14a
0x6ea056a9
0xa9b1d507
0x278b8c0e
0xd0e30db0
0x9e281a98
0x00000000
0xa6ec80e2
0x095ea7b3
0xf7654176
0x2e1a7d4d
0x47872b42
0x338b5dea
0x38bbfa50
0xfebefd61
0xdc6dd152
0x3a15021a
0x23b872dd
0xa9059cbb
0x6ea056a9
0x0a19b14a
0x0f2c9329
0xa9b1d507
0x278b8c0e
0xd0e30db0
0x9e281a98
0x095ea7b3
0x00000000
0x2e1a7d4d
0x338b5dea
0xf7654176
0xa6ec80e2
0xe5225381
0x38bbfa50
0x57202bfd
0xdc6dd152
0x23b872dd
0xb61d27f6
0xa9059cbb
0x0a19b14a
0x278b8c0e
0x6ea056a9
0x095ea7b3
0x0f2c9329
0xa9b1d507
0xd0e30db0
0x9e281a98
0x42c8705b
0x338b5dea
0x2e1a7d4d
0xa6ec80e2
0x00000000
0x38bbfa50
0xf7654176
0xbffeadd6
0x23b872dd
0x57202bfd
0xdc6dd152
0xa9059cbb
0x0a19b14a
0x278b8c0e
0x6ea056a9
0xa6ec80e2
0x095ea7b3
0x0f2c9329
0x338b5dea
0xd0e30db0
0x9e281a98
0x2e1a7d4d
0xa9b1d507
0x9b03a211
0xf7654176
0x0121b93f
0x00000000
0x23b872dd
0x2ccb1b30
0x06444e91
0x42c8705b
0xa9059cbb
0x6ea056a9
0x0a19b14a
0x3d7d3f5a
0xf7d8c883
0xa9b1d507
0x454a2ab3
0x278b8c0e
0x00
0x9e281a98
0xd0e30db0
0x0f2c9329
0x095ea7b3
0x2e1a7d4d
0x88c2a0bf
0x338b5dea
0x1a695230
0x4ad8c938
0x96b5a755
0xf7654176
0xa9059cbb
0x0a19b14a
0xd0e30db0
0x6ea056a9
0x9e281a98
0x095ea7b3
0x0f2c9329
0x278b8c0e
0x00
0x2e1a7d4d
0xa9b1d507
0x338b5dea
0x1a695230
0x39125215
0xf7654176
0xef343588
0xa68a76cc
0x3d7d3f5a
0x00000000
0x23b872dd
0xa9059cbb
0xa9b1d507
0xd0e30db0
0x0a19b14a
0x6ea056a9
0xef343588
0x095ea7b3
0x00000000
0x278b8c0e
0x338b5dea
0x0f2c9329
0x9e281a98
0x2295115b
0x00
0x867904b4
0x2e1a7d4d
0xf7d8c883
0xf7654176
0x3d7d3f5a
0x39125215
0xa9059cbb
0xef343588
0x6ea056a9
0xa9b1d507
0xd0e30db0
0x095ea7b3
0x867904b4
0x0a19b14a
0x00000000
0x338b5dea
0x2295115b
0x0f2c9329
0xf7d8c883
0x00
0x278b8c0e
0xa68a76cc
0x3d7d3f5a
0x9e281a98
0xf7654176
0x2e1a7d4d
0xa9059cbb
0xef343588
0x6ea056a9
0xa9b1d507
0x095ea7b3
0xd16c22bf
0xd0e30db0
0x00000000
0x2295115b
0xfdb5a03e
0x338b5dea
0x0a19b14a
0x0f2c9329
0x2bfd2e06
0xa6ec80e2
0x00
0xf7d8c883
0x278b8c0e
0x3ccfd60b
0xf0843ba9
0xa9059cbb
0xef343588
0x095ea7b3
0xd0e30db0
0x6ea056a9
0x2295115b
0x00000000
0x338b5dea
0x0f2c9329
0x00
0xf2c298be
0x0a19b14a
0x1a695230
0x14c9035e
0xa9b1d507
0x2e1a7d4d
0x278b8c0e
0xf7654176
0xf7d8c883
0x40c10f19
0xa9059cbb
0xef343588
0x095ea7b3
0x1801fbe5
0x6ea056a9
0x2295115b
0xd0e30db0
0x00000000
0x00
0x338b5dea
0x0f2c9329
0x1a695230
0x0a19b14a
0x40c10f19
0xa9b1d507
0x278b8c0e
0xd0679d34
0xf7d8c883
0xf7654176
0x64887334
0xa9059cbb
0xef343588
0x6ea056a9
0x00000000
0x095ea7b3
0x3ccfd60b
0x1a695230
0x2295115b
0x0f2c9329
0xd0e30db0
0x338b5dea
0x00
0xa65b37a1
0x0a19b14a
0xf7654176
0xfdb5a03e
0x64887334
0xa68a76cc
0x98a0871d
0xf7d8c883
0xa9059cbb
0x8f38f309
0xef343588
0x3ccfd60b
0x00
0x6ea056a9
0x5e83b463
0x0d2cbe13
0x00000000
0x095ea7b3
0x19fb361f
0xd2a3899c
0x0f2c9329
0x2295115b
0xf7d8c883
0xd0e30db0
0x338b5dea
0x0a19b14a
0x756e6465
0x64887334
0xa9059cbb
0xef343588
0xf725839f
0x00000000
0x8f38f309
0x6ea056a9
0xf7d8c883
0x095ea7b3
0x5e83b463
0x3ccfd60b
0xa68a76cc
0x2295115b
0x0f2c9329
0xca722cdc
0xd0e30db0
0x771145aa
0xd2a3899c
0x00
0x51958a56
0x338b5dea
0xa9059cbb
0xef343588
0x00000000
0x6ea056a9
0x095ea7b3
0x5e83b463
0xca722cdc
0x42c8705b
0x0a19b14a
0xf7d8c883
0xa68a76cc
0x0f2c9329
0xd0e30db0
0x2295115b
0xd2a3899c
0x771145aa
0x338b5dea
0x00
0x19fb361f
0xe78aadb2
0xa9059cbb
0xa9b1d507
0xef343588
0x5e83b463
0xca722cdc
0x6ea056a9
0x00000000
0x095ea7b3
0xf907fc5b
0xf7d8c883
0xd2a3899c
0xd0e30db0
0xa68a76cc
0x0f2c9329
0x2295115b
0x00
0x64887334
0x0a19b14a
0xbf50944c
0x39125215
0xa9059cbb
0xef343588
0xa9b1d507
0xca722cdc
0x6ea056a9
0x00000000
0x5e83b463
0x095ea7b3
0xf7d8c883
0xa68a76cc
0x64887334
0xd37c5755
0x0f2c9329
0xd0e30db0
0x00
0x3d7d3f5a
0xe6deefa9
0x99f4b251
0x38bbfa50
0x2295115b
0xa9059cbb
0xca722cdc
0x00000000
0x6ea056a9
0xef343588
0x095ea7b3
0x5e83b463
0x29675f29
0x8bf9d979
0x403a0a78
0x64887334
0x3ccfd60b
0xd96a094a
0xf7d8c883
0x00
0x0f2c9329
0x3696d3aa
0x38bbfa50
0xd0e30db0
0x39125215
0xa9059cbb
0xef343588
0x29675f29
0xca722cdc
0x00000000
0x6ea056a9
0x095ea7b3
0x23b872dd
0xd96a094a
0x5e83b463
0x90f2695c
0xd4968df2
0x8bf9d979
0xf7d8c883
0x64887334
0x3ccfd60b
0x403a0a78
0x0f2c9329
0x39125215
0x1019635d
0xa9059cbb
0xef343588
0x29675f29
0xca722cdc
0x095ea7b3
0x6ea056a9
0x40993b26
0x9f744745
0x5e83b463
0xd96a094a
0x00000000
0x51cff8d9
0xf7d8c883
0x26dd860a
0x403a0a78
0x3ccfd60b
0x00f714ce
0x1249c58b
0x39125215
0x64887334
0xa9059cbb
0x095ea7b3
0xef343588
0x29675f29
0xca722cdc
0x31c26b11
0x6ea056a9
0x72d4b4a0
0x51cff8d9
0x5e83b463
0x221bed75
0x40993b26
0x9f744745
0x39125215
0x3ccfd60b
0x00000000
0x8bf9d979
0x00f714ce
0x6e234f69
0xde3b6dfb
0xa9059cbb
0x095ea7b3
0xef343588
0xca722cdc
0x28ffe6c8
0x6ea056a9
0xb1c49079
0x39125215
0x5e83b463
0x1cff79cd
0x8bf9d979
0x3ccfd60b
0x0f2c9329
0x29675f29
0x88c2a0bf
0x403a0a78
0x6e234f69
0xa68a76cc
0x23b872dd
0x91aeeedc
0xa9059cbb
0x095ea7b3
0xef343588
0xca722cdc
0x6ea056a9
0x90f2695c
0x2ca15122
0x8bf9d979
0x5e83b463
0xa68a76cc
0x00000000
0x91aeeedc
0xd46b02c3
0x6e234f69
0x39125215
0x23b872dd
0x1cff79cd
0x2295115b
0x64887334
0x403a0a78
0xa9059cbb
0xef343588
0x095ea7b3
0x6ea056a9
0xbc61394a
0x1cff79cd
0x8bf9d979
0x00000000
0xca722cdc
0x5e83b463
0x91aeeedc
0xa68a76cc
0x23b872dd
0x1b33d412
0x4ab0d190
0x6e234f69
0xd46b02c3
0x64887334
0xb4f9b6c8
0x2295115b
0xa9059cbb
0xef343588
0x095ea7b3
0x4ab0d190
0xca722cdc
0x5e83b463
0x6ea056a9
0x00000000
0x8bf9d979
0x23b872dd
0x91aeeedc
0x1cff79cd
0xd3140a65
0x21670f22
0xa68a76cc
0x64887334
0x412664ae
0x6e234f69
0x72d4728f
0x39125215
0xa9059cbb
0xb1954e95
0xef343588
0x4ab0d190
0x095ea7b3
0x6ea056a9
0x5e83b463
0x23b872dd
0xca722cdc
0x8bf9d979
0x91aeeedc
0x68c180d5
0x39125215
0x1cff79cd
0x188f9b5b
0x64887334
0xa68a76cc
0x72d4728f
0xa8cef00f
0x00000000
const SIGNATURE_DECODER_BASE_URL = "https://www.4byte.directory/api/v1/signatures/?hex_signature=";
const DATA_PATH = "EthereumFunctions.csv";
let hashes = [];
let uniqueHashes = [];
let signatureMap = {};
let signatures = [];
let outputTSV = "";
outputTSV += "hash\tsignature\n"; // append header
async function init() {
hashes = await getHashes(DATA_PATH);
// create signature map
uniqueHashes = getUniqueItems(hashes);
signatureMap = await createSignaturesMap(uniqueHashes, SIGNATURE_DECODER_BASE_URL);
// export signature map to TSV
// we use TSV because hashes may decode into a (comma-separated) list of possible signatures
for (const sig in signatureMap) {
let row = `${sig}\t${signatureMap[sig]}\n`;
outputTSV += row;
}
downloadString(outputTSV, "text/tsv", "EthereumFunctionSignatures.tsv")
}
init();
// HELPERS
async function getHashes(hexList) {
return await d3.csv(hexList).then(data => data.map(d => d.name));
}
function getUniqueItems(hashes) {
return [...new Set(hashes)];
}
async function createSignaturesMap(hashes, decoderURL) {
let dictionary = {};
for (const hash of hashes) {
let signature = await decodeSignature(decoderURL, hash);
dictionary[hash] = signature;
}
return dictionary;
}
async function decodeSignature(baseURL, hash) {
return await fetch(baseURL + hash)
.then(res => res.json())
.then(json => {
switch (json.results.length) {
case 0:
return hash;
case 1:
return json.results[0].text_signature;
default:
return json.results.map(result => result.text_signature);
}
});
}
function downloadString(text, fileType, fileName) {
let blob = new Blob([text], { type: fileType });
let a = document.createElement('a');
a.download = fileName;
a.href = URL.createObjectURL(blob);
a.dataset.downloadurl = [fileType, a.download, a.href].join(':');
a.style.display = "none";
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
setTimeout(function() { URL.revokeObjectURL(a.href); }, 1500);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment