Skip to content

Commit 95587d7

Browse files
committed
Release candidate changes
1 parent 3236d3a commit 95587d7

8 files changed

Lines changed: 55 additions & 118 deletions

app/models/eth_transaction.rb

Lines changed: 13 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,14 @@ class EthTransaction < ApplicationRecord
1010

1111
attr_accessor :transfer_index
1212

13+
def self.event_signature(event_name)
14+
"0x" + Digest::Keccak256.hexdigest(event_name)
15+
end
16+
17+
CreateEthscriptionEventSig = event_signature("ethscriptions_protocol_CreateEthscription(address,string)")
18+
Esip2EventSig = event_signature("ethscriptions_protocol_TransferEthscriptionForPreviousOwner(address,address,bytes32)")
19+
Esip1EventSig = event_signature("ethscriptions_protocol_TransferEthscription(address,bytes32)")
20+
1321
def possibly_relevant?
1422
status != 0 &&
1523
(possibly_creates_ethscription? || possibly_transfers_ethscription?)
@@ -104,7 +112,7 @@ def ethscription_creation_events
104112
return [] unless EthTransaction.esip3_enabled?(block_number)
105113

106114
ordered_events.select do |log|
107-
EthTransaction.contracts_create_ethscription_event_sig == log['topics'].first
115+
CreateEthscriptionEventSig == log['topics'].first
108116
end
109117
end
110118

@@ -143,7 +151,7 @@ def create_ethscription_transfers_from_events!
143151
topics = log['topics']
144152
event_type = topics.first
145153

146-
if event_type == EthTransaction.esip1_transfer_event_signature
154+
if event_type == Esip1EventSig
147155
begin
148156
event_to = Eth::Abi.decode(['address'], topics.third).first
149157
rescue Eth::Abi::DecodingError
@@ -165,7 +173,7 @@ def create_ethscription_transfers_from_events!
165173
}.merge(transfer_attrs)
166174
)
167175
end
168-
elsif event_type == EthTransaction.esip2_transfer_event_signature
176+
elsif event_type == Esip2EventSig
169177
begin
170178
event_previous_owner = Eth::Abi.decode(['address'], topics.second).first
171179
event_to = Eth::Abi.decode(['address'], topics.third).first
@@ -283,34 +291,9 @@ def valid_bytes32?(value)
283291

284292
def self.contract_transfer_event_signatures(block_number)
285293
[].tap do |res|
286-
res << esip1_transfer_event_signature if esip1_enabled?(block_number)
287-
res << esip2_transfer_event_signature if esip2_enabled?(block_number)
288-
end
289-
end
290-
291-
class << self
292-
extend Memoist
293-
294-
def contracts_create_ethscription_event_sig
295-
"0x" + Digest::Keccak256.hexdigest(
296-
"ethscriptions_protocol_CreateEthscription(address,string)"
297-
)
298-
end
299-
memoize :contracts_create_ethscription_event_sig
300-
301-
def esip2_transfer_event_signature
302-
"0x" + Digest::Keccak256.hexdigest(
303-
"ethscriptions_protocol_TransferEthscriptionForPreviousOwner(address,address,bytes32)"
304-
)
305-
end
306-
memoize :esip2_transfer_event_signature
307-
308-
def esip1_transfer_event_signature
309-
"0x" + Digest::Keccak256.hexdigest(
310-
"ethscriptions_protocol_TransferEthscription(address,bytes32)"
311-
)
294+
res << Esip1EventSig if esip1_enabled?(block_number)
295+
res << Esip2EventSig if esip2_enabled?(block_number)
312296
end
313-
memoize :esip1_transfer_event_signature
314297
end
315298

316299
def self.prune_transactions

app/models/ethscription.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ def parsed_data_uri
4646
end
4747

4848
def content_sha
49-
"0x" + Digest::SHA256.hexdigest(content_uri)
49+
Digest::SHA256.hexdigest(content_uri)
5050
end
5151

5252
def esip6

db/migrate/20231216161930_create_eth_blocks.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ def change
1212
t.index :block_number, unique: true
1313
t.index :blockhash, unique: true
1414
t.index :imported_at
15+
t.index [:imported_at, :block_number]
1516
t.index :parent_blockhash, unique: true
1617
t.index :timestamp
1718

