diff --git a/examples/contracts/aggregator_consumer/src/ocr2.cairo b/examples/contracts/aggregator_consumer/src/ocr2.cairo index 8947aa72c..77f433258 100644 --- a/examples/contracts/aggregator_consumer/src/ocr2.cairo +++ b/examples/contracts/aggregator_consumer/src/ocr2.cairo @@ -1,2 +1,3 @@ pub mod price_consumer; pub mod consumer; +pub mod write_consumer; diff --git a/examples/contracts/aggregator_consumer/src/ocr2/write_consumer.cairo b/examples/contracts/aggregator_consumer/src/ocr2/write_consumer.cairo new file mode 100644 index 000000000..497da2965 --- /dev/null +++ b/examples/contracts/aggregator_consumer/src/ocr2/write_consumer.cairo @@ -0,0 +1,47 @@ +use starknet::ContractAddress; + + +#[starknet::interface] +pub trait IWriteConsumer { + fn write(ref self: TContractState, proxy: ContractAddress); +} + +#[starknet::contract] +mod WriteConsumer { + use starknet::ContractAddress; + use chainlink::ocr2::aggregator_proxy::{ + IAggregatorProxy, IAggregatorProxyDispatcher, IAggregatorProxyDispatcherTrait + }; + + #[storage] + struct Storage { + answer: u128, + proxy: ContractAddress + } + + #[constructor] + fn constructor(ref self: ContractState) {} + + #[derive(Drop, starknet::Event)] + struct AnswerWrite { + answer: u128, + proxy: ContractAddress + } + + #[event] + #[derive(Drop, starknet::Event)] + enum Event { + AnswerWrite: AnswerWrite + } + + #[abi(embed_v0)] + impl WriteConsumerImpl of super::IWriteConsumer { + fn write(ref self: ContractState, proxy: ContractAddress) { + let answer = IAggregatorProxyDispatcher { contract_address: proxy }.latest_answer(); + self.answer.write(answer); + self.proxy.write(proxy); + + self.emit(Event::AnswerWrite(AnswerWrite { answer: answer, proxy: proxy })) + } + } +}