That was great. Let's move on now to our next session. I would like to introduce Bridgeturle and Catherine Clements who will be presenting a case study from Curtin University and the title of the case study is Students as Partners at Curtin. We're going to hear about Curtin's case then we're going to hear about a case from Holmes Glen and then we will have Q&A after each of those sessions have taken place. So, welcome Bridget and Catherine and over to you. Hi everyone. Thank you for having us in today and before we get started, do we need to share our slides? Oops, there with me. Could I please ask for permission to share my screen? Are we able to set up a screen sharing? Great. Got it. Thank you. Let's disappear again. There we go. Okay. Could you just confirm that you can see my screen? Great. Thank you so much. Fantastic. Okay. Yeah, so thank you very much everyone for having us in today. It's really amazing to have so many people from across Australia and outside of it at some point and yeah, I'll just start off by first of all thanking Isaac for the beautiful Welcome to Country and I'll start off by acknowledging the traditional owners of the land that we're on currently here in Perth who are the Wajak people of the Nungar Nation and I'd just like to acknowledge Elders past and present and acknowledge that this is stolen land that was never seeded and that it always was and always will be Aboriginal land. So, yeah, beautiful. I'll do a couple of quick introductions. My name's Bridge. I use they them or he him pronouns by the fine. I'm the current current Vice President Education at the Curtin Student Guild at Curtin's Bentley campus in Perth. And I am in my fourth year of psychology. And I'm Kat Clements and my pronouns are she her and I am the lead for students as partners at Curtin University with sustainable development goals as a part of our students as partners initiative. My background is I've been in higher education for five years and prior to that worked in social impact and have a real interesting career development and human centered design and also how we can put students at the center of everything we do here at Curtin. And just briefly, I sit within the student success team. So that's a central team within Curtin. Cool. So a little bit about our university. We have overall over 59,000 students at last check. It's, we currently have a 53% domestic market share of our high school graduates within WA. And we are usually a pretty significant leaders in the international student market as well but obviously COVID has been a little bit of a thing in that area. And we have campuses across a variety of different countries, which are listed there. And a few other external ones within WA so Calgo Lee and Margaret River and I think Albany. Um, so I, as I mentioned, I'm from the student Guild at Curtin so where are our student union I pick representative body for students at universities here or at our university at our campuses. We're like a group of students who are elected annually by the wider student body to essentially represent the student voice and what's kind of going on on the campus at the current time. Um, so our main roles are obviously representation and advocacy we sit on as many university committees and boards as we can get on. We address any issues that are raised to us by students to those boards and committees or to university staff directly. We. Yeah, essentially, essentially what we're here to do primarily. And sort of provide that liaison between students and university at sort of management levels and ensure that all information is being accurately and appropriately relate to students and provide a little bit of that like liaison. To help support our students and make sure their issues are heard. We have dedicated support through our representatives to all four of, or, ideally all five of our faculties and some for various equity groups on campus so we currently have representatives for faculty of business and law faculty of science and engineering faculty of humanities and faculty of health sciences.  We have our women's department we have our first nations department and we have an accessibility department. So all of those different groups have a student representative assigned to them, who is a community member, and can help ensure that that like diverse voices being heard within the Union and within the university and the any issues sort of specifically affecting their groups can be heard. So we provide our student assist service as well which is essentially an external like staff run support service, which provides essentially academic financial welfare support. We have a group of psychologists and social workers who essentially can provide a lot of like it's it's an extremely broad service, and it's essentially like the one stop shop for students who are sort of having a bit of a hard time. A majority of their work is sort of in the academic space so it's to do with academic misconduct, any sort of appeals, anything like that where students aren't entirely sure how to go about it on their own or need some extra advocacy in that area so they're very highly trained and very skilled in dealing with those sorts of those sorts of issues, and they're yeah run through the guild so that it's an external body to the university. We also fund over 120 student clubs and societies, which is really amazing and a really great avenue to get to get more students involved. And yeah and then we run a series of events throughout the year as well. And all of us, or not all of us, a number of our food and retail outlets on campus are also run by the guild, and we provide discounts for all of our members and sort of yes student pressed food and goods throughout the university to the extent that we can, and that's essentially cool. So, I'm shifting out towards curtains, sort of journey with student partnership and students as partners movement as a whole. We are still relatively early in our journey here, which is really exciting and one of the reasons that it's so awesome to be able to join in with networks like this and yeah, share those resources and see what's going on in other places and all of that. So, essentially, our, we have an enshrined commitment to student partnership at Curtin through our agreement which I will talk about in the next slide a little bit, but it's essentially come out of a broader commitment to ensuring that students, you know, as has been touched on already ensuring that students have and like a central role in the delivery of their education the delivery of the university experience and any sort of avenues of university life that affects students which is most of them. And it's, yeah, essentially, it's a it's a win-win because it creates like really sort of empowered and engaged students within the community and assist the university in really kind of addressing exactly what students are wanting what the needs and expectations are and ensuring that, yeah, it's it's a nice sort of a nice sort of relationship and where, yeah, as we mentioned it's still relatively early days yet, but we are, we are working through it. So, yeah, essentially, as was as was touched on just before sort of throughout the throughout the SDA history and a little bit about that. So, yeah, this is a student guild from last year when Chris Hall who was mentioned was our vice president education. He and the president at the time worked very closely with Kate Walsh and were involved in Student Voice Australia. So, yeah, it was really early on and had a real sort of commitment to ensuring that curtain was involved in this process and that we could sort of cement ourselves as having that really that really present commitment to this and seeing the value in it and hoping to continue to develop this. So it was all sort of, yeah, implemented relatively early on. And one of the aspects of student partnership that they were seeing at other institutions, and really wanting to sort of implement here was going about it through a organized student partnership agreement, which was carried out and signed at the end of last year. And in it, Vice Chancellor has articulated a enshrined commitment to student partnership at Curtin and ensuring that students are involved in as many areas as we can be, and that, yeah, that we're upskilled and given appropriate support and listen to in these environments, and sort of given all the tools that we need to be able to effectively advocate for our own experience at university. So we're at the start of this year. Yeah, yep, we recruited students as partners Lee, which is cat just yet. And we've been working quite closely throughout this year so far on developing the curtains on students as partners governance structure and continue on to go along with that. And yeah, just sort of starting to starting to get that information out to the wider curtain community as well. We have a community of practice here which incorporates representatives from all across the university who are either already doing amazing things in the space or looking to do more, or just wanting to share resources and information. And then, yep, not that long ago, we launched our students as partners student facing website, which is extremely exciting as well. And I'll do a funny final bit about the student partnership agreement and then I'll pass over to Kat. So, yeah, essentially the student partnership agreement was drafted by the Guild at the end of last year or throughout last year. And after being signed off on by all of the representatives within the Guild at the time was then forwarded to the university who once they reviewed it we had an official signing on December 3 last year. So the student partnership agreement essentially focuses on the three goals that you can see up on the slides here, which is yet all around essentially promoting that really accessible culture for students and ensuring that everyone in the process has given the tools to make the most out of that environment. And actively encouraging students to engage in the experience of their education and research or however they're sort of engaging as students here at Curtin. And sort of really ensuring that that knowledge about what opportunities are there and what's available to them is going out. And yeah, again, sort of, I think a really central part of this is really empowering students to take this step and take this involvement in their own education and their own university experience, which, you know, leaves you with with students who who have that experience have been empowered. A strong supported upskilled effective student leaders, which then will lead to happy and well adjusted graduates. Yeah, and then we, yeah, there's a little bit of a little bit here just about the, the kind of commitments and shared sort of values and expectations that was outlined within the agreement. And that there was also mentioned of the, like an alignment to the United Nations Sustainable Development Goals, which Curtin as a university has already committed to, and just ensuring that students are involved in that process. And that we're all, yeah, working towards ensuring that we can be the best and most sustainable university that we can be. And I'll pass over to Kat. Thanks bridge. I'll briefly talk about what we've been doing this year. And thank you to Student Voice Australia for this student engagement continuum. So this continuum was a really great place for us to start talking about student, students as partners at Curtin this year. And we've started to iterate this, this student engagement continuum for Curtin for Curtin's purpose. And it's really helps our community practice that bridge mentioned to see themselves in this conversation and to identify where their initiatives might be aligned. So we have a lot happening around consult and involve and certainly a lot around the control or we call empower stage and we do see that there is a lot of opportunity to develop in the partnership space which is incredibly exciting. So thank you, SVA. You gave us a really good tool to support our conversations. Just briefly on our governance structure. So bridge mentioned our agreement and we had a lot around building this strong culture. And as you would have seen, we have campuses all over the globe. So a culture shift is no small task. And so as a result, we've made a decision to really create this, this, this governance structure that we hope will create that culture and have enough people in it to to support all of the areas that want to get involved in students as partners at Curtin. So very briefly and aware of time, we have our leadership group, which is both 50% students and 50% staff that are creating our action plan for students as partners at Curtin. And then we have a wider reference group, which includes, we've got around 16 students and staff listed in that reference group that we're yet to form. And again, their role is to really clear obstacles and really advocate and be champions for students as partners at Curtin. As we've mentioned, we've got an existing community of practice, which is currently a lot of practitioners, particularly staff. And we wanted to really open that up to students as well, but the membership is around 60 people at the moment, which is pretty, pretty, it's great, pretty great, very great. And then we have our students as partners, students and staff that are engaged in initiatives that would align with one of those consult involve collaborate and control or empower stages of the continuum we mentioned. And just, I know that this is a graphic that has lots of closed circles, but it's probably better to think about some of these as open circles because we want to make sure that people can come in and out of students as partners at Curtin as much as we can. So we do have a few things that we're planning for this year. And one is really developing our framework. So this includes looking at reward and recognition and feel I hear all of your comments seem very aligned with where we're at and some of the things we're question we're wondering about at the moment. We're going to be building student and staff training materials I saw there was a question about staff training and very keen to collaborate with people in the network about that. And we're getting a lot of interest around how do we deliver students as partners initiatives across the university already because of the Vice Chancellor's commitment and because of the agreement. So we're sort of building a framework and also trying to harness the enthusiasm and interest and energy for students as partners at the same time, which is a fun challenge. And finally, establishing our reporting measures. So we're looking at a whole range of reporting measures. It's really important to us to have that diversity in our students and staff engagement so that will definitely be one thing we'll be looking at. But also sort of slightly aspiration Lee and this is yet to go to the leadership team is how can we look at our impact and some of the changes that we're making in students experience and also the curtain. The whole curtain community how we what changes are we making as a result of students as partners. So if anyone has any resources that that you could point me to that so call out we'd love to see and take a look at what other people are doing in that space. A final slide is just some questions which really aligned to what has already been said, but how do we develop an overarching framework while also harnessing that interest that we have right now. So how do we build what we need to build while also continuing to I suppose drive a bit of an analogy there to work. How do we align students as partners with what's already happening at Curtin so it's not something we just want to add in we want to make sure it's integrated into some of the existing frameworks we have and we do have an extra curricular certificate that we want to to work towards that's called Curtin extra. How do we support students as partners initiatives across our campuses so we need to have a framework that is flexible enough to allow for context cultural context to really be appreciated and probably at the center of everything that we do. So we make sure we engage with diverse students and staff. And finally how are we ensuring our governance structure becomes the the enabler around the cultural shift but also allowing us to take action at the same time. So yes that's our case study we're definitely at the start and and it's a work in progress and we'd love to connect with people that are at different stages so thank you very much. Kat and Bridge it's really great to hear about the work that you're taking forward at Curtin and you know you're emphasizing that you're at the start of a journey I think that I think we know that the SBA network has institutions that all sorts of different kind of stages and and points of development and maturity around students as partners work and but I think we can all work from that we can all learn from each other. And certainly there were, you know, a whole range of things that you mentioned that we're very much, you know, we're on that same journey with you here here at Adelaide. I think we can now move on to our next case study I'm sure that the audience will be wanting to ask you questions when we, when we, when we come to them a little bit later so over to you coming. Yeah. I'm now going to introduce Michaela Hosking. She's the manager of student engagement and success as part of the, as part of the engagement and support team from Homes Glen TAFE. I present a case study. The title of the case study is student voice at TAFE and the presentation has been prerecorded so we're going to watch that now first. And then we're going to be joined by Kristin Fagan who is the acting head of department for lifestyle and degree programs from Homes Glen for answering some questions around the Q&A. Hello, welcome. Thank you so much for joining me here today. My name is Michaela Hosking and I am the student engagement manager at Homes Glen. My role at Homes Glen looks after student voice across our institute. And I have been asked by SBA to come here and present basically what we are doing at Homes Glen and the difference that student voice, the difference of student voice in TAFE itself. Before I begin, I'd really like to start by recognizing the traditional owners of our land of which we all meet today and pay my respects to Elders past president and our emerging leaders. I also acknowledge that this week is reconciliation week with the theme being more than a word and that reconciliation takes action. And I guess given the fact that we are talking student voice and representation, I think we will have a responsibility to make sure that our Indigenous students are very much represented in the work that we do. So without further ado, I will continue on with our presentation today. So I thought I'd just start by providing a bit of context as to how Homes Glen's journey and our timeline in terms of student voice up until 2021. So it has been an integral part, student voice and partnership has been an integral part of the institute's strategy for some years now. And I was fortunate enough to step into the role to really look after student voice across the institute in 2018. So it was very much recognized that we needed to dedicate some resourcing. And at the same time Homes Glen did join the student voice Australia network and that has been an enormous help. And you know, whilst we had been the sole TAFE up until this year within that network, it had been a really great way to share some knowledge in a space that was so foreign for TAFE and for Homes Glen in particular in terms of building representatives. And embedding student representatives in our governance structure, being able to link in with student voice Australia and that network has been invaluable. So I spent a lot of time in 2018 and 2019 really connecting, looking at best practices across the world really looking at the work that had been done in Scotland and Ireland. And working with the SBA team on understanding what other providers do and seeing how much of that could apply to TAFE. Obviously, understandably, TAFE is a very different type of education. You know, we have very different students and a very different structure which does make building a student representation representative program quite difficult and challenging. So being able to spend that time understanding the concepts of student partnership and student voice and some of those really key and critical principles was really valuable. In 2020, we used that opportunity to actually launch our student representatives and all be it virtual. You know, us in Melbourne were locked down for a significant amount of time of 2020. But it was an incredible opportunity to really launch a program. And so we did launch it from our computers, from our homes, from our lounge rooms. And we progressed. We launched some form of a program and we refined it and continue to refine it along the way. And I suppose what we've found this year is we have returned to campus and offices and normal life. We've got to meet those students that we did form that connection with over the screen. And those students have gone out and had more of an opportunity to go and speak with their representatives. But in terms of the program itself at Homesquare in 2021 has been about really continuing that improvement. Reflecting on the practices of last year and making sure that our system and our program for student representatives works for our students. So now that I've gone through our timeline of where Homesquare has gone with student voice, I thought I would talk about the current operations of our student rep council and program. We decided quite early on to appoint our learners or our students to the council rather than to host an election. We found that that would work just for TAFE students simply that they cycle through so much quicker. We have different students to get people on board is a challenge all the time. So appointing students was the best strategy for us. Early on in the piece I surveyed students on the qualities that they wanted in a student rep, how they wanted to communicate with their reps, how they wanted their reps to communicate on their behalf. And so a lot of the feedback that I got from that survey really helped to shape that application and appointment process. It helped me to write position descriptions and include those qualities to make sure that we had the reps, the right people according to our own student voice, applying for the jobs. And it really helped to shape our application form, our interview questions. We also made it very clear that we wanted student support in terms of appointing our learners. So we involved students in screening our learners through the interview process, ensuring that our learners were on the panel with us when we were appointing their own peers to these positions. We also felt that it was important to make sure that our training was robust and that it supported students right through their term as a student representative rather than just initially. So we kicked off with an induction training session which was held over online. And I hope to get to a point where we are holding that face to face. And that induction really just set the scene for student reps, the operations of the institute, but also the operations of the council itself, what was expected of them. And then we found that that needed to really be complemented with some ongoing support and resources which we found to be hosted online was preferred by our students. It meant that they could access those resources anytime, anywhere. And those resources included things like templates that would help them with their meetings, running their meetings. We didn't want them to waste time creating that information. We wanted their time invested into doing what they were doing as a student rep. So we provided them with those templates and tips on how to hold or run successful meetings. Information, you know, almost like a bit of a thesaurus on our jargon terms. We're talking high jargon in this industry and we wanted to make sure that our learners understood what we were talking about. We also wanted to make sure that our students felt comfortable in managing conflict and strategies on managing conflict or being able to have those difficult conversations as well. So it is an ongoing library that we continue to add to. And I work with our students, you know, and say, you know, what's missing here? What do you wish that you were trained in and then continue to add to that itself? So it is an ongoing process. We felt early on that there needed to be particular roles within the council and obviously a chair and a secretary are quite integral to any meeting. So we've started with those two roles and that's been quite successful. We haven't needed any additional positions within the council itself. But I do work really closely with the chair and the secretary to ensure that our meetings run really well and that they feel that they're quite comfortable and confident to manage the meeting itself. And we find that pairing students, being able to have that chair and that secretary means that those two positions feel that they're supported by one another as well. We learnt last year, so we started off by having just regular meetings with our reps and letting anything within the scope of the terms of reference really be discussed. And what we found that actually really excluded a lot of students who came to the council later on down the track. And as much as those students who did join later on down the track could read past meeting minutes, you do really miss a fair bit. So we've made a really, really integral change to our program which has been really well welcomed, I suppose, by our students. And that is that our meetings are really centred around one singular topic which is relevant to those students at that time. So we kicked off the first topic this semester with orientation and given that that was something students had just experienced, it was very much topical for those students at that time. And our fourth meeting this semester, our fourth and final meeting will really be centred around exams and assessments. And again, that lines up with what they're experiencing at that time. We make sure that the last 15 minutes of our meetings are really made for the reps making particular recommendations to the institute. So as much as there's robust discussion, it's also, well, what are we actually going to recommend to the institute? And sometimes those recommendations are, hey, we want to just let you know that this is working. So keep it happening. And others, this isn't working. And here is what we suggest in terms of fixing that. So our student reps are really empowered to be part of the solution when they're identifying a gap in our systems. We really try and work with our reps to make sure that they come to the party with, you know, what do they think? Have they think we can plug that gap? One of the things that we are denied about for a long time was having staff presence at these meetings.  Is there a fear that their, you know, the discussion won't be as authentic as they'd like? And that continues to be something that we manage quite carefully. I do attend the meetings, and this has been a discussion that we have had with our reps ongoing. And they've actually said that it's quite beneficial for them to have, you know, really fruitful and productive discussions so that staff can be there to kind of, I suppose, answer any questions or jump in and correct any mis-conceptions about particular things. And so that's been really helpful and embraced, but I do think it is a fine line. It's very hard for a staff member to kind of hang back and not dominate the conversation. It's an ongoing challenge. So, yeah, it's a bit of a fine line there. In addition to that, we have a council mentor, and that council mentor is separate to myself. And one day we hope that that council mentor will become a past student or a past student rep who will share their insights and support our student reps. However, at the moment that is another staff member. That mentor's role is really to make sure that our student reps on an individual level feel comfortable and confident within their role.  But also mentoring the council as a whole, ensuring that it does remain true to the terms of reference of that council. Ensuring that everybody is having, you know, a fair say and just really there for an additional support. And last but not least, we always make sure that these meetings are minuted and those recommendations are published to their peers, but also to the institute, obviously. We are very fortunate to have a digital platform which really is designed to bring students together as a community. So this is separate to their learning management system where they really can come and have discussions on particular topics, share different experiences and so forth and connect with one another. It's essentially almost like a Facebook but just for our institute. And that's where we host all of this information which is available to all of our students to see and comment on. So that's our current operations as they stand at the moment and I am always working to continue to refine those, to change those. The idea is that they are always super easy, super relevant for our current students. They are inclusive systems and processes and the idea is that they are always flexible that they adapt to our students needs at all times. So whilst we're making some progress, I continue to come up with come up against these challenges. So awareness of the program amongst our students. There is so much information that we are providing our students throughout the semester relating to their course relating to the institute various programs and you know this is one other program that we are trying to spread the word to our students. And that continues to be a bit of a challenge particularly because our students cycle through so quickly. As I mentioned before closing that loop continues to be a bit of a challenge trying to identify really clear strategies on how we can do that and do that again in a timely manner so that those students who are cycling through quickly are receiving responses to the feedback that they are giving. And as always and everyone will attest to this time and resourcing. If we had all the money in the world, you know, we'd have a cast of thousands working in this space. But that continues to be and a challenge for us at Homes Glen. So a couple of things that I wanted to share the things that I wish I knew before I started on this journey. Number one was to refine the program as you go. So instead of trying to develop this really refined and well oiled program and then launching I think it's you just got to dive in and you know and and work with your students and communicate with your students and partner with your students to explain that you know it might be clunky and we need to work on this together as a team to make sure that. That the council or all the program remain sustainable. And that has been a really wonderful journey so far with our students. Also in TAFE you know there are so many different cohorts of students different types different courses different levels of study it's incredible so I think the other piece is to start with one cohort and just keep adjusting it for others. So, you know, I don't think this is a one size fits all. But if we start with one and we just keep adapting and keep progressing it it's almost infectious it'll keep it'll build legs and it'll run itself. The other thing is to use available resources so there's amazing resources on the student voice Australia website that I've really lent into we've obviously contributed as a member of of SBA but you know really using those resources. There's some great resources on training there's some great resources on partnership itself. So being able to use what's already out there is fantastic. I think the other pieces make the process work for TAFE, you know, those models and those resources out there at the moment do do tend to lean towards the university space. And so there is a bit of tweaking so taking those as a base and tweaking and making them work for the TAFE students and for TAFE and our programs is really really something that I think I wish that I knew before I started out on this journey. And the other pieces around keeping it simple and easy for participants is the key that sounds super obvious but I think the more that I got into this the more that I made processes and systems a little bit more complex than they needed to be. So that's where you know trying to kind of scale back and really review and identify how much of that information are you capturing what do you need that information for. Is that process necessary? Is it just an added barrier for a student to participate? So that's another piece that I think you know and I continue to really reflect on this as I as I move through and adjust our program as it is. So thank you so much for having me here today. Thank you for listening to our journey. I am very much still learning myself and more than happy to share my experience, you know, with everyone here so please feel free to reach out if you'd like to continue the conversation. So my ideas around particularly if you're getting started but even if you're still you know mid journey with student reps itself I'm always keen to learn. So my details are up on the screen please feel free to reach out and connect and thank you so much for joining me today. Fantastic. So I'd like to just thank Michaela for taking the time to pre-record that wonderful case study on what partnership really looks like in TAFE. I'd like to highlight that there will be actually a showcase dedicated to student voice within the TAFE and VET sector that will be on Thursday within our symposium. One of the quick insights that I found from that case study was that there's so many similarities yet differences within TAFE to my institution here at USC. But I did really really like how there was that council mentor to really foster the students confidence in their role as representatives. I thought as a student rep myself and gone through that process I think that's something that I've found support through the students as partners program but I think I would have valued from something like that so. But I'm going to pass now to Phil who will facilitate a Q&A session. Thanks Carmen and welcome to, I thought it might be Kirsten but maybe not. It is and I do apologize this is what happens when you have a 13 year old that gets on to your Zoom at lunchtime. Yes, so I am sorry. Welcome Kirsten and thank you so much for joining us. Joining us in the place of Michaela. Michaela couldn't actually be here this afternoon so welcome and thank you very much. We do have some time for question and answer for Kat Bridge and Kirsten. We are running a little over in terms of our schedule but we have a little bit of wiggle room because we had put in some breaks so I think we can be somewhat flexible. And I definitely want to make sure that there is time for folks to ask questions. So with no further ado we have one question that has been posed in the Q&A which is about challenges in forging the positive relationship between the Guild and Curtin staff and executive with regard to power dynamics. So I think this is a question, you know, initially directed at Bridge and Kat, but I think it's relevant, you know, this question of differential power between staff and students is obviously critical to the whole building, sorry, building of really authentic partnerships and I think it was touched on by Michaela as well. So perhaps anybody, perhaps Kat and Bridge if you would like to respond first. Yeah, did you. Yeah, I think in terms of how it sort of rolled out here at Curtin. The student representatives at the time were extremely lucky in that we had a university executive and sort of like wider management, who were amenable to this sort of movement and who were like interested in getting students on side with something like this. It's a little bit tricky to speak to because representatives roll over every year. So this was reasonably before my time that this was kind of all being or being founded I guess but there was, I think, maybe not necessarily at the executive level but there has been like a really good culture of student partnership and sort of lower level initiatives and a lot of practitioners really championing this sort of the sort of issue throughout the university. Prior to the partnership agreement being put in place or starting to sort of pursue a space in networks like SVA. So yeah, I think there was like, yeah, good foundations for it here. And just to add to that, you know, almost weekly practice of mine is actually checking in and going well how am I living up to the principles that we've committed to in the agreement and how can I make sure that my my practice is around like is walking the talk and being authentic in this space and building the trust I suppose as well just by by by yeah by delivering on on what I say I'm going to deliver on and and I think also something that's come up a lot in our conversations. Also with the guild president is around listening as an incredibly important part of all of this is to pay close attention to what's being said and and be really present when we're talking about about partnership between students and stuff. So I can sort of that's what I can speak to from my my personal experience in in becoming part of this in sort of halfway through an agreement being signed is how can I show up and and actually be authentic to what's been articulated in our agreement. Thank you bridge and cat and that's really important observations there I think and sort of, you know, making sure that we don't establish values do a lot of work around values and principles and then sort of put them on the shelf and forget about them incredibly important. And I'm also wondering whether there's, you know what the role is for staff awareness rating development training, you know, and whether whether there may be experience at Holmes Glenn. And in terms of, you know, how you support staff to engage with this issue of power dynamics power differentials and students and empowerment of students and what that kind of means in terms of their own behavior and approaches that they take. How do you support stuff. Yeah, so we, I mean, it being a TAFE organization we have students all the way through from medicine V cal right up to. We've even got PhD degrees here so we have students that are here with us for the, you know, short courses of three or four days right through to long Jevity of three or four years so to be able to actually build on that foundation we found that a lot of areas have pockets of really good foundations that they were already doing and they were already embedding these values and embedding these cultures but it was really silo orientated. And so one of the initiatives that came out through. I guess it was our extended period of lockdown was to actually get everyone together and try and instead of just doing a standard PD plan of what are you good at and what would you like to continue to work on what what are you doing to embed student voice and what are you going to actually listen and actively listen to what what our learners are saying and and and report that back into the education and back into their experience on their journey. And so that was interesting because of being locked down for so long we had a lot of feedback from from our students in regards to remote learning and now that they're coming back on to campus although as of today's I don't know for how long. Then we will be where we're obviously being able to embed not only that information that they gave us when they were in remote learning but now back onto the campus so our next step which we actually start on June 4 is to take all those pockets of different departments and different levels of qualifications and bring them all together so we've now we've got over 60 education managers in the Institute and we're now having education manager forums where we're actually discussing as a standing element is the student voice experience and what are you doing in your area to be able to bring that forward and bring that to the forefront so that's something that we're obviously still new in our journey as well, but that's something that we're definitely progressing forward with leadership, and we find that education managers in a TAFE really work with students, whereas when you get more higher into your head of departments and into your executive levels, they're looking at more of the of the bigger picture stuff so the education managers the ones we need to target to be able to say let's embed this culture let's listen to what the students say and then we can move forward with that way. Thank you, Kirsten that's really interesting to hear about what you're doing in that way, thank you. Now, do we have any other questions. Yes, what are some of the effective strategies to build an online peer community, especially for asynchronous online learners. Actually, Michaela did mention a digital platform that you're using at Homes Glen and because maybe this, that's your cue to maybe talk a little bit about that but also I'd like to come back to Kat and bridge about that too. So we have an online community platform for our students it did start off quite initially small and we started it just over two years ago. And it was more kind of an add on for those students who are doing more of the online courses where they couldn't access student well being or in person or student services rec services all the kind of lifestyle events that you would have in a general TAFE or university setting so that's where it started and then obviously again and I go back to the lockdown but a lot of that has really been able to to assist us in building this online community platform because all of a sudden students couldn't travel more than five kilometres from your home. So they wanted that that engagement, not only our cold or our culturally and linguistically diverse students but we also just our local students and then also our students that were from overseas that were still offshore needed that interaction. So our community platform is is a really good way in which we're able to get the information out there to the students. It has some great great things on there not only just about about what we're doing here at Homes Glen, but also just in Melbourne in general. So there's links to watching the virtual zoo when getting students talking about that sort of things and giving them the whole experience. So the community platform has as really skyrocketed since last year and it's continuing on that way this year. So, yeah, we're really fortunate that that we were able to get that in place. Thank you, Kirsten. Captain Bridge do you have any comments about leveraging digital to support student voice and partnership. Yeah, go ahead. Yeah, I was just going to say like, in terms of like student partnerships specifically. I don't really have any experience in that area, but a majority of our communication throughout the last or probably in general, but particularly through the last sort of 18 months. Since COVID read it's ugly head in Australia has been sort of through digital platforms that we do a lot of our sort of engagement with students through Facebook groups that are set up for various student groups, through our community discord that we've started that did get a pretty decent sort of uptake throughout throughout the pandemic when we're all sort of properly locked down. And I think the point that this this whole sort of situation has really in a lot of senses encouraged engagement because a lot of students are facing issues that they wouldn't have before and taking far more of an active kind of role in what my like in what their education looks like and how it can be delivered and any potential like barriers that they're facing. It is really sort of seeming to draw out a lot more students who are wanting to get engaged in spaces like this. It's really interesting so you're saying you think that the experience of the last year has kind of motivated and spurred students to engage in a more. And that's, that's, I think that's, that's a great opportunity, obviously for for us to support them in that I am aware of the time.  Can I suggest that we draw that session to a close. Thank you so much, Kirsten cat and bridge the insights that you've shared with us and for responding to the questions thank you to the audience members who pose those questions.