db/migrate/20231216164707_create_ethscriptions.rb

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,14 @@ def change
77
t.bigint :block_timestamp, null: false
88
t.bigint :event_log_index
99

10-
t.bigint :ethscription_number#, null: false
10+
t.bigint :ethscription_number, null: false
1111
t.string :creator, null: false
1212
t.string :initial_owner, null: false
1313
t.string :current_owner, null: false
1414
t.string :previous_owner, null: false
1515

16-
# t.boolean :valid_data_uri, null: false
1716
t.text :content_uri, null: false
1817
t.string :content_sha, null: false
19-
# t.boolean :content_unique
2018
t.boolean :esip6, null: false
2119
t.string :mimetype, null: false
2220
t.string :media_type, null: false
@@ -35,21 +33,18 @@ def change
3533
t.index :creator
3634
t.index :current_owner
3735
t.index :ethscription_number, unique: true
38-
# t.index [:content_unique, :valid_data_uri]
39-
# t.index :content_unique, where: "(content_unique IS NOT NULL)"
4036
t.index :content_sha
4137
t.index :content_sha, unique: true, where: "(esip6 = false)",
4238
name: :index_ethscriptions_on_content_sha_unique
43-
# t.index :valid_data_uri
4439
t.index :initial_owner
4540
t.index :media_type
4641
t.index :mime_subtype
4742
t.index :mimetype
4843
t.index :previous_owner
4944
t.index :transaction_index
45+
t.index :esip6
5046

51-
# t.check_constraint "esip6 = true OR content_unique IS NOT NULL"
52-
t.check_constraint "content_sha ~ '^0x[a-f0-9]{64}$'"
47+
t.check_constraint "content_sha ~ '^[a-f0-9]{64}$'"
5348
t.check_constraint "transaction_hash ~ '^0x[a-f0-9]{64}$'"
5449
t.check_constraint "creator ~ '^0x[a-f0-9]{40}$'"
5550
t.check_constraint "current_owner ~ '^0x[a-f0-9]{40}$'"
@@ -65,27 +60,31 @@ def change
6560
reversible do |dir|
6661
dir.up do
6762
execute <<-SQL
68-
CREATE OR REPLACE FUNCTION check_ethscription_order()
63+
DROP TRIGGER IF EXISTS trigger_check_ethscription_order ON ethscriptions;
64+
DROP FUNCTION IF EXISTS check_ethscription_order();
65+
66+
CREATE OR REPLACE FUNCTION check_ethscription_order_and_sequence()
6967
RETURNS TRIGGER AS $$
7068
BEGIN
7169
IF NEW.block_number < (SELECT MAX(block_number) FROM ethscriptions) OR
7270
(NEW.block_number = (SELECT MAX(block_number) FROM ethscriptions) AND NEW.transaction_index <= (SELECT MAX(transaction_index) FROM ethscriptions WHERE block_number = NEW.block_number)) THEN
7371
RAISE EXCEPTION 'Ethscriptions must be created in order';
7472
END IF;
73+
NEW.ethscription_number := (SELECT COALESCE(MAX(ethscription_number), -1) + 1 FROM ethscriptions);
7574
RETURN NEW;
7675
END;
7776
$$ LANGUAGE plpgsql;
7877
79-
CREATE TRIGGER trigger_check_ethscription_order
78+
CREATE TRIGGER trigger_check_ethscription_order_and_sequence
8079
BEFORE INSERT ON ethscriptions
81-
FOR EACH ROW EXECUTE FUNCTION check_ethscription_order();
80+
FOR EACH ROW EXECUTE FUNCTION check_ethscription_order_and_sequence();
8281
SQL
8382
end
8483

8584
dir.down do
8685
execute <<-SQL
87-
DROP TRIGGER IF EXISTS trigger_check_ethscription_order ON ethscriptions;
88-
DROP FUNCTION IF EXISTS check_ethscription_order();
86+
DROP TRIGGER IF EXISTS trigger_check_ethscription_order_and_sequence ON ethscriptions;
87+
DROP FUNCTION IF EXISTS check_ethscription_order_and_sequence();
8988
SQL
9089
end
9190
end

db/migrate/20231216213103_create_ethscription_transfers.rb

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ def change
1010
t.bigint :event_log_index
1111
t.bigint :transfer_index, null: false
1212
t.bigint :transaction_index, null: false
13-
# t.integer :creation_esip, null: false
1413
t.string :enforced_previous_owner
1514

