fix ens contenthash resolution
Signed-off-by: Andrey Shovkoplyas <motor4ik@gmail.com>
This commit is contained in:
parent
430a8fb27c
commit
b344322475
|
@ -97,6 +97,24 @@
|
||||||
(fn [[name]]
|
(fn [[name]]
|
||||||
(cb name))}))
|
(cb name))}))
|
||||||
|
|
||||||
|
(defn cleanup-hash [raw-hash]
|
||||||
|
;; NOTE: it would be better if our abi-spec/decode was able to do that
|
||||||
|
(let [;; ignore hex prefix
|
||||||
|
[_ raw-hash-rest] (split-at 2 raw-hash)
|
||||||
|
;; the first field gives us the length of the next one in hex and has
|
||||||
|
;; a length of 32 bytes
|
||||||
|
;; 1 byte is 2 chars here
|
||||||
|
[next-field-length-hex raw-hash-rest] (split-at 64 raw-hash-rest)
|
||||||
|
next-field-length (* ^number (abi-spec/hex-to-number (string/join next-field-length-hex)) 2)
|
||||||
|
;; we get the next field which is the length of the hash and is
|
||||||
|
;; expected to be 32 bytes as well
|
||||||
|
[hash-field-length-hex raw-hash-rest] (split-at next-field-length
|
||||||
|
raw-hash-rest)
|
||||||
|
hash-field-length (* ^number (abi-spec/hex-to-number (string/join hash-field-length-hex)) 2)
|
||||||
|
;; we get the hash
|
||||||
|
[hash _] (split-at hash-field-length raw-hash-rest)]
|
||||||
|
(str "0x" (string/join hash))))
|
||||||
|
|
||||||
(defn contenthash
|
(defn contenthash
|
||||||
[resolver ens-name cb]
|
[resolver ens-name cb]
|
||||||
(json-rpc/eth-call
|
(json-rpc/eth-call
|
||||||
|
@ -106,21 +124,7 @@
|
||||||
:on-success
|
:on-success
|
||||||
(fn [raw-hash]
|
(fn [raw-hash]
|
||||||
;; NOTE: it would be better if our abi-spec/decode was able to do that
|
;; NOTE: it would be better if our abi-spec/decode was able to do that
|
||||||
(let [;; ignore hex prefix
|
(cb (cleanup-hash raw-hash)))}))
|
||||||
[_ raw-hash-rest] (split-at 2 raw-hash)
|
|
||||||
;; the first field gives us the length of the next one in hex and has
|
|
||||||
;; a length of 32 bytes
|
|
||||||
;; 1 byte is 2 chars here
|
|
||||||
[next-field-length-hex raw-hash-rest] (split-at 64 raw-hash-rest)
|
|
||||||
next-field-length (* ^number (abi-spec/hex-to-number (string/join next-field-length-hex)) 2)
|
|
||||||
;; we get the next field which is the length of the hash and is
|
|
||||||
;; expected to be 32 bytes as well
|
|
||||||
[hash-field-length-hex raw-hash-rest] (split-at next-field-length
|
|
||||||
raw-hash-rest)
|
|
||||||
hash-field-length (* ^number (abi-spec/hex-to-number (string/join hash-field-length-hex)) 2)
|
|
||||||
;; we get the hash
|
|
||||||
[hash _] (split-at hash-field-length raw-hash-rest)]
|
|
||||||
(cb (string/join "0x" hash))))}))
|
|
||||||
|
|
||||||
(defn content
|
(defn content
|
||||||
[resolver ens-name cb]
|
[resolver ens-name cb]
|
||||||
|
|
|
@ -9,3 +9,11 @@
|
||||||
(ens/namehash "eth")))
|
(ens/namehash "eth")))
|
||||||
(is (= "0xde9b09fd7c5f901e23a3f19fecc54828e9c848539801e86591bd9801b019f84f"
|
(is (= "0xde9b09fd7c5f901e23a3f19fecc54828e9c848539801e86591bd9801b019f84f"
|
||||||
(ens/namehash "foo.eth"))))
|
(ens/namehash "foo.eth"))))
|
||||||
|
|
||||||
|
(deftest cleanup-hash
|
||||||
|
;; simpledapp.eth
|
||||||
|
(is (= "0xe30101701220795c1ea0ceaf4ceedc9896f14b73bb30e978e4855ee221b9a57f5a934268280e"
|
||||||
|
(ens/cleanup-hash "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000026e30101701220795c1ea0ceaf4ceedc9896f14b73bb30e978e4855ee221b9a57f5a934268280e0000000000000000000000000000000000000000000000000000")))
|
||||||
|
;; ethereum.eth
|
||||||
|
(is (= "0xe301017012206e70f0f72e2bcd0ad69bb2b15ee9e0f4f88693f6b2f485e48699e7d6f8dbd62a"
|
||||||
|
(ens/cleanup-hash "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000026e301017012206e70f0f72e2bcd0ad69bb2b15ee9e0f4f88693f6b2f485e48699e7d6f8dbd62a0000000000000000000000000000000000000000000000000000"))))
|
||||||
|
|
Loading…
Reference in New Issue