I'm Ben Mimichewicz, I'm a software and smart contract engineer being in the space since about 2018. Today, I'm basically going to do a tutorial where we'll build through a simple blockchain indexer and just sort of explain how indexes work, different pipelines you can design and make, and in general just interacting with Gath on an sort of RBC level. Okay, just some background quickly about me and how I would love to run the presentation in general. Yeah, so as I mentioned before, I've been in the space since 2018. I used to work at a consultant in Labros, which is an Australian smart contract consultancy, and then I worked as an engineer at TracerDAO in Mycelium, which is a perpetual swaps protocol on arbitram. Yeah, I was the team lead at ReputationDAO, which was a project at Mycelium where we focused on indexing and monitoring oracle systems on chain to make sure oracles are essentially held accountable and also that they're functioning properly and accurately. So sort of just detecting errors sort of in that pipeline. So in terms of my experiencing in the indexing space, I've been working in indexing for about two years. I'd like to know what I'm talking about, but I guess we'll see. In terms of questions, please just shoot up your hand if you have anything as I go. Okay, EtherScan. EtherScan is probably the most popular indexing tool all around. I've spent a lot of time on an EtherScan. It's basically a hobby of mine. I'll click through random blocks and see if there's something fun. If you've ever accidentally sent ETH to a contract instead of calling the function and you think nobody saw it, I saw it. So this is one trend. Oh, there's a screen here. This is just one address that I found this morning in a block.  So it's sending out four or five transactions trying to spread out, I think, about 0.8 ETH. Yeah, but it's really worthwhile if you haven't done that to sort of explore what's on EtherScan and see how interactions are happening on chain. Okay, so observability and transparency. I know at the moment, ZK and privacy and transactions is highly important. And that's absolutely true. And if you want privacy and transactions, go for it. But on the other side, observability is also highly important. Just as a question, does anybody have any pros that they think having transparent transactions have over ZK? Yeah, no corruption. Exactly, nice. And I'm not trying to just shield transparency. Don't worry. I don't work for the SEC or anything like that. I'm not after the taxes, but it's still highly important in certain systems. Oracles, which I work for, don't really function on zero knowledge. You have to know that your oracles are operating properly and you have to know what each oracle is submitting. Having anonymity there reduces the accountability of those oracles and it can cause your systems to not function the way you hope. If one bad oracle transaction can completely crash a market, especially derivative markets, this is actually one example here. Also from this morning. So Manga markets lost $100 million last night because of oracle manipulation. So making sure that you can observe what's happening and also the exposure that those oracles have onto the each market is very important and something where transparency and building an indexer is highly useful. OK, what actually ends an indexer? The way I define an indexer and the way I like to think about it is it's basically an ETL program where your back end is communicating directly with the node, you're requesting data from the blockchain and you are converting that data or storing it in a unique way that makes it more accessible or useful to you. Yeah, sorry, let me just show my hands here. So why would I actually want to store it differently than on-chain? Because the blockchain is a database in and of itself. All the data is always there. The problem becomes, though, if I want to retrieve specific data or a range of data or God forbid, create some sort of average across it. So if I wanted to do that, I might have to make hundreds of e-calls to process one transaction or one event that I define on-chain. So one really popular reason to make an indexer, which a lot of now RPC services like Alchemy and Coinbase support, is to fetch the transaction history of an address. That is not possible directly when you're directly interacting with the node. You would have to pass through every single block that that address has made a transaction on and then manually look at those transactions. Another really good reason is non-ephemeral data on the chain. So mempool data and a thing that you run through as a test as an e-call doesn't stay on the blockchain forever. Mempool data in particular is highly useful for arbitrage strategy, but there's actually no consistent history of the mempool. Obviously, mempool also differs from node to node, but having a history from a range of nodes is highly useful if you want to sort of backrun strategies that you could have done if you're an arbitrage. Yeah, also a gas estimation as well. If you're making e-calls that don't actually go through chain, you want to have a history of how your contracts will look when they're finally deployed, creating a mini indexer that runs off your local host non-contract node is absolutely a valid option. Now I just want to quickly break down a log that happens on chain quite frequently. So this is what happens when a chain link oracle submits, well lots of chain link oracles actually, submit an answer for a price feed on chain. So this is the decoded version. I'll show you the encoded version a little bit later on, but even here, not everything is super obvious to the eye, right? So you have the answer at the top, which is obviously the new value that price feed will have. For those curious, this is the price of one inch, but there's other points that are really confusing, right? If you look, there's observations where you have what seems to appear as an interay rate and you have observers, which is just this confusing byte array with a weird name. You have raw report context. Let's sort of just look at what's going on. Okay, so step one to creating any indexer, creating any indexer, sorry, or sort of observation solution is first, you have to understand the contracts that you're working with. What your ETL really does and what it should aim to do is to take this raw like hex data on chain and give it new meaning or new accessibility. And to do that, you have to know what the contracts are doing already. Just copying the data across isn't really enough. So sort of on that talk, on that point, sorry, I'll just quickly explain how OCR works. That was the chain link log that we just looked at previously. So how chain link operates nowadays is that also I don't work for chain link, I just wanna say. How chain link operates now is that most of the aggregation and collection of data happens off chain. So a price deviation will happen, all these nodes will look at their different APIs and they'll send all of their answers to a single node. And then this node will submit all of these answers and the final aggregated answer on chain on behalf of everybody else who's supporting that price feed. So sort of knowing that, I'll also just go through a simple timeline. So as an example, say I have a chain link feed that's monitoring the price of Ethereum. When the price of Ethereum dips by certain percentage, all the chain link nodes will know and they'll start a new round. Every single chain link node will then send an answer that they've collected from their APIs to a leader. That leader will aggregate that answer normally taking a medium of some sort.  And why I sort of went through this is by knowing this information, knowing how the system works, we can now make sense of the log that we looked at earlier. Okay, so believe it or not, this observers array right here, byte array is actually a list of the addresses that each of these observations come from. So if you, all those numbers, there's a corresponding oracle address of the oracle that submitted that answer. And that answer is the number that they thought is true. Another thing to note is that number is very large. Yeah, if that number was exactly how it is, I would be retired as holding like 51 inch tokens. But here I am. So this is sort of another step we have to overcome. So we're sort of missing more information, but we know it's available somewhere within the contract. So this information is available through a view function in the chain link aggregator contract called transmitters, which returns a list, which returns a list of the addresses of each oracle that is supplying that contract of data. And there's another function called decimals, which tells us by how much I should divide those numbers, those observations to get the accurate, like human readable price of one inch in this case. The problem though, is that these variables can change block by block. These are adjustable variables. Transmitters change all the time, not only for security reasons, but sometimes certain oracles are better at performing on certain feeds than others. And decimals can change when different markets require more precision out of a price feed. Okay, so this is sort of how we break it down. So I had my observations eroded there and the way to break it down, and you can find this out by sort of reading the contract and then doing a bit of guesswork, is that if I look at that byte array and I split it apart into pairs, each of those pairs can be decoded from hex into a number. This number represents the index of which that observation in order corresponds to which item in that transmitter's array the observation was from. So in this case, the second observation here was from the second oracle. So we're indexing from counting from zero. So zero x, zero three, one, two, EA, dot, dot, dot, responded with four, three, nine, three, nine, nine, blah, blah, blah. So already we're sort of getting kind of complex in how we're just deciphering this one single log. So we'll go through the steps and code as well, how we would do all the different calls, but essentially at the minimum, what we have to do to fetch this data is first we have to encounter this chain link log, then we have to pass the data back into regular data types, take out transmitters, buy an array, break it up into pairs, convert that into hex to get a number, call the transmitter's function with an eith call, and then pass out which address is with which address. Now doing this for one log, not too bad, I probably wouldn't wanna do it by hand, but imagine if you wanted some sort of aggregate data. Imagine if I told you, okay, tell me how accurate this oracle was on every single Wednesday for the past six months. Now you're passing hundreds of logs, you're making thousands of calls, and if you want this to be done on demand, it's gonna be incredibly slow, it might take minutes. On the other hand, I could make an SQL statement like select average where oracle equals this, where time equals this and this. I'm converting hundreds of lines of code, thousands of HTTP requests to one line in SQL. That's sort of the value that indexing can bring. Before we actually get into the indexer, I also just wanna go through the data types that Ethereum has. So these are sort of our avenues into getting different data. So there's actually more than this, but this is just a quick summary. So does anybody know by heart what things that you can search on EtherScan? Well, any like blocks, contract addresses, any others? Okay, yeah, transaction hashes, yeah. So transaction hashes, addresses, block number, block hash. Sorry? ENS names, yes, nice. No, you cannot, not within the top search bar, yes. So these things are the things that Ethereum will naturally index. So you can already select these from the node relatively quickly and they each have a relationship with each other. If I have the log, I can retrieve the contract address that that log was emitted from and I can also retrieve the transaction that that log came from. And then through that, I can also retrieve the block number that that transaction happened on and so on and receipts as well. So transaction receipts, so you can see how much gas was paid for that receipt. But the point here is that you're sort of migrating across these different data types to collect all the information you need for your index. So dissecting a log. I'm just gonna go over the structure of logs and for those curious, the reason why I'm concentrating on logs is that there's quite a lot of functionality within the GIF client or blockchain clients in general for creating these indexers based on logs. Creating them based on transactions is also possible but a lot more manual. You have less sort of filtering power on that first step. So how a log works. So logs are constructed out of topics and data essentially. So topics are also data. Topics one to three are data types that you can emit in your event and mark them as indexed. And why this exists is that instead of building an indexer, I could potentially just use the blockchain client as well to look for cases where the data is equal to a particular amount. So I could tell GIF, tell me when topic zero is equal to X and topic one is equal to this and retrieve all those cases for me within some block range. Topic zero, I'll go over in a moment. The data, sorry, something to also note on topics is that you can only index up to three fields. Data though, you can throw as much stuff as you want in there. And this is like highly valuable. And a good way to think of logs and data in general is sort of like a print statement for your smart contracts.  So we just print hello. This is exactly what a log is. Yeah, so we also have the transaction index, which is at what point our transaction appeared within that block and also log index, which is separate, which is where this log appeared within that block, which is normally completely different. This also removed, which is like a bull that just signifies if our log was removed from the canonical chain due to a reorganization. Topic zero, topic zero is highly useful. Topic zero defines the log, I would say. So what topic zero is, is I take my event definition. So say I have an event called transfer and it takes a U interest in argument. I want to look at every single instance on the blockchain where this transfer event happened. And to do that, I have to calculate topic zero. And to do that, I take the kick hack of my event name. So transfer and then each data type that is within that event definition. So here it would be, you know, Uint 256 or whatever. Some important things to note. You do not include, and I learned this painfully by experience, do not put spaces between the types because your hash will be wrong. And also don't put the name of the variables within the type because the EVM doesn't care about that. So something to note as well is that this topic zero is unique for every single contract. That is to say that you can only have one event with one exact hash definition per contract, but this is not stipulated across the whole chain. So I could potentially say look for every single log with topic zero, but I might actually collect data for four or five contracts that are doing a completely separate thing. That's just something to be wary of. Storage, another really cool thing that you can do when you're building an indexer is accessing the actual contract storage. So private variables now become completely accessible to you. This is really good. One of the main use cases that I've certainly used this for is when a contract is implementing EIP 1967, which is the proxy pattern. So you have a contract that's implementing all the calls from another contract and that contract's address that's actually got the implementation is always in a specific storage slot. I can go into this example later as well, but this is just one hugely powerful example of stuff you can access if you're building your own indexer. Okay, infrastructure design. So this is a bit of a web two thing, but it's important to think about how you want your indexing application to run. You can make it as complex or as simple as you want. So if it's just a regular ETL, you can have your program connected to a node and then you're inserting into a database, but you can do so much more. You can create a hackathon submission that is looking for events on lens, for example, and then I'm sending out alerts through EPS every single time someone's profile gets liked. I could scale my application. I could have several nodes, have a load balancer between it, so I'm not overwhelming any single node. I could be sending off my messages after I've dealt with them to an AI analysis and I could be storing them across several database nodes. Stuff I've worked with personally that I commend is a sort of microservice architecture. You can have Kafka sort of in the middle as a message broker and pass information between all your services, all your different storage points. Maybe you're an arbitrager and you want to do sort of an analysis, throw that analysis inside in-memory database like Readers for quick access while simultaneously throwing any archive data into your own sort of Postgres database. Database options. So indexing is really powerful because you can choose how quickly you want to access what subset of data.  So timescale DB is extremely interesting but any time series database sort of proves this point. The blockchain doesn't give you an option directly to look through transactions within time range. You can specify a block range but that's not really always ideal. Blocks take a different amount of time to create over time and you have to do sort of extra legwork there if you want to convert from block to time. Timescale off is something really awesome especially when you're looking at a large dataset like a blockchain and that's continuous aggregates and these are materialized views that you can create for aggregate data. So for example, I can calculate the average every single week of how much gas is spent on Ethereum and I can permanently store that data in a view and access it instantly as opposed to having to recalculate that data. KDB is very popular within sort of the MEV community from what I've seen. It's a completely in-memory database. It's extremely fast. So similar along the lines of readers but far more performance. It's used a lot by quant firms, arbitrage and also formula one like racing. So they use it for in-race analysis and stuff like that. Postgres, absolute classic, completely free, perfect RDS system. Why would you use anything else? Don't talk to me about my SQL, I hate it. Okay, now I just wanna go through a quick code walk-through of a simple application. So we can actually build these indexers in about 150 lines of Go code, easy. Okay, so first I wanna explain my language choice so I've been contested on it in the past. I really like using Go for the back end and interacting directly with Geth and with the Geth library. Like first of all, Go is fast. Geth is probably the most well-maintained library. It obviously doesn't have features of certain other blockchain Ethereum clients but it is definitely the most well-maintained and it always fits through the specs, the yellow paper specifications. Go has a huge bonus and that parallelization is directly built into the language. So we're gonna be doing a lot of calls through web circuits or through HTTP and we wanna paralyze these and we don't have to worry about race conditions when we're using Go. Yeah, another huge bonus is that all of these functions that we're gonna call to extract data, our program is gonna be completely portable to every single EVM chain except from memory Xdai. So we can port our application, make it as generic as possible and we can start looking at events like Polygon, Ethereum, Optimism, Arbitrum, whatever you want without having to do any extra legwork. It's like deploying a smart contract to multiple chains. And the reason this is is all these RPC calls that we're making are specified within the yellow paper. So any EVM client that is being created is gonna have to fit through these specs. Okay, creating a client. This is like pretty basic code. So I'm just creating a HTTP client. I'm feeding in my alchemy sort of key. That's what the RPC thing is there. It's just a string. I'm doing a bit of error handling here, making sure that I am in fact connected and in fact connecting. And that's really it for this. There's really not too much to worry about here. Yes. Okay, that's a good question. I'll just repeat it. So the question was is should you run your own node infrastructure or use an outsourced node like alchemy? So there's several advantages to running your own and a few disadvantages.  You can also put other sort of add-ons on top of that node on top. You can put add-ons on top of that node to make the indexing even faster. So when you're doing retrieval, you're sort of indexing already on an index which is fantastic. Me personally, if I'm running in a production environment and I have an application that's fully running as an indexer and my system is depending on it, then I would run my own node. I see some like node operators here and I feel bad. But for hackathon projects, absolutely use alchemy. Fantastic solution, not just alchemy. And any infura, whatever. I'm not sponsored guys. I'm sorry, I keep using the same names. Web sockets versus HTTP. So most providers will allow you the option of accessing their service through a Web socket or HTTP. I'm just gonna go over this quickly because it's more of a web two thing. HTTP is normally how your wallet connects to the chain. So whenever I'm making a request, my wallet is creating that TLC connection and it's shooting back a message and that connection is then closed. When you're creating an indexer, you're gonna wanna make lots and lots of requests and that extra latency between creating a new handshake every single time is actually quite cumbersome. I would just say straight up that if you can use a Web socket connection, always use a Web socket connection. No reason, not to really. Okay, now we're gonna look how to create a query and this is an SQL by query. I mean, we're gonna query data directly from the node. So there's this Ethereum geth object called filter query and it does exactly what you think it does. It takes an array of addresses from which I wanna collect logs from and it takes a list of topics. So before we talked about topics and how you can index up to three and you have topic zero. So you can specify here, I wanna collect data from which topic zero and which other topics I wanna be equal to some hex value. And I sort of just declare the subject and that's all you really need from here. We haven't actually made the call yet. This is just constructing the query. This also takes a block range which I didn't include for some reason. Next, okay. So now we're actually making the query and this is where block range becomes very important. So there's two ways in which I can request data from a blockchain node. I can do subscribe filter logs which is I'm establishing a connection to the node and I'm telling the node, okay, here are my parameters. Whenever this happens on chain, send me a message. So this is really useful because now I can sort of distribute my load from the node because I get these messages one at a time. I can process them and as long as my application is at least decently efficient, I'll process everything without any lag. Now, this always isn't an option because one thing about subscribe filter logs is that I can't request historical information. I will only be receiving data from the point I've subscribed. So from the next block that's coming. Now I can also do filter logs in which I can request a bunch of logs that have already happened. So that's essentially what that does. It's really useful, especially if you wanna do a historical analysis. The thing to be wary here is that it is like quite hard on the node if you're asking a retrieval of megabytes or gigabytes of data and also your application is gonna have to keep time as well. Definitely super expensive if you wanna collect the entire history for a particular log throughout the whole chain. Okay, channels. This is a go thing, but it's also extremely important to know and it's one of the reasons that I suggest making these index applications in go. So what a channel is and goes is essentially like a pipe. So if I'm sending data from A process to B process, I use a pipe, but there's certain issues associated with doing this, right? So you have to deal with race conditions for one, which is a huge headache. Also piping can be quite messy. I don't know how you're doing it, but you can do it like through a bash script. It can get pretty weird. What go offers is channels and channels are naturally blocking. So I don't have to worry about message one getting there before message three and screwing up all my analysis. The channel will only send a message across to my next process when that process is ready to receive the message. And this for loop here was sort of declaring an infinite for loop and using the select statement and the select statement is just saying, I've created this channel logs one and I'm waiting continuously until something is sent to that channel and the blockchain node is sending data to the channel. And I will pull out that message as soon as it comes and select is just saying whichever one comes first. So if my channel comes back with an error, I'll deal with that and crash my program or if a log comes first, I'll go and do some processing. Okay, how do I actually process data? So when I request data from the blockchain and I get logs back, I actually get back a pretty messy data structure. Not messy, but not human readable. So what I'm gonna get back is logs data structure which we went over earlier. I'm gonna have these topics and I'm gonna have the data field inside the log. And if I'm pulling the transaction similarly I will have the data field within the transaction field which is identical to the sort of log data. Now, passing this across is pretty complex. So there's natural padding that happens from RLP encoded values and I also could convert from hex back into sort of regular values at least for go to interpret but also so humans can interpret it. I don't really know what's happening when somebody says, oh, the value came back is like 0x60 zeros and then a three. So what we can do instead is we can generate an ABI and this is exactly how EthaScan does it. And for those not familiar and ABI is a specification of all the functions and all the events that happen on a particular contract. And I can generate this by going to a contract and using Sol-C, so that's the command at the top, Sol-C ABI and the name of the file or the path, sorry. And then I'll get a huge spit out of a JSON file and we'll use this and define it as a string and we'll use it further along but the ABI is highly useful but something to note is that it does not directly appear on chain. On chain is only sort of the compiled like bytecode. So the ABI you have to get by having access to the source code or sometimes people upload it to EthaScan and what the ABI allows us to do is the ABI knows as I described before with the CAC it knows all the input types for all the functions and all the events that are defined within that contract. So now I can use the EVM to, oh, sorry. It's plugged in, should come back up in a moment. Okay, oh it is back, fantastic. So I can use this ABI and use the EVM to decompile all of this hex data that I'm gonna get blurted out back into regular data types. So creating an ABI object similar to the JavaScript concept but I'm gonna call this ABI function which is also a ABI library sorry that's also part of the GIF module and I'm going to pass in the ABI string that I defined previously. I'm gonna check that it is in fact a valid string which is important and then I can start unpacking data and that's that second sort of code block in there. I call my object, I tell it to unpack, I pass it in a string which is the name of my function and then I pass in my data and what it's gonna spit out is a huge array of interfaces and interfaces are just generics in Go. So it's data that I don't know the type of and I have to just tell Go which data type that is and I can find that out by looking at the smart contract code I can find that out by looking at the ABI and even if I make a mistake here Go will tell me that I made a mistake. If I try to assert wrongly that it enters a string Go will tell me oh actually you wanna type a sort to a string I don't know why I can't just do it automatically but life can't be that easy. Okay, working with a database. Okay, so now essentially what we've constructed is we have a system that's requesting data from the node either live or through a historical query. I've collected that data, I now have a method to unpack that data into regular Go data types and I can convert between them as I wish. Now I want to insert that data somewhere. So this is a pretty standard way of just interacting with a database and Go completely fault-proof and it's using a library called Gorm, so Go RM. It's used to be sponsored by Chainlink actually as well. Pretty fantastic library, highly recommended. So it's very easy for what I have to do. I just define a struct which has what I want my table to look like. I throw on some strings where I want my primary keys or foreign keys or indexes and I'll just leave that in the module by itself. And then what I'll do is I'll initiate a connection to my database and it's also just this one line code. So I just tell it to open. I have Postgres listed here but it has support for most popular database management systems and a Gorm config which you can specify different things in but we can just leave it blank. If you're not doing something fancy you can pretty much leave it alone. I do some error checking and then I've got migrations. For those unfamiliar, migrations are fantastic. If you've worked for a production system and you've wanted changes in your database and you basically it's like a nuclear reactor, like two people have to turn their keys at the same time to edit a table, migration sort of sidestep that. What Gorm will do is I can pass in my structs that I defined before and it'll automatically create or edit the tables that I already have. So that way the code that I have is gonna be exactly represented in my database. Inserting, so we're pretty much like done here guys. All I have to do now is use the structs that I previously defined, pass in my decoded values and then I just have this one line insert or update on conflict. So what this essentially doing is I'm sending a message and it'll be acid, depending on your database of choice, I guess, out to the database and I'm telling it, okay, if there's no entry, insert it, if there is, update it. And updating actually absolutely can happen. Although the blockchain is immutable, remember that the node is getting new data all the time, reorgs do happen. So something you wanna watch out for is your block hash changing and also your block timestamp. Profile IDB, oh, sorry, we just have type assertion here so you can sort of see how these are getting passed back into the struct. So I have my profile ID and this is an example that I did based off lens. So profile ID and lens is an integer which represents your user on lens. And then also NFT, which is an NFT that's generated on lens whenever you follow somebody. And I just pass these into that struct. I'm calling my, sorry, database.clause is update function and I'm passing in a pointer to the struct. Okay, so that's basically it. I can go through some actual examples as well but I just wanted to do a Q and A. Actually, how much time do I have left? About plenty of time. Yeah, oh, okay. So EIP 1967 basically says, it's a proxy pattern. So say I wanna make changes to a smart contract. You obviously can't really do that. So what I can do is I can define EIP 1967 contract and tell it, do all the functions of another smart contract and I can change which smart contract is, which smart contract logic is actually being changed by just changing that variable. But the problem is that there's no view function for the contract address that's on that 1967 contract. But the storage slot where that address is stored is always the same across any EIP 1967 contract. So I can retrieve this address and then I can query that contract for any information that I want. Does that help? Okay, yes. Yes, I will, I wanted to clean up a bit, but it's submitted within the ETH hackathon. I can send a link out if I'll send it out on my Twitter, which is at the end. How many block confirmations do you have on the database or how do you update? Yeah, I'll just repeat the question, but the question is, how many block confirmations do you wait before inserting the data into the database or how do you deal with updates? So the great thing about the system is that you don't have to wait at all. Every time there's a new reorganization, the logs will be like re-put through the node and then the indexer will automatically update that column for you. So the data you have in your database will always be the most accurate that it can be and most up to date. Sorry, yes. So the logs, it's like voluntary? Yeah, why is it voluntary? It costs gas to emit events. Why isn't it standardized? I mean, it is standardized in development. It's not like you have to deploy a contract with events. And if there is contracts deployed with that event, you can also create an indexer based on that. I think that's what you're getting at. Oh, yeah, okay, for sure. Sorry, can you repeat the question? I'm lost in time. Oh, okay, why indexers mostly use logs? That's also I wanna say more my opinion than true fact, but also most popular index platforms. So the graph and stuff focus on logs quite a bit and sort of why there's so many logs and you have to find the useful ones. That information is hard to come by. And if you wanna create your indexer, as I said, you should know the contracts and the system. But also you can make a general solution like the graph or like, oh, I forgot the name. Can someone help me with their logo? It's like June analytics, thank you. Like June analytics where I can do an SQL query on absolutely anything. But in terms of why there's so many events happening, a lot of these events are just shot out for debugging purposes and they're left in the contract and you sort of have to decipher as you go. Any other questions? Yes, contract state. Yeah, yeah. So as before as I went like through storage. So if you wanna, it's getting annoying. If you want to get contract state, there's three main things that you can do. So there's access through variables. So every single public variable on a contract automatically has a get or a sign to it. So that's one way we can access state. The second one is through storage, as I mentioned before. So it's kind of tricky to find out exactly where variable is in storage. But if you go on the solidity documentation page, they will actually walk you through how storage is structured based on the contract and you can sort of mow your way through and find the variable. The third is traces. So traces are the individual op codes that a contract is pushing, which you can also request from the note. And with combination of those three, you can see absolutely everything that a contract does. In terms of sort of creating strategies based on collecting that state, I think the best indexers are ones, well that you make yourself and that purpose built and you're traversing across these different data types to create sort of your perfect arrangement of data. So I built one on top of Aave a while ago and that can be was like relatively tricky. So they have a EIP 1967 pattern. We're accessing storage to find that contract. That contract is a pointer to other contracts. I'm doing an ETH call to access the variables to find those other contracts. And then I'm calling balance to find ETH balance of those contracts. I'm also utilizing storage, stuff like that. And then you just have a really neat one row item in your database for what you want. Sorry, yes. Do you mean deploying the same contract on two different chains? Okay, so yeah, that is actually important to note. So if somebody like destructs a contract, yes, okay. If somebody self-destructs a contract, I'll just repeat the question. If somebody self-destructs a contract, I believe it's possible for another contract to appear on that identical address. And that can have different cards so it can potentially break your indexer. What you can do there to solve that system is you can have a microservice looking for destruction transactions and matching them up doing a query in your database to see if that's affecting one of your indexers and then making changes to that indexer live. So I'll normally do that through a microservice architecture. So I'll have one looking for destructs. If a destructs happen, send a message, adjust or cancel my indexer for a period. The great thing about the blockchain is the data's always there. So even if you miss a few logs, you can do that historical query and rebuild your dataset. Yes. Yeah, sure. The advantages are sort of, okay, so specifically to the graph I would say is that there isn't a lot of functionality I believe but please do correct me if I wrong to do queries across different subgraphs, at least currently. Okay, that was definitely one use case when I built them. Oh, okay. I mean, okay, so number one, I would say in general is latency. You don't have to wait on any graph node operators to fill up the graph for you. Second of all, I can create a graph that is, well, a graph, sorry, a dataset that's infinitely more complex than what I could do. I mean, I could theoretically do anything on the graph but here I have very close knit control of exactly what my code is doing and what I'm putting through. Sort of third, I have control of my own infrastructure so I'm not dependent. The graph is decentralized in a fantastic protocol but having your own dataset with your own database that you know exactly what's happening on is extremely useful. Fourth, you don't have to pay, it's free. Yeah, I guess that's like some of them but really my main pitch for it is that this isn't that much code. It's not expensive to run. It's mainly really just doing HTTP calls. You can run this for free on any cloud provider on like the ET micro or whatever the AWS equivalent is. You can run it on the free tier. Superbase has free Postgres databases.  And it has no cost to you whatsoever. Yeah, anyone else? Yes. So yes, there is a way to handle this and you can subscribe. So there's a function called subscribe new head inside the Geth Client. And every single time there's a new block header or an uncle, you'll get a message there. So you can make a service where you're looking for uncles. It'll give you the information you need and then you can look at what that uncle did and it should produce new events and it should tell you like the removed tag for the event, for the log.  You can re-request that block through the block hash and then it'll give you inside the log field a removed field, which is a ball to tell you if that log has been deleted or not. And if it has been deleted, then you can mark that in your database. You can delete the row or you could, it depends on your private key, sorry, not private key, your primary key set up. You can delete it or change that variable to true that it has been removed to mark that it's not valuable. Okay, looks like we might throw Rave here instead. Yeah, anyone else? Yes, sort of hardware that you need. So I'll say like for a couple of different components. From a database point of view, absolutely. It depends what sort of service you're running, how quickly you wanna retrieve that data. But in terms of storage, I don't know, I would say maybe six, 700 gigs for the database. The more difficult component is if you wanna do that historically for every single block number, you're gonna run into hiccups with having nodes, requesting that data from nodes. So that's gonna be very expensive if you're doing that through Alchemy or Infura or one of those node subscribers where you're paying per call. And if you're running your own node, I would say one isn't enough if you want it to finish like this century. So what I would do is run, you know, whatever 20 nodes, hook them all up through historical data so you can use snapshots now. So it's nice and easy to set that up. And then have a load balancer and distribute out your calls into the different nodes. And that's probably the quickest way to do it. In terms of the actual indexing, pretty lightweight, I wouldn't really worry about it. The way I normally run it is have a Kubernetes cluster and then just auto-scale as I need it. Yes. Sorry, I'm sorry, I'm sorry. That's a long-term performance. Can you read the structure of the data? Okay. Okay, it really depends what your application is doing, but what I would say is that for long-term use, I would recommend a relational database system, so SQL, just because you can get a lot more use out of it. And if you're storing the data long-term, you probably are imagining some use cases that you don't have yet. No SQL I would suggest for when you need a really quick retrieval of that data. But in terms of sort of data strategy, a pretty common one that I'm being successful with is time partitioning my database. For those who are not familiar, partitioning is sort of, imagine you have a CSV and you have a huge Excel file. Now instead of having this huge Excel file that I have to search through, I break out the Excel file into like five different files and I define them by a range and now I can just search through that range for a particular transaction. So there's lots of time partition databases, but I would time partition your data if that's relevant and then create indexes on everything the regular blockchain does and also anything of direct interest to you. So just like a congregate index, so whatever you want, like block number plus the value of some variable plus like topic zero hash, for example. Also another good thing to do is to break apart into different tables, your events. Yeah, I think that sort of goes for best retrieval. Obviously also, if your database is getting huge, also separate out into different nodes so you're not paying for like vertical scaling. Oh, the other one I didn't mention is graph databases. I haven't seen that much use for them. I haven't used them myself, sorry, but that's also an extremely powerful way to store your blockchain data so I can see the relationships between different addresses or I can see the relationship between, for example, like oracles and the R-Bay market. Yes. Sync for indexing. So the different channels, I mean, it's parallelization but essentially I don't have to wait for one request to get through before I do the other one. So it's very, very useful. So I'd say if you're doing the subscribe filter logs method and you're getting one event at a time, you're probably absolutely fine without using a routine but if I'm doing the filter log method and I'm requesting a huge amount of logs at the same time and I have additional calls to do on each of those, that's where parallelization will really help you out. You'll be able to make thousands, millions of calls at the same time instead of one at a time. You're gonna be cutting down the amount of time you need to index from whatever, weeks to hours. Yeah, you can insert more than one row at the same time. I could run multiple index programs, for example, from like block range zero to 100, 100 to 200, 300 to 400, and they can all insert separately. So I'm finishing that index far quicker than if I had to go from zero to 400 on one routine or one program. Yes. Yeah, I mean, look, note providers are fantastic and highly professional. So you're gonna get amazing service and you're not gonna really experience much delays there but you can set up your node in GCP and you should not really have too much more of a delay. The bigger risk of running your own node is if you make a mistake or you're missing a geth update, a lot of the manual stuff you have to do around managing your node is automatically done by node providers while you have to take care of those operations yourself. The music out of me, it's just over here. Okay. Mempool data, yes.  Not testing or something else. Okay, one thing that you can do is that you can run multiple nodes in different regions because the Mempool is not necessarily synced between all nodes at the same time. So a popular setup is to run three or four nodes in different regions and they'll have different peers and you can congregate that data yourself like through another process and that way you'll get a much more complete view of the Mempool at like block execution time. Yes. Sorry, I have like five more minutes. Anyone else? No? Okay, fantastic. Yeah, thank you for listening. Here are my details. Thank you.