1615
t.index :block_number

db/migrate/20231219131956_set_ethscription_numbers_non_nullable.rb

Lines changed: 0 additions & 37 deletions
This file was deleted.

db/structure.sql

Lines changed: 15 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -9,27 +9,6 @@ SET xmloption = content;
99
SET client_min_messages = warning;
1010
SET row_security = off;
1111

12-
--
13-
-- Name: heroku_ext; Type: SCHEMA; Schema: -; Owner: -
14-
--
15-
16-
CREATE SCHEMA heroku_ext;
17-
18-
19-
--
20-
-- Name: pg_stat_statements; Type: EXTENSION; Schema: -; Owner: -
21-
--
22-
23-
CREATE EXTENSION IF NOT EXISTS pg_stat_statements WITH SCHEMA public;
24-
25-
26-
--
27-
-- Name: EXTENSION pg_stat_statements; Type: COMMENT; Schema: -; Owner: -
28-
--
29-
30-
COMMENT ON EXTENSION pg_stat_statements IS 'track planning and execution statistics of all SQL statements executed';
31-
32-
3312
--
3413
-- Name: check_block_imported_at(); Type: FUNCTION; Schema: public; Owner: -
3514
--
@@ -407,10 +386,10 @@ CREATE TABLE public.ethscriptions (
407386
created_at timestamp(6) without time zone NOT NULL,
408387
updated_at timestamp(6) without time zone NOT NULL,
409388
CONSTRAINT chk_rails_52497428f2 CHECK (((previous_owner)::text ~ '^0x[a-f0-9]{40}$'::text)),
410-
CONSTRAINT chk_rails_528fcbfbaa CHECK (((content_sha)::text ~ '^0x[a-f0-9]{64}$'::text)),
411389
CONSTRAINT chk_rails_6f8922831e CHECK (((current_owner)::text ~ '^0x[a-f0-9]{40}$'::text)),
412390
CONSTRAINT chk_rails_84591e2730 CHECK (((transaction_hash)::text ~ '^0x[a-f0-9]{64}$'::text)),
413391
CONSTRAINT chk_rails_b577b97822 CHECK (((creator)::text ~ '^0x[a-f0-9]{40}$'::text)),
392+
CONSTRAINT chk_rails_d741e3044d CHECK (((content_sha)::text ~ '^[a-f0-9]{64}$'::text)),
414393
CONSTRAINT chk_rails_df21fdbe02 CHECK (((initial_owner)::text ~ '^0x[a-f0-9]{40}$'::text))
415394
);
416395

@@ -640,6 +619,13 @@ CREATE UNIQUE INDEX index_eth_blocks_on_blockhash ON public.eth_blocks USING btr
640619
CREATE INDEX index_eth_blocks_on_imported_at ON public.eth_blocks USING btree (imported_at);
641620

642621

622+
--
623+
-- Name: index_eth_blocks_on_imported_at_and_block_number; Type: INDEX; Schema: public; Owner: -
624+
--
625+
626+
CREATE INDEX index_eth_blocks_on_imported_at_and_block_number ON public.eth_blocks USING btree (imported_at, block_number);
627+
628+
643629
--
644630
-- Name: index_eth_blocks_on_parent_blockhash; Type: INDEX; Schema: public; Owner: -
645631
--
@@ -780,6 +766,13 @@ CREATE INDEX index_ethscriptions_on_creator ON public.ethscriptions USING btree
780766
CREATE INDEX index_ethscriptions_on_current_owner ON public.ethscriptions USING btree (current_owner);
781767

782768

769+
--
770+
-- Name: index_ethscriptions_on_esip6; Type: INDEX; Schema: public; Owner: -
771+
--
772+
773+
CREATE INDEX index_ethscriptions_on_esip6 ON public.ethscriptions USING btree (esip6);
774+
775+
783776
--
784777
-- Name: index_ethscriptions_on_ethscription_number; Type: INDEX; Schema: public; Owner: -
785778
--
@@ -950,7 +943,6 @@ ALTER TABLE ONLY public.ethscription_ownership_versions
950943
SET search_path TO "$user", public;
951944

952945
INSERT INTO "schema_migrations" (version) VALUES
953-
('20231219131956'),
954946
('20231217190431'),
955947
('20231216215348'),
956948
('20231216213103'),

0 commit comments

Comments
 (0)