Hey, this is Brett, and this 2022 Ford F-250 Crew Cab Short Box XL with the STX Package is stock number 13672Z. I am here at Summit Automotive in Fondlec, Wisconsin, near New and used heavy-duty truck headquarters. This 2022 Ford F-250 has the 6.7 liter power stroke diesel engine, puts out 475 horsepower and 1,050-foot-pounds of torque. It's paired up with the 10-speed automatic transmission. This truck has been fully-safetyed and inspected by our service shop, has a fresh oil and filter change. All the fluids have been checked and topped off, and this truck is 100% ready to go. I'm going to go all the way around inside underneath, start it up, and take a look at under the hood to give you the most accurate representation possible. Oxford White is the color, and I shoot all my videos in 4K, so if you have HD capabilities. On your computer, tablet, smartphone, or television, I recommend turning them on because it is your best way to check out the quality condition options and cleanliness of the truck before seeing it in person. Going down the driver's side here, the box looks great, cab and doors are in fantastic condition as well, and you'll find that that is the case with this truck pretty much all the way around. It only has 316 miles on it. If you like the video, you can subscribe to my YouTube channel, which is YouTube.com slash Summit Auto. Click the bell notifications to get updates on the videos I do each and every day here at Summit Automotive, as well as one of the largest catalogs of vehicle walk-arounds on YouTube. This one has the painted 18-inch alloy wheels, and it has Continental, Contatrac, LT275, 65R18 tires, and these tires, of course, are like new, still has the little wear knobs on them, only 316 miles on them. Framed underbody is like new as well. Coming around in the front, front bumper is in excellent condition as well, didn't see any dense dings in there, lower valance is absolutely perfect, and you get the chrome-trimmed grille. The hood is absolutely perfect as well, no dents or dings, and you might say, Brett, why are you showing us a video of a truck with only 316 miles? Well, we want to make sure that you get the most accurate representation possible so that you know exactly what you're getting, especially a big purchase like this, and we've seen, I've seen vehicles come in that aren't perfect with only 300 miles on it, so that's why we do the videos. Anyways, as you go down this side of the truck, take note of how clean that body is, how reflective and mirror-like that paint is. I take these HE videos, like I just said, so if you're close by or far away, you can see the vehicle, hear the vehicle, and have confidence in what you're looking at before you even get here, so when you do get here, there's absolutely no surprises, and you can make a smart and informed buying decision from wherever you're at. If this video helps you make that buying decision, let your salesman know that you saw the video, that it was helpful, and that Brett sent you. Back wheels, absolutely perfect back tires are like new as well, and the frame and underbody is very, very clean, has all the remaining factory exhaust, so it hasn't been altered in any way, and the lower rockers and cab corners, absolutely perfect. Comes with the nice factory step bars, and coming around to the back of the vehicle, rear bumper is in great shape, does have the full towing package, which includes the receiver hitch, 4-pin and 7-pin wiring, and the tailgate is in excellent condition as well. The bed looks like it's never been used, absolutely perfect. For full disclosure, this back wheel, no scuffs or scrapes on there that looks perfect as well. This one has the telescopic tomers, they are heated, have built-in directional signals, they telescope out like so, they also fold in like that.  No rips or tears on the seats, this truck's never been smoked in, has the heavy-duty rubber floors, auto headlamps tilt, telescopic steering wheel, power windows, locks and mirrors. Take a quick look at the back seats, they are just as clean as the front seats, probably never been sat in, has the latch child safety system for any child car seats you may have, and the fixed glass rear window. These seats do fold up and you get a completely flat floor back here, which is very nice, especially if you have pets or need a haul, guns or something, nice big flat area.  We'll hop inside, check out the miles, the radio and everything that this truck has to offer on the interior. See this one only has 316 miles on it, you do get a compass display on there as well, you can get all your stuff there. Multi-function steering wheel with the cruise and information center controls on the left, Bluetooth and audio controls on the right, there's your automatic transmission with the optional tap shift and 10-speed automatic, has the AM, FM and Sirius XM radio capabilities on here, this is also where your backup camera shows up, the truck's got to be running for that to work, but we can check out the cargo can, which is a nice feature as well, and I'll show you the backup camera once we start it, turned out four-wheel drive down here, your climate controls as well as your volume and tune controls, does have a USB jack down there and two 12 volt power points, you also get your factory exhaust break and stability control, passenger side format and seat are in excellent condition as well, no rips or tears on there and the headliner is in fantastic like new condition, you get six auxiliary up-fit switches in here as well as map lights, didn't want to show you the tire and loading information sticker as well as the VIN sticker before we started up here, alright, we'll start it up and take a look under the hood, starts right up, no check engine lights or anything like that, I would personally like to thank you for checking out the video today and hopefully from this HD video, you've been able to verify just how like new this truck is all the way around inside and out under the hood, we have these 6.7 liter power stroke diesel engine, engine bay is very clean, runs very smooth, once again this truck has been fully safe and inspected by our service shop, has a fresh oil and filter change, all the fluids have been checked and topped off and it is 100% ready to go, there is the emissions sticker and I would highly recommend this truck to make quality and condition standpoint, I'd ship this one to California, New York, Texas, Florida, wherever, whoever's gonna get it, it's gonna get a like brand new truck, so highly recommend it and to see more pictures of this truck or one of our other 550 new and used cars, trucks, SUVs, minivans, Wranglers, halftones, three quarter tons, one tons, you name it, we gotta go to that website right there, summitauto.com, full pictures and descriptions of every single vehicle, all at summitauto.com and if you'd like to check out more HD videos, you can go to youtube.com slash summitauto, click the bell notifications, you'll get updates on the videos I do each and every day here at Summit Automotive as well as a access to one of the largest catalogs of vehicle walk-arounds on YouTube, fact in a second you'll see a link to subscribe and my YouTube channel on the upper left, the link to more F-250 videos are done in the upper right, link to this vehicle on our website in the lower left and a link to one of our latest YouTube videos in the lower right, click those check us out and we're super excited to help you with this like new 2022 Ford F-250 Crew Cab Short Box XL STX in Oxford white clear coat, thanks again for checking out the video, remember to like, subscribe and share on the YouTube channel, I really appreciate it, thanks again.